diff --git a/src/constants.F90 b/src/constants.F90 index 90828d3019..9bd5df3dcb 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -325,9 +325,11 @@ module constants SRC_POINT = 2, & ! Source at a single point SRC_FILE = 3 ! Source from a file + ! Running modes integer, parameter :: & - PROB_SOURCE = 1, & ! External source problem - PROB_CRITICALITY = 2 ! Criticality problem + MODE_FIXEDSOURCE = 1, & ! Fixed source mode + MODE_CRITICALITY = 2, & ! Criticality mode + MODE_PLOTTING = 3 ! Plotting mode ! Unit numbers integer, parameter :: UNIT_SUMMARY = 11 ! unit # for writing summary file diff --git a/src/finalize.F90 b/src/finalize.F90 index e239c6db9f..a29a467067 100644 --- a/src/finalize.F90 +++ b/src/finalize.F90 @@ -24,7 +24,7 @@ contains ! Start finalization timer call timer_start(time_finalize) - if (.not. plotting) then + if (run_mode /= MODE_PLOTTING) then ! Calculate statistics for tallies and write to tallies.out call tally_statistics() if (master) call write_tallies() @@ -36,7 +36,7 @@ contains ! stop timers and show timing statistics call timer_stop(time_finalize) call timer_stop(time_total) - if (master .and. (.not. plotting)) call print_runtime() + if (master .and. (run_mode /= MODE_PLOTTING)) call print_runtime() #ifdef HDF5 ! Write time statistics to HDF5 output diff --git a/src/geometry.F90 b/src/geometry.F90 index 0abda64c13..ee67ae7729 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -258,7 +258,7 @@ contains call write_message() end if - if (surf % bc == BC_VACUUM .and. (.not. plotting)) then + if (surf % bc == BC_VACUUM .and. (run_mode /= MODE_PLOTTING)) then ! ======================================================================= ! PARTICLE LEAKS OUT OF PROBLEM @@ -289,7 +289,7 @@ contains end if return - elseif (surf % bc == BC_REFLECT .and. (.not. plotting)) then + elseif (surf % bc == BC_REFLECT .and. (run_mode /= MODE_PLOTTING)) then ! ======================================================================= ! PARTICLE REFLECTS FROM SURFACE @@ -447,7 +447,7 @@ contains call find_cell(found) ! Couldn't find next cell anywhere! - if ((.not. found) .and. (.not. plotting)) then + if ((.not. found) .and. (run_mode /= MODE_PLOTTING)) then message = "After particle " // trim(to_str(p % id)) // " crossed surface " & // trim(to_str(surfaces(abs(p%surface)) % id)) // " it could not be & &located in any cell and it did not leak." diff --git a/src/global.F90 b/src/global.F90 index 7853ec9171..a4d26264b0 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -205,11 +205,6 @@ module global real(8) :: weight_cutoff = 0.25 real(8) :: weight_survive = 1.0 - ! ============================================================================ - ! PLOTTING VARIABLES - - logical :: plotting = .false. - ! ============================================================================ ! HDF5 VARIABLES @@ -221,6 +216,9 @@ module global ! ============================================================================ ! MISCELLANEOUS VARIABLES + ! Mode to run in (fixed source, criticality, plotting, etc) + integer :: run_mode = MODE_CRITICALITY + character(MAX_FILE_LEN) :: path_input ! Path to input file character(MAX_FILE_LEN) :: path_cross_sections ! Path to cross_sections.xml @@ -230,9 +228,6 @@ module global ! Random number seed integer(8) :: seed = 1_8 - ! Problem type - integer :: problem_type = PROB_CRITICALITY - ! The verbosity controls how much information will be printed to the ! screen and in logs integer :: verbosity = 7 diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index cfc7383291..af85517a88 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -71,7 +71,7 @@ contains subroutine hdf5_write_summary() ! Write criticality information - if (problem_type == PROB_CRITICALITY) then + if (run_mode == MODE_CRITICALITY) then ! Need to write integer(8)'s using double instead since there is no H5LT ! call for making a dataset of type long call hdf5_make_double(hdf5_output_file, "n_particles", real(n_particles,8)) diff --git a/src/initialize.F90 b/src/initialize.F90 index c018efa3fc..22770b6a3a 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -82,7 +82,7 @@ contains ! Read plots.xml if it exists -- this has to be done separate from the other ! XML files because we need the PRNG to be initialized first - if (plotting) call read_plots_xml() + if (run_mode == MODE_PLOTTING) call read_plots_xml() ! Set up universe structures call prepare_universes() @@ -94,7 +94,7 @@ contains ! neighboring cells for efficient tracking call neighbor_lists() - if (.not. plotting) then + if (run_mode /= MODE_PLOTTING) then ! Read cross section summary file to determine what files contain ! cross-sections call read_cross_sections_xml() @@ -124,7 +124,7 @@ contains ! stop timer for initialization if (master) then - if (plotting) then + if (run_mode == MODE_PLOTTING) then call print_geometry() call print_plot() else @@ -243,7 +243,7 @@ contains if (starts_with(argv(i), "-")) then select case (argv(i)) case ('-p', '-plot', '--plot') - plotting = .true. + run_mode = MODE_PLOTTING case ('-?', '-help', '--help') call print_usage() stop diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 91bc79efc9..c2262f4bac 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -95,7 +95,7 @@ contains ! Criticality information if (criticality % batches > 0) then - problem_type = PROB_CRITICALITY + if (run_mode /= MODE_PLOTTING) run_mode = MODE_CRITICALITY ! Check number of particles if (len_trim(criticality % particles) == 0) then diff --git a/src/main.F90 b/src/main.F90 index d5906aaf0e..dba439b0d9 100644 --- a/src/main.F90 +++ b/src/main.F90 @@ -23,12 +23,13 @@ program main ! set up problem call initialize_run() - ! start problem - if (plotting) then + ! start problem based on mode + select case (run_mode) + case (MODE_CRITICALITY) + call run_criticality() + case (MODE_PLOTTING) call run_plot() - else - call run_problem() - end if + end select ! finalize run call finalize_run() @@ -36,11 +37,11 @@ program main contains !=============================================================================== -! RUN_PROBLEM encompasses all the main logic where iterations are performed over -! the cycles and histories. +! RUN_CRITICALITY encompasses all the main logic where iterations are performed +! over the cycles and histories. !=============================================================================== - subroutine run_problem() + subroutine run_criticality() integer(8) :: i ! index over histories in single cycle @@ -147,6 +148,6 @@ contains if (master) call header("SIMULATION FINISHED", level=1) - end subroutine run_problem + end subroutine run_criticality end program main diff --git a/src/output.F90 b/src/output.F90 index d486be1c7f..d95a735dbc 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -873,14 +873,15 @@ contains ! Display problem summary call header("PROBLEM SUMMARY", unit=UNIT_SUMMARY) - if (problem_type == PROB_CRITICALITY) then + select case(run_mode) + case (MODE_CRITICALITY) write(UNIT_SUMMARY,100) 'Problem type:', 'Criticality' write(UNIT_SUMMARY,101) 'Number of Batches:', n_batches write(UNIT_SUMMARY,101) 'Number of Inactive Batches:', n_inactive write(UNIT_SUMMARY,101) 'Generations per Batch:', gen_per_batch - elseif (problem_type == PROB_SOURCE) then + case (MODE_FIXEDSOURCE) write(UNIT_SUMMARY,100) 'Problem type:', 'External Source' - end if + end select write(UNIT_SUMMARY,101) 'Number of Particles:', n_particles ! Display geometry summary