From b03786d5363c6b8442b56e8d067d1f9440225bef Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 14 Aug 2013 23:39:07 -0500 Subject: [PATCH 01/72] Simple implementation of random number streams. Setup separate streams for tracking and tallies. --- src/random_lcg.F90 | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 3130d42a53..12b85c2c7a 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -5,8 +5,13 @@ module random_lcg private save + ! Random number streams + integer, parameter :: N_STREAMS = 2 + integer, parameter :: STREAM_TRACKING = 1 + integer, parameter :: STREAM_TALLIES = 2 + integer(8) :: prn_seed0 ! original seed - integer(8) :: prn_seed ! 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 @@ -14,11 +19,14 @@ module random_lcg integer(8) :: prn_mask ! 2^M - 1 integer(8) :: prn_stride ! stride between particles real(8) :: prn_norm ! 2^(-M) + integer :: stream ! current RNG stream public :: prn public :: initialize_prng public :: set_particle_seed public :: prn_skip + public :: prn_set_stream + public :: STREAM_TRACKING, STREAM_TALLIES contains @@ -33,12 +41,12 @@ contains ! This algorithm uses bit-masking to find the next integer(8) value to be ! used to calculate the random number - prn_seed = iand(prn_mult*prn_seed + prn_add, prn_mask) + prn_seed(stream) = iand(prn_mult*prn_seed(stream) + prn_add, prn_mask) ! Once the integer is calculated, we just need to divide by 2**m, ! represented here as multiplying by a pre-calculated factor - pseudo_rn = prn_seed * prn_norm + pseudo_rn = prn_seed(stream) * prn_norm end function prn @@ -51,8 +59,13 @@ contains use global, only: seed + integer :: i + + stream = STREAM_TRACKING prn_seed0 = seed - prn_seed = prn_seed + do i = 1, N_STREAMS + prn_seed(i) = prn_seed0 + i - 1 + end do prn_mult = 2806196910506780709_8 prn_add = 1_8 prn_bits = 63 @@ -72,7 +85,11 @@ contains integer(8), intent(in) :: id - prn_seed = prn_skip_ahead(id*prn_stride, prn_seed0) + integer :: i + + do i = 1, N_STREAMS + prn_seed(i) = prn_skip_ahead(id*prn_stride, prn_seed0 + i - 1) + end do end subroutine set_particle_seed @@ -84,7 +101,7 @@ contains integer(8), intent(in) :: n ! number of seeds to skip - prn_seed = prn_skip_ahead(n, prn_seed) + prn_seed(stream) = prn_skip_ahead(n, prn_seed(stream)) end subroutine prn_skip @@ -149,4 +166,18 @@ contains end function prn_skip_ahead +!=============================================================================== +! PRN_SET_STREAM changes the random number stream. If random numbers are needed +! in routines not used directly for tracking (e.g. physics), this allows the +! numbers to be generated without affecting reproducibility of the physics. +!=============================================================================== + + subroutine prn_set_stream(i) + + integer, intent(in) :: i + + stream = i + + end subroutine prn_set_stream + end module random_lcg From 347ca24ee522ab8a9e5c07d85765ac273b7889aa Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 18 Oct 2013 17:27:03 -0400 Subject: [PATCH 02/72] added more options for writing source bank at end of batches --- src/eigenvalue.F90 | 8 +++- src/global.F90 | 5 +++ src/input_xml.F90 | 55 ++++++++++++++++++++++---- src/state_point.F90 | 77 ++++++++++++++++++++++++++++-------- src/templates/settings_t.xml | 9 ++++- 5 files changed, 128 insertions(+), 26 deletions(-) diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index f5375bf3a9..62ce1c47be 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -17,7 +17,7 @@ module eigenvalue use random_lcg, only: prn, set_particle_seed, prn_skip use search, only: binary_search use source, only: get_source_particle - use state_point, only: write_state_point + 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 @@ -222,6 +222,12 @@ contains call write_state_point() end if + ! Write out source point if it's been specified for this batch + if ((sourcepoint_batch % contains(current_batch) .or. source_latest) .and. & + source_write) then + call write_source_point() + end if + if (master .and. current_batch == n_batches) then ! Make sure combined estimate of k-effective is calculated at the last ! batch in case no state point is written diff --git a/src/global.F90 b/src/global.F90 index f12171b257..aba56232bd 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -189,6 +189,7 @@ module global ! Write source at end of simulation logical :: source_separate = .false. logical :: source_write = .true. + logical :: source_latest = .false. ! ============================================================================ ! PARALLEL PROCESSING VARIABLES @@ -359,6 +360,10 @@ module global integer :: n_state_points = 0 type(SetInt) :: statepoint_batch + ! Information about source points to be written + integer :: n_source_points = 0 + type(SetInt) :: sourcepoint_batch + ! Various output options logical :: output_summary = .false. logical :: output_xs = .false. diff --git a/src/input_xml.F90 b/src/input_xml.F90 index f50a4557c5..3a8a1fac60 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -530,14 +530,6 @@ contains n_state_points = 1 call statepoint_batch % add(n_batches) end if - - ! Check if the user has specified to write binary source file - call lower_case(state_point_(1) % source_separate) - call lower_case(state_point_(1) % source_write) - if (state_point_(1) % source_separate == 'true' .or. & - state_point_(1) % source_separate == '1') source_separate = .true. - if (state_point_(1) % source_write == 'false' .or. & - state_point_(1) % source_write == '0') source_write = .false. else ! If no tag was present, by default write state point at ! last batch only @@ -545,6 +537,53 @@ contains call statepoint_batch % add(n_batches) end if + ! Check if the user has specified to write state points + if (size(source_point_) > 0) then + ! Determine number of batches at which to store state points + if (associated(state_point_(1) % batches)) then + n_source_points = size(source_point_(1) % batches) + else + n_source_points = 0 + end if + + if (n_source_points > 0) then + ! User gave specific batches to write state points + do i = 1, n_source_points + call sourcepoint_batch % add(source_point_(1) % batches(i)) + end do + + elseif (source_point_(1) % interval /= 0) then + ! User gave an interval for writing state points + n_source_points = n_batches / source_point_(1) % interval + do i = 1, n_source_points + call sourcepoint_batch % add(source_point_(1) % interval * i) + end do + else + ! If neither were specified, write state point at last batch + n_source_points = 1 + call sourcepoint_batch % add(n_batches) + end if + + ! Check if the user has specified to write binary source file + call lower_case(source_point_(1) % source_separate) + call lower_case(source_point_(1) % source_write) + call lower_case(source_point_(1) % overwrite_latest) + if (source_point_(1) % source_separate == 'true' .or. & + source_point_(1) % source_separate == '1') source_separate = .true. + if (source_point_(1) % source_write == 'false' .or. & + source_point_(1) % source_write == '0') source_write = .false. + if (source_point_(1) % overwrite_latest == 'true' .or. & + source_point_(1) % overwrite_latest == '1') source_latest = .true. + else + ! If no tag was present, by default we keep source bank in + ! statepoint file and write it out at statepoints intervals + source_separate = .false. + n_source_points = n_state_points + do i = 1, n_state_points + call sourcepoint_batch % add(statepoint_batch % get_item(i)) + end do + end if + ! Check if the user has specified to not reduce tallies at the end of every ! batch call lower_case(no_reduce_) diff --git a/src/state_point.F90 b/src/state_point.F90 index 9ad9b8d9f2..ae546cc103 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -280,14 +280,42 @@ contains end if - ! Check for eigenvalue calculation - if (run_mode == MODE_EIGENVALUE .and. source_write) then + end subroutine write_state_point - ! Check for writing source out separately +!=============================================================================== +! WRITE_SOURCE_POINT +!=============================================================================== + + subroutine write_source_point() + + type(BinaryOutput) :: sp + character(MAX_FILE_LEN) :: filename + + ! Check to write out source for a specified batch + if (sourcepoint_batch % contains(current_batch)) then + + ! Create or open up file if (source_separate) then - ! Set filename for source - filename = trim(path_output) // 'source.' // & + ! Set filename + filename = trim(path_output) // 'source.' // trim(to_str(current_batch)) +#ifdef HDF5 + filename = trim(filename) // '.h5' +#else + filename = trim(filename) // '.binary' +#endif + + ! Write message for new file creation + message = "Creating source file " // trim(filename) // "..." + call write_message() + + ! Create separate source file + call sp % file_create(filename, serial = .false.) + + else + + ! Set filename for state point + filename = trim(path_output) // 'statepoint.' // & trim(to_str(current_batch)) #ifdef HDF5 filename = trim(filename) // '.h5' @@ -295,16 +323,7 @@ contains filename = trim(filename) // '.binary' #endif - ! Write message - message = "Creating source file " // trim(filename) // "..." - call write_message(1) - - ! Create source file - call sp % file_create(filename, serial = .false.) - - else - - ! Reopen state point file in parallel + ! Reopen statepoint file in parallel call sp % file_open(filename, 'w', serial = .false.) end if @@ -317,7 +336,33 @@ contains end if - end subroutine write_state_point + ! Also check to write source separately in overwritten file + if (source_latest) then + + ! Set filename + filename = trim(path_output) // 'source' +#ifdef HDF5 + filename = trim(filename) // '.h5' +#else + filename = trim(filename) // '.binary' +#endif + + ! Write message for new file creation + message = "Creating source file " // trim(filename) // "..." + call write_message() + + ! Always create this file because it will be overwritten + call sp % file_create(filename, serial = .false.) + + ! Write out source + call sp % write_source_bank() + + ! Close file + call sp % file_close() + + end if + + end subroutine write_source_point !=============================================================================== ! WRITE_TALLY_RESULTS_NR diff --git a/src/templates/settings_t.xml b/src/templates/settings_t.xml index 8f1cc7b00c..60b959c67a 100644 --- a/src/templates/settings_t.xml +++ b/src/templates/settings_t.xml @@ -38,9 +38,15 @@ + + + + + - + + @@ -57,6 +63,7 @@ + From eae7e9322402f33cc847eb8c63ba7ecb5d23df54 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 18 Oct 2013 17:30:33 -0400 Subject: [PATCH 03/72] default source point behavior is set to same batches as statepoint --- src/input_xml.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 3a8a1fac60..41dac3f066 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -560,8 +560,10 @@ contains end do else ! If neither were specified, write state point at last batch - n_source_points = 1 - call sourcepoint_batch % add(n_batches) + n_source_points = n_state_points + do i = 1, n_state_points + call sourcepoint_batch % add(statepoint_batch % get_item(i)) + end do end if ! Check if the user has specified to write binary source file From 21338d3de4d67fdef71ff6da7c846590309a4b6f Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 18 Oct 2013 17:37:07 -0400 Subject: [PATCH 04/72] updated settings schema --- src/templates/settings.rnc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/templates/settings.rnc b/src/templates/settings.rnc index cd4ed4beb9..fda258385e 100644 --- a/src/templates/settings.rnc +++ b/src/templates/settings.rnc @@ -83,6 +83,15 @@ element settings { }? & element state_point { + ( + (element batches { list { xsd:positiveInteger+ } } | + attribute batches { list { xsd:positiveInteger+ } }) | + (element interval { xsd:positiveInteger } | + attribute interval { xsd:positiveInteger }) + ) + }? & + + element source_point { ( (element batches { list { xsd:positiveInteger+ } } | attribute batches { list { xsd:positiveInteger+ } }) | @@ -92,7 +101,9 @@ element settings { (element source_separate { xsd:boolean } | attribute source_separate { xsd:boolean })? & (element source_write { xsd:boolean } | - attribute source_write { xsd:boolean })? + attribute source_write { xsd:boolean })? & + (element overwrite_latest { xsd:boolean} | + attribute overwrite_latest {xsd:boolean})? }? & element survival_biasing { xsd:boolean }? & From 8a9c76e4aca5b5323ae4d2b4795b5c810cb2d061 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 18 Oct 2013 17:42:49 -0400 Subject: [PATCH 05/72] added new filetype and wrote this in source file --- src/constants.F90 | 3 ++- src/state_point.F90 | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/constants.F90 b/src/constants.F90 index 5587722869..d72d855234 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -17,7 +17,8 @@ module constants ! Binary file types integer, parameter :: & FILETYPE_STATEPOINT = -1, & - FILETYPE_PARTICLE_RESTART = -2 + FILETYPE_PARTICLE_RESTART = -2, & + FILETYPE_SOURCE = -3 ! ============================================================================ ! ADJUSTABLE PARAMETERS diff --git a/src/state_point.F90 b/src/state_point.F90 index ae546cc103..a6c21704d6 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -312,6 +312,9 @@ contains ! Create separate source file call sp % file_create(filename, serial = .false.) + ! Write file type + call sp % write_data(FILETYPE_SOURCE, "filetype") + else ! Set filename for state point @@ -354,6 +357,9 @@ contains ! Always create this file because it will be overwritten call sp % file_create(filename, serial = .false.) + ! Write file type + call sp % write_data(FILETYPE_SOURCE, "filetype") + ! Write out source call sp % write_source_bank() From 154c8d632fdf77bb561ffa9a3875be477514a1d4 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 18 Oct 2013 17:56:29 -0400 Subject: [PATCH 06/72] a specific source file can now be specified on command line --- src/global.F90 | 1 + src/initialize.F90 | 36 ++++++++++++++++++++++++++++++++++++ src/state_point.F90 | 4 ++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index aba56232bd..f5ce1dbcca 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -261,6 +261,7 @@ module global character(MAX_FILE_LEN) :: path_cross_sections ! Path to cross_sections.xml 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 character(MAX_FILE_LEN) :: path_particle_restart ! Path to particle restart character(MAX_FILE_LEN) :: path_output = '' ! Path to output directory diff --git a/src/initialize.F90 b/src/initialize.F90 index dea901fb66..09e446e38c 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -363,8 +363,44 @@ contains case (FILETYPE_PARTICLE_RESTART) path_particle_restart = argv(i) particle_restart_run = .true. + case default + message = "Unrecognized file after restart flag." + call fatal_error() end select + ! If its a restart run check for additional source file + if (restart_run) then + + ! Increment arg + i = i + 1 + + ! Check if it has extension we can read + if ((ends_with(argv(i), '.binary') .or. & + ends_with(argv(i), '.h5'))) then + + ! Check file type is a source file + call sp % file_open(argv(i), 'r', serial = .false.) + call sp % read_data(filetype, 'filetype') + call sp % file_close() + if (filetype /= FILETYPE_SOURCE) then + message = "Second file after restart flag must be a source file" + call fatal_error() + end if + + ! It is a source file + path_source_point = argv(i) + + else + + ! Source is in statepoint file + path_source_point = path_state_point + + ! Set argument back + i = i - 1 + + end if + end if + case ('-g', '-geometry-debug', '--geometry-debug') check_overlaps = .true. diff --git a/src/state_point.F90 b/src/state_point.F90 index a6c21704d6..836f96c00b 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -793,9 +793,9 @@ contains else #ifdef MPI - ! Reopen statepoint file in parallel, but only if MPI + ! Open file determined form initialization in parallel, but only if MPI ! We will compute the position where the source begins - call sp % file_open(path_state_point, 'r', serial = .false.) + call sp % file_open(path_source_point, 'r', serial = .false.) #endif end if From 728c906cc4a1d59bd68714ba50f43fdd0648c1a7 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Mon, 21 Oct 2013 17:18:50 -0400 Subject: [PATCH 07/72] fixed some restarting and printing issues --- src/initialize.F90 | 2 +- src/state_point.F90 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 09e446e38c..6b2023a9b6 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -369,7 +369,7 @@ contains end select ! If its a restart run check for additional source file - if (restart_run) then + if (restart_run .and. i + 1 <= argc) then ! Increment arg i = i + 1 diff --git a/src/state_point.F90 b/src/state_point.F90 index cf3c052b9b..74d0f60540 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -307,7 +307,7 @@ contains ! Write message for new file creation message = "Creating source file " // trim(filename) // "..." - call write_message() + call write_message(1) ! Create separate source file call sp % file_create(filename, serial = .false.) @@ -352,7 +352,7 @@ contains ! Write message for new file creation message = "Creating source file " // trim(filename) // "..." - call write_message() + call write_message(1) ! Always create this file because it will be overwritten call sp % file_create(filename, serial = .false.) From ed3de400e6b5e07f5083f840ccd2e909df278c7b Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Mon, 21 Oct 2013 17:21:22 -0400 Subject: [PATCH 08/72] change where source separate is specified in tests --- tests/test_statepoint_sourcesep/settings.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_statepoint_sourcesep/settings.xml b/tests/test_statepoint_sourcesep/settings.xml index 4f5b7691ff..fba449e2d5 100644 --- a/tests/test_statepoint_sourcesep/settings.xml +++ b/tests/test_statepoint_sourcesep/settings.xml @@ -1,10 +1,11 @@ - + + - 10 + 15 5 1000 From ba9d5753dbe9175e19aa12ca4431c0e512d3a184 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 22 Oct 2013 09:21:43 -0400 Subject: [PATCH 09/72] put source sep test back to 10 batches --- tests/test_statepoint_sourcesep/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_statepoint_sourcesep/settings.xml b/tests/test_statepoint_sourcesep/settings.xml index fba449e2d5..98abc5acfe 100644 --- a/tests/test_statepoint_sourcesep/settings.xml +++ b/tests/test_statepoint_sourcesep/settings.xml @@ -5,7 +5,7 @@ - 15 + 10 5 1000 From b4122c7319d22cbabe5ffd4796eb5e216c83a98c Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 22 Oct 2013 09:22:08 -0400 Subject: [PATCH 10/72] when opening separate source file, read filetype first --- src/state_point.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/state_point.F90 b/src/state_point.F90 index 74d0f60540..306fb8f37f 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -783,6 +783,9 @@ contains ! Open source file call sp % file_open(filename, 'r', serial = .false.) + ! Read file type + call sp % read_data(int_array(1), "filetype") + end if ! Write out source From 9058b7b490524e0164fdad880fbc9938753006d9 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 9 Dec 2013 12:24:20 -0500 Subject: [PATCH 11/72] Fixed non-(current)standard usage of L(I) for Laws 4, 44, 61, 67. Error will be thrown. --- src/ace.F90 | 83 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 9 deletions(-) diff --git a/src/ace.F90 b/src/ace.F90 index d54aa83c28..4673898c0c 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -161,16 +161,16 @@ contains mat % i_sab_tables(m) = temp_table end do SORT_SAB end if - + ! Deallocate temporary arrays for names of nuclides and S(a,b) tables if (allocated(mat % names)) deallocate(mat % names) if (allocated(mat % sab_names)) deallocate(mat % sab_names) end do MATERIAL_LOOP2 - + ! Avoid some valgrind leak errors call already_read % clear() - + end subroutine read_xs !=============================================================================== @@ -253,7 +253,7 @@ contains end if ! Read more header and NXS and JXS - read(UNIT=in, FMT=100) comment, mat, & + read(UNIT=in, FMT=100) comment, mat, & (zaids(i), awrs(i), i=1,16), NXS, JXS 100 format(A70,A10/4(I7,F11.0)/4(I7,F11.0)/4(I7,F11.0)/4(I7,F11.0)/& ,8I9/8I9/8I9/8I9/8I9/8I9) @@ -277,7 +277,7 @@ contains ACCESS='direct', RECL=record_length) ! Read all header information - read(UNIT=in, REC=location) name, awr, kT, date_, & + read(UNIT=in, REC=location) name, awr, kT, date_, & comment, mat, (zaids(i), awrs(i), i=1,16), NXS, JXS ! determine table length @@ -406,7 +406,7 @@ contains 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 :: 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 @@ -809,7 +809,7 @@ contains LED = JXS(10) - ! Loop over all reactions + ! Loop over all reactions do i = 1, NXS(5) rxn => nuc % reactions(i+1) ! skip over elastic scattering rxn % has_energy_dist = .true. @@ -840,7 +840,7 @@ contains integer :: LDIS ! location of all energy distributions integer :: LNW ! location of next energy distribution if multiple - integer :: LAW ! secondary energy distribution law + integer :: LAW ! secondary energy distribution law integer :: NR ! number of interpolation regions integer :: NE ! number of incoming energies integer :: IDAT ! location of first energy distribution for given MT @@ -934,6 +934,7 @@ contains 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 @@ -958,6 +959,22 @@ contains ! Continuous tabular distribution 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)) + do i = 1,NE + ! Now check to see if L(i) is equal to any other entries + ! If so, then we must exit + if (count(L == L(i)) > 1) then + message = "Invalid usage of L(I) in ACE data; & + &Consider using more recent data set." + call fatal_error() + end if + end do + deallocate(L) + ! Continue with finding data length length = length + 2 + 2*NR + 2*NE do i = 1,NE ! determine length @@ -1000,6 +1017,22 @@ contains ! Kalbach-Mann correlated scattering 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)) + do i = 1,NE + ! Now check to see if L(i) is equal to any other entries + ! If so, then we must exit + if (count(L == L(i)) > 1) then + message = "Invalid usage of L(I) in ACE data; & + &Consider using more recent data set." + call fatal_error() + end if + end do + deallocate(L) + ! Continue with finding data length length = length + 2 + 2*NR + 2*NE do i = 1,NE NP = int(XSS(lc + length + 2)) @@ -1014,6 +1047,22 @@ contains ! Correlated energy and angle distribution 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)) + do i = 1,NE + ! Now check to see if L(i) is equal to any other entries + ! If so, then we must exit + if (count(L == L(i)) > 1) then + message = "Invalid usage of L(I) in ACE data; & + &Consider using more recent data set." + call fatal_error() + end if + end do + deallocate(L) + ! Continue with finding data length length = length + 2 + 2*NR + 2*NE do i = 1,NE ! outgoing energy distribution @@ -1046,6 +1095,22 @@ contains ! 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)) + do i = 1,NE + ! Now check to see if L(i) is equal to any other entries + ! If so, then we must exit + if (count(L == L(i)) > 1) then + message = "Invalid usage of L(I) in ACE data; & + &Consider using more recent data set." + call fatal_error() + end if + end do + deallocate(L) + ! Continue with finding data length NMU = int(XSS(lc + 4 + 2*NR + 2*NE)) length = 4 + 2*(NR + NE + NMU) @@ -1188,7 +1253,7 @@ contains integer :: NMU ! number of outgoing angles integer :: JXS4 ! location of elastic energy table - ! read secondary energy mode for inelastic scattering and check + ! read secondary energy mode for inelastic scattering table % secondary_mode = NXS(7) if (table % secondary_mode /= SAB_SECONDARY_EQUAL .and. & table % secondary_mode /= SAB_SECONDARY_SKEWED) then From 8fe5014b6d5f16fe3498d4e8e172431e00e9c055 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Mon, 9 Dec 2013 12:31:27 -0500 Subject: [PATCH 12/72] Updated troubleshooting documentation to reflect the new error message for the invalid L(I) usage. --- docs/source/usersguide/troubleshoot.rst | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/source/usersguide/troubleshoot.rst b/docs/source/usersguide/troubleshoot.rst index a13272aa65..ba7e4405cc 100644 --- a/docs/source/usersguide/troubleshoot.rst +++ b/docs/source/usersguide/troubleshoot.rst @@ -79,6 +79,14 @@ with the :envvar:`CROSS_SECTIONS` environment variable. It is recommended to add a line in your ``.profile`` or ``.bash_profile`` setting the :envvar:`CROSS_SECTIONS` environment variable. +ERROR: Invalid usage of L(I) in ACE data; Consider using more recent data set. +****************************************************************************** + +The cross-sections requested in ``materials.xml`` do not conform to the current +standard format. This typically happens with fissionable nuclides in a ``.6*c`` +library as distributed with MCNP. Please try a newer library such as any from +the ``.7*c`` set. + Geometry Debugging ****************** @@ -107,8 +115,8 @@ have many particles travelling through them there will not be many locations where overlaps are checked for in that region. The user should refer to the output after a geometry debug run to see how many checks were performed in each cell, and then adjust the number of starting particles or starting source -distributions accordingly to achieve good coverage. - +distributions accordingly to achieve good coverage. + ERROR: After particle __ crossed surface __ it could not be located in any cell and it did not leak. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From d6957a25240abd28b399dc78a2532b60dafbbc02 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 12 Dec 2013 22:54:42 -0500 Subject: [PATCH 13/72] Started writing script to download ACE files from NNDC site. --- data/get_nndc_data.py | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 data/get_nndc_data.py diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py new file mode 100755 index 0000000000..7bb3b2c6ea --- /dev/null +++ b/data/get_nndc_data.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +from __future__ import print_function +import tarfile +import urllib2 + +baseUrl = 'http://www.nndc.bnl.gov/endf/b7.1/aceFiles/' +files = ['ENDF-B-VII.1-neutron-293.6K.tar.gz', + 'ENDF-B-VII.1-neutron-300K.tar.gz', + 'ENDF-B-VII.1-neutron-900K.tar.gz', + 'ENDF-B-VII.1-neutron-1500K.tar.gz', + 'ENDF-B-VII.1-tsl.tar.gz'] +block_size = 16384 + +# ============================================================================== +# DOWNLOAD FILES FROM NNDC SITE + +filesComplete = [] +for f in files: + # Establish connection to URL + url = baseUrl + f + print('Downloading {0}... '.format(f), end='') + req = urllib2.urlopen(url) + + # Get file size from header + file_size = int(req.info().getheaders("Content-Length")[0]) + downloaded = 0 + + # Copy file to disk + 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='') + filesComplete.append(f) + +# ============================================================================== +# EXTRACT FILES FROM TGZ + +for f in files: + if not f in filesComplete: + continue + + with tarfile.open(f, 'r') as tgz: + tgz.extractall(path='nndc') From ec805b8b6f2439c37d70c0c1b9fe955068fd4172 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 13 Dec 2013 11:40:04 -0500 Subject: [PATCH 14/72] XML only looks at first generation of children for tagname --- src/xml/dom/FoX_dom.F90 | 1 + src/xml/dom/m_dom_dom.F90 | 161 ++++++++++++++++++++++++++++++++++++++ src/xml_interface.F90 | 10 +-- 3 files changed, 167 insertions(+), 5 deletions(-) diff --git a/src/xml/dom/FoX_dom.F90 b/src/xml/dom/FoX_dom.F90 index 6e1ac36a7b..4e2fc1e9cc 100644 --- a/src/xml/dom/FoX_dom.F90 +++ b/src/xml/dom/FoX_dom.F90 @@ -74,6 +74,7 @@ module FoX_dom public :: createAttribute public :: createEntityReference public :: getElementsByTagName + public :: getChildrenByTagName public :: getElementById public :: importNode diff --git a/src/xml/dom/m_dom_dom.F90 b/src/xml/dom/m_dom_dom.F90 index 01f6265b07..ec5b788d9b 100644 --- a/src/xml/dom/m_dom_dom.F90 +++ b/src/xml/dom/m_dom_dom.F90 @@ -349,6 +349,7 @@ module m_dom_dom public :: createEntityReference public :: createEmptyEntityReference public :: getElementsByTagName + public :: getChildrenByTagName public :: importNode public :: createElementNS public :: createAttributeNS @@ -6908,6 +6909,166 @@ endif end function getElementsByTagName + function getChildrenByTagName(doc, tagName, name, ex)result(list) + type(DOMException), intent(out), optional :: ex + type(Node), pointer :: doc + character(len=*), intent(in), optional :: tagName, name + type(NodeList), pointer :: list + + type(NodeListPtr), pointer :: nll(:), temp_nll(:) + type(Node), pointer :: arg, this, treeroot + logical :: doneChildren, doneAttributes, allElements + integer :: i, i_tree + + if (.not.associated(doc)) then + if (getFoX_checks().or.FoX_NODE_IS_NULL<200) then + call throw_exception(FoX_NODE_IS_NULL, "getElementsByTagName", ex) + if (present(ex)) then + if (inException(ex)) then + return + endif + endif +endif + + endif + + if (doc%nodeType==DOCUMENT_NODE) then + if (present(name).or..not.present(tagName)) then + if (getFoX_checks().or.FoX_INVALID_NODE<200) then + call throw_exception(FoX_INVALID_NODE, "getElementsByTagName", ex) + if (present(ex)) then + if (inException(ex)) then + return + endif + endif +endif + + endif + elseif (doc%nodeType==ELEMENT_NODE) then + if (present(name).or..not.present(tagName)) then + if (getFoX_checks().or.FoX_INVALID_NODE<200) then + call throw_exception(FoX_INVALID_NODE, "getElementsByTagName", ex) + if (present(ex)) then + if (inException(ex)) then + return + endif + endif +endif + + endif + else + if (getFoX_checks().or.FoX_INVALID_NODE<200) then + call throw_exception(FoX_INVALID_NODE, "getElementsByTagName", ex) + if (present(ex)) then + if (inException(ex)) then + return + endif + endif +endif + + endif + + if (doc%nodeType==DOCUMENT_NODE) then + arg => getDocumentElement(doc) + else + arg => doc + endif + + allocate(list) + allocate(list%nodes(0)) + list%element => doc + if (present(name)) list%nodeName => vs_str_alloc(name) + if (present(tagName)) list%nodeName => vs_str_alloc(tagName) + + allElements = (str_vs(list%nodeName)=="*") + + if (doc%nodeType==DOCUMENT_NODE) then + nll => doc%docExtras%nodelists + elseif (doc%nodeType==ELEMENT_NODE) then + nll => doc%ownerDocument%docExtras%nodelists + endif + allocate(temp_nll(size(nll)+1)) + do i = 1, size(nll) + temp_nll(i)%this => nll(i)%this + enddo + temp_nll(i)%this => list + deallocate(nll) + if (doc%nodeType==DOCUMENT_NODE) then + doc%docExtras%nodelists => temp_nll + elseif (doc%nodeType==ELEMENT_NODE) then + doc%ownerDocument%docExtras%nodelists => temp_nll + endif + + treeroot => arg + + i_tree = 0 + doneChildren = .false. + doneAttributes = .false. + this => treeroot + do + if (.not.doneChildren.and..not.(getNodeType(this)==ELEMENT_NODE.and.doneAttributes)) then + if (this%nodeType==ELEMENT_NODE) then + if ((allElements .or. str_vs(this%nodeName)==tagName) & + .and..not.(getNodeType(doc)==ELEMENT_NODE.and.associated(this, arg))) & + call append(list, this) + doneAttributes = .true. + endif + + else + if (getNodeType(this)==ELEMENT_NODE.and..not.doneChildren) then + doneAttributes = .true. + else + + endif + endif + + + if (.not.doneChildren) then + if (getNodeType(this)==ELEMENT_NODE.and..not.doneAttributes) then + if (getLength(getAttributes(this))>0) then + this => item(getAttributes(this), 0) + else + doneAttributes = .true. + endif + elseif (hasChildNodes(this) .and. .not. associated(getParentNode(this), treeroot)) then + this => getFirstChild(this) + doneChildren = .false. + doneAttributes = .false. + else + doneChildren = .true. + doneAttributes = .false. + endif + + else ! if doneChildren + + if (associated(this, treeroot)) exit + if (getNodeType(this)==ATTRIBUTE_NODE) then + if (i_tree item(getAttributes(getOwnerElement(this)), i_tree) + doneChildren = .false. + else + i_tree= 0 + this => getOwnerElement(this) + doneAttributes = .true. + doneChildren = .false. + endif + elseif (associated(getNextSibling(this))) then + + this => getNextSibling(this) + doneChildren = .false. + doneAttributes = .false. + else + this => getParentNode(this) + endif + endif + + enddo + + + + end function getChildrenByTagName + function importNode(doc , arg, deep , ex)result(np) type(DOMException), intent(out), optional :: ex type(Node), pointer :: doc diff --git a/src/xml_interface.F90 b/src/xml_interface.F90 index 4752c08734..870b4288be 100644 --- a/src/xml_interface.F90 +++ b/src/xml_interface.F90 @@ -72,7 +72,7 @@ contains ! node name. This should only be used for checking a single occurance of a ! sub-element node. To check for sub-element nodes that repeat, use ! get_node_list and get_list_size. This is to minimize number of calls -! to getElementsByTagName. +! to getChildrenByTagName. !=============================================================================== function check_for_node(ptr, node_name) result(found) @@ -94,7 +94,7 @@ contains if (associated(temp_ptr)) return ! Check for a sub-element - elem_list => getElementsByTagName(ptr, trim(node_name)) + elem_list => getChildrenByTagName(ptr, trim(node_name)) ! Get the length of the list if (getLength(elem_list) == 0) then @@ -124,7 +124,7 @@ contains found_ = .false. ! Check for a sub-element - elem_list => getElementsByTagName(in_ptr, trim(node_name)) + elem_list => getChildrenByTagName(in_ptr, trim(node_name)) ! Get the length of the list if (getLength(elem_list) == 0) return @@ -149,7 +149,7 @@ contains type(NodeList), pointer, intent(out) :: out_ptr ! Check for a sub-element - out_ptr => getElementsByTagName(in_ptr, trim(node_name)) + out_ptr => getChildrenByTagName(in_ptr, trim(node_name)) end subroutine get_node_list @@ -525,7 +525,7 @@ contains if (associated(out_ptr)) return ! Check for a sub-element - elem_list => getElementsByTagName(in_ptr, trim(node_name)) + elem_list => getChildrenByTagName(in_ptr, trim(node_name)) ! Get the length of the list if (getLength(elem_list) == 0) then From fecc07709aa8095e05e1e351d9b3196bc00f66cd Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 13 Dec 2013 11:41:11 -0500 Subject: [PATCH 15/72] added flag for compiling XML on BGQ --- src/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile b/src/Makefile index 03c370e07a..05fa826f44 100644 --- a/src/Makefile +++ b/src/Makefile @@ -218,7 +218,7 @@ endif ifeq ($(MACHINE),bluegene) F90 = /bgsys/drivers/ppcfloor/comm/xl/bin/mpixlf2003 - F90FLAGS = -WF,-DNO_F2008,-DMPI -O3 + F90FLAGS = -WF,-DNO_F2008,-DMPI,-DRESTRICTED_ASSOCIATED_BUG -O3 LDFLAGS = -lmpich.cnkf90 endif @@ -233,7 +233,7 @@ endif ifeq ($(MACHINE),bluegeneq) F90 = mpixlf2003 - F90FLAGS = -WF,-DNO_F2008,-DMPI -O5 + F90FLAGS = -WF,-DNO_F2008,-DMPI,-DRESTRICTED_ASSOCIATED_BUG -O5 endif #=============================================================================== From 6ba3c48c5af0a42950b3469d65b6dff5d1211c3d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 19 Dec 2013 10:54:02 -0500 Subject: [PATCH 16/72] Check for file already downloaded. Rename xsdir. --- data/get_nndc_data.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index 7bb3b2c6ea..0f943d684c 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -1,6 +1,8 @@ #!/usr/bin/env python from __future__ import print_function +import os +import os.path import tarfile import urllib2 @@ -19,22 +21,33 @@ filesComplete = [] for f in files: # Establish connection to URL url = baseUrl + f - print('Downloading {0}... '.format(f), end='') req = urllib2.urlopen(url) # Get file size from header - file_size = int(req.info().getheaders("Content-Length")[0]) + file_size = int(req.info().getheaders('Content-Length')[0]) downloaded = 0 + # Check if file already downloaded + if os.path.exists(f): + if os.path.getsize(f) == file_size: + print('Skipping ' + f) + continue + else: + overwrite = raw_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) + status = '{0:10} [{1:3.2f}%]'.format(downloaded, downloaded * 100. / file_size) print(status + chr(8)*len(status), end='') + print('') filesComplete.append(f) # ============================================================================== @@ -44,5 +57,11 @@ for f in files: if not f in filesComplete: continue + # Extract files with tarfile.open(f, 'r') as tgz: tgz.extractall(path='nndc') + + # Give xsdir a unique name + xsdir = 'nndc/xsdir' + if os.path.exists(xsdir): + os.rename(xsdir, xsdir + '_' + f.strip('.tar.gz')) From 73c542e2016e7dc7290973671bf2151e9518d88c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 26 Dec 2013 22:44:03 -0500 Subject: [PATCH 17/72] Display number of OpenMP threads under title banner. --- src/output.F90 | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/output.F90 b/src/output.F90 index 1507aa4cd5..677c35396c 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -31,6 +31,10 @@ contains subroutine title() +#ifdef OPENMP + use omp_lib +#endif + write(UNIT=OUTPUT_UNIT, FMT='(/11(A/))') & ' .d88888b. 888b d888 .d8888b.', & ' d88P" "Y88b 8888b d8888 d88P Y88b', & @@ -46,25 +50,31 @@ contains ! Write version information write(UNIT=OUTPUT_UNIT, FMT=*) & - ' Copyright: 2011-2013 Massachusetts Institute of Technology' + ' Copyright: 2011-2013 Massachusetts Institute of Technology' write(UNIT=OUTPUT_UNIT, FMT=*) & - ' License: http://mit-crpg.github.io/openmc/license.html' - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",7X,I1,".",I1,".",I1)') & + ' License: http://mit-crpg.github.io/openmc/license.html' + write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",8X,I1,".",I1,".",I1)') & VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE #ifdef GIT_SHA1 - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Git SHA1:",6X,A)') GIT_SHA1 + write(UNIT=OUTPUT_UNIT, FMT='(6X,"Git SHA1:",7X,A)') GIT_SHA1 #endif ! Write the date and time - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Date/Time:",5X,A)') & + write(UNIT=OUTPUT_UNIT, FMT='(6X,"Date/Time:",6X,A)') & time_stamp() #ifdef MPI ! Write number of processors - write(UNIT=OUTPUT_UNIT, FMT='(6X,"MPI Processes:",1X,A)') & + write(UNIT=OUTPUT_UNIT, FMT='(6X,"MPI Processes:",2X,A)') & trim(to_str(n_procs)) #endif +#ifdef OPENMP + ! Write number of OpenMP threads + write(UNIT=OUTPUT_UNIT, FMT='(6X,"OpenMP Threads:",1X,A)') & + trim(to_str(omp_get_max_threads())) +#endif + end subroutine title !=============================================================================== From f3f024bbc60f499b5ca38f4e4f156f1f2df1a95f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 26 Dec 2013 23:17:03 -0500 Subject: [PATCH 18/72] Avoid passing temporary arrays to write_data. --- src/hdf5_summary.F90 | 5 +++-- src/state_point.F90 | 6 +++--- src/track_output.F90 | 4 +++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hdf5_summary.F90 b/src/hdf5_summary.F90 index 915e6af070..c9e367200c 100644 --- a/src/hdf5_summary.F90 +++ b/src/hdf5_summary.F90 @@ -100,6 +100,7 @@ contains integer :: i, j, k, m integer :: n_x, n_y, n_z + integer :: length(3) integer, allocatable :: lattice_universes(:,:,:) type(Cell), pointer :: c => null() type(Surface), pointer :: s => null() @@ -312,8 +313,8 @@ contains end do end do end do - call su % write_data(lattice_universes, "universes", & - length=(/n_x, n_y, n_z/), & + length = [n_x, n_y, n_z] + call su % write_data(lattice_universes, "universes", length=length, & group="geometry/lattices/lattice " // trim(to_str(lat % id))) deallocate(lattice_universes) diff --git a/src/state_point.F90 b/src/state_point.F90 index 3793923bb2..e13cd8f486 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -464,6 +464,7 @@ contains character(19) :: current_time integer :: i integer :: j + integer :: length(4) integer :: int_array(3) integer, allocatable :: temp_array(:) real(8) :: real_array(3) @@ -542,10 +543,9 @@ contains call sp % read_data(cmfd % indices, "indicies", length=4, group="cmfd") call sp % read_data(cmfd % k_cmfd, "k_cmfd", length=restart_batch, & group="cmfd") + length = cmfd % indices([4,1,2,3]) call sp % read_data(cmfd % cmfd_src, "cmfd_src", & - length=(/cmfd % indices(4), cmfd % indices(1), & - cmfd % indices(2), cmfd % indices(3)/), & - group="cmfd") + length=length, group="cmfd") call sp % read_data(cmfd % entropy, "cmfd_entropy", & length=restart_batch, group="cmfd") call sp % read_data(cmfd % balance, "cmfd_balance", & diff --git a/src/track_output.F90 b/src/track_output.F90 index 021cbb8ca6..79a2809066 100644 --- a/src/track_output.F90 +++ b/src/track_output.F90 @@ -56,6 +56,7 @@ contains subroutine finalize_particle_track(p) type(Particle), intent(in) :: p + integer :: length(2) character(MAX_FILE_LEN) :: fname type(BinaryOutput) :: binout @@ -69,7 +70,8 @@ contains // '.binary' #endif call binout % file_create(fname) - call binout % write_data(coords, 'coordinates', length=(/3, n_tracks/)) + length = [3, n_tracks] + call binout % write_data(coords, 'coordinates', length=length) call binout % file_close() deallocate(coords) end subroutine finalize_particle_track From 9a0e50574cfb2c8b7220c4ede790e65d61bcf776 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Fri, 27 Dec 2013 16:33:25 -0500 Subject: [PATCH 19/72] Fix bug causing CMFD to report incorrect results when using threads. --- src/cmfd_input.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index 120db5f649..6f259f9497 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -577,7 +577,9 @@ contains end do ! Put cmfd tallies into active tally array and turn tallies on +!$omp parallel call setup_active_cmfdtallies() +!$omp end parallel tallies_on = .true. end subroutine create_cmfd_tally From 415e5da764cdc6d05dc43402b958c9e74d359048 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 2 Jan 2014 15:44:48 -0500 Subject: [PATCH 20/72] Added description of UFS method in documentation. --- docs/source/methods/eigenvalue.rst | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/source/methods/eigenvalue.rst b/docs/source/methods/eigenvalue.rst index a5ba0bf459..fe99ba22ec 100644 --- a/docs/source/methods/eigenvalue.rst +++ b/docs/source/methods/eigenvalue.rst @@ -108,6 +108,40 @@ at plots of :math:`k_{eff}` and the Shannon entropy. A number of methods have been proposed (see e.g. [Romano]_, [Ueki]_), but each of these is not without problems. +--------------------------- +Uniform Fission Site Method +--------------------------- + +Generally speaking, the variance of a Monte Carlo tally will be inversely +proportional to the number of events that score to the tally. In a reactor +problem, this implies that regions with low relative power density will have +higher variance that regions with high relative power density. One method to +circumvent the uneven distribution of relative errors is the uniform fission +site (UFS) method introduced by [Sutton]_. In this method, the portion of the +problem containing fissionable material is subdivided into a number of cells +(typically using a structured mesh). Rather than producing + +.. math:: + + m = \frac{w}{k} \frac{\nu\Sigma_f}{\Sigma_t} + +fission sites at each collision where :math:`w` is the weight of the neutron, +:math:`k` is the previous-generation estimate of the neutron multiplication +factor, :math:`\nu\Sigma_f` is the neutron production cross section, and +:math:`\Sigma_t` is the total cross section, in the UFS method we produce + +.. math:: + + m_{UFS} = \frac{w}{k} \frac{\nu\Sigma_f}{\Sigma_t} \frac{v_i}{s_i} + +fission sites at each collision where :math:`v_i` is the fraction of the total +volume occupied by cell :math:`i` and :math:`s_i` is the fraction of the fission +source contained in cell :math:`i`. To ensure that no bias is introduced, the +weight of each fission site stored in the fission bank is :math:`s_i/v_i` rather +than unity. By ensuring that the expected number of fission sites in each mesh +cell is constant, the collision density across all cells, and hence the variance +of tallies, is more uniform than it would be otherwise. + .. _Shannon entropy: https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-06-3737_entropy.pdf .. [Lieberoth] J. Lieberoth, "A Monte Carlo Technique to Solve the Static @@ -119,5 +153,9 @@ problems. *Proc. International Conference on Mathematics, Computational Methods, and Reactor Physics*, Saratoga Springs, New York (2009). +.. [Sutton] Daniel J. Kelly, Thomas M. Sutton, and Stephen C. Wilson, "MC21 + Analysis of the Nuclear Energy Agency Monte Carlo Performance Benchmark + Problem," *Proc. PHYSOR 2012*, Knoxville, Tennessee, Apr. 15--20 (2012). + .. [Ueki] Taro Ueki, "On-the-Fly Judgments of Monte Carlo Fission Source Convergence," *Trans. Am. Nucl. Soc.*, **98**, 512 (2008). From 0f628689132f503060c06f1419d7c3c487d0f9a3 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Fri, 3 Jan 2014 14:20:54 -0500 Subject: [PATCH 21/72] Made some revisions to plot_mesh_tally and statepoint for usability purposes. --- src/utils/plot_mesh_tally.py | 340 ++++++++++++++++++++--------------- src/utils/statepoint.py | 33 ++-- 2 files changed, 208 insertions(+), 165 deletions(-) diff --git a/src/utils/plot_mesh_tally.py b/src/utils/plot_mesh_tally.py index 04b6b4592a..c70b291653 100755 --- a/src/utils/plot_mesh_tally.py +++ b/src/utils/plot_mesh_tally.py @@ -16,123 +16,161 @@ from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as Naviga import numpy as np class AppForm(QMainWindow): - def __init__(self, parent=None): + def __init__(self, argv, parent=None): QMainWindow.__init__(self, parent) # Read data from source or leakage fraction file - self.get_file_data() - self.main_frame = QWidget() - self.setCentralWidget(self.main_frame) - - # Create the Figure, Canvas, and Axes - self.dpi = 100 - self.fig = Figure((5.0, 15.0), dpi=self.dpi) - self.canvas = FigureCanvas(self.fig) - self.canvas.setParent(self.main_frame) - self.axes = self.fig.add_subplot(111) - - # Create the navigation toolbar, tied to the canvas - self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) + self.all_good = False + while not self.all_good: + if len(argv) > 1: + cl_file = str(argv[1]) + else: + cl_file = None + self.get_file_data(cl_file) + # Check that there are any mesh tallies at all + if len(self.tally_ids) != 0: + self.all_good = True + else: + # if there are not, the user will be given the choice to choose + # another file (but only if using interactive chooser) + if cl_file is None: + choice = QMessageBox.critical(None, "Invalid StatePoint File", + "File Does Not Contain Mesh " + + "Tallies!" + + "\nSelect Another File Or Quit", + QMessageBox.Retry, + QMessageBox.Abort) + if choice == QMessageBox.Abort: + self.all_good = False + break + else: + print("Invalid StatePoint File; File Does Not Contain " + + "Mesh Tallies!") + self.all_good = False + break - # Grid layout at bottom - self.grid = QGridLayout() - # Overall layout - self.vbox = QVBoxLayout() - self.vbox.addWidget(self.canvas) - self.vbox.addWidget(self.mpl_toolbar) - self.vbox.addLayout(self.grid) - self.main_frame.setLayout(self.vbox) + if self.all_good: + # Set maximum colorbar value by maximum tally data value + self.maxvalue = self.datafile.tallies[0].results.max() - # Tally selections - label_tally = QLabel("Tally:") - self.tally = QComboBox() - self.tally.addItems([(str(i + 1)) for i in range(self.n_tallies)]) - self.connect(self.tally, SIGNAL('activated(int)'), - self._update) - self.connect(self.tally, SIGNAL('activated(int)'), - self.populate_boxes) - self.connect(self.tally, SIGNAL('activated(int)'), - self.on_draw) + self.main_frame = QWidget() + self.setCentralWidget(self.main_frame) - # Planar basis - label_basis = QLabel("Basis:") - self.basis = QComboBox() - self.basis.addItems(['xy', 'yz', 'xz']) + # Create the Figure, Canvas, and Axes + self.dpi = 100 + self.fig = Figure((5.0, 15.0), dpi=self.dpi) + self.canvas = FigureCanvas(self.fig) + self.canvas.setParent(self.main_frame) + self.axes = self.fig.add_subplot(111) - # Update window when 'Basis' selection is changed - self.connect(self.basis, SIGNAL('activated(int)'), - self._update) - self.connect(self.basis, SIGNAL('activated(int)'), - self.populate_boxes) - self.connect(self.basis, SIGNAL('activated(int)'), - self.on_draw) + # Create the navigation toolbar, tied to the canvas + self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) - # Axial level within selected basis - label_axial_level = QLabel("Axial Level:") - self.axial_level = QComboBox() - self.connect(self.axial_level, SIGNAL('activated(int)'), - self.on_draw) - - # Add Option to plot mean or uncertainty - label_mean = QLabel("Mean or Uncertainty:") - self.mean = QComboBox() - self.mean.addItems(['Mean','Absolute Uncertainty', - 'Relative Uncertainty']) - - # Update window when mean selection is changed - self.connect(self.mean, SIGNAL('activated(int)'), - self.on_draw) - + # Grid layout at bottom + self.grid = QGridLayout() - self.label_filters = QLabel("Filter options:") + # Overall layout + self.vbox = QVBoxLayout() + self.vbox.addWidget(self.canvas) + self.vbox.addWidget(self.mpl_toolbar) + self.vbox.addLayout(self.grid) + self.main_frame.setLayout(self.vbox) - # Labels for all possible filters - self.labels = {'cell': 'Cell: ', 'cellborn': 'Cell born: ', - 'surface': 'Surface: ', 'material': 'Material', - 'universe': 'Universe: ', 'energyin': 'Energy in: ', - 'energyout': 'Energy out: '} - - # Empty reusable labels - self.qlabels = {} - for j in range(8): - self.nextLabel = QLabel - self.qlabels[j] = self.nextLabel - - # Reusable comboboxes labelled with filter names - self.boxes = {} - for key in self.labels.keys(): - self.nextBox = QComboBox() - self.connect(self.nextBox, SIGNAL('activated(int)'), + # Tally selections + label_tally = QLabel("Tally:") + self.tally = QComboBox() + # Only show options for the tallies with meshes + self.tally.addItems([str(i + 1) for i in self.tally_ids]) + self.connect(self.tally, SIGNAL('activated(int)'), + self._update) + self.connect(self.tally, SIGNAL('activated(int)'), + self.populate_boxes) + self.connect(self.tally, SIGNAL('activated(int)'), self.on_draw) - self.boxes[key] = self.nextBox - # Combobox to select among scores - self.score_label = QLabel("Score:") - self.scoreBox = QComboBox() - for item in self.tally_scores[0]: - self.scoreBox.addItems(str(item)) - self.connect(self.scoreBox, SIGNAL('activated(int)'), - self.on_draw) + # Planar basis + label_basis = QLabel("Basis:") + self.basis = QComboBox() + self.basis.addItems(['xy', 'yz', 'xz']) - # Fill layout - self.grid.addWidget(label_tally, 0, 0) - self.grid.addWidget(self.tally, 0, 1) - self.grid.addWidget(label_basis, 1, 0) - self.grid.addWidget(self.basis, 1, 1) - self.grid.addWidget(label_axial_level, 2, 0) - self.grid.addWidget(self.axial_level, 2, 1) - self.grid.addWidget(label_mean, 3, 0) - self.grid.addWidget(self.mean, 3, 1) - self.grid.addWidget(self.label_filters, 4, 0) + # Update window when 'Basis' selection is changed + self.connect(self.basis, SIGNAL('activated(int)'), + self._update) + self.connect(self.basis, SIGNAL('activated(int)'), + self.populate_boxes) + self.connect(self.basis, SIGNAL('activated(int)'), + self.on_draw) - self._update() - self.populate_boxes() - self.on_draw() + # Axial level within selected basis + label_axial_level = QLabel("Axial Level:") + self.axial_level = QComboBox() + self.connect(self.axial_level, SIGNAL('activated(int)'), + self.on_draw) - def get_file_data(self): + # Add Option to plot mean or uncertainty + label_mean = QLabel("Mean or Uncertainty:") + self.mean = QComboBox() + self.mean.addItems(['Mean','Absolute Uncertainty', + 'Relative Uncertainty']) + + # Update window when mean selection is changed + self.connect(self.mean, SIGNAL('activated(int)'), + self.on_draw) + + + self.label_filters = QLabel("Filter options:") + + # Labels for all possible filters + self.labels = {'cell': 'Cell: ', 'cellborn': 'Cell born: ', + 'surface': 'Surface: ', 'material': 'Material', + 'universe': 'Universe: ', 'energyin': 'Energy in: ', + 'energyout': 'Energy out: '} + + # Empty reusable labels + self.qlabels = {} + for j in range(8): + self.nextLabel = QLabel + self.qlabels[j] = self.nextLabel + + # Reusable comboboxes labelled with filter names + self.boxes = {} + for key in self.labels.keys(): + self.nextBox = QComboBox() + self.connect(self.nextBox, SIGNAL('activated(int)'), + self.on_draw) + self.boxes[key] = self.nextBox + + # Combobox to select among scores + self.score_label = QLabel("Score:") + self.scoreBox = QComboBox() + for item in self.tally_scores[0]: + self.scoreBox.addItems(str(item)) + self.connect(self.scoreBox, SIGNAL('activated(int)'), + self.on_draw) + + # Fill layout + self.grid.addWidget(label_tally, 0, 0) + self.grid.addWidget(self.tally, 0, 1) + self.grid.addWidget(label_basis, 1, 0) + self.grid.addWidget(self.basis, 1, 1) + self.grid.addWidget(label_axial_level, 2, 0) + self.grid.addWidget(self.axial_level, 2, 1) + self.grid.addWidget(label_mean, 3, 0) + self.grid.addWidget(self.mean, 3, 1) + self.grid.addWidget(self.label_filters, 4, 0) + + self._update() + self.populate_boxes() + self.on_draw() + + def get_file_data(self, cl_file=None): # Get data file name from "open file" browser - filename = QFileDialog.getOpenFileName(self, 'Select statepoint file', '.') + if cl_file is None: + filename = QFileDialog.getOpenFileName(self, + 'Select statepoint file', '.') + else: + filename = cl_file # Create StatePoint object and read in data self.datafile = StatePoint(str(filename)) @@ -141,32 +179,31 @@ class AppForm(QMainWindow): self.setWindowTitle('Core Map Tool : ' + str(self.datafile.path)) - # Set maximum colorbar value by maximum tally data value - self.maxvalue = self.datafile.tallies[0].results.max() - self.labelList = [] # Read mesh dimensions -# for mesh in self.datafile.meshes: -# self.nx, self.ny, self.nz = mesh.dimension + # for mesh in self.datafile.meshes: + # self.nx, self.ny, self.nz = mesh.dimension - # Read filter types from statepoint file + # Find which tallies have meshes so the rest can be ignored, + # and for these tallies read the filter and score types + self.tally_ids = [] self.n_tallies = len(self.datafile.tallies) self.tally_list = [] - for tally in self.datafile.tallies: - self.filter_types = [] - for f in tally.filters: - self.filter_types.append(f) - self.tally_list.append(self.filter_types) - - # Read score types from statepoint file self.tally_scores = [] - for tally in self.datafile.tallies: - self.score_types = [] - for s in tally.scores: - self.score_types.append(s) - self.tally_scores.append(self.score_types) -# print 'self.tally_scores = ', self.tally_scores + for itally, tally in enumerate(self.datafile.tallies): + if 'mesh' in tally.filters: + # Then we have a good tally, store the ID, filters and + # scores + self.tally_ids.append(itally) + self.filter_types = [] + for f in tally.filters: + self.filter_types.append(f) + self.tally_list.append(self.filter_types) + self.score_types = [] + for s in tally.scores: + self.score_types.append(s) + self.tally_scores.append(self.score_types) def on_draw(self): """ Redraws the figure @@ -178,70 +215,73 @@ class AppForm(QMainWindow): axial_level = self.axial_level.currentIndex() + 1 is_mean = self.mean.currentIndex() + # get current tally index + tally_id = self.tally_ids[self.tally.currentIndex()] + # Create spec_list spec_list = [] - for tally in self.datafile.tallies[self.tally.currentIndex()].filters.values(): + for tally in self.datafile.tallies[tally_id].filters.values(): if tally.type == 'mesh': continue index = self.boxes[tally.type].currentIndex() spec_list.append((tally.type, index)) - + # Take is_mean and convert it to an index of the score score_loc = is_mean if score_loc > 1: score_loc = 1 - + if self.basis.currentText() == 'xy': matrix = np.zeros((self.nx, self.ny)) for i in range(self.nx): for j in range(self.ny): - matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (i, j, axial_level))], + matrix[i,j] = self.datafile.get_value(tally_id, + spec_list + [('mesh', (i + 1, j + 1, axial_level))], self.scoreBox.currentIndex())[score_loc] # Calculate relative uncertainty from absolute, if # requested if is_mean == 2: # Take care to handle zero means when normalizing - mean_val = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (i, j, axial_level))], + mean_val = self.datafile.get_value(tally_id, + spec_list + [('mesh', (i + 1, j + 1, axial_level))], self.scoreBox.currentIndex())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val else: matrix[i,j] = 0.0 - + elif self.basis.currentText() == 'yz': matrix = np.zeros((self.ny, self.nz)) for i in range(self.ny): for j in range(self.nz): - matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (axial_level, i, j))], + matrix[i,j] = self.datafile.get_value(tally_id, + spec_list + [('mesh', (axial_level, i + 1, j + 1))], self.scoreBox.currentIndex())[score_loc] # Calculate relative uncertainty from absolute, if # requested if is_mean == 2: # Take care to handle zero means when normalizing - mean_val = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (axial_level, i, j))], + mean_val = self.datafile.get_value(tally_id, + spec_list + [('mesh', (axial_level, i + 1, j + 1))], self.scoreBox.currentIndex())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val else: matrix[i,j] = 0.0 - + else: matrix = np.zeros((self.nx, self.nz)) for i in range(self.nx): for j in range(self.nz): - matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (i, axial_level, j))], + matrix[i,j] = self.datafile.get_value(tally_id, + spec_list + [('mesh', (i + 1, axial_level, j + 1))], self.scoreBox.currentIndex())[score_loc] # Calculate relative uncertainty from absolute, if # requested if is_mean == 2: # Take care to handle zero means when normalizing - mean_val = self.datafile.get_value(self.tally.currentIndex(), - spec_list + [('mesh', (i, axial_level, j))], + mean_val = self.datafile.get_value(tally_id, + spec_list + [('mesh', (i + 1, axial_level, j + 1))], self.scoreBox.currentIndex())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val @@ -255,8 +295,8 @@ class AppForm(QMainWindow): # Make figure, set up color bar self.axes = self.fig.add_subplot(111) - cax = self.axes.imshow(matrix, vmin=0.0, vmax=matrix.max(), - interpolation="nearest") + cax = self.axes.imshow(matrix.transpose(), vmin=0.0, vmax=matrix.max(), + interpolation="nearest", origin='lower') self.fig.colorbar(cax) self.axes.set_xticks([]) @@ -271,9 +311,11 @@ class AppForm(QMainWindow): ''' # print 'Calling _update...' + # get current tally index + tally_id = self.tally_ids[self.tally.currentIndex()] + self.mesh = self.datafile.meshes[ - self.datafile.tallies[ - self.tally.currentIndex()].filters['mesh'].bins[0] - 1] + self.datafile.tallies[tally_id].filters['mesh'].bins[0] - 1] self.nx, self.ny, self.nz = self.mesh.dimension @@ -289,8 +331,7 @@ class AppForm(QMainWindow): self.axial_level.addItems([str(i+1) for i in range(self.ny)]) # Determine maximum value from current tally data set - self.maxvalue = self.datafile.tallies[ - self.tally.currentIndex()].results.max() + self.maxvalue = self.datafile.tallies[tally_id].results.max() # print self.maxvalue # Clear and hide old filter labels @@ -307,6 +348,9 @@ class AppForm(QMainWindow): def populate_boxes(self): # print 'Calling populate_boxes...' + # get current tally index + tally_id = self.tally_ids[self.tally.currentIndex()] + n = 5 labels = {'cell': 'Cell : ', 'cellborn': 'Cell born: ', @@ -317,8 +361,7 @@ class AppForm(QMainWindow): # For each filter in newly-selected tally, name a label and fill the # relevant combobox with options for element in self.tally_list[self.tally.currentIndex()]: - nextFilter = self.datafile.tallies[ - self.tally.currentIndex()].filters[element] + nextFilter = self.datafile.tallies[tally_id].filters[element] if element == 'mesh': continue @@ -337,7 +380,7 @@ class AppForm(QMainWindow): elif element == 'energyin' or element == 'energyout': for i in range(nextFilter.length): - text = (str(nextFilter.bins[i]) + ' to ' + + text = (str(nextFilter.bins[i]) + ' to ' + str(nextFilter.bins[i+1])) combobox.addItem(text) @@ -351,9 +394,10 @@ class AppForm(QMainWindow): def main(): app = QApplication(sys.argv) - form = AppForm() - form.show() - app.exec_() + form = AppForm(app.arguments()) + if form.all_good: + form.show() + app.exec_() if __name__ == "__main__": diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index ec9d9edf78..430abee8b8 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -1,7 +1,6 @@ #!/usr/bin/env python2 import struct -from math import sqrt from collections import OrderedDict import numpy as np @@ -10,10 +9,10 @@ import scipy.stats filter_types = {1: 'universe', 2: 'material', 3: 'cell', 4: 'cellborn', 5: 'surface', 6: 'mesh', 7: 'energyin', 8: 'energyout'} -score_types = {-1: 'flux', +score_types = {-1: 'flux', -2: 'total', -3: 'scatter', - -4: 'nu-scatter', + -4: 'nu-scatter', -5: 'scatter-n', -6: 'scatter-pn', -7: 'transport', @@ -276,7 +275,7 @@ class StatePoint(object): f.bins = self._get_int(path=base+'bins') else: f.bins = self._get_int(f.length, path=base+'bins') - + base = 'tallies/tally' + str(i+1) + '/' # Read nuclide bins @@ -379,7 +378,7 @@ class StatePoint(object): Calculates the sample mean and standard deviation of the mean for each tally bin. """ - + # Determine number of realizations n = self.n_realizations @@ -387,14 +386,14 @@ class StatePoint(object): for i in range(len(self.global_tallies)): # Get sum and sum of squares s, s2 = self.global_tallies[i] - + # Calculate sample mean and replace value s /= n self.global_tallies[i,0] = s # Calculate standard deviation if s != 0.0: - self.global_tallies[i,1] = t_value*sqrt((s2/n - s*s)/(n-1)) + self.global_tallies[i,1] = t_value*np.sqrt((s2/n - s*s)/(n-1)) # Regular tallies for t in self.tallies: @@ -402,14 +401,14 @@ class StatePoint(object): for j in range(t.results.shape[1]): # Get sum and sum of squares s, s2 = t.results[i,j] - + # Calculate sample mean and replace value s /= n t.results[i,j,0] = s # Calculate standard deviation if s != 0.0: - t.results[i,j,1] = t_value*sqrt((s2/n - s*s)/(n-1)) + t.results[i,j,1] = t_value*np.sqrt((s2/n - s*s)/(n-1)) def get_value(self, tally_index, spec_list, score_index): """Returns a tally score given a list of filters to satisfy. @@ -458,7 +457,7 @@ class StatePoint(object): filter_index += value*t.filters[f_type].stride else: filter_index += f_index*t.filters[f_type].stride - + # Return the desired result from Tally.results. This could be the sum and # sum of squares, or it could be mean and stdev if self.generate_stdev() # has been called already. @@ -531,7 +530,7 @@ class StatePoint(object): for i in range(n_filters): # compute indices for filter combination - filters[:,n_filters - i - 1] = np.floor((np.arange(n_bins) % + filters[:,n_filters - i - 1] = np.floor((np.arange(n_bins) % np.prod(filtmax[0:i+2]))/(np.prod(filtmax[0:i+1]))) + 1 # append in dictionary bin with filter @@ -544,14 +543,14 @@ class StatePoint(object): dims.reverse() dims = np.asarray(dims) if score_str == 'current': - dims += 1 - meshmax[1:4] = dims + dims += 1 + meshmax[1:4] = dims mesh_bins = np.zeros((n_bins,3)) - mesh_bins[:,2] = np.floor(((filters[:,n_filters - i - 1] - 1) % + mesh_bins[:,2] = np.floor(((filters[:,n_filters - i - 1] - 1) % np.prod(meshmax[0:2]))/(np.prod(meshmax[0:1]))) + 1 - mesh_bins[:,1] = np.floor(((filters[:,n_filters - i - 1] - 1) % + mesh_bins[:,1] = np.floor(((filters[:,n_filters - i - 1] - 1) % np.prod(meshmax[0:3]))/(np.prod(meshmax[0:2]))) + 1 - mesh_bins[:,0] = np.floor(((filters[:,n_filters - i - 1] - 1) % + mesh_bins[:,0] = np.floor(((filters[:,n_filters - i - 1] - 1) % np.prod(meshmax[0:4]))/(np.prod(meshmax[0:3]))) + 1 data.update({'mesh':zip(mesh_bins[:,0],mesh_bins[:,1], mesh_bins[:,2])}) @@ -576,7 +575,7 @@ class StatePoint(object): def _get_data(self, n, typeCode, size): return list(struct.unpack('={0}{1}'.format(n,typeCode), self._f.read(n*size))) - + def _get_int(self, n=1, path=None): if self._hdf5: return [int(v) for v in self._f[path].value] From be6b7ea90db74750558d66afbe6e23aebd4130d5 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Mon, 6 Jan 2014 09:41:48 -0500 Subject: [PATCH 22/72] added check if source is written to statepoint file that the statepoint will exist --- src/input_xml.F90 | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index e8d602c356..cc12d0c41d 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -57,6 +57,7 @@ contains integer, allocatable :: temp_int_array(:) integer(8) :: temp_long logical :: file_exists + logical :: check character(MAX_FILE_LEN) :: env_variable character(MAX_WORD_LEN) :: type character(MAX_LINE_LEN) :: filename @@ -612,13 +613,13 @@ contains call statepoint_batch % add(n_batches) end if - ! Check if the user has specified to write state points + ! Check if the user has specified to write source points if (check_for_node(doc, "source_point")) then ! Get pointer to source_point node call get_node_ptr(doc, "source_point", node_sp) - ! Determine number of batches at which to store state points + ! Determine number of batches at which to store source points if (check_for_node(node_sp, "batches")) then n_source_points = get_arraysize_integer(node_sp, "batches") else @@ -626,7 +627,7 @@ contains end if if (n_source_points > 0) then - ! User gave specific batches to write state points + ! User gave specific batches to write source points allocate(temp_int_array(n_source_points)) call get_node_array(node_sp, "batches", temp_int_array) do i = 1, n_source_points @@ -634,14 +635,14 @@ contains end do deallocate(temp_int_array) elseif (check_for_node(node_sp, "interval")) then - ! User gave an interval for writing state points + ! User gave an interval for writing source points call get_node_value(node_sp, "interval", temp_int) n_source_points = n_batches / temp_int do i = 1, n_source_points call sourcepoint_batch % add(temp_int * i) end do else - ! If neither were specified, write state point at last batch + ! If neither were specified, write source points with state points n_source_points = n_state_points do i = 1, n_state_points call sourcepoint_batch % add(statepoint_batch % get_item(i)) @@ -658,8 +659,8 @@ contains if (check_for_node(node_sp, "source_write")) then call get_node_value(node_sp, "source_write", temp_str) call lower_case(temp_str) - if (trim(temp_str) == 'true' .or. & - trim(temp_str) == '1') source_separate = .true. + if (trim(temp_str) == 'false' .or. & + trim(temp_str) == '0') source_write = .false. end if if (check_for_node(node_sp, "overwrite_latest")) then call get_node_value(node_sp, "overwrite_latest", temp_str) @@ -677,6 +678,21 @@ contains end do end if + ! If source is not seperate and is to be written out in the statepoint file, + ! make sure that the sourcepoint batch numbers are contained in the + ! statepoint list + if (.not. source_separate) then + check = .true. + do i = 1, n_source_points + check = statepoint_batch % contains(sourcepoint_batch % get_item(i)) + if (.not. check) then + message = 'Sourcepoint batches are not a subset& + & of statepoint batches.' + call fatal_error() + end if + end do + end if + ! Check if the user has specified to not reduce tallies at the end of every ! batch if (check_for_node(doc, "no_reduce")) then From 036eb081c10349900b29bd17eec0cfed2dc6ab2d Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Mon, 6 Jan 2014 09:57:45 -0500 Subject: [PATCH 23/72] added new tests for sourcepoint --- tests/test_sourcepoint_batch/geometry.xml | 8 ++++ tests/test_sourcepoint_batch/materials.xml | 9 ++++ tests/test_sourcepoint_batch/results.py | 32 +++++++++++++ tests/test_sourcepoint_batch/results_true.dat | 3 ++ tests/test_sourcepoint_batch/settings.xml | 19 ++++++++ .../test_sourcepoint_batch.py | 44 +++++++++++++++++ tests/test_sourcepoint_interval/geometry.xml | 8 ++++ tests/test_sourcepoint_interval/materials.xml | 9 ++++ tests/test_sourcepoint_interval/results.py | 32 +++++++++++++ .../results_true.dat | 3 ++ tests/test_sourcepoint_interval/settings.xml | 19 ++++++++ .../test_sourcepoint_interval.py | 44 +++++++++++++++++ tests/test_sourcepoint_latest/geometry.xml | 8 ++++ tests/test_sourcepoint_latest/materials.xml | 9 ++++ tests/test_sourcepoint_latest/results.py | 25 ++++++++++ .../test_sourcepoint_latest/results_test.dat | 2 + .../test_sourcepoint_latest/results_true.dat | 3 ++ tests/test_sourcepoint_latest/settings.xml | 18 +++++++ .../test_sourcepoint_latest.py | 48 +++++++++++++++++++ 19 files changed, 343 insertions(+) create mode 100644 tests/test_sourcepoint_batch/geometry.xml create mode 100644 tests/test_sourcepoint_batch/materials.xml create mode 100644 tests/test_sourcepoint_batch/results.py create mode 100644 tests/test_sourcepoint_batch/results_true.dat create mode 100644 tests/test_sourcepoint_batch/settings.xml create mode 100644 tests/test_sourcepoint_batch/test_sourcepoint_batch.py create mode 100644 tests/test_sourcepoint_interval/geometry.xml create mode 100644 tests/test_sourcepoint_interval/materials.xml create mode 100644 tests/test_sourcepoint_interval/results.py create mode 100644 tests/test_sourcepoint_interval/results_true.dat create mode 100644 tests/test_sourcepoint_interval/settings.xml create mode 100644 tests/test_sourcepoint_interval/test_sourcepoint_interval.py create mode 100644 tests/test_sourcepoint_latest/geometry.xml create mode 100644 tests/test_sourcepoint_latest/materials.xml create mode 100644 tests/test_sourcepoint_latest/results.py create mode 100644 tests/test_sourcepoint_latest/results_test.dat create mode 100644 tests/test_sourcepoint_latest/results_true.dat create mode 100644 tests/test_sourcepoint_latest/settings.xml create mode 100644 tests/test_sourcepoint_latest/test_sourcepoint_latest.py diff --git a/tests/test_sourcepoint_batch/geometry.xml b/tests/test_sourcepoint_batch/geometry.xml new file mode 100644 index 0000000000..612e46132e --- /dev/null +++ b/tests/test_sourcepoint_batch/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_sourcepoint_batch/materials.xml b/tests/test_sourcepoint_batch/materials.xml new file mode 100644 index 0000000000..1f85510e0d --- /dev/null +++ b/tests/test_sourcepoint_batch/materials.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tests/test_sourcepoint_batch/results.py b/tests/test_sourcepoint_batch/results.py new file mode 100644 index 0000000000..9b0f577eb0 --- /dev/null +++ b/tests/test_sourcepoint_batch/results.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +import sys + +# import statepoint +sys.path.append('../../src/utils') +import statepoint + +# read in statepoint file +if len(sys.argv) > 1: + sp = statepoint.StatePoint(sys.argv[1]) +else: + sp = statepoint.StatePoint('statepoint.8.binary') +sp.read_results() +sp.read_source() + +# set up output string +outstr = '' + +# write out k-combined +outstr += 'k-combined:\n' +outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1]) + +# write out xyz +xyz = sp.source[0].xyz +for i in xyz: + outstr += "{0:12.6E} ".format(i) +outstr += "\n" + +# write results to file +with open('results_test.dat','w') as fh: + fh.write(outstr) diff --git a/tests/test_sourcepoint_batch/results_true.dat b/tests/test_sourcepoint_batch/results_true.dat new file mode 100644 index 0000000000..748df0351e --- /dev/null +++ b/tests/test_sourcepoint_batch/results_true.dat @@ -0,0 +1,3 @@ +k-combined: +0.000000E+00 0.000000E+00 +-9.438655E-02 -4.436810E+00 -2.416825E+00 diff --git a/tests/test_sourcepoint_batch/settings.xml b/tests/test_sourcepoint_batch/settings.xml new file mode 100644 index 0000000000..c816fe700e --- /dev/null +++ b/tests/test_sourcepoint_batch/settings.xml @@ -0,0 +1,19 @@ + + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + diff --git a/tests/test_sourcepoint_batch/test_sourcepoint_batch.py b/tests/test_sourcepoint_batch/test_sourcepoint_batch.py new file mode 100644 index 0000000000..78d202e405 --- /dev/null +++ b/tests/test_sourcepoint_batch/test_sourcepoint_batch.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import os +from subprocess import Popen, STDOUT, PIPE, call +import filecmp +from nose_mpi import NoseMPI +import glob + +pwd = os.path.dirname(__file__) + +def setup(): + os.putenv('PWD', pwd) + os.chdir(pwd) + +def test_run(): + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_statepoint_exists(): + statepoint = glob.glob(pwd + '/statepoint.*') + assert len(statepoint) == 5 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + +def test_results(): + statepoint = glob.glob(pwd + '/statepoint.8.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def teardown(): + output = glob.glob(pwd + '/statepoint.*') + output.append(pwd + '/results_test.dat') + for f in output: + if os.path.exists(f): + os.remove(f) diff --git a/tests/test_sourcepoint_interval/geometry.xml b/tests/test_sourcepoint_interval/geometry.xml new file mode 100644 index 0000000000..612e46132e --- /dev/null +++ b/tests/test_sourcepoint_interval/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_sourcepoint_interval/materials.xml b/tests/test_sourcepoint_interval/materials.xml new file mode 100644 index 0000000000..1f85510e0d --- /dev/null +++ b/tests/test_sourcepoint_interval/materials.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tests/test_sourcepoint_interval/results.py b/tests/test_sourcepoint_interval/results.py new file mode 100644 index 0000000000..9b0f577eb0 --- /dev/null +++ b/tests/test_sourcepoint_interval/results.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +import sys + +# import statepoint +sys.path.append('../../src/utils') +import statepoint + +# read in statepoint file +if len(sys.argv) > 1: + sp = statepoint.StatePoint(sys.argv[1]) +else: + sp = statepoint.StatePoint('statepoint.8.binary') +sp.read_results() +sp.read_source() + +# set up output string +outstr = '' + +# write out k-combined +outstr += 'k-combined:\n' +outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1]) + +# write out xyz +xyz = sp.source[0].xyz +for i in xyz: + outstr += "{0:12.6E} ".format(i) +outstr += "\n" + +# write results to file +with open('results_test.dat','w') as fh: + fh.write(outstr) diff --git a/tests/test_sourcepoint_interval/results_true.dat b/tests/test_sourcepoint_interval/results_true.dat new file mode 100644 index 0000000000..748df0351e --- /dev/null +++ b/tests/test_sourcepoint_interval/results_true.dat @@ -0,0 +1,3 @@ +k-combined: +0.000000E+00 0.000000E+00 +-9.438655E-02 -4.436810E+00 -2.416825E+00 diff --git a/tests/test_sourcepoint_interval/settings.xml b/tests/test_sourcepoint_interval/settings.xml new file mode 100644 index 0000000000..d0b8fa71d3 --- /dev/null +++ b/tests/test_sourcepoint_interval/settings.xml @@ -0,0 +1,19 @@ + + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + diff --git a/tests/test_sourcepoint_interval/test_sourcepoint_interval.py b/tests/test_sourcepoint_interval/test_sourcepoint_interval.py new file mode 100644 index 0000000000..78d202e405 --- /dev/null +++ b/tests/test_sourcepoint_interval/test_sourcepoint_interval.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import os +from subprocess import Popen, STDOUT, PIPE, call +import filecmp +from nose_mpi import NoseMPI +import glob + +pwd = os.path.dirname(__file__) + +def setup(): + os.putenv('PWD', pwd) + os.chdir(pwd) + +def test_run(): + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_statepoint_exists(): + statepoint = glob.glob(pwd + '/statepoint.*') + assert len(statepoint) == 5 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + +def test_results(): + statepoint = glob.glob(pwd + '/statepoint.8.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def teardown(): + output = glob.glob(pwd + '/statepoint.*') + output.append(pwd + '/results_test.dat') + for f in output: + if os.path.exists(f): + os.remove(f) diff --git a/tests/test_sourcepoint_latest/geometry.xml b/tests/test_sourcepoint_latest/geometry.xml new file mode 100644 index 0000000000..612e46132e --- /dev/null +++ b/tests/test_sourcepoint_latest/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_sourcepoint_latest/materials.xml b/tests/test_sourcepoint_latest/materials.xml new file mode 100644 index 0000000000..1f85510e0d --- /dev/null +++ b/tests/test_sourcepoint_latest/materials.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tests/test_sourcepoint_latest/results.py b/tests/test_sourcepoint_latest/results.py new file mode 100644 index 0000000000..8ff10971cd --- /dev/null +++ b/tests/test_sourcepoint_latest/results.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import sys + +# import statepoint +sys.path.append('../../src/utils') +import statepoint + +# read in statepoint file +if len(sys.argv) > 1: + sp = statepoint.StatePoint(sys.argv[1]) +else: + sp = statepoint.StatePoint('statepoint.10.binary') +sp.read_results() + +# set up output string +outstr = '' + +# write out k-combined +outstr += 'k-combined:\n' +outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1]) + +# write results to file +with open('results_test.dat','w') as fh: + fh.write(outstr) diff --git a/tests/test_sourcepoint_latest/results_test.dat b/tests/test_sourcepoint_latest/results_test.dat new file mode 100644 index 0000000000..00a65f913b --- /dev/null +++ b/tests/test_sourcepoint_latest/results_test.dat @@ -0,0 +1,2 @@ +k-combined: +3.011353E-01 2.854556E-03 diff --git a/tests/test_sourcepoint_latest/results_true.dat b/tests/test_sourcepoint_latest/results_true.dat new file mode 100644 index 0000000000..748df0351e --- /dev/null +++ b/tests/test_sourcepoint_latest/results_true.dat @@ -0,0 +1,3 @@ +k-combined: +0.000000E+00 0.000000E+00 +-9.438655E-02 -4.436810E+00 -2.416825E+00 diff --git a/tests/test_sourcepoint_latest/settings.xml b/tests/test_sourcepoint_latest/settings.xml new file mode 100644 index 0000000000..36c5c7a0d7 --- /dev/null +++ b/tests/test_sourcepoint_latest/settings.xml @@ -0,0 +1,18 @@ + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + diff --git a/tests/test_sourcepoint_latest/test_sourcepoint_latest.py b/tests/test_sourcepoint_latest/test_sourcepoint_latest.py new file mode 100644 index 0000000000..d26533843f --- /dev/null +++ b/tests/test_sourcepoint_latest/test_sourcepoint_latest.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +import os +from subprocess import Popen, STDOUT, PIPE, call +import filecmp +from nose_mpi import NoseMPI +import glob + +pwd = os.path.dirname(__file__) + +def setup(): + os.putenv('PWD', pwd) + os.chdir(pwd) + +def test_run(): + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_statepoint_exists(): + statepoint = glob.glob(pwd + '/statepoint.10.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + source = glob.glob(pwd + '/source.*') + assert len(source) == 1 + assert source[0].endswith('binary') or source[0].endswith('h5') + +def test_results(): + statepoint = glob.glob(pwd + '/statepoint.10.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def teardown(): + output = glob.glob(pwd + '/statepoint.10.*') + output += glob.glob(pwd + '/source.*') + output.append(pwd + '/results_test.dat') + for f in output: + if os.path.exists(f): + os.remove(f) From ad017aa5dee0f271e40e500fc1574f91a4e59c1e Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Mon, 6 Jan 2014 10:37:50 -0500 Subject: [PATCH 24/72] added test for restarting with a sourcepoint --- tests/test_sourcepoint_restart/geometry.xml | 8 + tests/test_sourcepoint_restart/materials.xml | 9 + tests/test_sourcepoint_restart/results.py | 44 + .../test_sourcepoint_restart/results_true.dat | 2412 +++++++++++++++++ tests/test_sourcepoint_restart/settings.xml | 19 + tests/test_sourcepoint_restart/tallies.xml | 23 + .../test_sourcepoint_restart.py | 133 + 7 files changed, 2648 insertions(+) create mode 100644 tests/test_sourcepoint_restart/geometry.xml create mode 100644 tests/test_sourcepoint_restart/materials.xml create mode 100644 tests/test_sourcepoint_restart/results.py create mode 100644 tests/test_sourcepoint_restart/results_true.dat create mode 100644 tests/test_sourcepoint_restart/settings.xml create mode 100644 tests/test_sourcepoint_restart/tallies.xml create mode 100644 tests/test_sourcepoint_restart/test_sourcepoint_restart.py diff --git a/tests/test_sourcepoint_restart/geometry.xml b/tests/test_sourcepoint_restart/geometry.xml new file mode 100644 index 0000000000..612e46132e --- /dev/null +++ b/tests/test_sourcepoint_restart/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_sourcepoint_restart/materials.xml b/tests/test_sourcepoint_restart/materials.xml new file mode 100644 index 0000000000..1f85510e0d --- /dev/null +++ b/tests/test_sourcepoint_restart/materials.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tests/test_sourcepoint_restart/results.py b/tests/test_sourcepoint_restart/results.py new file mode 100644 index 0000000000..d0b3a55e04 --- /dev/null +++ b/tests/test_sourcepoint_restart/results.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import sys +import numpy as np + +# import statepoint +sys.path.append('../../src/utils') +import statepoint + +# read in statepoint file +if len(sys.argv) > 1: + sp = statepoint.StatePoint(sys.argv[1]) +else: + sp = statepoint.StatePoint('statepoint.7.binary') +sp.read_results() + +# extract tally results and convert to vector +results1 = sp.tallies[0].results +shape1 = results1.shape +size1 = (np.product(shape1)) +results1 = np.reshape(results1, size1) +results2 = sp.tallies[1].results +shape2 = results2.shape +size2 = (np.product(shape2)) +results2 = np.reshape(results2, size2) + +# set up output string +outstr = '' + +# write out k-combined +outstr += 'k-combined:\n' +outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1]) + +# write out tally results +outstr += 'tally 1:\n' +for item in results1: + outstr += "{0:12.6E}\n".format(item) +outstr += 'tally 2:\n' +for item in results2: + outstr += "{0:12.6E}\n".format(item) + +# write results to file +with open('results_test.dat','w') as fh: + fh.write(outstr) diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat new file mode 100644 index 0000000000..f2b97af34d --- /dev/null +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -0,0 +1,2412 @@ +k-combined: +0.000000E+00 0.000000E+00 +tally 1: +3.000000E-03 +5.000000E-06 +1.350207E-03 +9.349751E-07 +-7.677912E-05 +4.241317E-07 +-3.387424E-04 +1.343262E-07 +1.215119E-03 +9.127703E-07 +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.131510E-04 +1.880396E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.889613E-04 +3.570639E-08 +2.320049E-04 +5.382627E-08 +1.491658E-03 +2.225044E-06 +1.817087E-03 +2.362232E-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 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +4.000000E-05 +1.075518E-03 +3.528151E-06 +2.716562E-03 +1.166700E-05 +2.288359E-03 +2.867176E-06 +3.411472E-03 +8.255676E-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.009839E-04 +9.059133E-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 +1.700000E-05 +3.530317E-04 +1.159034E-06 +2.030571E-03 +4.217108E-06 +9.628222E-04 +4.775997E-07 +1.817087E-03 +2.362232E-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.000000E-03 +2.000000E-06 +4.849895E-04 +9.196474E-07 +3.794711E-04 +4.964654E-07 +8.024923E-04 +3.245502E-07 +1.237485E-03 +9.676259E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.789439E-04 +3.202091E-08 +-4.519686E-04 +2.042756E-07 +-2.540910E-04 +6.456222E-08 +6.243342E-04 +3.897931E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +1.464813E-03 +1.309819E-06 +8.835792E-04 +6.990079E-07 +3.177051E-03 +5.159010E-06 +3.366739E-03 +5.697495E-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.009839E-04 +9.059133E-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.881176E-03 +2.067359E-06 +2.892742E-04 +1.089921E-07 +-9.095343E-04 +4.184955E-07 +1.237485E-03 +9.676259E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.365012E-04 +8.770346E-07 +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.121671E-04 +9.744828E-08 +1.000000E-03 +1.000000E-06 +8.504018E-04 +7.231831E-07 +5.847747E-04 +3.419615E-07 +2.618879E-04 +6.858528E-08 +6.243342E-04 +3.897931E-07 +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.243342E-04 +3.897931E-07 +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.009839E-04 +9.059133E-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 +3.009839E-04 +9.059133E-08 +1.000000E-03 +1.000000E-06 +9.742209E-04 +9.491064E-07 +9.236596E-04 +8.531471E-07 +8.502670E-04 +7.229539E-07 +3.009839E-04 +9.059133E-08 +9.000000E-03 +4.500000E-05 +5.336900E-03 +1.424486E-05 +3.093810E-03 +5.161998E-06 +2.879582E-03 +4.229500E-06 +4.002256E-03 +8.501473E-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.600000E-02 +1.280000E-04 +4.224331E-03 +9.782839E-06 +3.223102E-03 +5.736299E-06 +2.099435E-03 +2.209094E-06 +7.346629E-03 +2.710118E-05 +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.121671E-04 +9.744828E-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.365012E-04 +8.770346E-07 +2.000000E-03 +4.000000E-06 +4.929028E-04 +2.429532E-07 +-6.043220E-05 +3.652051E-09 +2.687444E-04 +7.222357E-08 +0.000000E+00 +0.000000E+00 +4.000000E-03 +1.000000E-05 +3.193650E-03 +5.924989E-06 +2.012845E-03 +2.064950E-06 +1.030603E-03 +6.338801E-07 +3.656540E-03 +7.357018E-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 +1.000000E-05 +5.813261E-04 +2.815138E-07 +-5.070667E-04 +2.458625E-07 +-5.126590E-04 +1.937439E-07 +2.162803E-03 +2.798572E-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 +1.130000E-04 +3.838937E-03 +7.695404E-06 +3.258655E-03 +8.032841E-06 +7.822538E-04 +5.238913E-06 +7.034462E-03 +2.505476E-05 +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.121671E-04 +9.744828E-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.200000E-02 +7.400000E-05 +3.703109E-03 +7.450207E-06 +1.172561E-03 +6.983603E-06 +9.775789E-04 +3.396069E-06 +5.183826E-03 +1.446969E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +1.300000E-04 +5.461842E-03 +1.700217E-05 +-1.194197E-03 +2.155631E-06 +-4.418175E-04 +1.630461E-07 +7.647613E-03 +2.954714E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +2.288086E-03 +4.056180E-06 +2.803000E-03 +6.212022E-06 +2.253444E-03 +3.299961E-06 +3.043389E-03 +5.316010E-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.121671E-04 +9.744828E-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 +-1.469649E-03 +6.515270E-06 +3.164874E-03 +5.070423E-06 +-7.834805E-04 +2.163764E-06 +3.991073E-03 +8.036254E-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.578244E-04 +4.327330E-07 +1.490994E-04 +2.223064E-08 +-2.750809E-04 +7.566948E-08 +6.243342E-04 +3.897931E-07 +0.000000E+00 +0.000000E+00 +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 +4.192244E-04 +2.440829E-06 +2.290352E-04 +2.955670E-08 +8.117866E-05 +3.786185E-09 +4.292057E-03 +9.213941E-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 +7.300000E-05 +4.050236E-03 +2.014829E-05 +3.589950E-03 +7.394738E-06 +3.301506E-03 +7.271497E-06 +5.574275E-03 +2.054932E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +6.865027E-04 +3.148594E-06 +1.123135E-03 +7.553928E-07 +-6.937330E-04 +5.371067E-07 +1.226302E-03 +7.521585E-07 +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.009839E-04 +9.059133E-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.500000E-05 +4.720935E-03 +1.123308E-05 +2.531138E-03 +3.881873E-06 +1.207797E-03 +1.104982E-06 +3.991073E-03 +8.036254E-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.121671E-04 +9.744828E-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.805904E-03 +3.261288E-06 +2.000000E-03 +4.000000E-06 +1.904158E-03 +3.625820E-06 +1.722222E-03 +2.966050E-06 +1.472450E-03 +2.168109E-06 +0.000000E+00 +0.000000E+00 +2.200000E-02 +2.440000E-04 +8.997789E-03 +4.069446E-05 +6.038380E-03 +2.892796E-05 +3.188711E-03 +1.706565E-05 +1.071337E-02 +5.765023E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.121671E-04 +9.744828E-08 +1.000000E-03 +1.000000E-06 +9.994298E-04 +9.988600E-07 +9.982900E-04 +9.965829E-07 +9.965814E-04 +9.931746E-07 +0.000000E+00 +0.000000E+00 +1.100000E-02 +6.100000E-05 +1.446955E-03 +5.203867E-06 +1.233625E-03 +3.439950E-06 +2.123440E-03 +6.107272E-06 +3.366739E-03 +5.697495E-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.121671E-04 +9.744828E-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.600000E-05 +3.062793E-03 +9.380701E-06 +2.224463E-03 +4.948238E-06 +2.136221E-03 +4.563441E-06 +3.009839E-03 +9.059133E-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 +3.009839E-04 +9.059133E-08 +1.000000E-03 +1.000000E-06 +1.071043E-04 +1.147134E-08 +-4.827930E-04 +2.330891E-07 +-1.575849E-04 +2.483301E-08 +3.009839E-04 +9.059133E-08 +8.000000E-03 +3.400000E-05 +3.469885E-03 +1.204729E-05 +1.706287E-04 +4.770906E-06 +6.093070E-04 +3.706122E-07 +3.656540E-03 +7.357018E-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 +3.009839E-04 +9.059133E-08 +1.000000E-03 +1.000000E-06 +9.276723E-04 +8.605758E-07 +7.908638E-04 +6.254655E-07 +6.043224E-04 +3.652056E-07 +3.009839E-04 +9.059133E-08 +1.500000E-02 +1.130000E-04 +7.760317E-03 +3.043383E-05 +3.486730E-03 +6.079687E-06 +3.192886E-03 +5.300269E-06 +5.206192E-03 +1.357459E-05 +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.121671E-04 +9.744828E-08 +1.000000E-03 +1.000000E-06 +-2.723974E-04 +7.420035E-08 +-3.886995E-04 +1.510873E-07 +3.580662E-04 +1.282114E-07 +3.121671E-04 +9.744828E-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.800000E-02 +1.620000E-04 +3.109478E-03 +5.403087E-06 +7.420753E-04 +5.610775E-06 +-1.972647E-03 +2.210831E-06 +7.056828E-03 +2.499410E-05 +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.253181E-04 +4.803845E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.203936E-03 +1.449461E-06 +2.000000E-03 +4.000000E-06 +1.876080E-03 +3.519675E-06 +1.640561E-03 +2.691440E-06 +1.316649E-03 +1.733565E-06 +0.000000E+00 +0.000000E+00 +2.000000E-03 +2.000000E-06 +1.656132E-03 +1.374995E-06 +1.062492E-03 +5.867156E-07 +3.772098E-04 +1.191478E-07 +3.054572E-03 +4.820460E-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.131510E-04 +1.880396E-07 +1.000000E-03 +1.000000E-06 +-5.333309E-04 +2.844418E-07 +-7.333726E-05 +5.378353E-09 +4.207423E-04 +1.770241E-07 +6.243342E-04 +3.897931E-07 +0.000000E+00 +0.000000E+00 +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.583270E-03 +3.252679E-06 +-3.064030E-04 +4.947979E-06 +1.080830E-03 +8.869004E-07 +2.452604E-03 +3.008634E-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.131510E-04 +1.880396E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +9.000000E-05 +5.530475E-03 +1.529320E-05 +2.705859E-03 +5.488988E-06 +3.266400E-03 +5.350316E-06 +7.112744E-03 +3.142384E-05 +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.121671E-04 +9.744828E-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 +2.250000E-04 +7.403253E-03 +3.016107E-05 +5.420662E-03 +1.983684E-05 +2.936582E-03 +4.922875E-06 +8.238398E-03 +3.592572E-05 +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.253181E-04 +4.803845E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.100000E-05 +3.184470E-03 +6.981764E-06 +3.311201E-03 +5.530952E-06 +2.002853E-03 +2.093961E-06 +3.968707E-03 +8.234052E-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.131510E-04 +1.880396E-07 +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.365012E-04 +8.770346E-07 +1.000000E-03 +1.000000E-06 +9.677184E-04 +9.364790E-07 +9.047184E-04 +8.185155E-07 +8.140422E-04 +6.626647E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +6.800000E-05 +1.266540E-03 +1.529518E-06 +-3.692635E-04 +9.672879E-07 +1.689168E-03 +1.866327E-06 +4.035806E-03 +1.215361E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +8.000000E-05 +3.410989E-03 +6.495638E-06 +8.888873E-04 +4.027331E-06 +6.828019E-04 +1.205374E-06 +4.894025E-03 +1.211286E-05 +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.243342E-04 +3.897931E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.976139E-03 +9.939638E-06 +1.462256E-03 +2.640635E-06 +2.026283E-03 +3.803255E-06 +4.604224E-03 +1.067567E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.029518E-04 +8.153220E-07 +1.000000E-03 +1.000000E-06 +9.531896E-04 +9.085703E-07 +8.628555E-04 +7.445196E-07 +7.353151E-04 +5.406883E-07 +0.000000E+00 +0.000000E+00 +3.000000E-03 +9.000000E-06 +1.969150E-03 +3.877552E-06 +1.225946E-03 +1.502944E-06 +1.367753E-03 +1.870749E-06 +1.504920E-03 +2.264783E-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.009839E-04 +9.059133E-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 +2.600000E-05 +-3.423632E-04 +2.476095E-06 +2.144575E-03 +2.456203E-06 +-1.035289E-03 +3.066348E-06 +3.678906E-03 +6.769426E-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 +8.000000E-03 +4.000000E-05 +5.417577E-03 +1.889555E-05 +2.293131E-03 +3.303280E-06 +6.729020E-04 +3.229421E-07 +5.206192E-03 +1.357459E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +7.262770E-03 +3.815108E-05 +4.265119E-03 +1.234667E-05 +2.317314E-03 +2.894105E-06 +3.355556E-03 +5.998148E-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.019679E-04 +3.623653E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +5.774620E-04 +3.334623E-07 +3.789825E-04 +1.436277E-07 +-1.360725E-04 +1.851572E-08 +1.805904E-03 +3.261288E-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 +8.000000E-03 +3.400000E-05 +-1.376386E-04 +3.479848E-08 +-1.136484E-03 +8.968777E-07 +-6.910241E-04 +3.879057E-07 +3.344373E-03 +6.674880E-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.131510E-04 +1.880396E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.617203E-03 +1.222945E-05 +1.595056E-03 +1.290135E-06 +-6.608603E-04 +1.154300E-06 +4.024623E-03 +1.056015E-05 +0.000000E+00 +0.000000E+00 +0.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.171894E-04 +4.717122E-08 +-4.292432E-04 +1.842497E-07 +3.001713E-04 +9.010283E-08 +3.121671E-04 +9.744828E-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.000000E-03 +1.700000E-05 +3.376537E-03 +6.867510E-06 +1.576049E-03 +1.242043E-06 +6.774572E-04 +3.539001E-07 +2.787137E-03 +5.137331E-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.300000E-02 +8.900000E-05 +3.214925E-03 +6.383584E-06 +1.681554E-03 +1.482668E-06 +1.811720E-03 +1.724962E-06 +4.269691E-03 +9.774105E-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.009839E-04 +9.059133E-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.243342E-04 +3.897931E-07 +1.000000E-03 +1.000000E-06 +8.016563E-05 +6.426528E-09 +-4.903602E-04 +2.404531E-07 +-1.189605E-04 +1.415159E-08 +0.000000E+00 +0.000000E+00 +7.000000E-03 +3.700000E-05 +6.291973E-04 +9.253012E-07 +-8.619079E-04 +3.776625E-07 +4.994451E-04 +1.549611E-07 +3.690089E-03 +7.039749E-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.000000E-03 +2.000000E-06 +1.439409E-03 +1.103682E-06 +6.555229E-04 +5.306118E-07 +7.043819E-05 +4.155385E-07 +1.226302E-03 +7.521585E-07 +0.000000E+00 +0.000000E+00 +0.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 +4.295537E-04 +1.845164E-07 +-2.232254E-04 +4.982957E-08 +-4.461813E-04 +1.990778E-07 +3.121671E-04 +9.744828E-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 +4.000000E-06 +1.440797E-04 +2.075896E-08 +1.581861E-03 +2.502285E-06 +7.101262E-04 +5.042792E-07 +6.019679E-04 +3.623653E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.304111E-03 +5.308928E-06 +1.405559E-03 +1.975595E-06 +8.468624E-04 +7.171759E-07 +2.441421E-03 +3.141818E-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.900000E-05 +4.675157E-03 +1.278192E-05 +2.215224E-03 +3.397777E-06 +1.088961E-03 +2.486687E-06 +3.344373E-03 +6.674880E-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.000000E-03 +4.000000E-06 +-2.660370E-04 +7.077569E-08 +-7.919915E-04 +6.272506E-07 +2.842468E-04 +8.079625E-08 +9.141350E-04 +4.598136E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.738077E-05 +4.540168E-09 +-4.931897E-04 +2.432361E-07 +-1.003064E-04 +1.006137E-08 +3.009839E-04 +9.059133E-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-03 +4.000000E-06 +1.768784E-03 +3.128598E-06 +1.358416E-03 +1.845293E-06 +8.583748E-04 +7.368072E-07 +1.226302E-03 +7.521585E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.382401E-03 +1.135211E-06 +9.435101E-04 +9.475181E-07 +1.233939E-03 +9.782026E-07 +1.226302E-03 +7.521585E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.843457E-04 +9.689366E-07 +9.534048E-04 +9.089808E-07 +9.079028E-04 +8.242875E-07 +3.121671E-04 +9.744828E-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 +0.000000E+00 +0.000000E+00 +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.302093E-01 +2.649911E-02 +2.511941E-01 +3.155135E-02 +1.462955E+00 +1.070191E+00 +1.627347E+01 +1.324129E+02 diff --git a/tests/test_sourcepoint_restart/settings.xml b/tests/test_sourcepoint_restart/settings.xml new file mode 100644 index 0000000000..5fee23d67e --- /dev/null +++ b/tests/test_sourcepoint_restart/settings.xml @@ -0,0 +1,19 @@ + + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + diff --git a/tests/test_sourcepoint_restart/tallies.xml b/tests/test_sourcepoint_restart/tallies.xml new file mode 100644 index 0000000000..1704f56e1e --- /dev/null +++ b/tests/test_sourcepoint_restart/tallies.xml @@ -0,0 +1,23 @@ + + + + + rectangular + 5 3 4 + -10. -5. 0. + 10. 4. 9. + + + + + + + scatter-P3 nu-fission + + + + + fission absorption total flux + + + \ No newline at end of file diff --git a/tests/test_sourcepoint_restart/test_sourcepoint_restart.py b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py new file mode 100644 index 0000000000..a4387405b8 --- /dev/null +++ b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +import os +from subprocess import Popen, STDOUT, PIPE, call +import filecmp +from nose_mpi import NoseMPI +import glob + +pwd = os.path.dirname(__file__) + +def setup(): + os.putenv('PWD', pwd) + os.chdir(pwd) + +def test_run(): + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_created_statepoint(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + sourcepoint = glob.glob(pwd + '/source.7.*') + assert len(sourcepoint) == 1 + assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') + +def test_results(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def test_restart_form1(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path, + '-r', statepoint[0]], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path, '-r', statepoint[0]], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_created_statepoint_form1(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + sourcepoint = glob.glob(pwd + '/source.7.*') + assert len(sourcepoint) == 1 + assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') + +def test_results_form1(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def test_restart_form2(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + sourcepoint = glob.glob(pwd + '/source.7.*') + openmc_path = pwd + '/../../src/openmc' + if int(NoseMPI.mpi_np) > 0: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path, + '--restart', statepoint[0], source[0]], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path, '--restart', statepoint[0]], + stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_created_statepoint_form2(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + sourcepoint = glob.glob(pwd + '/source.7.*') + assert len(sourcepoint) == 1 + assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') + +def test_results_form2(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def test_restart_serial(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + openmc_path = pwd + '/../../src/openmc' + proc = Popen([openmc_path, '--restart', statepoint[0]], + stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_created_statepoint_serial(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + sourcepoint = glob.glob(pwd + '/source.7.*') + assert len(sourcepoint) == 1 + assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') + +def test_results_serial(): + statepoint = glob.glob(pwd + '/statepoint.7.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def teardown(): + output = glob.glob(pwd + '/statepoint.7.*') + output += glob.glob(pwd + '/sourcepoint.7.*') + output.append(pwd + '/results_test.dat') + for f in output: + if os.path.exists(f): + os.remove(f) From a3726724ecf9d287707d87d7863c84dbf5f3ef13 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 8 Jan 2014 23:15:59 -0500 Subject: [PATCH 25/72] Ability to generate PDF documentation. --- .gitignore | 1 + docs/Makefile | 20 +++++++++++++++--- docs/{img => source/_images}/3dcore.png | Bin docs/{img => source/_images}/3dgeomplot.png | Bin docs/{img => source/_images}/Tracks.png | Bin docs/{img => source/_images}/atr.png | Bin docs/{img => source/_images}/fluxplot.png | Bin docs/{img => source/_images}/fork.png | Bin docs/{img => source/_images}/halfspace.svg | 0 docs/{img => source/_images}/master-slave.png | Bin .../_images}/nearest-neighbor-example.png | Bin .../_images}/nearest-neighbor.png | Bin docs/{img => source/_images}/openmc.png | Bin .../{img => source/_images}/plotmeshtally.png | Bin docs/{img => source/_images}/pullrequest.png | Bin docs/{img => source/_images}/union.svg | 0 docs/{img => source/_images}/uniongrid.svg | 0 docs/source/conf.py | 4 +++- docs/source/devguide/workflow.rst | 4 ++-- docs/source/methods/cross_sections.rst | 2 +- docs/source/methods/geometry.rst | 4 ++-- docs/source/methods/parallelization.rst | 6 +++--- docs/source/usersguide/processing.rst | 12 +++++------ 23 files changed, 35 insertions(+), 18 deletions(-) rename docs/{img => source/_images}/3dcore.png (100%) rename docs/{img => source/_images}/3dgeomplot.png (100%) rename docs/{img => source/_images}/Tracks.png (100%) rename docs/{img => source/_images}/atr.png (100%) rename docs/{img => source/_images}/fluxplot.png (100%) rename docs/{img => source/_images}/fork.png (100%) rename docs/{img => source/_images}/halfspace.svg (100%) rename docs/{img => source/_images}/master-slave.png (100%) rename docs/{img => source/_images}/nearest-neighbor-example.png (100%) rename docs/{img => source/_images}/nearest-neighbor.png (100%) rename docs/{img => source/_images}/openmc.png (100%) rename docs/{img => source/_images}/plotmeshtally.png (100%) rename docs/{img => source/_images}/pullrequest.png (100%) rename docs/{img => source/_images}/union.svg (100%) rename docs/{img => source/_images}/uniongrid.svg (100%) diff --git a/.gitignore b/.gitignore index 023c4f2c1a..9f720f9894 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ src/openmc # Documentation builds docs/build +docs/source/_images/*.pdf # xml-fortran reader src/xml-fortran/xmlreader diff --git a/docs/Makefile b/docs/Makefile index 8909256f3d..89c71dc074 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -6,13 +6,19 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build +IMAGEDIR = source/_images # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest +# SVG to PDF conversion +SVG2PDF = inkscape +PDFS = $(patsubst %.svg,%.pdf,$(wildcard $(IMAGEDIR)/*.svg)) + + +.PHONY: help images clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @@ -33,8 +39,16 @@ help: @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" +# Pattern rule for converting SVG to PDF +%.pdf: %.svg + $(SVG2PDF) -f $< -A $@ + +# Rule to build PDFs +images: $(PDFS) + clean: -rm -rf $(BUILDDIR)/* + -rm $(PDFS) html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @@ -91,14 +105,14 @@ epub: @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." -latex: +latex: images $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." -latexpdf: +latexpdf: images $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." make -C $(BUILDDIR)/latex all-pdf diff --git a/docs/img/3dcore.png b/docs/source/_images/3dcore.png similarity index 100% rename from docs/img/3dcore.png rename to docs/source/_images/3dcore.png diff --git a/docs/img/3dgeomplot.png b/docs/source/_images/3dgeomplot.png similarity index 100% rename from docs/img/3dgeomplot.png rename to docs/source/_images/3dgeomplot.png diff --git a/docs/img/Tracks.png b/docs/source/_images/Tracks.png similarity index 100% rename from docs/img/Tracks.png rename to docs/source/_images/Tracks.png diff --git a/docs/img/atr.png b/docs/source/_images/atr.png similarity index 100% rename from docs/img/atr.png rename to docs/source/_images/atr.png diff --git a/docs/img/fluxplot.png b/docs/source/_images/fluxplot.png similarity index 100% rename from docs/img/fluxplot.png rename to docs/source/_images/fluxplot.png diff --git a/docs/img/fork.png b/docs/source/_images/fork.png similarity index 100% rename from docs/img/fork.png rename to docs/source/_images/fork.png diff --git a/docs/img/halfspace.svg b/docs/source/_images/halfspace.svg similarity index 100% rename from docs/img/halfspace.svg rename to docs/source/_images/halfspace.svg diff --git a/docs/img/master-slave.png b/docs/source/_images/master-slave.png similarity index 100% rename from docs/img/master-slave.png rename to docs/source/_images/master-slave.png diff --git a/docs/img/nearest-neighbor-example.png b/docs/source/_images/nearest-neighbor-example.png similarity index 100% rename from docs/img/nearest-neighbor-example.png rename to docs/source/_images/nearest-neighbor-example.png diff --git a/docs/img/nearest-neighbor.png b/docs/source/_images/nearest-neighbor.png similarity index 100% rename from docs/img/nearest-neighbor.png rename to docs/source/_images/nearest-neighbor.png diff --git a/docs/img/openmc.png b/docs/source/_images/openmc.png similarity index 100% rename from docs/img/openmc.png rename to docs/source/_images/openmc.png diff --git a/docs/img/plotmeshtally.png b/docs/source/_images/plotmeshtally.png similarity index 100% rename from docs/img/plotmeshtally.png rename to docs/source/_images/plotmeshtally.png diff --git a/docs/img/pullrequest.png b/docs/source/_images/pullrequest.png similarity index 100% rename from docs/img/pullrequest.png rename to docs/source/_images/pullrequest.png diff --git a/docs/img/union.svg b/docs/source/_images/union.svg similarity index 100% rename from docs/img/union.svg rename to docs/source/_images/union.svg diff --git a/docs/img/uniongrid.svg b/docs/source/_images/uniongrid.svg similarity index 100% rename from docs/img/uniongrid.svg rename to docs/source/_images/uniongrid.svg diff --git a/docs/source/conf.py b/docs/source/conf.py index 8752b48986..24c26bcd87 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -121,7 +121,7 @@ html_title = "OpenMC Documentation" # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = '../img/openmc.png' +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 @@ -188,6 +188,8 @@ latex_documents = [ u'Massachusetts Institute of Technology', 'manual'), ] +latex_elements = {'preamble': '\\usepackage{enumitem}\\setlistdepth{9}'} + # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None diff --git a/docs/source/devguide/workflow.rst b/docs/source/devguide/workflow.rst index 9562c9584e..f3793628af 100644 --- a/docs/source/devguide/workflow.rst +++ b/docs/source/devguide/workflow.rst @@ -60,7 +60,7 @@ features and bug fixes. The general steps for contributing are as follows: repository with the same name under your personal account. As such, you can commit to it as you please without disrupting other developers. - .. image:: ../../img/fork.png + .. image:: ../_images/fork.png 2. Clone your fork of OpenMC and create a branch that branches off of *develop*: @@ -77,7 +77,7 @@ features and bug fixes. The general steps for contributing are as follows: 4. Issue a pull request from GitHub and select the *develop* branch of mit-crpg/openmc as the target. - .. image:: ../../img/pullrequest.png + .. image:: ../_images/pullrequest.png At a minimum, you should describe what the changes you've made are and why you are making them. If the changes are related to an oustanding issue, make diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index c564896c79..a193dde96d 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -80,7 +80,7 @@ dashed box would need to be stored on a per-nuclide basis, and the union grid would need to be stored once. This method is also referred to as *double indexing* and is available as an option in Serpent (see paper by Leppanen_). -.. figure:: ../../img/uniongrid.svg +.. figure:: ../_images/uniongrid.* :width: 600px :align: center :figclass: align-center diff --git a/docs/source/methods/geometry.rst b/docs/source/methods/geometry.rst index d4824f5d1c..1515ffa891 100644 --- a/docs/source/methods/geometry.rst +++ b/docs/source/methods/geometry.rst @@ -45,7 +45,7 @@ surface by a combination of the unique ID of the surface and a positive/negative sign. The following illustration shows an example of an ellipse with unique ID 1 dividing space into two half-spaces. -.. figure:: ../../img/halfspace.svg +.. figure:: ../_images/halfspace.* :align: center :figclass: align-center @@ -60,7 +60,7 @@ half-space references whose intersection defines the region. The region is then assigned a material defined elsewhere. The following illustration shows an example of a cell defined as the intersection of an ellipse and two planes. -.. figure:: ../../img/union.svg +.. figure:: ../_images/union.* :align: center :figclass: align-center diff --git a/docs/source/methods/parallelization.rst b/docs/source/methods/parallelization.rst index 7f0b9bd6eb..66ead52a2a 100644 --- a/docs/source/methods/parallelization.rst +++ b/docs/source/methods/parallelization.rst @@ -65,7 +65,7 @@ in the case of an eigenvalue calculation). This idea is illustrated in .. _figure-master-slave: -.. figure:: ../../img/master-slave.png +.. figure:: ../_images/master-slave.png :align: center :figclass: align-center @@ -122,7 +122,7 @@ needed. This concept is illustrated in :ref:`Figure 2 .. _figure-nearest-neighbor: -.. figure:: ../../img/nearest-neighbor.png +.. figure:: ../_images/nearest-neighbor.png :align: center :figclass: align-center @@ -203,7 +203,7 @@ communicated between adjacent nodes. .. _figure-neighbor-example: -.. figure:: ../../img/nearest-neighbor-example.png +.. figure:: ../_images/nearest-neighbor-example.png :align: center :figclass: align-center diff --git a/docs/source/usersguide/processing.rst b/docs/source/usersguide/processing.rst index 043041ef42..fc426ba2f4 100644 --- a/docs/source/usersguide/processing.rst +++ b/docs/source/usersguide/processing.rst @@ -38,7 +38,7 @@ running OpenMC with the -plot or -p command-line option (See Plotting in 2D -------------- -.. image:: ../../img/atr.png +.. image:: ../_images/atr.png :height: 200px After running OpenMC to obtain PPM files, images should be saved to another @@ -58,7 +58,7 @@ Ubuntu: ``sudo apt-get install imagemagick``). Images are then converted like: Plotting in 3D -------------- -.. image:: ../../img/3dgeomplot.png +.. image:: ../_images/3dgeomplot.png :height: 200px The binary VOXEL files output by OpenMC can not be viewed directly by any @@ -162,7 +162,7 @@ tasks will be described here in the following sections. Plotting in 2D -------------- -.. image:: ../../img/plotmeshtally.png +.. image:: ../_images/plotmeshtally.png :height: 200px For simple viewing of 2D slices of a mesh plot, the utility plot_mesh_tally.py @@ -170,7 +170,7 @@ is provided. This utility provides an interactive GUI to explore and plot mesh tallies for any scores and filter bins. It requires statepoint.py, as well as `PyQt `_. -.. image:: ../../img/fluxplot.png +.. image:: ../_images/fluxplot.png :height: 200px Alternatively, the user can write their own Python script to manipulate the data @@ -249,7 +249,7 @@ two heatmaps in the previous figure. Plotting in 3D -------------- -.. image:: ../../img/3dcore.png +.. image:: ../_images/3dcore.png :height: 200px As with 3D plots of the geometry, meshtally data needs to be put into a standard @@ -357,7 +357,7 @@ and dumped to MATLAB in one step. Particle Track Visualization ---------------------------- -.. image:: ../../img/Tracks.png +.. image:: ../_images/Tracks.png :height: 200px OpenMC can dump particle tracks—the position of particles as they are From c439c3dc5d533c74ca7df25759009eb89d81af9a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 14 Jan 2014 20:34:29 -0500 Subject: [PATCH 26/72] Change OPENMP macro to _OPENMP which is automatically defined when compiling with OpenMP. --- src/Makefile | 6 +++--- src/eigenvalue.F90 | 4 ++-- src/global.F90 | 6 +++--- src/initialize.F90 | 6 +++--- src/input_xml.F90 | 2 +- src/output.F90 | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Makefile b/src/Makefile index 03c370e07a..00abca489f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -181,17 +181,17 @@ endif ifeq ($(OPENMP),yes) ifeq ($(COMPILER),intel) - F90FLAGS += -openmp -DOPENMP + F90FLAGS += -openmp LDFLAGS += -openmp endif ifeq ($(COMPILER),gnu) - F90FLAGS += -fopenmp -DOPENMP + F90FLAGS += -fopenmp LDFLAGS += -fopenmp endif ifeq ($(COMPILER),ibm) - F90FLAGS += -qsmp=omp -WF,-DOPENMP + F90FLAGS += -qsmp=omp LDFLAGS += -qsmp=omp endif endif diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index f5375bf3a9..4047f815f5 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -166,7 +166,7 @@ contains subroutine finalize_generation() -#ifdef OPENMP +#ifdef _OPENMP ! Join the fission bank from each thread into one global fission bank call join_bank_from_threads() #endif @@ -821,7 +821,7 @@ contains end subroutine replay_batch_history -#ifdef OPENMP +#ifdef _OPENMP !=============================================================================== ! JOIN_BANK_FROM_THREADS !=============================================================================== diff --git a/src/global.F90 b/src/global.F90 index 637ea315e6..c3dbf0aa24 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -158,7 +158,7 @@ module global ! Source and fission bank type(Bank), allocatable, target :: source_bank(:) type(Bank), allocatable, target :: fission_bank(:) -#ifdef OPENMP +#ifdef _OPENMP type(Bank), allocatable, target :: master_fission_bank(:) #endif integer(8) :: n_bank ! # of sites in fission bank @@ -205,7 +205,7 @@ module global integer :: MPI_BANK ! MPI datatype for fission bank integer :: MPI_TALLYRESULT ! MPI datatype for TallyResult -#ifdef OPENMP +#ifdef _OPENMP integer :: n_threads = NONE ! number of OpenMP threads integer :: thread_id ! ID of a given thread #endif @@ -438,7 +438,7 @@ contains !$omp parallel if (allocated(fission_bank)) deallocate(fission_bank) !$omp end parallel -#ifdef OPENMP +#ifdef _OPENMP if (allocated(master_fission_bank)) deallocate(master_fission_bank) #endif if (allocated(source_bank)) deallocate(source_bank) diff --git a/src/initialize.F90 b/src/initialize.F90 index b75fa20ef8..9f495e4ac9 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -26,7 +26,7 @@ module initialize use mpi #endif -#ifdef OPENMP +#ifdef _OPENMP use omp_lib #endif @@ -372,7 +372,7 @@ contains ! Read number of threads i = i + 1 -#ifdef OPENMP +#ifdef _OPENMP ! Read and set number of OpenMP threads n_threads = str_to_int(argv(i)) if (n_threads < 1) then @@ -830,7 +830,7 @@ contains call fatal_error() end if -#ifdef OPENMP +#ifdef _OPENMP ! If OpenMP is being used, each thread needs its own private fission ! bank. Since the private fission banks need to be combined at the end of a ! generation, there is also a 'master_fission_bank' that is used to collect diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 3ce3c9d0d4..ae4e4b1b2e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -228,7 +228,7 @@ contains ! Number of OpenMP threads if (check_for_node(doc, "threads")) then -#ifdef OPENMP +#ifdef _OPENMP if (n_threads == NONE) then call get_node_value(doc, "threads", n_threads) if (n_threads < 1) then diff --git a/src/output.F90 b/src/output.F90 index 677c35396c..3e31ad7183 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -31,7 +31,7 @@ contains subroutine title() -#ifdef OPENMP +#ifdef _OPENMP use omp_lib #endif @@ -69,7 +69,7 @@ contains trim(to_str(n_procs)) #endif -#ifdef OPENMP +#ifdef _OPENMP ! Write number of OpenMP threads write(UNIT=OUTPUT_UNIT, FMT='(6X,"OpenMP Threads:",1X,A)') & trim(to_str(omp_get_max_threads())) From b142ff6458d4515a2e4f9d72ae0b7ee3bfb67da6 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 14 Jan 2014 21:26:40 -0500 Subject: [PATCH 27/72] Move calculation of number of threads outside of .omp parallel. --- src/initialize.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 9f495e4ac9..c1fbf40cda 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -836,8 +836,9 @@ contains ! generation, there is also a 'master_fission_bank' that is used to collect ! the sites from each thread. + n_threads = omp_get_max_threads() + !$omp parallel - n_threads = omp_get_num_threads() thread_id = omp_get_thread_num() if (thread_id == 0) then From cbf37e0916c6f878b3af07f8a89f3dd13570ca0e Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 14 Jan 2014 21:44:40 -0500 Subject: [PATCH 28/72] Happy new year 2014! --- LICENSE | 2 +- docs/source/conf.py | 2 +- docs/source/license.rst | 2 +- man/man1/openmc.1 | 2 +- src/output.F90 | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/LICENSE b/LICENSE index f8d9cd7c04..0b9c351371 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2013 Massachusetts Institute of Technology +Copyright (c) 2011-2014 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/docs/source/conf.py b/docs/source/conf.py index 24c26bcd87..7fb6226318 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -39,7 +39,7 @@ master_doc = 'index' # General information about the project. project = u'OpenMC' -copyright = u'2011-2013, Massachusetts Institute of Technology' +copyright = u'2011-2014, 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 diff --git a/docs/source/license.rst b/docs/source/license.rst index a7d7f29760..e7f4b3a69d 100644 --- a/docs/source/license.rst +++ b/docs/source/license.rst @@ -4,7 +4,7 @@ License Agreement ================= -Copyright © 2011-2013 Massachusetts Institute of Technology +Copyright © 2011-2014 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/man/man1/openmc.1 b/man/man1/openmc.1 index cac8d59087..db91d7a8f0 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-2013 Massachusetts Institute of Technology. +Copyright \(co 2011-2014 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/src/output.F90 b/src/output.F90 index 3e31ad7183..ee0a8391c2 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -50,7 +50,7 @@ contains ! Write version information write(UNIT=OUTPUT_UNIT, FMT=*) & - ' Copyright: 2011-2013 Massachusetts Institute of Technology' + ' Copyright: 2011-2014 Massachusetts Institute of Technology' write(UNIT=OUTPUT_UNIT, FMT=*) & ' License: http://mit-crpg.github.io/openmc/license.html' write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",8X,I1,".",I1,".",I1)') & From 55d257351c7b731aec57b415b3270d0e205f30f3 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 20 Jan 2014 19:00:12 -0500 Subject: [PATCH 29/72] Converted plot_mesh_tally.py to use Tkinter rather than PyQt. --- src/utils/plot_mesh_tally.py | 512 +++++++++++++++-------------------- 1 file changed, 213 insertions(+), 299 deletions(-) diff --git a/src/utils/plot_mesh_tally.py b/src/utils/plot_mesh_tally.py index c70b291653..d22e0e0b4f 100755 --- a/src/utils/plot_mesh_tally.py +++ b/src/utils/plot_mesh_tally.py @@ -1,269 +1,241 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python -'''Python script to plot tally data generated by OpenMC.''' +"""Python script to plot tally data generated by OpenMC.""" +import os import sys -from statepoint import * -# Color intensity dependent on individual score? - -from PyQt4.QtCore import * -from PyQt4.QtGui import * -import matplotlib.pyplot as plt +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg as FigureCanvas +from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg as NavigationToolbar from matplotlib.figure import Figure -from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas -from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar +import matplotlib.pyplot as plt import numpy as np -class AppForm(QMainWindow): - def __init__(self, argv, parent=None): - QMainWindow.__init__(self, parent) +from statepoint import * + +if sys.version_info[0] < 3: + import Tkinter as tk +else: + import tkinter as tk +import tkFileDialog +import tkFont +import tkMessageBox +import ttk + +class MeshPlotter(tk.Frame): + def __init__(self, parent, filename): + tk.Frame.__init__(self, parent) + + self.labels = {'cell': 'Cell:', 'cellborn': 'Cell born:', + 'surface': 'Surface:', 'material': 'Material:', + 'universe': 'Universe:', 'energyin': 'Energy in:', + 'energyout': 'Energy out:'} + + self.filterBoxes = {} # Read data from source or leakage fraction file - self.all_good = False - while not self.all_good: - if len(argv) > 1: - cl_file = str(argv[1]) - else: - cl_file = None - self.get_file_data(cl_file) - # Check that there are any mesh tallies at all - if len(self.tally_ids) != 0: - self.all_good = True - else: - # if there are not, the user will be given the choice to choose - # another file (but only if using interactive chooser) - if cl_file is None: - choice = QMessageBox.critical(None, "Invalid StatePoint File", - "File Does Not Contain Mesh " + - "Tallies!" + - "\nSelect Another File Or Quit", - QMessageBox.Retry, - QMessageBox.Abort) - if choice == QMessageBox.Abort: - self.all_good = False - break - else: - print("Invalid StatePoint File; File Does Not Contain " + - "Mesh Tallies!") - self.all_good = False - break + self.get_file_data(filename) + # Set up top-level window + top = self.winfo_toplevel() + top.title('Mesh Tally Plotter: ' + filename) + top.rowconfigure(0, weight=1) + top.columnconfigure(0, weight=1) + self.grid(sticky=tk.W+tk.N) - if self.all_good: - # Set maximum colorbar value by maximum tally data value - self.maxvalue = self.datafile.tallies[0].results.max() + # Create widgets and draw to screen + self.create_widgets() + self.update() - self.main_frame = QWidget() - self.setCentralWidget(self.main_frame) + def create_widgets(self): + figureFrame = tk.Frame(self) + figureFrame.grid(row=0, column=0) - # Create the Figure, Canvas, and Axes - self.dpi = 100 - self.fig = Figure((5.0, 15.0), dpi=self.dpi) - self.canvas = FigureCanvas(self.fig) - self.canvas.setParent(self.main_frame) - self.axes = self.fig.add_subplot(111) + # Create the Figure and Canvas + self.dpi = 100 + self.fig = Figure((5.0, 5.0), dpi=self.dpi) + self.canvas = FigureCanvas(self.fig, master=figureFrame) + self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) - # Create the navigation toolbar, tied to the canvas - self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) + # Create the navigation toolbar, tied to the canvas + self.mpl_toolbar = NavigationToolbar(self.canvas, figureFrame) + self.mpl_toolbar.update() + self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1) - # Grid layout at bottom - self.grid = QGridLayout() + # Create frame for comboboxes + self.selectFrame = tk.Frame(self) + self.selectFrame.grid(row=1, column=0, sticky=tk.W+tk.E) - # Overall layout - self.vbox = QVBoxLayout() - self.vbox.addWidget(self.canvas) - self.vbox.addWidget(self.mpl_toolbar) - self.vbox.addLayout(self.grid) - self.main_frame.setLayout(self.vbox) + # Tally selection + labelTally = tk.Label(self.selectFrame, text='Tally:') + labelTally.grid(row=0, column=0, sticky=tk.W) + self.tallyBox = ttk.Combobox(self.selectFrame, state='readonly') + self.tallyBox['values'] = [self.datafile.tallies[i].id + for i in self.meshTallies] + self.tallyBox.current(0) + self.tallyBox.grid(row=0, column=1, sticky=tk.W+tk.E) + self.tallyBox.bind('<>', self.update) - # Tally selections - label_tally = QLabel("Tally:") - self.tally = QComboBox() - # Only show options for the tallies with meshes - self.tally.addItems([str(i + 1) for i in self.tally_ids]) - self.connect(self.tally, SIGNAL('activated(int)'), - self._update) - self.connect(self.tally, SIGNAL('activated(int)'), - self.populate_boxes) - self.connect(self.tally, SIGNAL('activated(int)'), - self.on_draw) + # Planar basis selection + labelBasis = tk.Label(self.selectFrame, text='Basis:') + labelBasis.grid(row=1, column=0, sticky=tk.W) + self.basisBox = ttk.Combobox(self.selectFrame, state='readonly') + self.basisBox['values'] = ('xy', 'yz', 'xz') + self.basisBox.current(0) + self.basisBox.grid(row=1, column=1, sticky=tk.W+tk.E) + self.basisBox.bind('<>', self.update) - # Planar basis - label_basis = QLabel("Basis:") - self.basis = QComboBox() - self.basis.addItems(['xy', 'yz', 'xz']) + # Axial level + labelAxial = tk.Label(self.selectFrame, text='Axial level:') + labelAxial.grid(row=2, column=0, sticky=tk.W) + self.axialBox = ttk.Combobox(self.selectFrame, state='readonly') + self.axialBox.grid(row=2, column=1, sticky=tk.W+tk.E) + self.axialBox.bind('<>', self.redraw) - # Update window when 'Basis' selection is changed - self.connect(self.basis, SIGNAL('activated(int)'), - self._update) - self.connect(self.basis, SIGNAL('activated(int)'), - self.populate_boxes) - self.connect(self.basis, SIGNAL('activated(int)'), - self.on_draw) + # Option for mean/uncertainty + labelMean = tk.Label(self.selectFrame, text='Mean/Uncertainty:') + labelMean.grid(row=3, column=0, sticky=tk.W) + self.meanBox = ttk.Combobox(self.selectFrame, state='readonly') + self.meanBox['values'] = ('Mean', 'Absolute uncertainty', + 'Relative uncertainty') + self.meanBox.current(0) + self.meanBox.grid(row=3, column=1, sticky=tk.W+tk.E) + self.meanBox.bind('<>', self.update) - # Axial level within selected basis - label_axial_level = QLabel("Axial Level:") - self.axial_level = QComboBox() - self.connect(self.axial_level, SIGNAL('activated(int)'), - self.on_draw) + # Scores + labelScore = tk.Label(self.selectFrame, text='Score:') + labelScore.grid(row=4, column=0, sticky=tk.W) + self.scoreBox = ttk.Combobox(self.selectFrame, state='readonly') + self.scoreBox.grid(row=4, column=1, sticky=tk.W+tk.E) + self.scoreBox.bind('<>', self.redraw) - # Add Option to plot mean or uncertainty - label_mean = QLabel("Mean or Uncertainty:") - self.mean = QComboBox() - self.mean.addItems(['Mean','Absolute Uncertainty', - 'Relative Uncertainty']) + # Filter label + font = tkFont.Font(weight='bold') + labelFilters = tk.Label(self.selectFrame, text='Filters:', font=font) + labelFilters.grid(row=5, column=0, sticky=tk.W) - # Update window when mean selection is changed - self.connect(self.mean, SIGNAL('activated(int)'), - self.on_draw) - - - self.label_filters = QLabel("Filter options:") - - # Labels for all possible filters - self.labels = {'cell': 'Cell: ', 'cellborn': 'Cell born: ', - 'surface': 'Surface: ', 'material': 'Material', - 'universe': 'Universe: ', 'energyin': 'Energy in: ', - 'energyout': 'Energy out: '} - - # Empty reusable labels - self.qlabels = {} - for j in range(8): - self.nextLabel = QLabel - self.qlabels[j] = self.nextLabel - - # Reusable comboboxes labelled with filter names - self.boxes = {} - for key in self.labels.keys(): - self.nextBox = QComboBox() - self.connect(self.nextBox, SIGNAL('activated(int)'), - self.on_draw) - self.boxes[key] = self.nextBox - - # Combobox to select among scores - self.score_label = QLabel("Score:") - self.scoreBox = QComboBox() - for item in self.tally_scores[0]: - self.scoreBox.addItems(str(item)) - self.connect(self.scoreBox, SIGNAL('activated(int)'), - self.on_draw) - - # Fill layout - self.grid.addWidget(label_tally, 0, 0) - self.grid.addWidget(self.tally, 0, 1) - self.grid.addWidget(label_basis, 1, 0) - self.grid.addWidget(self.basis, 1, 1) - self.grid.addWidget(label_axial_level, 2, 0) - self.grid.addWidget(self.axial_level, 2, 1) - self.grid.addWidget(label_mean, 3, 0) - self.grid.addWidget(self.mean, 3, 1) - self.grid.addWidget(self.label_filters, 4, 0) - - self._update() - self.populate_boxes() - self.on_draw() - - def get_file_data(self, cl_file=None): - # Get data file name from "open file" browser - if cl_file is None: - filename = QFileDialog.getOpenFileName(self, - 'Select statepoint file', '.') + def update(self, event=None): + if not event: + widget = None else: - filename = cl_file + widget = event.widget - # Create StatePoint object and read in data - self.datafile = StatePoint(str(filename)) - self.datafile.read_results() - self.datafile.generate_stdev() + tally_id = self.meshTallies[self.tallyBox.current()] + selectedTally = self.datafile.tallies[tally_id] - self.setWindowTitle('Core Map Tool : ' + str(self.datafile.path)) + # Get mesh for selected tally + self.mesh = self.datafile.meshes[selectedTally.filters['mesh'].bins[0] - 1] - self.labelList = [] + # Get mesh dimensions + self.nx, self.ny, self.nz = self.mesh.dimension - # Read mesh dimensions - # for mesh in self.datafile.meshes: - # self.nx, self.ny, self.nz = mesh.dimension + # Repopulate comboboxes baesd on current basis selection + text = self.basisBox['values'][self.basisBox.current()] + if text == 'xy': + self.axialBox['values'] = [str(i+1) for i in range(self.nz)] + elif text == 'yz': + self.axialBox['values'] = [str(i+1) for i in range(self.nx)] + else: + self.axialBox['values'] = [str(i+1) for i in range(self.ny)] + self.axialBox.current(0) - # Find which tallies have meshes so the rest can be ignored, - # and for these tallies read the filter and score types - self.tally_ids = [] - self.n_tallies = len(self.datafile.tallies) - self.tally_list = [] - self.tally_scores = [] - for itally, tally in enumerate(self.datafile.tallies): - if 'mesh' in tally.filters: - # Then we have a good tally, store the ID, filters and - # scores - self.tally_ids.append(itally) - self.filter_types = [] - for f in tally.filters: - self.filter_types.append(f) - self.tally_list.append(self.filter_types) - self.score_types = [] - for s in tally.scores: - self.score_types.append(s) - self.tally_scores.append(self.score_types) + # If update() was called by a change in the basis combobox, we don't + # need to repopulate the filters + if widget == self.basisBox: + self.redraw() + return - def on_draw(self): - """ Redraws the figure - """ + # Update scores + self.scoreBox['values'] = selectedTally.scores # self.tally_scores[self.tallyBox.current()] + self.scoreBox.current(0) -# print 'Calling on_draw...' - # Get selected basis, axial_level and stage - basis = self.basis.currentIndex() + 1 - axial_level = self.axial_level.currentIndex() + 1 - is_mean = self.mean.currentIndex() + # Remove any filter labels/comboboxes that exist + for row in range(6, self.selectFrame.grid_size()[1]): + for w in self.selectFrame.grid_slaves(row=row): + w.grid_forget() + w.destroy() - # get current tally index - tally_id = self.tally_ids[self.tally.currentIndex()] + # create a label/combobox for each filter in selected tally + count = 0 + for filterType in selectedTally.filters: + if filterType == 'mesh': + continue + count += 1 + + # Create label and combobox for this filter + label = tk.Label(self.selectFrame, text=self.labels[filterType]) + label.grid(row=count+6, column=0, sticky=tk.W) + combobox = ttk.Combobox(self.selectFrame, state='readonly') + self.filterBoxes[filterType] = combobox + + # Set combobox items + f = selectedTally.filters[filterType] + if filterType in ['energyin', 'energyout']: + combobox['values'] = ['{0} to {1}'.format(*f.bins[i:i+2]) + for i in range(f.length)] + else: + combobox['values'] = [str(i) for i in f.bins] + + combobox.current(0) + combobox.grid(row=count+6, column=1, sticky=tk.W+tk.E) + combobox.bind('<>', self.redraw) + + self.redraw() + + def redraw(self, event=None): + basis = self.basisBox.current() + 1 + axial_level = self.axialBox.current() + 1 + is_mean = self.meanBox.current() + + # Get selected tally + tally_id = self.meshTallies[self.tallyBox.current()] + selectedTally = self.datafile.tallies[tally_id] # Create spec_list spec_list = [] - for tally in self.datafile.tallies[tally_id].filters.values(): - if tally.type == 'mesh': + for f in selectedTally.filters.values(): + if f.type == 'mesh': continue - index = self.boxes[tally.type].currentIndex() - spec_list.append((tally.type, index)) + index = self.filterBoxes[f.type].current() + spec_list.append((f.type, index)) # Take is_mean and convert it to an index of the score score_loc = is_mean if score_loc > 1: score_loc = 1 - if self.basis.currentText() == 'xy': + text = self.basisBox['values'][self.basisBox.current()] + if text == 'xy': matrix = np.zeros((self.nx, self.ny)) for i in range(self.nx): for j in range(self.ny): matrix[i,j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, j + 1, axial_level))], - self.scoreBox.currentIndex())[score_loc] - # Calculate relative uncertainty from absolute, if - # requested + self.scoreBox.current())[score_loc] + # Calculate relative uncertainty from absolute, if requested if is_mean == 2: # Take care to handle zero means when normalizing mean_val = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, j + 1, axial_level))], - self.scoreBox.currentIndex())[0] + self.scoreBox.current())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val else: matrix[i,j] = 0.0 - elif self.basis.currentText() == 'yz': + elif text == 'yz': matrix = np.zeros((self.ny, self.nz)) for i in range(self.ny): for j in range(self.nz): matrix[i,j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (axial_level, i + 1, j + 1))], - self.scoreBox.currentIndex())[score_loc] - # Calculate relative uncertainty from absolute, if - # requested + self.scoreBox.current())[score_loc] + # Calculate relative uncertainty from absolute, if requested if is_mean == 2: # Take care to handle zero means when normalizing mean_val = self.datafile.get_value(tally_id, spec_list + [('mesh', (axial_level, i + 1, j + 1))], - self.scoreBox.currentIndex())[0] + self.scoreBox.current())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val else: @@ -275,20 +247,18 @@ class AppForm(QMainWindow): for j in range(self.nz): matrix[i,j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, axial_level, j + 1))], - self.scoreBox.currentIndex())[score_loc] - # Calculate relative uncertainty from absolute, if - # requested + self.scoreBox.current())[score_loc] + # Calculate relative uncertainty from absolute, if requested if is_mean == 2: # Take care to handle zero means when normalizing mean_val = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, axial_level, j + 1))], - self.scoreBox.currentIndex())[0] + self.scoreBox.current())[0] if mean_val > 0.0: matrix[i,j] = matrix[i,j] / mean_val else: matrix[i,j] = 0.0 -# print spec_list # Clear the figure self.fig.clear() @@ -296,7 +266,7 @@ class AppForm(QMainWindow): # Make figure, set up color bar self.axes = self.fig.add_subplot(111) cax = self.axes.imshow(matrix.transpose(), vmin=0.0, vmax=matrix.max(), - interpolation="nearest", origin='lower') + interpolation='none', origin='lower') self.fig.colorbar(cax) self.axes.set_xticks([]) @@ -305,100 +275,44 @@ class AppForm(QMainWindow): # Draw canvas self.canvas.draw() + + def get_file_data(self, filename): + # Create StatePoint object and read in data + self.datafile = StatePoint(filename) + self.datafile.read_results() + self.datafile.generate_stdev() - def _update(self): - '''Updates widget to display new relevant comboboxes and figure data - ''' -# print 'Calling _update...' + # Find which tallies are mesh tallies + self.meshTallies = [] + for itally, tally in enumerate(self.datafile.tallies): + if 'mesh' in tally.filters: + self.meshTallies.append(itally) - # get current tally index - tally_id = self.tally_ids[self.tally.currentIndex()] + if not self.meshTallies: + tkMessageBox.showerror("Invalid StatePoint File", + "File does not contain mesh tallies!") + sys.exit(1) + - self.mesh = self.datafile.meshes[ - self.datafile.tallies[tally_id].filters['mesh'].bins[0] - 1] +if __name__ == '__main__': + # Hide root window + root = tk.Tk() + root.withdraw() - self.nx, self.ny, self.nz = self.mesh.dimension + # If no filename given as command-line argument, open file dialog + if len(sys.argv) < 2: + filename = tkFileDialog.askopenfilename(title='Select statepoint file', + initialdir='.') + else: + filename = sys.argv[1] - # Clear axial level combobox - self.axial_level.clear() + if filename: + # Check to make sure file exists + if not os.path.isfile(filename): + tkMessageBox.showerror("File not found", + "Could not find regular file: " + filename) + sys.exit(1) - # Repopulate axial level combobox based on current basis selection - if (self.basis.currentText() == 'xy'): - self.axial_level.addItems([str(i+1) for i in range(self.nz)]) - elif (self.basis.currentText() == 'yz'): - self.axial_level.addItems([str(i+1) for i in range(self.nx)]) - else: - self.axial_level.addItems([str(i+1) for i in range(self.ny)]) - - # Determine maximum value from current tally data set - self.maxvalue = self.datafile.tallies[tally_id].results.max() -# print self.maxvalue - - # Clear and hide old filter labels - for item in self.labelList: - item.clear() - - # Clear and hide old filter boxes - for j in self.labels: - self.boxes[j].clear() - self.boxes[j].setParent(None) - - self.update() - - def populate_boxes(self): -# print 'Calling populate_boxes...' - - # get current tally index - tally_id = self.tally_ids[self.tally.currentIndex()] - - n = 5 - labels = {'cell': 'Cell : ', - 'cellborn': 'Cell born: ', - 'surface': 'Surface: ', - 'material': 'Material: ', - 'universe': 'Universe: '} - - # For each filter in newly-selected tally, name a label and fill the - # relevant combobox with options - for element in self.tally_list[self.tally.currentIndex()]: - nextFilter = self.datafile.tallies[tally_id].filters[element] - if element == 'mesh': - continue - - label = QLabel(self.labels[element]) - self.labelList.append(label) - combobox = self.boxes[element] - self.grid.addWidget(label, n, 0) - self.grid.addWidget(combobox, n, 1) - n += 1 - -# print element - if element in ['cell', 'cellborn', 'surface', 'material', 'universe']: - combobox.addItems([str(i) for i in nextFilter.bins]) -# for i in nextFilter.bins: -# print i - - elif element == 'energyin' or element == 'energyout': - for i in range(nextFilter.length): - text = (str(nextFilter.bins[i]) + ' to ' + - str(nextFilter.bins[i+1])) - combobox.addItem(text) - - self.scoreBox.clear() - for item in self.tally_scores[self.tally.currentIndex()]: - self.scoreBox.addItem(str(item)) - self.grid.addWidget(self.score_label, n, 0) - self.grid.addWidget(self.scoreBox, n, 1) - - - -def main(): - app = QApplication(sys.argv) - form = AppForm(app.arguments()) - if form.all_good: - form.show() - app.exec_() - - -if __name__ == "__main__": - main() + app = MeshPlotter(root, filename) + root.deiconify() + root.mainloop() From 39a97d6be5dd34fc4a87123f89c891412e1e5e54 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 20 Jan 2014 19:49:44 -0500 Subject: [PATCH 30/72] Some PEP8 fixes. --- src/utils/plot_mesh_tally.py | 39 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/utils/plot_mesh_tally.py b/src/utils/plot_mesh_tally.py index d22e0e0b4f..fcd6613758 100755 --- a/src/utils/plot_mesh_tally.py +++ b/src/utils/plot_mesh_tally.py @@ -5,8 +5,8 @@ import os import sys -from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg as FigureCanvas -from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg as NavigationToolbar +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg +from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg from matplotlib.figure import Figure import matplotlib.pyplot as plt import numpy as np @@ -22,6 +22,7 @@ import tkFont import tkMessageBox import ttk + class MeshPlotter(tk.Frame): def __init__(self, parent, filename): tk.Frame.__init__(self, parent) @@ -54,11 +55,11 @@ class MeshPlotter(tk.Frame): # Create the Figure and Canvas self.dpi = 100 self.fig = Figure((5.0, 5.0), dpi=self.dpi) - self.canvas = FigureCanvas(self.fig, master=figureFrame) + self.canvas = FigureCanvasTkAgg(self.fig, master=figureFrame) self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) # Create the navigation toolbar, tied to the canvas - self.mpl_toolbar = NavigationToolbar(self.canvas, figureFrame) + self.mpl_toolbar = NavigationToolbar2TkAgg(self.canvas, figureFrame) self.mpl_toolbar.update() self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1) @@ -96,7 +97,7 @@ class MeshPlotter(tk.Frame): labelMean = tk.Label(self.selectFrame, text='Mean/Uncertainty:') labelMean.grid(row=3, column=0, sticky=tk.W) self.meanBox = ttk.Combobox(self.selectFrame, state='readonly') - self.meanBox['values'] = ('Mean', 'Absolute uncertainty', + self.meanBox['values'] = ('Mean', 'Absolute uncertainty', 'Relative uncertainty') self.meanBox.current(0) self.meanBox.grid(row=3, column=1, sticky=tk.W+tk.E) @@ -124,7 +125,8 @@ class MeshPlotter(tk.Frame): selectedTally = self.datafile.tallies[tally_id] # Get mesh for selected tally - self.mesh = self.datafile.meshes[selectedTally.filters['mesh'].bins[0] - 1] + self.mesh = self.datafile.meshes[ + selectedTally.filters['mesh'].bins[0] - 1] # Get mesh dimensions self.nx, self.ny, self.nz = self.mesh.dimension @@ -146,7 +148,7 @@ class MeshPlotter(tk.Frame): return # Update scores - self.scoreBox['values'] = selectedTally.scores # self.tally_scores[self.tallyBox.current()] + self.scoreBox['values'] = selectedTally.scores self.scoreBox.current(0) # Remove any filter labels/comboboxes that exist @@ -209,7 +211,7 @@ class MeshPlotter(tk.Frame): matrix = np.zeros((self.nx, self.ny)) for i in range(self.nx): for j in range(self.ny): - matrix[i,j] = self.datafile.get_value(tally_id, + matrix[i, j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, j + 1, axial_level))], self.scoreBox.current())[score_loc] # Calculate relative uncertainty from absolute, if requested @@ -219,15 +221,15 @@ class MeshPlotter(tk.Frame): spec_list + [('mesh', (i + 1, j + 1, axial_level))], self.scoreBox.current())[0] if mean_val > 0.0: - matrix[i,j] = matrix[i,j] / mean_val + matrix[i, j] = matrix[i, j] / mean_val else: - matrix[i,j] = 0.0 + matrix[i, j] = 0.0 elif text == 'yz': matrix = np.zeros((self.ny, self.nz)) for i in range(self.ny): for j in range(self.nz): - matrix[i,j] = self.datafile.get_value(tally_id, + matrix[i, j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (axial_level, i + 1, j + 1))], self.scoreBox.current())[score_loc] # Calculate relative uncertainty from absolute, if requested @@ -237,15 +239,15 @@ class MeshPlotter(tk.Frame): spec_list + [('mesh', (axial_level, i + 1, j + 1))], self.scoreBox.current())[0] if mean_val > 0.0: - matrix[i,j] = matrix[i,j] / mean_val + matrix[i, j] = matrix[i, j] / mean_val else: - matrix[i,j] = 0.0 + matrix[i, j] = 0.0 else: matrix = np.zeros((self.nx, self.nz)) for i in range(self.nx): for j in range(self.nz): - matrix[i,j] = self.datafile.get_value(tally_id, + matrix[i, j] = self.datafile.get_value(tally_id, spec_list + [('mesh', (i + 1, axial_level, j + 1))], self.scoreBox.current())[score_loc] # Calculate relative uncertainty from absolute, if requested @@ -255,10 +257,9 @@ class MeshPlotter(tk.Frame): spec_list + [('mesh', (i + 1, axial_level, j + 1))], self.scoreBox.current())[0] if mean_val > 0.0: - matrix[i,j] = matrix[i,j] / mean_val + matrix[i, j] = matrix[i, j] / mean_val else: - matrix[i,j] = 0.0 - + matrix[i, j] = 0.0 # Clear the figure self.fig.clear() @@ -275,7 +276,7 @@ class MeshPlotter(tk.Frame): # Draw canvas self.canvas.draw() - + def get_file_data(self, filename): # Create StatePoint object and read in data self.datafile = StatePoint(filename) @@ -292,7 +293,7 @@ class MeshPlotter(tk.Frame): tkMessageBox.showerror("Invalid StatePoint File", "File does not contain mesh tallies!") sys.exit(1) - + if __name__ == '__main__': # Hide root window From 65a25edf63b762a95608f859fbcbd886a19a5453 Mon Sep 17 00:00:00 2001 From: Adam Nelson Date: Wed, 22 Jan 2014 14:54:10 -0500 Subject: [PATCH 31/72] Reverted to python2 and added None Available text when no Filters are available. --- src/utils/plot_mesh_tally.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/utils/plot_mesh_tally.py b/src/utils/plot_mesh_tally.py index fcd6613758..fb5b8cb839 100755 --- a/src/utils/plot_mesh_tally.py +++ b/src/utils/plot_mesh_tally.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 """Python script to plot tally data generated by OpenMC.""" @@ -182,6 +182,12 @@ class MeshPlotter(tk.Frame): combobox.grid(row=count+6, column=1, sticky=tk.W+tk.E) combobox.bind('<>', self.redraw) + # If There are no filters, leave a 'None available' message + if count == 0: + count += 1 + label = tk.Label(self.selectFrame, text="None Available") + label.grid(row=count+6, column=0, sticky=tk.W) + self.redraw() def redraw(self, event=None): From 7cf22c6c323258f03b758f1c05968160ca6a227c Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 27 Jan 2014 20:36:31 -0500 Subject: [PATCH 32/72] Check for empty datapath in xsdir for conversion. --- src/utils/convert_xsdir.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/convert_xsdir.py b/src/utils/convert_xsdir.py index 32315f1ed5..edee1a66c7 100755 --- a/src/utils/convert_xsdir.py +++ b/src/utils/convert_xsdir.py @@ -35,8 +35,12 @@ class Xsdir(object): words = line.split() if words: if words[0].lower().startswith('datapath'): - index = line.index('=') - self.datapath = line[index+1:].strip() + if '=' in words[0]: + index = line.index('=') + self.datapath = line[index+1:].strip() + else: + if len(line.strip()) > 8: + self.datapath = line[8:].strip() else: self.f.seek(0) From ad1235db60cf90bd39c38473908d126131659dce Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 27 Jan 2014 20:37:48 -0500 Subject: [PATCH 33/72] Update one publication in documentation. --- docs/source/publications.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/publications.rst b/docs/source/publications.rst index c17e652c7f..df7ca639bc 100644 --- a/docs/source/publications.rst +++ b/docs/source/publications.rst @@ -48,8 +48,8 @@ Publications - Andrew R. Siegel, Kord Smith, Paul K. Romano, Benoit Forget, and Kyle Felker, "Multi-core performance studies of a Monte Carlo neutron transport code," - *Int. J. High Perform. Comput. Appl.* - (2013). ``_ + *Int. J. High Perform. Comput. Appl.*, **28** (1), 87--96 + (2014). ``_ - Paul K. Romano, Andrew R. Siegel, Benoit Forget, and Kord Smith, "Data decomposition of Monte Carlo particle transport simulations via tally From 854c86aa429d8c99612cec8ada56896fa3ada60a Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 31 Jan 2014 10:35:23 -0500 Subject: [PATCH 34/72] a custom source can now be read in from file --- src/source.F90 | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/source.F90 b/src/source.F90 index 231a23cc5c..4ec3587763 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -1,16 +1,17 @@ module source - use bank_header, only: Bank + use bank_header, only: Bank use constants - use error, only: fatal_error - use geometry, only: find_cell - use geometry_header, only: BASE_UNIVERSE + use error, only: fatal_error + use geometry, only: find_cell + use geometry_header, only: BASE_UNIVERSE use global - use math, only: maxwell_spectrum, watt_spectrum - use output, only: write_message - use particle_header, only: Particle - use random_lcg, only: prn, set_particle_seed - use string, only: to_str + use math, only: maxwell_spectrum, watt_spectrum + use output, only: write_message + use output_interface, only: BinaryOutput + use particle_header, only: Particle + use random_lcg, only: prn, set_particle_seed + use string, only: to_str #ifdef MPI use mpi @@ -28,8 +29,9 @@ contains integer(8) :: i ! loop index over bank sites integer(8) :: id ! particle id - + integer(8) :: itmp ! temporary integer type(Bank), pointer :: src => null() ! source bank site + type(BinaryOutput) :: sp ! statepoint/source binary file message = "Initializing source particles..." call write_message(6) @@ -38,8 +40,17 @@ contains ! Read the source from a binary file instead of sampling from some ! assumed source distribution - message = 'This feature is currently disabled and will be added back in.' - call fatal_error() + ! Open the binary file + call sp % file_open(path_source, 'r', serial = .false.) + + ! Read the file type + call sp % read_data(itmp, "filetype") + + ! Read in the source bank + call sp % read_source_bank() + + ! Close file + call sp % file_close() else ! Generation source sites from specified distribution in user input From e795b49f5c302b34b84161be382b11490bc2791c Mon Sep 17 00:00:00 2001 From: nhorelik Date: Fri, 31 Jan 2014 11:28:39 -0500 Subject: [PATCH 35/72] Updated data processing and viz documentation to include examples --- docs/source/_images/3dba.png | Bin 0 -> 15783 bytes docs/source/usersguide/input.rst | 2 +- docs/source/usersguide/processing.rst | 106 +++++++++++++++++++++++--- 3 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 docs/source/_images/3dba.png diff --git a/docs/source/_images/3dba.png b/docs/source/_images/3dba.png new file mode 100644 index 0000000000000000000000000000000000000000..69de65414492577ac5c9aa1e00382239093dc180 GIT binary patch literal 15783 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 NHT2Zq-LMY*{{WX%y`_ * [1]_ `Scipy `_ @@ -41,6 +41,55 @@ Plotting in 2D .. image:: ../_images/atr.png :height: 200px +See below for a simple example of a plots xml file that demonstrates the +capabilities of 2D slice plots. Here we assume that there is a ``geometry.xml`` +file containing 7 cells. + +.. code-block:: xml + + + + + + myplot + 0 0 + 10 10 + 2000 2000 + 0 0 0 + + + + + + + 1 3 4 5 6 + + + + + + +In this example, OpenMC will produce a plot named ``myplot.ppm`` when run in +plotting mode. The picture will be on the xy-plane, depicting the rectangle +between points (-5,-5) and (5,5) with 2000 pixels along each dimension. The +color of each pixel is determined by placing a particle at the center of that +pixel and using OpenMC's internal ``find_cell`` routine (the same one used for +particle tracking during simulation) to determine the cell and material at that +location. In this example, pixels are 10/2000=0.005 cm wide, so points will be +at (-4.9975,-4.9975), (-4.9950,-4.9975), (-4.9925,-4.9975), etc. This is pointed +out to demonstrate that this plot may miss any features smaller than 0.005 cm, +since they could exist between pixel centers. More pixels can be used to resolve +finer features, but could result in larger files. + +The ``background``, ``col_spec``, and ``mask`` elements define how to set pixel +colors based on the cell ids at each pixel center. In this example, RGB colors +are specified for cells 1,2,3,4, and 7, a random color will be assigned to cells +5 and 6, and a black background color (``rgb="0 0 0"``) will be applied to +locations where no cell is defined. However, the ``mask`` element here says that +only cells 1,3,4,5, and 6 should be displayed, with other cells taking a white +color (``rgb="255 255 255"``), which overrides the ``col_spec`` for cell 2 and +the random color assigned to cell 7. + After running OpenMC to obtain PPM files, images should be saved to another format before using them elsewhere. This cuts down the size of the file by orders of magnitude. Most image viewers and editors that can view PPM images @@ -53,7 +102,7 @@ Ubuntu: ``sudo apt-get install imagemagick``). Images are then converted like: .. code-block:: sh - convert plot.ppm plot.png + convert myplot.ppm myplot.png Plotting in 3D -------------- @@ -61,10 +110,37 @@ Plotting in 3D .. image:: ../_images/3dgeomplot.png :height: 200px +See below for a simple example of a plots xml file that demonstrates the +capabilities of 3D voxel plots. + +.. code-block:: xml + + + + + + myplot + 0 0 0 + 10 10 10 + 500 500 500 + + + + +Voxel plots are built the same way 2D slice plots are, by determining the cell +or material id of a particle at the center of each voxel. In this example, the +space covered is the cube between the points (-5,-5,-5) and (5,5,5), with voxel +centers 10/500 = 0.02 cm apart. The binary VOXEL files that are produced do not +specify any color - instead containing only material or cell ids (material id +in this example) - and thus the ``background``, ``col_spec``, and ``mask`` +elements are not used. If no cell is found at a voxel center, an id of -1 is +stored. + The binary VOXEL files output by OpenMC can not be viewed directly by any existing viewers. In order to view them, they must be converted into a standard -mesh format that can be viewed in ParaView, Visit, etc. The provided utility -voxel.py accomplishes this for SILO: +mesh format that can be viewed in ParaView, Visit, etc. This typically will +compress the size of the file significantly. The provided utility voxel.py +accomplishes this for SILO: .. code-block:: sh @@ -88,13 +164,21 @@ or Users can process the binary into any other format if desired by following the example of voxel.py. For the binary file structure, see :ref:`devguide_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 +doing this will depend on the 3D viewer, but should be straightforward. + +.. image:: ../_images/3dba.png + :height: 200px + .. note:: 3D voxel plotting can be very computer intensive for the viewing program (Visit, Paraview, etc.) if the number of voxels is large (>10 million or so). Thus if you want an accurate picture that renders smoothly, consider using only one voxel in a certain direction. For - instance, the 3D pin lattice figure above was generated with a - 500x500x1 voxel mesh, which allows for resolution of the cylinders - without wasting too many voxels on the axial dimension. + instance, the 3D pin lattice figure at the beginning of this section + was generated with a 500x500x1 voxel mesh, which allows for resolution + of the cylinders without wasting too many voxels on the axial + dimension. ------------------- From cbe6560ba1d6e85d47f35a5645dfa0fac928ec8d Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 31 Jan 2014 11:34:07 -0500 Subject: [PATCH 36/72] message written when reading in source --- src/source.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/source.F90 b/src/source.F90 index 4ec3587763..85ef87d65f 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -40,6 +40,9 @@ contains ! Read the source from a binary file instead of sampling from some ! assumed source distribution + message = 'Reading source file from ' // trim(path_source) // '...' + call write_message(6) + ! Open the binary file call sp % file_open(path_source, 'r', serial = .false.) From 5d0b98835d2ca1101b4d11a273bfa1ff12530ff7 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 17 Feb 2014 17:30:02 -0500 Subject: [PATCH 37/72] Extract files to subdirectories. Add pre-generated cross_sections.xml. --- data/cross_sections_nndc.xml | 1716 ++++++++++++++++++++++++++++++++++ data/get_nndc_data.py | 17 +- 2 files changed, 1727 insertions(+), 6 deletions(-) create mode 100644 data/cross_sections_nndc.xml diff --git a/data/cross_sections_nndc.xml b/data/cross_sections_nndc.xml new file mode 100644 index 0000000000..2e421d7ab0 --- /dev/null +++ b/data/cross_sections_nndc.xml @@ -0,0 +1,1716 @@ + + + ascii + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index 0f943d684c..c9279add6b 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -2,7 +2,8 @@ from __future__ import print_function import os -import os.path +import shutil +import subprocess import tarfile import urllib2 @@ -31,6 +32,7 @@ for f in files: if os.path.exists(f): if os.path.getsize(f) == file_size: print('Skipping ' + f) + filesComplete.append(f) continue else: overwrite = raw_input('Overwrite {0}? ([y]/n) '.format(f)) @@ -58,10 +60,13 @@ for f in files: continue # Extract files + suffix = f[f.rindex('-') + 1:].rstrip('.tar.gz') with tarfile.open(f, 'r') as tgz: - tgz.extractall(path='nndc') + print('Extracting {0}...'.format(f)) + tgz.extractall(path='nndc/' + suffix) - # Give xsdir a unique name - xsdir = 'nndc/xsdir' - if os.path.exists(xsdir): - os.rename(xsdir, xsdir + '_' + f.strip('.tar.gz')) +# ============================================================================== +# COPY CROSS_SECTIONS.XML + +print('Copying cross_sections_nndc.xml...') +shutil.copyfile('cross_sections_nndc.xml', 'nndc/cross_sections.xml') From 6edd3934fbb3071f5f98c005a72ba0c4171b17ae Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 17 Feb 2014 17:46:10 -0500 Subject: [PATCH 38/72] Update installation guide with information about NNDC data. --- docs/source/usersguide/install.rst | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 164b0151be..ff33d9a6c6 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -264,10 +264,27 @@ 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_. The TALYS-based evaluated nuclear data library, TENDL_, is +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. +Using ENDF/B-VII.1 Cross Sections from NNDC +------------------------------------------- + +The NNDC_ provides ACE data from the ENDF/B-VII.1 neutron and thermal scattering +sublibraries at four temperatures processed using NJOY_. To use this data with +OpenMC, a script is provided with OpenMC that will automatically download, +extract, and set up a confiuration file: + +.. code-block:: sh + + 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``. + Using JEFF Cross Sections from OECD/NEA --------------------------------------- @@ -314,6 +331,8 @@ 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. +.. _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 .. _JEFF: http://www.oecd-nea.org/dbdata/jeff/ .. _here: http://www.oecd-nea.org/dbdata/pubs/jeff312-cd.html From 1fb2bb96f6c31ac33bfde36b33a48929906eebf1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 18 Feb 2014 17:47:20 -0500 Subject: [PATCH 39/72] Updated data/readme.rst. --- data/readme.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/readme.rst b/data/readme.rst index d975723b52..03685491d0 100644 --- a/data/readme.rst +++ b/data/readme.rst @@ -15,6 +15,9 @@ work with a few common cross section sources. - **cross_sections_ascii.xml** -- This file matches ENDF/B-VII.0 cross sections distributed with MCNP5 / MCNP6 beta. +- **cross_sections_nndc.xml** -- This file matches ENDF/B-VII.1 cross sections + distributed from the `NNDC website`_. + - **cross_sections_serpent.xml** -- This file matches ENDF/B-VII.0 cross sections distributed with Serpent 1.1.7. @@ -31,3 +34,4 @@ element in your settings.xml, or set the CROSS_SECTIONS environment variable to the full path of the cross_sections.xml file. .. _user's guide: http://mit-crpg.github.io/openmc/usersguide/install.html#cross-section-configuration +.. _NNDC website: http://www.nndc.bnl.gov/endf/b7.1/acefiles.html From b102b71809a3f9baf62046ef8e1bd291bedad8e5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 18 Feb 2014 17:55:40 -0500 Subject: [PATCH 40/72] Added HDF5 files to .gitignore. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 9f720f9894..2dae450d08 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,6 @@ src/templates/*.f90 # Test results error file results_error.dat + +# HDF5 files +*.h5 From a96c6ad47463aa26cbbc13c01c9b99f46b5f4f75 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 19 Feb 2014 18:02:18 -0500 Subject: [PATCH 41/72] Ask user to delete downloaded tgz files. --- data/get_nndc_data.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index c9279add6b..0fd1a98894 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -4,6 +4,7 @@ from __future__ import print_function import os import shutil import subprocess +import sys import tarfile import urllib2 @@ -70,3 +71,19 @@ for f in files: print('Copying cross_sections_nndc.xml...') shutil.copyfile('cross_sections_nndc.xml', 'nndc/cross_sections.xml') + +# ============================================================================== +# PROMPT USER TO DELETE .TAR.GZ FILES + +# Ask user to delete +if sys.version_info[0] < 3: + response = raw_input('Delete *.tar.gz files? ([y]/n) ') +else: + response = input('Delete *.tar.gz files? ([y]/n) ') + +# 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) From 3f6913ba6ed110f324d1a0afabe4b68a368f4dd1 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 19 Feb 2014 18:12:38 -0500 Subject: [PATCH 42/72] Make get_nndc_data.py compatible with Python 3. --- data/get_nndc_data.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index 0fd1a98894..2e76401a4b 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -6,7 +6,11 @@ import shutil import subprocess import sys import tarfile -import urllib2 + +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen baseUrl = 'http://www.nndc.bnl.gov/endf/b7.1/aceFiles/' files = ['ENDF-B-VII.1-neutron-293.6K.tar.gz', @@ -23,7 +27,7 @@ filesComplete = [] for f in files: # Establish connection to URL url = baseUrl + f - req = urllib2.urlopen(url) + req = urlopen(url) # Get file size from header file_size = int(req.info().getheaders('Content-Length')[0]) @@ -36,7 +40,10 @@ for f in files: filesComplete.append(f) continue else: - overwrite = raw_input('Overwrite {0}? ([y]/n) '.format(f)) + 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 From 6dda6baeb3adee9497f70c09482d4d4e39314356 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Thu, 20 Feb 2014 16:32:28 -0500 Subject: [PATCH 43/72] updated documentation --- docs/source/usersguide/input.rst | 49 +++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 28ba30c23e..362197439d 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -348,8 +348,10 @@ attributes/sub-elements: The ```` element indicates at what batches a state point file should be written. A state point file can be used to restart a run or to get -tally results at any batch. This element has the following -attributes/sub-elements: +tally results at any batch. The default behavior when using this tag is to +write out the source bank in the state_point file. This behavior can be +customized by using the ```` element. This element has the +following attributes/sub-elements: :batches: A list of integers separated by spaces indicating at what batches a state @@ -364,19 +366,52 @@ attributes/sub-elements: *Default*: None +```` Element +-------------------------- + +The ```` element indicates at what batches the source bank +should be written. The source bank can be either written out within a state +point file or separately in a source point file. This element has the following +attributes/sub-elements: + + :batches: + A list of integers separated by spaces indicating at what batches a state + point file should be written. It should be noted that if source_separate + tag is not set to "true", this list must be a subset of state point batches. + + *Default*: Last batch only + + :interval: + A single integer :math:`n` indicating that a state point should be written + every :math:`n` batches. This option can be given in lieu of listing + batches explicitly. It should be noted that if source_separate tag is not + set to "true", this value should produce a list of batches that is a subset + of state point batches. + + *Default*: None + :source_separate: - If this element is set to "true", a separate binary source file will be + If this element is set to "true", a separate binary source point file will be written. Otherwise, the source sites will be written in the state point directly. *Default*: false - :source_write: If this element is set to "false", source sites are not written - to the state point file. This can substantially reduce the size of state - points if large numbers of particles per batch are used. + :source_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. *Default*: true + :overwrite_latest: + If this element is set to "true", a source point file containing + the source bank will be written out to a separate file named + ``source.binary`` or ``source.h5`` depending on if HDF5 is enabled. + This file will be overwritten at every single batch so that the latest + source bank will be available. It should be noted that a user can set both + this element to "true" and specify batches to write a permanent source bank. + ```` Element ------------------------------ @@ -1052,7 +1087,7 @@ sub-elements: the PNG format can often times reduce the file size by orders of magnitude without any loss of image quality. Likewise, high-resolution voxel files produced by OpenMC can be quite large, - but the equivalent SILO files will be significantly smaller. + but the equivalent SILO files will by significantly smaller. *Default*: "slice" From 9acc8ff366969813276d71bc59eb451e13bca7fa Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Thu, 20 Feb 2014 17:48:13 -0500 Subject: [PATCH 44/72] deleted unused data file --- tests/test_sourcepoint_latest/results_test.dat | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 tests/test_sourcepoint_latest/results_test.dat diff --git a/tests/test_sourcepoint_latest/results_test.dat b/tests/test_sourcepoint_latest/results_test.dat deleted file mode 100644 index 00a65f913b..0000000000 --- a/tests/test_sourcepoint_latest/results_test.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.011353E-01 2.854556E-03 From e3a45bce3b090949ad2b4901f64ca48f55af3a1a Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Thu, 20 Feb 2014 18:32:51 -0500 Subject: [PATCH 45/72] updated results file for source point latest test --- tests/test_sourcepoint_latest/results_true.dat | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_sourcepoint_latest/results_true.dat b/tests/test_sourcepoint_latest/results_true.dat index 748df0351e..00a65f913b 100644 --- a/tests/test_sourcepoint_latest/results_true.dat +++ b/tests/test_sourcepoint_latest/results_true.dat @@ -1,3 +1,2 @@ k-combined: -0.000000E+00 0.000000E+00 --9.438655E-02 -4.436810E+00 -2.416825E+00 +3.011353E-01 2.854556E-03 From e63746cdb8247308e9cd5a64ba07029cbf402b7b Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 21 Feb 2014 10:21:32 -0500 Subject: [PATCH 46/72] added cleanup script to remove all binary files from directories --- tests/cleanup.bash | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 tests/cleanup.bash diff --git a/tests/cleanup.bash b/tests/cleanup.bash new file mode 100755 index 0000000000..d23b166a26 --- /dev/null +++ b/tests/cleanup.bash @@ -0,0 +1,14 @@ +# 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. +for i in ./*; do + if [ -d "$i" ]; then + cd $i + rm -f *.binary *.h5 + cd .. + fi +done From d1a42b79ce8b6c485ed80b025d5df70aa8bf0d26 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 21 Feb 2014 10:50:18 -0500 Subject: [PATCH 47/72] fixed deleting binary files --- tests/test_sourcepoint_restart/test_sourcepoint_restart.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_sourcepoint_restart/test_sourcepoint_restart.py b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py index a4387405b8..9b2e3185f9 100644 --- a/tests/test_sourcepoint_restart/test_sourcepoint_restart.py +++ b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py @@ -126,7 +126,7 @@ def test_results_serial(): def teardown(): output = glob.glob(pwd + '/statepoint.7.*') - output += glob.glob(pwd + '/sourcepoint.7.*') + output += glob.glob(pwd + '/source.7.*') output.append(pwd + '/results_test.dat') for f in output: if os.path.exists(f): From 411aea322dddb42ca66975e600d7a7de6490e971 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 21 Feb 2014 14:14:56 -0500 Subject: [PATCH 48/72] restructured sourcepoint restart test --- tests/test_sourcepoint_restart/results.py | 2 +- .../test_sourcepoint_restart/results_true.dat | 3378 ++++++++--------- tests/test_sourcepoint_restart/settings.xml | 4 +- .../test_sourcepoint_restart.py | 46 +- 4 files changed, 1713 insertions(+), 1717 deletions(-) diff --git a/tests/test_sourcepoint_restart/results.py b/tests/test_sourcepoint_restart/results.py index d0b3a55e04..f4c32a893f 100644 --- a/tests/test_sourcepoint_restart/results.py +++ b/tests/test_sourcepoint_restart/results.py @@ -11,7 +11,7 @@ import statepoint if len(sys.argv) > 1: sp = statepoint.StatePoint(sys.argv[1]) else: - sp = statepoint.StatePoint('statepoint.7.binary') + sp = statepoint.StatePoint('statepoint.10.binary') sp.read_results() # extract tally results and convert to vector diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat index f2b97af34d..ad94d76457 100644 --- a/tests/test_sourcepoint_restart/results_true.dat +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -1,16 +1,16 @@ k-combined: -0.000000E+00 0.000000E+00 +3.011353E-01 2.854556E-03 tally 1: -3.000000E-03 -5.000000E-06 -1.350207E-03 -9.349751E-07 --7.677912E-05 -4.241317E-07 --3.387424E-04 -1.343262E-07 -1.215119E-03 -9.127703E-07 +8.000000E-03 +1.600000E-05 +6.192275E-04 +1.370333E-06 +-8.662964E-04 +7.279501E-07 +-1.041312E-05 +3.860351E-07 +4.821963E-03 +5.791161E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -41,16 +41,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -9.000000E-06 -1.889613E-04 -3.570639E-08 -2.320049E-04 -5.382627E-08 -1.491658E-03 -2.225044E-06 -1.817087E-03 -2.362232E-06 +1.100000E-02 +3.300000E-05 +4.387087E-03 +7.410082E-06 +1.860042E-03 +2.867148E-06 +3.399756E-03 +5.784483E-06 +5.116596E-03 +6.752240E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -59,6 +59,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.028119E-04 +9.169503E-08 +1.000000E-03 +1.000000E-06 +5.438971E-04 +2.958240E-07 +-5.626399E-05 +3.165637E-09 +-4.136011E-04 +1.710658E-07 +6.013419E-04 +3.616120E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -69,6 +81,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.000000E-03 +1.300000E-05 +3.577754E-03 +6.496319E-06 +1.890975E-03 +1.788514E-06 +9.937593E-04 +4.944395E-07 +1.803302E-03 +1.626040E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -139,38 +161,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 -8.000000E-03 -4.000000E-05 -1.075518E-03 -3.528151E-06 -2.716562E-03 -1.166700E-05 -2.288359E-03 -2.867176E-06 -3.411472E-03 -8.255676E-06 +1.600000E-02 +6.600000E-05 +5.883798E-03 +1.472349E-05 +5.964243E-03 +1.758637E-05 +4.341846E-03 +6.731059E-06 +7.631087E-03 +1.536471E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -201,56 +201,56 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.300000E-02 +3.900000E-05 +1.678255E-03 +1.856663E-06 +3.802861E-03 +6.462034E-06 +-4.813541E-05 +2.987521E-06 +5.422032E-03 +6.871180E-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.028119E-04 +9.169503E-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 -1.700000E-05 -3.530317E-04 -1.159034E-06 -2.030571E-03 -4.217108E-06 -9.628222E-04 -4.775997E-07 -1.817087E-03 -2.362232E-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.000000E-03 -2.000000E-06 -4.849895E-04 -9.196474E-07 -3.794711E-04 -4.964654E-07 -8.024923E-04 -3.245502E-07 -1.237485E-03 -9.676259E-07 +5.000000E-06 +1.710047E-03 +2.156886E-06 +7.353287E-04 +1.688467E-06 +1.623935E-03 +1.552163E-06 +2.439928E-03 +1.509909E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -321,16 +321,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.000000E-03 -2.500000E-05 -1.464813E-03 -1.309819E-06 -8.835792E-04 -6.990079E-07 -3.177051E-03 -5.159010E-06 -3.366739E-03 -5.697495E-06 +1.400000E-02 +4.200000E-05 +4.680073E-03 +4.832992E-06 +9.241957E-04 +9.879528E-07 +2.560088E-03 +5.615638E-06 +7.279260E-03 +1.195027E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -339,8 +339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.009839E-04 -9.059133E-08 +5.992726E-04 +1.795675E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,18 +361,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.000000E-03 -5.000000E-06 -1.881176E-03 -2.067359E-06 -2.892742E-04 -1.089921E-07 --9.095343E-04 -4.184955E-07 -1.237485E-03 -9.676259E-07 -0.000000E+00 -0.000000E+00 +9.000000E-03 +1.900000E-05 +4.178982E-03 +4.155519E-06 +3.346853E-03 +6.203486E-06 +1.267269E-03 +3.209807E-06 +3.940659E-03 +3.581639E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -381,6 +379,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.028119E-04 +9.169503E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -401,16 +401,16 @@ tally 1: 0.000000E+00 3.121671E-04 9.744828E-08 -1.000000E-03 -1.000000E-06 -8.504018E-04 -7.231831E-07 -5.847747E-04 -3.419615E-07 -2.618879E-04 -6.858528E-08 -6.243342E-04 -3.897931E-07 +6.000000E-03 +1.200000E-05 +-2.469438E-05 +1.110126E-06 +6.006714E-04 +6.607712E-07 +1.988388E-03 +1.233934E-06 +3.924085E-03 +4.427425E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -481,16 +481,26 @@ tally 1: 7.229539E-07 3.009839E-04 9.059133E-08 -9.000000E-03 -4.500000E-05 -5.336900E-03 -1.424486E-05 -3.093810E-03 -5.161998E-06 -2.879582E-03 -4.229500E-06 -4.002256E-03 -8.501473E-06 +2.200000E-02 +1.140000E-04 +1.396444E-02 +4.152030E-05 +9.394828E-03 +1.953841E-05 +7.823718E-03 +1.254396E-05 +1.002065E-02 +2.139199E-05 +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.056238E-04 +3.667801E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,26 +521,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.600000E-02 -1.280000E-04 -4.224331E-03 -9.782839E-06 -3.223102E-03 -5.736299E-06 -2.099435E-03 -2.209094E-06 -7.346629E-03 -2.710118E-05 +3.200000E-02 +2.140000E-04 +1.152532E-02 +2.810551E-05 +8.134203E-03 +1.622011E-05 +3.372833E-03 +2.907244E-06 +1.577229E-02 +5.159641E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -561,896 +561,16 @@ tally 1: 7.222357E-08 0.000000E+00 0.000000E+00 -4.000000E-03 -1.000000E-05 -3.193650E-03 -5.924989E-06 -2.012845E-03 -2.064950E-06 -1.030603E-03 -6.338801E-07 -3.656540E-03 -7.357018E-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 -1.000000E-05 -5.813261E-04 -2.815138E-07 --5.070667E-04 -2.458625E-07 --5.126590E-04 -1.937439E-07 -2.162803E-03 -2.798572E-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 -1.130000E-04 -3.838937E-03 -7.695404E-06 -3.258655E-03 -8.032841E-06 -7.822538E-04 -5.238913E-06 -7.034462E-03 -2.505476E-05 -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.121671E-04 -9.744828E-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.200000E-02 -7.400000E-05 -3.703109E-03 -7.450207E-06 -1.172561E-03 -6.983603E-06 -9.775789E-04 -3.396069E-06 -5.183826E-03 -1.446969E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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 -1.300000E-04 -5.461842E-03 -1.700217E-05 --1.194197E-03 -2.155631E-06 --4.418175E-04 -1.630461E-07 -7.647613E-03 -2.954714E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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 -2.288086E-03 -4.056180E-06 -2.803000E-03 -6.212022E-06 -2.253444E-03 -3.299961E-06 -3.043389E-03 -5.316010E-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.121671E-04 -9.744828E-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 --1.469649E-03 -6.515270E-06 -3.164874E-03 -5.070423E-06 --7.834805E-04 -2.163764E-06 -3.991073E-03 -8.036254E-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.578244E-04 -4.327330E-07 -1.490994E-04 -2.223064E-08 --2.750809E-04 -7.566948E-08 -6.243342E-04 -3.897931E-07 -0.000000E+00 -0.000000E+00 -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 -4.192244E-04 -2.440829E-06 -2.290352E-04 -2.955670E-08 -8.117866E-05 -3.786185E-09 -4.292057E-03 -9.213941E-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 -7.300000E-05 -4.050236E-03 -2.014829E-05 -3.589950E-03 -7.394738E-06 -3.301506E-03 -7.271497E-06 -5.574275E-03 -2.054932E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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 -6.865027E-04 -3.148594E-06 -1.123135E-03 -7.553928E-07 --6.937330E-04 -5.371067E-07 -1.226302E-03 -7.521585E-07 -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.009839E-04 -9.059133E-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.500000E-05 -4.720935E-03 -1.123308E-05 -2.531138E-03 -3.881873E-06 -1.207797E-03 -1.104982E-06 -3.991073E-03 -8.036254E-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.121671E-04 -9.744828E-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.805904E-03 -3.261288E-06 -2.000000E-03 -4.000000E-06 -1.904158E-03 -3.625820E-06 -1.722222E-03 -2.966050E-06 -1.472450E-03 -2.168109E-06 -0.000000E+00 -0.000000E+00 -2.200000E-02 -2.440000E-04 -8.997789E-03 -4.069446E-05 -6.038380E-03 -2.892796E-05 -3.188711E-03 -1.706565E-05 -1.071337E-02 -5.765023E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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.121671E-04 -9.744828E-08 -1.000000E-03 -1.000000E-06 -9.994298E-04 -9.988600E-07 -9.982900E-04 -9.965829E-07 -9.965814E-04 -9.931746E-07 -0.000000E+00 -0.000000E+00 -1.100000E-02 -6.100000E-05 -1.446955E-03 -5.203867E-06 -1.233625E-03 -3.439950E-06 -2.123440E-03 -6.107272E-06 -3.366739E-03 -5.697495E-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.121671E-04 -9.744828E-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.600000E-05 -3.062793E-03 -9.380701E-06 -2.224463E-03 -4.948238E-06 -2.136221E-03 -4.563441E-06 -3.009839E-03 -9.059133E-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 -3.009839E-04 -9.059133E-08 -1.000000E-03 -1.000000E-06 -1.071043E-04 -1.147134E-08 --4.827930E-04 -2.330891E-07 --1.575849E-04 -2.483301E-08 -3.009839E-04 -9.059133E-08 -8.000000E-03 -3.400000E-05 -3.469885E-03 -1.204729E-05 -1.706287E-04 -4.770906E-06 -6.093070E-04 -3.706122E-07 -3.656540E-03 -7.357018E-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 -3.009839E-04 -9.059133E-08 -1.000000E-03 -1.000000E-06 -9.276723E-04 -8.605758E-07 -7.908638E-04 -6.254655E-07 -6.043224E-04 -3.652056E-07 -3.009839E-04 -9.059133E-08 -1.500000E-02 -1.130000E-04 -7.760317E-03 -3.043383E-05 -3.486730E-03 -6.079687E-06 -3.192886E-03 -5.300269E-06 -5.206192E-03 -1.357459E-05 -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.121671E-04 -9.744828E-08 -1.000000E-03 -1.000000E-06 --2.723974E-04 -7.420035E-08 --3.886995E-04 -1.510873E-07 -3.580662E-04 -1.282114E-07 -3.121671E-04 -9.744828E-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.800000E-02 -1.620000E-04 -3.109478E-03 -5.403087E-06 -7.420753E-04 -5.610775E-06 --1.972647E-03 -2.210831E-06 -7.056828E-03 -2.499410E-05 -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.253181E-04 -4.803845E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.203936E-03 -1.449461E-06 -2.000000E-03 -4.000000E-06 -1.876080E-03 -3.519675E-06 -1.640561E-03 -2.691440E-06 -1.316649E-03 -1.733565E-06 -0.000000E+00 -0.000000E+00 -2.000000E-03 -2.000000E-06 -1.656132E-03 -1.374995E-06 -1.062492E-03 -5.867156E-07 -3.772098E-04 -1.191478E-07 -3.054572E-03 -4.820460E-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.131510E-04 -1.880396E-07 -1.000000E-03 -1.000000E-06 --5.333309E-04 -2.844418E-07 --7.333726E-05 -5.378353E-09 -4.207423E-04 -1.770241E-07 -6.243342E-04 -3.897931E-07 -0.000000E+00 -0.000000E+00 -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.583270E-03 -3.252679E-06 --3.064030E-04 -4.947979E-06 -1.080830E-03 -8.869004E-07 -2.452604E-03 -3.008634E-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.131510E-04 -1.880396E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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 -9.000000E-05 -5.530475E-03 -1.529320E-05 -2.705859E-03 -5.488988E-06 -3.266400E-03 -5.350316E-06 -7.112744E-03 -3.142384E-05 -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.121671E-04 -9.744828E-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 -2.250000E-04 -7.403253E-03 -3.016107E-05 -5.420662E-03 -1.983684E-05 -2.936582E-03 -4.922875E-06 -8.238398E-03 -3.592572E-05 -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.253181E-04 -4.803845E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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.100000E-05 -3.184470E-03 -6.981764E-06 -3.311201E-03 -5.530952E-06 -2.002853E-03 -2.093961E-06 -3.968707E-03 -8.234052E-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.131510E-04 -1.880396E-07 -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.365012E-04 -8.770346E-07 -1.000000E-03 -1.000000E-06 -9.677184E-04 -9.364790E-07 -9.047184E-04 -8.185155E-07 -8.140422E-04 -6.626647E-07 -0.000000E+00 -0.000000E+00 1.000000E-02 -6.800000E-05 -1.266540E-03 -1.529518E-06 --3.692635E-04 -9.672879E-07 -1.689168E-03 -1.866327E-06 -4.035806E-03 -1.215361E-05 +2.400000E-05 +7.364203E-03 +1.356715E-05 +3.578025E-03 +3.952934E-06 +4.991388E-04 +8.277617E-07 +6.660384E-03 +1.078466E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1482,15 +602,15 @@ tally 1: 0.000000E+00 0.000000E+00 1.200000E-02 -8.000000E-05 -3.410989E-03 -6.495638E-06 -8.888873E-04 -4.027331E-06 -6.828019E-04 -1.205374E-06 -4.894025E-03 -1.211286E-05 +4.800000E-05 +7.631639E-04 +2.262064E-06 +-3.448925E-04 +1.205043E-06 +-3.259600E-03 +4.482377E-06 +5.459930E-03 +8.074061E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1499,8 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -6.243342E-04 -3.897931E-07 +5.989596E-04 +1.793791E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1521,16 +641,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.100000E-02 -7.300000E-05 -3.976139E-03 -9.939638E-06 -1.462256E-03 -2.640635E-06 -2.026283E-03 -3.803255E-06 -4.604224E-03 -1.067567E-05 +2.600000E-02 +1.820000E-04 +5.527216E-03 +9.741352E-06 +6.494815E-03 +1.331417E-05 +2.487729E-04 +9.009137E-06 +1.212394E-02 +3.763410E-05 +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.111267E-04 +2.768274E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1549,28 +679,40 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.029518E-04 -8.153220E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.400000E-04 +8.583494E-03 +1.976212E-05 +2.895567E-03 +1.210757E-05 +3.612948E-03 +7.374439E-06 +1.090179E-02 +2.581708E-05 +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.982887E-04 +8.897613E-08 1.000000E-03 1.000000E-06 -9.531896E-04 -9.085703E-07 -8.628555E-04 -7.445196E-07 -7.353151E-04 -5.406883E-07 +9.407668E-04 +8.850421E-07 +8.275632E-04 +6.848608E-07 +6.703954E-04 +4.494300E-07 +5.965773E-04 +3.559045E-07 0.000000E+00 0.000000E+00 -3.000000E-03 -9.000000E-06 -1.969150E-03 -3.877552E-06 -1.225946E-03 -1.502944E-06 -1.367753E-03 -1.870749E-06 -1.504920E-03 -2.264783E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1579,278 +721,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.009839E-04 -9.059133E-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 -2.600000E-05 --3.423632E-04 -2.476095E-06 -2.144575E-03 -2.456203E-06 --1.035289E-03 -3.066348E-06 -3.678906E-03 -6.769426E-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 -8.000000E-03 -4.000000E-05 -5.417577E-03 -1.889555E-05 -2.293131E-03 -3.303280E-06 -6.729020E-04 -3.229421E-07 -5.206192E-03 -1.357459E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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 -7.262770E-03 -3.815108E-05 -4.265119E-03 -1.234667E-05 -2.317314E-03 -2.894105E-06 -3.355556E-03 -5.998148E-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.019679E-04 -3.623653E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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 -5.774620E-04 -3.334623E-07 -3.789825E-04 -1.436277E-07 --1.360725E-04 -1.851572E-08 -1.805904E-03 -3.261288E-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 -8.000000E-03 -3.400000E-05 --1.376386E-04 -3.479848E-08 --1.136484E-03 -8.968777E-07 --6.910241E-04 -3.879057E-07 -3.344373E-03 -6.674880E-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.131510E-04 -1.880396E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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.617203E-03 -1.222945E-05 -1.595056E-03 -1.290135E-06 --6.608603E-04 -1.154300E-06 -4.024623E-03 -1.056015E-05 -0.000000E+00 -0.000000E+00 -0.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.171894E-04 -4.717122E-08 --4.292432E-04 -1.842497E-07 -3.001713E-04 -9.010283E-08 -3.121671E-04 -9.744828E-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.000000E-03 -1.700000E-05 -3.376537E-03 -6.867510E-06 -1.576049E-03 -1.242043E-06 -6.774572E-04 -3.539001E-07 -2.787137E-03 -5.137331E-06 +2.700000E-02 +1.750000E-04 +1.012358E-02 +2.467953E-05 +1.474435E-03 +4.801327E-06 +4.424179E-04 +1.661987E-06 +1.306491E-02 +3.990010E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1882,15 +762,1135 @@ tally 1: 0.000000E+00 0.000000E+00 1.300000E-02 -8.900000E-05 -3.214925E-03 -6.383584E-06 -1.681554E-03 -1.482668E-06 -1.811720E-03 -1.724962E-06 -4.269691E-03 -9.774105E-06 +3.900000E-05 +2.894580E-03 +7.413903E-06 +4.782406E-03 +8.519965E-06 +4.310430E-03 +7.496343E-06 +6.648334E-03 +9.824958E-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.121671E-04 +9.744828E-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.800000E-02 +8.600000E-05 +8.003652E-04 +9.381590E-06 +3.457615E-03 +5.280629E-06 +-1.063124E-03 +2.234064E-06 +8.804401E-03 +1.982338E-05 +0.000000E+00 +0.000000E+00 +0.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.578244E-04 +4.327330E-07 +1.490994E-04 +2.223064E-08 +-2.750809E-04 +7.566948E-08 +6.243342E-04 +3.897931E-07 +0.000000E+00 +0.000000E+00 +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 +4.167281E-04 +3.806472E-06 +3.031990E-03 +4.457402E-06 +-2.246079E-05 +6.478142E-07 +1.000360E-02 +2.105336E-05 +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.982887E-04 +8.897613E-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.900000E-02 +9.700000E-05 +6.458852E-03 +2.279404E-05 +3.627440E-03 +7.908704E-06 +3.946071E-03 +7.531590E-06 +8.885213E-03 +2.445611E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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.200000E-05 +5.376132E-03 +1.377498E-05 +3.290467E-03 +4.921168E-06 +1.422861E-03 +3.610761E-06 +4.838152E-03 +5.829692E-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.016549E-04 +1.809943E-07 +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.056238E-04 +3.667801E-07 +1.000000E-03 +1.000000E-06 +3.227815E-04 +1.041879E-07 +-3.437182E-04 +1.181422E-07 +-4.000974E-04 +1.600779E-07 +0.000000E+00 +0.000000E+00 +2.700000E-02 +1.690000E-04 +1.259754E-02 +3.887684E-05 +3.514255E-03 +9.445635E-06 +1.359344E-03 +2.045441E-06 +1.362156E-02 +4.087828E-05 +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.156499E-04 +2.795463E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.805904E-03 +3.261288E-06 +2.000000E-03 +4.000000E-06 +1.904158E-03 +3.625820E-06 +1.722222E-03 +2.966050E-06 +1.472450E-03 +2.168109E-06 +0.000000E+00 +0.000000E+00 +3.900000E-02 +3.490000E-04 +1.656780E-02 +6.023774E-05 +1.361639E-02 +5.348538E-05 +9.429236E-03 +3.947382E-05 +1.761092E-02 +7.600968E-05 +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.028119E-04 +9.169503E-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.121671E-04 +9.744828E-08 +1.000000E-03 +1.000000E-06 +9.994298E-04 +9.988600E-07 +9.982900E-04 +9.965829E-07 +9.965814E-04 +9.931746E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.600000E-04 +8.920548E-03 +2.629362E-05 +5.151221E-03 +8.876114E-06 +5.653525E-03 +1.067857E-05 +1.116368E-02 +2.969235E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.209415E-03 +5.437558E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.800000E-05 +3.041714E-03 +1.129968E-05 +4.102928E-03 +6.714470E-06 +2.016161E-03 +6.122339E-06 +3.916134E-03 +9.516316E-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 +3.009839E-04 +9.059133E-08 +1.000000E-03 +1.000000E-06 +1.071043E-04 +1.147134E-08 +-4.827930E-04 +2.330891E-07 +-1.575849E-04 +2.483301E-08 +3.009839E-04 +9.059133E-08 +2.300000E-02 +1.150000E-04 +7.537245E-03 +2.829767E-05 +2.103092E-03 +9.662063E-06 +2.183497E-03 +3.744408E-06 +1.057909E-02 +2.415941E-05 +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.982887E-04 +8.897613E-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.209420E-03 +9.158466E-07 +1.000000E-03 +1.000000E-06 +9.276723E-04 +8.605758E-07 +7.908638E-04 +6.254655E-07 +6.043224E-04 +3.652056E-07 +3.009839E-04 +9.059133E-08 +2.500000E-02 +1.510000E-04 +1.154954E-02 +3.543399E-05 +4.217931E-03 +7.652974E-06 +1.816814E-03 +6.073065E-06 +9.720055E-03 +2.272026E-05 +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.121671E-04 +9.744828E-08 +1.000000E-03 +1.000000E-06 +-2.723974E-04 +7.420035E-08 +-3.886995E-04 +1.510873E-07 +3.580662E-04 +1.282114E-07 +3.121671E-04 +9.744828E-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 +4.200000E-02 +3.560000E-04 +1.287791E-02 +4.221690E-05 +4.013355E-03 +1.949190E-05 +1.990533E-03 +9.786357E-06 +1.727222E-02 +6.016647E-05 +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.125620E-03 +1.382988E-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.112371E-03 +2.274717E-06 +4.000000E-03 +8.000000E-06 +3.826961E-03 +7.325612E-06 +3.495526E-03 +6.132335E-06 +3.033406E-03 +4.680820E-06 +0.000000E+00 +0.000000E+00 +1.300000E-02 +4.300000E-05 +2.528669E-03 +1.367031E-05 +3.965235E-03 +4.071050E-06 +-4.149583E-04 +1.307826E-06 +7.258235E-03 +1.093717E-05 +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.114397E-04 +2.770157E-07 +2.000000E-03 +2.000000E-06 +-1.131644E-03 +6.424199E-07 +-3.637017E-05 +6.744918E-09 +7.827543E-04 +3.080768E-07 +9.271460E-04 +4.814882E-07 +0.000000E+00 +0.000000E+00 +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.800000E-05 +5.382539E-03 +1.017579E-05 +2.414790E-03 +7.567027E-06 +3.961581E-03 +6.537588E-06 +9.680345E-03 +2.211393E-05 +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.159629E-04 +2.797346E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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.240000E-04 +7.269348E-03 +1.995179E-05 +2.992857E-03 +7.453704E-06 +4.698724E-03 +6.277902E-06 +1.253456E-02 +4.253483E-05 +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.121671E-04 +9.744828E-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-02 +5.100000E-04 +1.664620E-02 +7.437727E-05 +9.397450E-03 +4.322575E-05 +6.836310E-03 +1.231705E-05 +1.905990E-02 +7.550592E-05 +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.122996E-03 +1.372865E-06 +1.000000E-03 +1.000000E-06 +8.132758E-04 +6.614176E-07 +4.921264E-04 +2.421884E-07 +1.248736E-04 +1.559342E-08 +9.084356E-04 +8.252553E-07 +0.000000E+00 +0.000000E+00 +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 +6.491403E-03 +1.250504E-05 +2.902964E-03 +5.648898E-06 +2.149247E-03 +2.668074E-06 +8.776336E-03 +1.780557E-05 +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.131510E-04 +1.880396E-07 +1.000000E-03 +1.000000E-06 +-6.320900E-04 +3.995377E-07 +9.930661E-05 +9.861803E-09 +3.167755E-04 +1.003467E-07 +1.239313E-03 +9.687296E-07 +1.000000E-03 +1.000000E-06 +9.677184E-04 +9.364790E-07 +9.047184E-04 +8.185155E-07 +8.140422E-04 +6.626647E-07 +0.000000E+00 +0.000000E+00 +3.000000E-02 +2.020000E-04 +7.960428E-03 +1.748184E-05 +1.857609E-03 +3.751885E-06 +3.621909E-03 +7.252984E-06 +1.365034E-02 +4.336505E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +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 +5.726309E-03 +1.204288E-05 +-2.562602E-03 +8.796860E-06 +-5.408669E-04 +1.879390E-06 +1.269835E-02 +3.424162E-05 +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.226228E-04 +4.787693E-07 +1.000000E-03 +1.000000E-06 +-1.650338E-04 +2.723616E-08 +-4.591458E-04 +2.108148E-07 +2.363135E-04 +5.584407E-08 +2.982887E-04 +8.897613E-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.100000E-02 +1.070000E-04 +7.115739E-03 +1.595026E-05 +3.891656E-03 +4.927392E-06 +4.624860E-03 +6.824558E-06 +8.816934E-03 +1.684675E-05 +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.982887E-04 +8.897613E-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.029518E-04 +8.153220E-07 +1.000000E-03 +1.000000E-06 +9.531896E-04 +9.085703E-07 +8.628555E-04 +7.445196E-07 +7.353151E-04 +5.406883E-07 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +1.619128E-03 +7.769465E-06 +2.613435E-03 +3.211760E-06 +1.405519E-03 +3.351048E-06 +4.513046E-03 +5.346316E-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.009839E-04 +9.059133E-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.600000E-02 +1.760000E-04 +3.827326E-03 +1.821256E-05 +8.165880E-03 +1.737446E-05 +3.271322E-03 +1.161207E-05 +1.089998E-02 +2.472251E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.197919E-03 +7.175165E-07 +1.000000E-03 +1.000000E-06 +7.256235E-04 +5.265295E-07 +2.897942E-04 +8.398069E-08 +-1.332798E-04 +1.776351E-08 +3.028119E-04 +9.169503E-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.400000E-02 +5.800000E-05 +8.561790E-03 +2.265799E-05 +4.539886E-03 +5.757407E-06 +1.780257E-03 +1.445049E-06 +9.412238E-03 +1.952619E-05 +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.006709E-04 +9.040301E-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.900000E-02 +9.700000E-05 +1.187186E-02 +4.638870E-05 +5.669447E-03 +1.326414E-05 +2.818347E-03 +3.568113E-06 +6.363682E-03 +9.079681E-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.198545E-03 +7.182698E-07 +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.013419E-04 +3.616120E-07 +1.000000E-03 +1.000000E-06 +9.751330E-04 +9.508843E-07 +9.263265E-04 +8.580808E-07 +8.553972E-04 +7.317044E-07 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.800000E-05 +5.100191E-03 +1.213804E-05 +2.526446E-03 +3.184717E-06 +1.120621E-03 +2.386039E-06 +4.520264E-03 +6.456267E-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 +9.062947E-04 +4.571831E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +6.300000E-05 +3.401093E-03 +4.752976E-06 +-1.430942E-04 +2.289223E-06 +5.850560E-04 +2.116365E-06 +7.249747E-03 +1.181285E-05 +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.138219E-04 +2.784426E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +9.900000E-05 +3.395904E-03 +1.353897E-05 +2.976877E-03 +2.251417E-06 +-1.066663E-04 +2.608803E-06 +7.331520E-03 +1.571258E-05 +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.989596E-04 +1.793791E-07 +2.000000E-03 +2.000000E-06 +7.367234E-04 +9.571208E-07 +4.356812E-04 +9.323439E-07 +1.039334E-03 +6.364636E-07 +1.505322E-03 +1.521066E-06 +1.000000E-03 +1.000000E-06 +9.879014E-04 +9.759491E-07 +9.639237E-04 +9.291489E-07 +9.285017E-04 +8.621153E-07 +0.000000E+00 +0.000000E+00 +1.900000E-02 +8.700000E-05 +2.777211E-03 +1.700824E-05 +4.035787E-03 +9.429368E-06 +2.980203E-05 +1.242805E-06 +1.000369E-02 +2.268829E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +7.734629E-03 +1.531457E-05 +5.093139E-03 +7.117666E-06 +5.058900E-03 +5.942325E-06 +7.269012E-03 +1.354949E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1921,16 +1921,256 @@ tally 1: 1.415159E-08 0.000000E+00 0.000000E+00 -7.000000E-03 -3.700000E-05 -6.291973E-04 -9.253012E-07 --8.619079E-04 -3.776625E-07 -4.994451E-04 -1.549611E-07 -3.690089E-03 -7.039749E-06 +1.200000E-02 +4.600000E-05 +1.345552E-03 +1.661602E-06 +-1.840162E-03 +1.071811E-06 +6.885070E-04 +5.102453E-07 +5.789780E-03 +8.745856E-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 +8.000000E-03 +1.600000E-05 +6.633314E-03 +1.270264E-05 +4.628987E-03 +9.066793E-06 +2.905876E-03 +6.021797E-06 +4.223000E-03 +4.683691E-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.013419E-04 +3.616120E-07 +1.000000E-03 +1.000000E-06 +4.295537E-04 +1.845164E-07 +-2.232254E-04 +4.982957E-08 +-4.461813E-04 +1.990778E-07 +1.207033E-03 +8.982334E-07 +2.000000E-03 +4.000000E-06 +1.368640E-03 +1.873175E-06 +5.907660E-04 +3.490045E-07 +1.853769E-04 +3.436459E-08 +0.000000E+00 +0.000000E+00 +6.000000E-03 +1.000000E-05 +3.102529E-03 +2.944216E-06 +3.553054E-03 +4.061545E-06 +2.423850E-03 +1.659791E-06 +2.405752E-03 +1.989485E-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 +5.965773E-04 +3.559045E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.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 +5.000000E-05 +7.180171E-03 +1.778928E-05 +2.622812E-03 +2.636835E-06 +1.108650E-03 +9.983372E-07 +6.665077E-03 +1.320251E-05 +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.028119E-04 +9.169503E-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.200000E-02 +1.300000E-04 +1.098015E-02 +3.419417E-05 +5.083853E-03 +6.677488E-06 +2.962020E-03 +3.751133E-06 +1.115370E-02 +3.284251E-05 +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.982887E-04 +8.897613E-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.904880E-03 +1.700404E-06 +-5.545137E-04 +1.781015E-06 +-9.756510E-05 +6.625846E-07 +3.325684E-03 +2.829537E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1963,134 +2203,14 @@ tally 1: 0.000000E+00 2.000000E-03 2.000000E-06 -1.439409E-03 -1.103682E-06 -6.555229E-04 -5.306118E-07 -7.043819E-05 -4.155385E-07 -1.226302E-03 -7.521585E-07 -0.000000E+00 -0.000000E+00 -0.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 -4.295537E-04 -1.845164E-07 --2.232254E-04 -4.982957E-08 --4.461813E-04 -1.990778E-07 -3.121671E-04 -9.744828E-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 -4.000000E-06 -1.440797E-04 -2.075896E-08 -1.581861E-03 -2.502285E-06 -7.101262E-04 -5.042792E-07 -6.019679E-04 -3.623653E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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.304111E-03 -5.308928E-06 -1.405559E-03 -1.975595E-06 -8.468624E-04 -7.171759E-07 -2.441421E-03 -3.141818E-06 +5.259036E-04 +2.147833E-07 +-6.778250E-04 +2.773263E-07 +-5.470874E-04 +2.096746E-07 +6.016549E-04 +1.809943E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2122,57 +2242,25 @@ tally 1: 0.000000E+00 0.000000E+00 7.000000E-03 -2.900000E-05 -4.675157E-03 -1.278192E-05 -2.215224E-03 -3.397777E-06 -1.088961E-03 -2.486687E-06 -3.344373E-03 -6.674880E-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.000000E-03 -4.000000E-06 --2.660370E-04 -7.077569E-08 --7.919915E-04 -6.272506E-07 -2.842468E-04 -8.079625E-08 -9.141350E-04 -4.598136E-07 -0.000000E+00 -0.000000E+00 +1.700000E-05 +5.770569E-03 +1.116420E-05 +4.074122E-03 +5.715629E-06 +2.739484E-03 +2.864833E-06 +3.630946E-03 +2.739811E-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.028119E-04 +9.169503E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2193,6 +2281,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.000000E-02 +2.600000E-05 +3.940359E-03 +1.345990E-05 +4.066207E-03 +4.701591E-06 +2.653786E-03 +1.896780E-06 +3.626422E-03 +2.904169E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2201,16 +2299,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +8.948660E-04 +8.007852E-07 1.000000E-03 1.000000E-06 -6.738077E-05 -4.540168E-09 --4.931897E-04 -2.432361E-07 --1.003064E-04 -1.006137E-08 -3.009839E-04 -9.059133E-08 +8.049124E-04 +6.478840E-07 +4.718259E-04 +2.226197E-07 +9.635598E-05 +9.284475E-09 +9.084356E-04 +8.252553E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2221,116 +2321,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 -2.000000E-03 +4.000000E-03 4.000000E-06 -1.768784E-03 -3.128598E-06 -1.358416E-03 -1.845293E-06 -8.583748E-04 -7.368072E-07 -1.226302E-03 -7.521585E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -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.382401E-03 -1.135211E-06 -9.435101E-04 -9.475181E-07 -1.233939E-03 -9.782026E-07 -1.226302E-03 -7.521585E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.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.843457E-04 -9.689366E-07 -9.534048E-04 -9.089808E-07 -9.079028E-04 -8.242875E-07 -3.121671E-04 -9.744828E-08 +2.476562E-03 +1.946838E-06 +9.202571E-04 +1.346950E-06 +4.114154E-04 +1.017884E-06 +1.812898E-03 +9.066599E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2402,11 +2402,11 @@ tally 1: 0.000000E+00 0.000000E+00 tally 2: -2.302093E-01 -2.649911E-02 -2.511941E-01 -3.155135E-02 -1.462955E+00 -1.070191E+00 -1.627347E+01 -1.324129E+02 +5.656024E-01 +6.399997E-02 +6.163195E-01 +7.599803E-02 +3.586752E+00 +2.573838E+00 +3.990119E+01 +3.185144E+02 diff --git a/tests/test_sourcepoint_restart/settings.xml b/tests/test_sourcepoint_restart/settings.xml index 5fee23d67e..c405186fb7 100644 --- a/tests/test_sourcepoint_restart/settings.xml +++ b/tests/test_sourcepoint_restart/settings.xml @@ -1,8 +1,8 @@ - - + + 10 diff --git a/tests/test_sourcepoint_restart/test_sourcepoint_restart.py b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py index 9b2e3185f9..0eaf1198cc 100644 --- a/tests/test_sourcepoint_restart/test_sourcepoint_restart.py +++ b/tests/test_sourcepoint_restart/test_sourcepoint_restart.py @@ -24,49 +24,49 @@ def test_run(): assert returncode == 0 def test_created_statepoint(): - statepoint = glob.glob(pwd + '/statepoint.7.*') - assert len(statepoint) == 1 + statepoint = glob.glob(pwd + '/statepoint.*') + assert len(statepoint) == 2 assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') sourcepoint = glob.glob(pwd + '/source.7.*') assert len(sourcepoint) == 1 assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') def test_results(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') call(['python', 'results.py', statepoint[0]]) compare = filecmp.cmp('results_test.dat', 'results_true.dat') if not compare: os.rename('results_test.dat', 'results_error.dat') assert compare + os.remove(statepoint[0]) def test_restart_form1(): statepoint = glob.glob(pwd + '/statepoint.7.*') + sourcepoint = glob.glob(pwd + '/source.7.*') openmc_path = pwd + '/../../src/openmc' if int(NoseMPI.mpi_np) > 0: proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path, - '-r', statepoint[0]], + '-r', statepoint[0], sourcepoint[0]], stderr=STDOUT, stdout=PIPE) else: - proc = Popen([openmc_path, '-r', statepoint[0]], stderr=STDOUT, stdout=PIPE) + proc = Popen([openmc_path, '-r', statepoint[0], sourcepoint[0]], stderr=STDOUT, stdout=PIPE) print(proc.communicate()[0]) returncode = proc.returncode assert returncode == 0 def test_created_statepoint_form1(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') assert len(statepoint) == 1 assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') - sourcepoint = glob.glob(pwd + '/source.7.*') - assert len(sourcepoint) == 1 - assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') def test_results_form1(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') call(['python', 'results.py', statepoint[0]]) compare = filecmp.cmp('results_test.dat', 'results_true.dat') if not compare: os.rename('results_test.dat', 'results_error.dat') assert compare + os.remove(statepoint[0]) def test_restart_form2(): statepoint = glob.glob(pwd + '/statepoint.7.*') @@ -74,50 +74,46 @@ def test_restart_form2(): openmc_path = pwd + '/../../src/openmc' if int(NoseMPI.mpi_np) > 0: proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path, - '--restart', statepoint[0], source[0]], + '--restart', statepoint[0], sourcepoint[0]], stderr=STDOUT, stdout=PIPE) else: - proc = Popen([openmc_path, '--restart', statepoint[0]], + proc = Popen([openmc_path, '--restart', statepoint[0], sourcepoint[0]], stderr=STDOUT, stdout=PIPE) print(proc.communicate()[0]) returncode = proc.returncode assert returncode == 0 def test_created_statepoint_form2(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') assert len(statepoint) == 1 assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') - sourcepoint = glob.glob(pwd + '/source.7.*') - assert len(sourcepoint) == 1 - assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') def test_results_form2(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') call(['python', 'results.py', statepoint[0]]) compare = filecmp.cmp('results_test.dat', 'results_true.dat') if not compare: os.rename('results_test.dat', 'results_error.dat') assert compare + os.remove(statepoint[0]) def test_restart_serial(): statepoint = glob.glob(pwd + '/statepoint.7.*') + sourcepoint = glob.glob(pwd + '/source.7.*') openmc_path = pwd + '/../../src/openmc' - proc = Popen([openmc_path, '--restart', statepoint[0]], + proc = Popen([openmc_path, '--restart', statepoint[0], sourcepoint[0]], stderr=STDOUT, stdout=PIPE) print(proc.communicate()[0]) returncode = proc.returncode assert returncode == 0 def test_created_statepoint_serial(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') assert len(statepoint) == 1 assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') - sourcepoint = glob.glob(pwd + '/source.7.*') - assert len(sourcepoint) == 1 - assert sourcepoint[0].endswith('binary') or sourcepoint[0].endswith('h5') def test_results_serial(): - statepoint = glob.glob(pwd + '/statepoint.7.*') + statepoint = glob.glob(pwd + '/statepoint.10.*') call(['python', 'results.py', statepoint[0]]) compare = filecmp.cmp('results_test.dat', 'results_true.dat') if not compare: @@ -125,8 +121,8 @@ def test_results_serial(): assert compare def teardown(): - output = glob.glob(pwd + '/statepoint.7.*') - output += glob.glob(pwd + '/source.7.*') + output = glob.glob(pwd + '/statepoint.*') + output += glob.glob(pwd + '/source.*') output.append(pwd + '/results_test.dat') for f in output: if os.path.exists(f): From 1c8eb1920db91a590f1cc533ed8cfa5ec41b41dc Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Sat, 22 Feb 2014 15:14:26 -0500 Subject: [PATCH 49/72] fixed integer type for filetype during read source --- src/source.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/source.F90 b/src/source.F90 index 85ef87d65f..8e83b2ee91 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -29,7 +29,7 @@ contains integer(8) :: i ! loop index over bank sites integer(8) :: id ! particle id - integer(8) :: itmp ! temporary integer + integer(4) :: itmp ! temporary integer type(Bank), pointer :: src => null() ! source bank site type(BinaryOutput) :: sp ! statepoint/source binary file From f247f0c7cd0f5cb7fb22ef98598fea9f9090d50e Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Sat, 22 Feb 2014 17:26:31 -0500 Subject: [PATCH 50/72] added test for read source --- tests/test_source_file/geometry.xml | 8 ++ tests/test_source_file/materials.xml | 9 ++ tests/test_source_file/results.py | 25 +++++ tests/test_source_file/results_true.dat | 2 + tests/test_source_file/settings.xml | 19 ++++ tests/test_source_file/test_source_file.py | 103 +++++++++++++++++++++ 6 files changed, 166 insertions(+) create mode 100644 tests/test_source_file/geometry.xml create mode 100644 tests/test_source_file/materials.xml create mode 100644 tests/test_source_file/results.py create mode 100644 tests/test_source_file/results_true.dat create mode 100644 tests/test_source_file/settings.xml create mode 100644 tests/test_source_file/test_source_file.py diff --git a/tests/test_source_file/geometry.xml b/tests/test_source_file/geometry.xml new file mode 100644 index 0000000000..612e46132e --- /dev/null +++ b/tests/test_source_file/geometry.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_source_file/materials.xml b/tests/test_source_file/materials.xml new file mode 100644 index 0000000000..1f85510e0d --- /dev/null +++ b/tests/test_source_file/materials.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tests/test_source_file/results.py b/tests/test_source_file/results.py new file mode 100644 index 0000000000..8ff10971cd --- /dev/null +++ b/tests/test_source_file/results.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import sys + +# import statepoint +sys.path.append('../../src/utils') +import statepoint + +# read in statepoint file +if len(sys.argv) > 1: + sp = statepoint.StatePoint(sys.argv[1]) +else: + sp = statepoint.StatePoint('statepoint.10.binary') +sp.read_results() + +# set up output string +outstr = '' + +# write out k-combined +outstr += 'k-combined:\n' +outstr += "{0:12.6E} {1:12.6E}\n".format(sp.k_combined[0], sp.k_combined[1]) + +# write results to file +with open('results_test.dat','w') as fh: + fh.write(outstr) diff --git a/tests/test_source_file/results_true.dat b/tests/test_source_file/results_true.dat new file mode 100644 index 0000000000..ae37050f76 --- /dev/null +++ b/tests/test_source_file/results_true.dat @@ -0,0 +1,2 @@ +k-combined: +2.977307E-01 2.848670E-03 diff --git a/tests/test_source_file/settings.xml b/tests/test_source_file/settings.xml new file mode 100644 index 0000000000..98abc5acfe --- /dev/null +++ b/tests/test_source_file/settings.xml @@ -0,0 +1,19 @@ + + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + diff --git a/tests/test_source_file/test_source_file.py b/tests/test_source_file/test_source_file.py new file mode 100644 index 0000000000..ede988be56 --- /dev/null +++ b/tests/test_source_file/test_source_file.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +import os +from subprocess import Popen, STDOUT, PIPE, call +import filecmp +#from nose_mpi import NoseMPI +import glob + +pwd = os.path.dirname(__file__) + +settings1=""" + + + + + + + 10 + 5 + 1000 + + + + + -4 -4 -4 4 4 4 + + + + +""" + +settings2 = """ + + + + 10 + 5 + 1000 + + + + source.10.{0} + + + +""" + +def setup(): + os.putenv('PWD', pwd) + os.chdir(pwd) + +def test_run1(): + openmc_path = pwd + '/../../src/openmc' +# if int(NoseMPI.mpi_np) > 0: + if False: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_statepoint_exists(): + statepoint = glob.glob(pwd + '/statepoint.10.*') + assert len(statepoint) == 1 + assert statepoint[0].endswith('binary') or statepoint[0].endswith('h5') + source = glob.glob(pwd + '/source.10.*') + assert len(statepoint) == 1 + assert source[0].endswith('binary') or source[0].endswith('h5') + +def test_run2(): + openmc_path = pwd + '/../../src/openmc' + source = glob.glob(pwd + '/source.10.*') + with open('settings.xml','w') as fh: + fh.write(settings2.format(source[0].split('.')[2])) +# if int(NoseMPI.mpi_np) > 0: + if False: + proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], + stderr=STDOUT, stdout=PIPE) + else: + proc = Popen([openmc_path], stderr=STDOUT, stdout=PIPE) + print(proc.communicate()[0]) + returncode = proc.returncode + assert returncode == 0 + +def test_results(): + statepoint = glob.glob(pwd + '/statepoint.10.*') + call(['python', 'results.py', statepoint[0]]) + compare = filecmp.cmp('results_test.dat', 'results_true.dat') + if not compare: + os.rename('results_test.dat', 'results_error.dat') + assert compare + +def teardown(): + with open('settings.xml','w') as fh: + fh.write(settings1) + output = glob.glob(pwd + '/statepoint.10.*') + output += glob.glob(pwd + '/source.10.*') + output.append(pwd + '/results_test.dat') + for f in output: + if os.path.exists(f): + os.remove(f) From dcc40c0b7d14f7034dba13719d490223c4c0300c Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Sat, 22 Feb 2014 17:33:13 -0500 Subject: [PATCH 51/72] updated documentation of read source from file --- docs/source/usersguide/input.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 362197439d..6aac106130 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -264,7 +264,9 @@ attributes/sub-elements: :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 + a binary source file whose path is given by the value of this element. Note, + the number of source sites needs to be the same as the number of particles + simulated in a fission source generation. *Default*: None From 4cc8369dce9ff44d3007ef747979ca021cf0463d Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 4 Mar 2014 17:53:25 -0500 Subject: [PATCH 52/72] Started release notes for 0.5.4. --- docs/source/releasenotes/index.rst | 1 + docs/source/releasenotes/notes_0.5.4.rst | 61 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 docs/source/releasenotes/notes_0.5.4.rst diff --git a/docs/source/releasenotes/index.rst b/docs/source/releasenotes/index.rst index 9164fa5943..d649b1403a 100644 --- a/docs/source/releasenotes/index.rst +++ b/docs/source/releasenotes/index.rst @@ -10,6 +10,7 @@ bugs fixed, and known issues for each successive release. .. toctree:: :maxdepth: 1 + notes_0.5.4 notes_0.5.3 notes_0.5.2 notes_0.5.1 diff --git a/docs/source/releasenotes/notes_0.5.4.rst b/docs/source/releasenotes/notes_0.5.4.rst new file mode 100644 index 0000000000..1471e1c8e4 --- /dev/null +++ b/docs/source/releasenotes/notes_0.5.4.rst @@ -0,0 +1,61 @@ +.. _notes_0.5.4: + +============================== +Release Notes for OpenMC 0.5.4 +============================== + +.. note:: + These release notes are for an upcoming release of OpenMC and are still + subject to change. + +------------------- +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). + +------------ +New Features +------------ + +- New XML parsing backend (FoX) +- Ability to write particle track files +- Handle lost particles more gracefully (via particle track files) +- Source sites outside geometry are resampled +- Multiple random number generator streams +- plot_mesh_tally.py utility converted to use Tkinter rather than PyQt +- Script added to download ACE data from NNDC +- Mixed ASCII/binary cross_sections.xml now allowed + +--------- +Bug Fixes +--------- + +- 32c03c_: Check for valid data in cross_sections.xml +- c71ef5_: Fix bug in statepoint.py +- 8884fb_: Check for all ZAIDs for S(a,b) tables +- b38af0_: Fix XML reading on multiple levels of input +- d28750_: Fix bug in convert_xsdir.py + +.. _32c03c: https://github.com/mit-crpg/openmc/commit/32c03c +.. _c71ef5: https://github.com/mit-crpg/openmc/commit/c71ef5 +.. _8884fb: https://github.com/mit-crpg/openmc/commit/8884fb +.. _b38af0: https://github.com/mit-crpg/openmc/commit/b38af0 +.. _d28750: https://github.com/mit-crpg/openmc/commit/d28750 + +------------ +Contributors +------------ + +This release contains new contributions from the following people: + +- `Sterling Harper `_ +- `Bryan Herman `_ +- `Nick Horelik `_ +- `Adam Nelson `_ +- `Paul Romano `_ +- `Tuomas Viitanen `_ +- `Jon Walsh `_ From 571ba896c90ff2d71de14e74c53e18c5850af283 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 18:59:06 -0500 Subject: [PATCH 53/72] fixed mistake --- 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 362197439d..106f7ae92a 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1087,7 +1087,7 @@ sub-elements: the PNG format can often times reduce the file size by orders of magnitude without any loss of image quality. Likewise, high-resolution voxel files produced by OpenMC can be quite large, - but the equivalent SILO files will by significantly smaller. + but the equivalent SILO files will be significantly smaller. *Default*: "slice" From 3f218c431b5cd8e80bc44452b3262d324e9ac404 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Tue, 4 Mar 2014 19:28:46 -0500 Subject: [PATCH 54/72] Mention how to local install in documentation. Closes #247. --- docs/source/quickinstall.rst | 7 ++++++- docs/source/usersguide/install.rst | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/source/quickinstall.rst b/docs/source/quickinstall.rst index 2cee56987a..ccbfabebe7 100644 --- a/docs/source/quickinstall.rst +++ b/docs/source/quickinstall.rst @@ -48,7 +48,12 @@ following commands in a terminal: sudo make install This will build an executable named ``openmc`` and install it (by default in -/usr/local/bin). +/usr/local/bin). If you do not have administrator privileges, the last command +can be replaced with a local install, e.g. + +.. code-block:: sh + + make install -e prefix=$HOME/.local .. _GitHub: https://github.com/mit-crpg/openmc .. _git: http://git-scm.com diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index ff33d9a6c6..2084878b73 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -189,7 +189,15 @@ the root directory of the source code: sudo make install This will build an executable named ``openmc`` and install it (by default in -/usr/local/bin). +/usr/local/bin). If you do not have administrative privileges, you can install +OpenMC locally by replacing the last command with: + +.. code-block:: sh + + make install -e prefix=$HOME/.local + +The ``prefix`` variable can be changed to any path for which you have +write-access. Compiling on Windows -------------------- From 4835a4f632f9a379ef40cfb96bc2beaeffb06f6e Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 21:10:42 -0500 Subject: [PATCH 55/72] check for present source bank before running calculation --- src/initialize.F90 | 8 +++++++- src/state_point.F90 | 35 ++++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/initialize.F90 b/src/initialize.F90 index 8a4b22e90f..52869a281e 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -390,7 +390,7 @@ contains ! It is a source file path_source_point = argv(i) - else + else ! Different option is specified not a source file ! Source is in statepoint file path_source_point = path_state_point @@ -399,6 +399,12 @@ contains i = i - 1 end if + + else ! No command line arg after statepoint + + ! Source is assumed to be in statepoint file + path_source_point = path_state_point + end if case ('-g', '-geometry-debug', '--geometry-debug') diff --git a/src/state_point.F90 b/src/state_point.F90 index 046d748be5..e31e7dea91 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -275,6 +275,13 @@ contains end if + ! Indicate where source bank is stored in statepoint + if (source_separate) then + call sp % write_data(0, "source_present") + else + call sp % write_data(1, "source_present") + end if + ! Close the file for serial writing call sp % file_close() @@ -518,6 +525,7 @@ contains integer :: length(4) integer :: int_array(3) integer, allocatable :: temp_array(:) + logical :: source_present real(8) :: real_array(3) type(TallyObject), pointer :: t => null() @@ -758,30 +766,35 @@ contains end if end if + ! Check for source in statepoint if needed + call sp % read_data(int_array(1), "source_present") + if (int_array(1) == 1) then + source_present = .true. + else + source_present = .false. + end if + + ! Check to make sure source bank is present + if (path_source_point == path_state_point .and. .not. source_present) then + message = "Source bank must be contained in statepoint restart file" + call fatal_error() + end if + ! Read source if in eigenvalue mode if (run_mode == MODE_EIGENVALUE) then ! Check if source was written out separately - if (source_separate) then + if (.not. source_present) then ! Close statepoint file call sp % file_close() - ! Set filename for source - filename = trim(path_output) // 'source.' // & - trim(to_str(restart_batch)) -#ifdef HDF5 - filename = trim(filename) // '.h5' -#else - filename = trim(filename) // '.binary' -#endif - ! Write message message = "Loading source file " // trim(filename) // "..." call write_message(1) ! Open source file - call sp % file_open(filename, 'r', serial = .false.) + call sp % file_open(path_source_point, 'r', serial = .false.) ! Read file type call sp % read_data(int_array(1), "filetype") From 6962b32de9164f615f58952e631afae52ca0af44 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 21:50:06 -0500 Subject: [PATCH 56/72] simplified cleanup script --- tests/cleanup.bash | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/cleanup.bash b/tests/cleanup.bash index d23b166a26..0b792f9c77 100755 --- a/tests/cleanup.bash +++ b/tests/cleanup.bash @@ -5,10 +5,4 @@ # deleting left over binary files. This will # cause an assertion error in some of the # tests. -for i in ./*; do - if [ -d "$i" ]; then - cd $i - rm -f *.binary *.h5 - cd .. - fi -done +find . \( -name "*.binary" -o -name "*.h5" \) -exec rm -f {} \; From fb5ede7d9330e5e3f34614bb00fe795e02c3d34f Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 21:50:50 -0500 Subject: [PATCH 57/72] remove compile from all-tests option --- tests/run_tests.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/run_tests.py b/tests/run_tests.py index 49975c218a..0669a99d00 100755 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -117,6 +117,8 @@ if len(sys.argv) > 1: if j.rfind(suffix) != -1: if suffix == 'omp' and j == 'compile': continue + if j == 'compile': + continue tests__.append(j) else: tests__.append(i) # append specific test (e.g., mpi-debug) From b1c288012b438abd0cda44dd9daaca52be34fba4 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 21:54:50 -0500 Subject: [PATCH 58/72] removed source from separate and write tags --- src/input_xml.F90 | 8 ++++---- tests/test_sourcepoint_latest/settings.xml | 2 +- tests/test_sourcepoint_restart/settings.xml | 2 +- tests/test_statepoint_sourcesep/settings.xml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 9fffea5d31..03ad982cbc 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -670,14 +670,14 @@ contains end if ! Check if the user has specified to write binary source file - if (check_for_node(node_sp, "source_separate")) then - call get_node_value(node_sp, "source_separate", temp_str) + if (check_for_node(node_sp, "separate")) then + call get_node_value(node_sp, "separate", temp_str) call lower_case(temp_str) if (trim(temp_str) == 'true' .or. & trim(temp_str) == '1') source_separate = .true. end if - if (check_for_node(node_sp, "source_write")) then - call get_node_value(node_sp, "source_write", temp_str) + if (check_for_node(node_sp, "write")) then + call get_node_value(node_sp, "write", temp_str) call lower_case(temp_str) if (trim(temp_str) == 'false' .or. & trim(temp_str) == '0') source_write = .false. diff --git a/tests/test_sourcepoint_latest/settings.xml b/tests/test_sourcepoint_latest/settings.xml index 36c5c7a0d7..5056db4724 100644 --- a/tests/test_sourcepoint_latest/settings.xml +++ b/tests/test_sourcepoint_latest/settings.xml @@ -1,7 +1,7 @@ - + 10 diff --git a/tests/test_sourcepoint_restart/settings.xml b/tests/test_sourcepoint_restart/settings.xml index c405186fb7..4e9b12d246 100644 --- a/tests/test_sourcepoint_restart/settings.xml +++ b/tests/test_sourcepoint_restart/settings.xml @@ -2,7 +2,7 @@ - + 10 diff --git a/tests/test_statepoint_sourcesep/settings.xml b/tests/test_statepoint_sourcesep/settings.xml index 98abc5acfe..17d4ee2e2e 100644 --- a/tests/test_statepoint_sourcesep/settings.xml +++ b/tests/test_statepoint_sourcesep/settings.xml @@ -2,7 +2,7 @@ - + 10 From 4ca97dde96d71fc27168628b7c80790be96e1950 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Tue, 4 Mar 2014 23:32:41 -0500 Subject: [PATCH 59/72] added source present to statepoint.py and incremented version --- src/constants.F90 | 2 +- src/utils/statepoint.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/constants.F90 b/src/constants.F90 index 05327153d0..9091460148 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -11,7 +11,7 @@ module constants integer, parameter :: VERSION_RELEASE = 3 ! Revision numbers for binary files - integer, parameter :: REVISION_STATEPOINT = 10 + integer, parameter :: REVISION_STATEPOINT = 11 integer, parameter :: REVISION_PARTICLE_RESTART = 1 ! Binary file types diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index 430abee8b8..0bfb66716b 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -151,7 +151,7 @@ class StatePoint(object): # Read statepoint revision self.revision = self._get_int(path='revision')[0] - if self.revision != 10: + if self.revision != 11: raise Exception('Statepoint Revision is not consistent.') # Read OpenMC version @@ -342,6 +342,12 @@ class StatePoint(object): if not self._results: self.read_results() + # Source bank present + source_present = self._get_int(path='source_present')[0] + if source_present != 1: + print('Source bank not present.') + return + # For HDF5 state points, copy entire bank if self._hdf5: source_sites = self._f['source_bank'].value From 76cbf0ffaaf0d26db89b89befaba1460f94c7120 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 13:34:59 -0500 Subject: [PATCH 60/72] moved source_present data to the end of meta data section of statepoint writing --- src/state_point.F90 | 42 ++++++++++++++++++++--------------------- src/utils/statepoint.py | 14 ++++++++++---- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/state_point.F90 b/src/state_point.F90 index e31e7dea91..4cf62c7c10 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -232,6 +232,13 @@ contains end if + ! Indicate where source bank is stored in statepoint + if (source_separate) then + call sp % write_data(0, "source_present") + else + call sp % write_data(1, "source_present") + end if + ! Check for the no-tally-reduction method if (.not. reduce_tallies) then ! If using the no-tally-reduction method, we need to collect tally @@ -275,13 +282,6 @@ contains end if - ! Indicate where source bank is stored in statepoint - if (source_separate) then - call sp % write_data(0, "source_present") - else - call sp % write_data(1, "source_present") - end if - ! Close the file for serial writing call sp % file_close() @@ -730,6 +730,20 @@ contains end do TALLY_METADATA + ! Check for source in statepoint if needed + call sp % read_data(int_array(1), "source_present") + if (int_array(1) == 1) then + source_present = .true. + else + source_present = .false. + end if + + ! Check to make sure source bank is present + if (path_source_point == path_state_point .and. .not. source_present) then + message = "Source bank must be contained in statepoint restart file" + call fatal_error() + end if + ! Read tallies to master if (master) then @@ -766,20 +780,6 @@ contains end if end if - ! Check for source in statepoint if needed - call sp % read_data(int_array(1), "source_present") - if (int_array(1) == 1) then - source_present = .true. - else - source_present = .false. - end if - - ! Check to make sure source bank is present - if (path_source_point == path_state_point .and. .not. source_present) then - message = "Source bank must be contained in statepoint restart file" - call fatal_error() - end if - ! Read source if in eigenvalue mode if (run_mode == MODE_EIGENVALUE) then diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index 0bfb66716b..d64ad09663 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -298,6 +298,13 @@ class StatePoint(object): f.stride = stride stride *= f.length + # Source bank present + source_present = self._get_int(path='source_present')[0] + if source_present == 1: + self.source_present = True + else: + self.source_present = False + # Set flag indicating metadata has already been read self._metadata = True @@ -342,10 +349,9 @@ class StatePoint(object): if not self._results: self.read_results() - # Source bank present - source_present = self._get_int(path='source_present')[0] - if source_present != 1: - print('Source bank not present.') + # Check if source bank is in statepoint + if not self.source_present: + print('Source not in statepoint file.') return # For HDF5 state points, copy entire bank From 23bd929683c66ae4abd4379f66f6606391c2cbfd Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 5 Mar 2014 16:55:40 -0500 Subject: [PATCH 61/72] Update settings.xml RELAX NG schema. --- src/relaxng/settings.rnc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 0e4942e357..fb6a8b1537 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -102,10 +102,10 @@ element settings { (element interval { xsd:positiveInteger } | attribute interval { xsd:positiveInteger }) ) & - (element source_separate { xsd:boolean } | - attribute source_separate { xsd:boolean })? & - (element source_write { xsd:boolean } | - attribute source_write { xsd:boolean })? & + (element separate { xsd:boolean } | + attribute separate { xsd:boolean })? & + (element write { xsd:boolean } | + attribute write { xsd:boolean })? & (element overwrite_latest { xsd:boolean} | attribute overwrite_latest {xsd:boolean})? }? & From 1abdcff45880c28d58f5d3882f680dede4c46aa4 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 5 Mar 2014 17:11:52 -0500 Subject: [PATCH 62/72] Make batches/interval sub-attribute optional in settings.rnc. --- src/relaxng/settings.rnc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index fb6a8b1537..58699a2a26 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -101,7 +101,7 @@ element settings { attribute batches { list { xsd:positiveInteger+ } }) | (element interval { xsd:positiveInteger } | attribute interval { xsd:positiveInteger }) - ) & + )? & (element separate { xsd:boolean } | attribute separate { xsd:boolean })? & (element write { xsd:boolean } | From 40fb29b819a13f23bcf5b958d79499a48d1a8cac Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:21:22 -0500 Subject: [PATCH 63/72] removed check variable to address @paulromano comment --- src/input_xml.F90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 03ad982cbc..fffd4a54e7 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -58,7 +58,6 @@ contains integer(8) :: temp_long integer :: n_tracks logical :: file_exists - logical :: check character(MAX_FILE_LEN) :: env_variable character(MAX_WORD_LEN) :: type character(MAX_LINE_LEN) :: filename @@ -702,10 +701,9 @@ contains ! make sure that the sourcepoint batch numbers are contained in the ! statepoint list if (.not. source_separate) then - check = .true. do i = 1, n_source_points - check = statepoint_batch % contains(sourcepoint_batch % get_item(i)) - if (.not. check) then + if (.not. statepoint_batch % contains(sourcepoint_batch % & + get_item(i))) then message = 'Sourcepoint batches are not a subset& & of statepoint batches.' call fatal_error() From b73dfd352e453586a53da69afbc35f9a8401e554 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:22:20 -0500 Subject: [PATCH 64/72] formatted source_present lines as per PEP8 --- src/utils/statepoint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index d64ad09663..47809d4728 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -301,9 +301,9 @@ class StatePoint(object): # Source bank present source_present = self._get_int(path='source_present')[0] if source_present == 1: - self.source_present = True + self.source_present = True else: - self.source_present = False + self.source_present = False # Set flag indicating metadata has already been read self._metadata = True From fbb692f351393998febb0c5452977ca8e75f9c9e Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:28:52 -0500 Subject: [PATCH 65/72] removed extension from cleanup --- tests/{cleanup.bash => cleanup} | 2 ++ 1 file changed, 2 insertions(+) rename tests/{cleanup.bash => cleanup} (96%) diff --git a/tests/cleanup.bash b/tests/cleanup similarity index 96% rename from tests/cleanup.bash rename to tests/cleanup index 0b792f9c77..288c81025b 100755 --- a/tests/cleanup.bash +++ b/tests/cleanup @@ -1,3 +1,5 @@ +#!/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 From 17793dfdcfdbbe97ecc2320876898b425c622782 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:42:45 -0500 Subject: [PATCH 66/72] check filetype before reading in source --- src/source.F90 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/source.F90 b/src/source.F90 index 8e83b2ee91..2d3f74ec99 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -49,6 +49,12 @@ contains ! Read the file type call sp % read_data(itmp, "filetype") + ! Check to make sure this is a source file + if (itmp /= FILETYPE_SOURCE) then + message = "Specified starting source file not a source file type." + call fatal_error() + end if + ! Read in the source bank call sp % read_source_bank() From 0ea86d60d0bfe44dae47597d26dc5e95db139419 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:44:39 -0500 Subject: [PATCH 67/72] converted source_separate to new separate tag --- tests/test_source_file/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_source_file/settings.xml b/tests/test_source_file/settings.xml index 98abc5acfe..17d4ee2e2e 100644 --- a/tests/test_source_file/settings.xml +++ b/tests/test_source_file/settings.xml @@ -2,7 +2,7 @@ - + 10 From 83ac6bc92530c8abb6d57fc8ec4492261505b9be Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:54:25 -0500 Subject: [PATCH 68/72] noseMPI uncommented --- tests/test_source_file/test_source_file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_source_file/test_source_file.py b/tests/test_source_file/test_source_file.py index ede988be56..a4b2a4e2d6 100644 --- a/tests/test_source_file/test_source_file.py +++ b/tests/test_source_file/test_source_file.py @@ -3,7 +3,7 @@ import os from subprocess import Popen, STDOUT, PIPE, call import filecmp -#from nose_mpi import NoseMPI +from nose_mpi import NoseMPI import glob pwd = os.path.dirname(__file__) From f357e370bc951717088fddd992891334baf524a9 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:55:44 -0500 Subject: [PATCH 69/72] uncommented mpi capability --- tests/test_source_file/test_source_file.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_source_file/test_source_file.py b/tests/test_source_file/test_source_file.py index a4b2a4e2d6..9752d89b49 100644 --- a/tests/test_source_file/test_source_file.py +++ b/tests/test_source_file/test_source_file.py @@ -51,8 +51,7 @@ def setup(): def test_run1(): openmc_path = pwd + '/../../src/openmc' -# if int(NoseMPI.mpi_np) > 0: - if False: + if int(NoseMPI.mpi_np) > 0: proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], stderr=STDOUT, stdout=PIPE) else: From 604abf205c9c0b4602813e09abe18cadb29c7bf3 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Wed, 5 Mar 2014 17:56:01 -0500 Subject: [PATCH 70/72] uncommented mpi capability in run 2 --- tests/test_source_file/test_source_file.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_source_file/test_source_file.py b/tests/test_source_file/test_source_file.py index 9752d89b49..a1b4986e56 100644 --- a/tests/test_source_file/test_source_file.py +++ b/tests/test_source_file/test_source_file.py @@ -73,8 +73,7 @@ def test_run2(): source = glob.glob(pwd + '/source.10.*') with open('settings.xml','w') as fh: fh.write(settings2.format(source[0].split('.')[2])) -# if int(NoseMPI.mpi_np) > 0: - if False: + if int(NoseMPI.mpi_np) > 0: proc = Popen([NoseMPI.mpi_exec, '-np', NoseMPI.mpi_np, openmc_path], stderr=STDOUT, stdout=PIPE) else: From 7def6a881a1d2ab6d152f8c1cc241184db0da22f Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 6 Mar 2014 17:02:04 -0500 Subject: [PATCH 71/72] Change source_separate to separate in test_source_file.py. --- tests/test_source_file/test_source_file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_source_file/test_source_file.py b/tests/test_source_file/test_source_file.py index a1b4986e56..85a33c0313 100644 --- a/tests/test_source_file/test_source_file.py +++ b/tests/test_source_file/test_source_file.py @@ -12,7 +12,7 @@ settings1=""" - + 10 From b34cfe7bac6553a415bdd7ffd8e0a5dc735195fe Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Thu, 6 Mar 2014 17:20:11 -0500 Subject: [PATCH 72/72] Updated release notes to include two latest PRs. --- docs/source/releasenotes/notes_0.5.4.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/releasenotes/notes_0.5.4.rst b/docs/source/releasenotes/notes_0.5.4.rst index 1471e1c8e4..174064e35b 100644 --- a/docs/source/releasenotes/notes_0.5.4.rst +++ b/docs/source/releasenotes/notes_0.5.4.rst @@ -29,6 +29,8 @@ New Features - plot_mesh_tally.py utility converted to use Tkinter rather than PyQt - Script added to download ACE data from NNDC - Mixed ASCII/binary cross_sections.xml now allowed +- Expanded options for writing source bank +- Re-enabled ability to use source file as starting source --------- Bug Fixes