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/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 `_ diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 6aac106130..83eb2a3d8a 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1089,7 +1089,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" 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 -------------------- 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. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/ace.F90 b/src/ace.F90 index aa6de5ab64..ea97c80be8 100644 --- a/src/ace.F90 +++ b/src/ace.F90 @@ -942,6 +942,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 @@ -966,6 +967,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 @@ -1008,6 +1025,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)) @@ -1022,6 +1055,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 @@ -1054,6 +1103,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) 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/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/input_xml.F90 b/src/input_xml.F90 index 9fffea5d31..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 @@ -670,14 +669,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. @@ -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() diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 0e4942e357..58699a2a26 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -101,11 +101,11 @@ element settings { attribute batches { list { xsd:positiveInteger+ } }) | (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})? }? & diff --git a/src/state_point.F90 b/src/state_point.F90 index 046d748be5..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 @@ -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() @@ -722,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 @@ -762,26 +784,17 @@ contains 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") diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index 430abee8b8..47809d4728 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 @@ -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,6 +349,11 @@ class StatePoint(object): if not self._results: self.read_results() + # 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 if self._hdf5: source_sites = self._f['source_bank'].value diff --git a/tests/cleanup.bash b/tests/cleanup similarity index 74% rename from tests/cleanup.bash rename to tests/cleanup index d23b166a26..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 @@ -5,10 +7,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 {} \; 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) 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