From 3431ebd8fea65390d6df1dce27f95bb41e73f16a Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Mon, 11 Dec 2017 14:35:31 +0700 Subject: [PATCH] Move write_message to error module (break geometry -> output dependence) --- src/cmfd_data.F90 | 2 +- src/cmfd_execute.F90 | 2 +- src/cmfd_input.F90 | 3 +-- src/error.F90 | 57 ++++++++++++++++++++++++++++++++++++++++ src/geometry.F90 | 4 +-- src/initialize.F90 | 4 +-- src/input_xml.F90 | 4 +-- src/mgxs_data.F90 | 3 +-- src/output.F90 | 55 -------------------------------------- src/particle_restart.F90 | 3 ++- src/physics.F90 | 3 +-- src/physics_mg.F90 | 3 +-- src/plot.F90 | 4 +-- src/simulation.F90 | 4 +-- src/state_point.F90 | 4 +-- src/summary.F90 | 3 ++- src/tallies/trigger.F90 | 2 +- src/tracking.F90 | 3 +-- src/volume_calc.F90 | 3 ++- 19 files changed, 82 insertions(+), 84 deletions(-) diff --git a/src/cmfd_data.F90 b/src/cmfd_data.F90 index 5eb2158e9..521be5e3f 100644 --- a/src/cmfd_data.F90 +++ b/src/cmfd_data.F90 @@ -644,7 +644,7 @@ contains subroutine compute_dhat() use constants, only: CMFD_NOACCEL, ZERO - use output, only: write_message + use error, only: write_message use string, only: to_str integer :: nx ! maximum number of cells in x direction diff --git a/src/cmfd_execute.F90 b/src/cmfd_execute.F90 index 140166e0a..9cdb751a4 100644 --- a/src/cmfd_execute.F90 +++ b/src/cmfd_execute.F90 @@ -366,7 +366,7 @@ contains subroutine cmfd_tally_reset() - use output, only: write_message + use error, only: write_message integer :: i ! loop counter diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index a1827febd..dbfabb254 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -41,8 +41,7 @@ contains subroutine read_cmfd_xml() use constants, only: ZERO, ONE - use error, only: fatal_error, warning - use output, only: write_message + use error, only: fatal_error, warning, write_message use string, only: to_lower use xml_interface use, intrinsic :: ISO_FORTRAN_ENV diff --git a/src/error.F90 b/src/error.F90 index 92902a04c..27004d729 100644 --- a/src/error.F90 +++ b/src/error.F90 @@ -5,12 +5,14 @@ module error use constants use message_passing + use settings, only: verbosity implicit none private public :: fatal_error public :: warning + public :: write_message ! Error codes integer(C_INT), public, bind(C) :: E_UNASSIGNED = -1 @@ -192,4 +194,59 @@ contains end subroutine fatal_error +!=============================================================================== +! WRITE_MESSAGE displays an informational message to the log file and the +! standard output stream. +!=============================================================================== + + subroutine write_message(message, level) + character(*), intent(in) :: message ! message to write + integer, intent(in), optional :: level ! verbosity level + + integer :: i_start ! starting position + integer :: i_end ! ending position + integer :: line_wrap ! length of line + integer :: length ! length of message + integer :: last_space ! index of last space (relative to start) + + ! Set length of line + line_wrap = 80 + + ! Only allow master to print to screen + if (.not. master .and. present(level)) return + + if (.not. present(level) .or. level <= verbosity) then + ! Determine length of message + length = len_trim(message) + + i_start = 0 + do + if (length - i_start < line_wrap + 1) then + ! Remainder of message will fit on line + write(OUTPUT_UNIT, fmt='(1X,A)') message(i_start+1:length) + exit + + else + ! Determine last space in current line + last_space = index(message(i_start+1:i_start+line_wrap), & + ' ', BACK=.true.) + if (last_space == 0) then + i_end = min(length + 1, i_start+line_wrap) - 1 + write(OUTPUT_UNIT, fmt='(1X,A)') message(i_start+1:i_end) + else + i_end = i_start + last_space + write(OUTPUT_UNIT, fmt='(1X,A)') message(i_start+1:i_end-1) + end if + + ! Write up to last space + + ! Advance starting position + i_start = i_end + if (i_start > length) exit + end if + end do + end if + + end subroutine write_message + end module error diff --git a/src/geometry.F90 b/src/geometry.F90 index 151a49285..ced62e681 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -1,16 +1,14 @@ module geometry use constants - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use geometry_header - use output, only: write_message use particle_header, only: LocalCoord, Particle use simulation_header use settings use surface_header use stl_vector, only: VectorInt use string, only: to_str - use tally_header implicit none diff --git a/src/initialize.F90 b/src/initialize.F90 index 21d568c72..392e8d6ba 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -10,7 +10,7 @@ module initialize use bank_header, only: Bank use constants use set_header, only: SetInt - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use geometry_header, only: Cell, Universe, Lattice, RectLattice, HexLattice,& root_universe use hdf5_interface, only: file_open, read_attribute, file_close, & @@ -19,7 +19,7 @@ module initialize use material_header, only: Material use message_passing use mgxs_data, only: read_mgxs, create_macro_xs - use output, only: print_version, write_message, print_usage + use output, only: print_version, print_usage use random_lcg, only: openmc_set_seed use settings #ifdef _OPENMP diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 91cd57ae2..e95762a0b 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -10,7 +10,7 @@ module input_xml use distribution_multivariate use distribution_univariate use endf, only: reaction_name - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use geometry, only: calc_offsets, maximum_levels, count_instance, & neighbor_lists use geometry_header @@ -23,7 +23,7 @@ module input_xml use mgxs_header use multipole, only: multipole_read use nuclide_header - use output, only: write_message, title, header, print_plot + use output, only: title, header, print_plot use plot_header use random_lcg, only: prn, openmc_set_seed use surface_header diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index f2aaa00de..1b14e6e9f 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -3,13 +3,12 @@ module mgxs_data use constants use algorithm, only: find use dict_header, only: DictCharInt - use error, only: fatal_error + use error, only: fatal_error, write_message use geometry_header, only: get_temperatures, cells use hdf5_interface use material_header, only: Material, materials, n_materials use mgxs_header use nuclide_header, only: n_nuclides - use output, only: write_message use set_header, only: SetChar use settings use stl_vector, only: VectorReal diff --git a/src/output.F90 b/src/output.F90 index c20077584..d09beda1b 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -202,61 +202,6 @@ contains end subroutine print_usage -!=============================================================================== -! WRITE_MESSAGE displays an informational message to the log file and the -! standard output stream. -!=============================================================================== - - subroutine write_message(message, level) - character(*), intent(in) :: message ! message to write - integer, intent(in), optional :: level ! verbosity level - - integer :: i_start ! starting position - integer :: i_end ! ending position - integer :: line_wrap ! length of line - integer :: length ! length of message - integer :: last_space ! index of last space (relative to start) - - ! Set length of line - line_wrap = 80 - - ! Only allow master to print to screen - if (.not. master .and. present(level)) return - - if (.not. present(level) .or. level <= verbosity) then - ! Determine length of message - length = len_trim(message) - - i_start = 0 - do - if (length - i_start < line_wrap + 1) then - ! Remainder of message will fit on line - write(ou, fmt='(1X,A)') message(i_start+1:length) - exit - - else - ! Determine last space in current line - last_space = index(message(i_start+1:i_start+line_wrap), & - ' ', BACK=.true.) - if (last_space == 0) then - i_end = min(length + 1, i_start+line_wrap) - 1 - write(ou, fmt='(1X,A)') message(i_start+1:i_end) - else - i_end = i_start + last_space - write(ou, fmt='(1X,A)') message(i_start+1:i_end-1) - end if - - ! Write up to last space - - ! Advance starting position - i_start = i_end - if (i_start > length) exit - end if - end do - end if - - end subroutine write_message - !=============================================================================== ! PRINT_PARTICLE displays the attributes of a particle !=============================================================================== diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index 53332c794..2d15f2ddc 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -4,10 +4,11 @@ module particle_restart use bank_header, only: Bank use constants + use error, only: write_message use hdf5_interface, only: file_open, file_close, read_dataset use mgxs_header, only: energy_bin_avg use nuclide_header, only: micro_xs, n_nuclides - use output, only: write_message, print_particle + use output, only: print_particle use particle_header, only: Particle use random_lcg, only: set_particle_seed use settings diff --git a/src/physics.F90 b/src/physics.F90 index 96dabd542..d13313e05 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -4,13 +4,12 @@ module physics use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use material_header, only: Material, materials use math use mesh_header, only: meshes use message_passing use nuclide_header - use output, only: write_message use particle_header, only: Particle use physics_common use random_lcg, only: prn, advance_prn_seed, prn_set_stream diff --git a/src/physics_mg.F90 b/src/physics_mg.F90 index 53a28cd4d..eb8208594 100644 --- a/src/physics_mg.F90 +++ b/src/physics_mg.F90 @@ -4,14 +4,13 @@ module physics_mg use bank_header use constants - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use material_header, only: Material, materials use math, only: rotate_angle use mesh_header, only: meshes use mgxs_header use message_passing use nuclide_header, only: material_xs - use output, only: write_message use particle_header, only: Particle use physics_common use random_lcg, only: prn diff --git a/src/plot.F90 b/src/plot.F90 index fe2ddd13b..5eb894ce8 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -5,11 +5,11 @@ module plot use hdf5 use constants - use error, only: fatal_error + use error, only: fatal_error, write_message use geometry, only: find_cell, check_cell_overlap use geometry_header, only: Cell, root_universe, cells use hdf5_interface - use output, only: write_message, time_stamp + use output, only: time_stamp use material_header, only: materials use particle_header, only: LocalCoord, Particle use plot_header diff --git a/src/simulation.F90 b/src/simulation.F90 index 5eacbd40b..b04e967f2 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -16,12 +16,12 @@ module simulation #ifdef _OPENMP use eigenvalue, only: join_bank_from_threads #endif - use error, only: fatal_error + use error, only: fatal_error, write_message use geometry_header, only: n_cells use message_passing use mgxs_header, only: energy_bins, energy_bin_avg use nuclide_header, only: micro_xs, n_nuclides - use output, only: write_message, header, print_columns, & + use output, only: header, print_columns, & print_batch_keff, print_generation, print_runtime, & print_results, print_overlap_check, write_tallies use particle_header, only: Particle diff --git a/src/state_point.F90 b/src/state_point.F90 index 6d647b72e..f7a892898 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -19,13 +19,13 @@ module state_point use constants use eigenvalue, only: openmc_get_keff use endf, only: reaction_name - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use hdf5_interface use mesh_header, only: RegularMesh, meshes, n_meshes use message_passing use mgxs_header, only: nuclides_MG use nuclide_header, only: nuclides - use output, only: write_message, time_stamp + use output, only: time_stamp use random_lcg, only: seed use settings use simulation_header diff --git a/src/summary.F90 b/src/summary.F90 index 248b48e86..0f45ef1bb 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -4,6 +4,7 @@ module summary use constants use endf, only: reaction_name + use error, only: write_message use geometry_header use hdf5_interface use material_header, only: Material, n_materials @@ -11,7 +12,7 @@ module summary use message_passing use mgxs_header, only: nuclides_MG use nuclide_header - use output, only: time_stamp, write_message + use output, only: time_stamp use settings, only: run_CE use surface_header use string, only: to_str diff --git a/src/tallies/trigger.F90 b/src/tallies/trigger.F90 index 772e739ba..9e9b06d20 100644 --- a/src/tallies/trigger.F90 +++ b/src/tallies/trigger.F90 @@ -8,8 +8,8 @@ module trigger use constants use eigenvalue, only: openmc_get_keff + use error, only: warning, write_message use string, only: to_str - use output, only: warning, write_message use mesh_header, only: RegularMesh, meshes use message_passing, only: master use settings diff --git a/src/tracking.F90 b/src/tracking.F90 index d110af462..65769a7f1 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -2,11 +2,10 @@ module tracking use constants use cross_section, only: calculate_xs - use error, only: fatal_error, warning + use error, only: fatal_error, warning, write_message use geometry_header, only: cells use geometry, only: find_cell, distance_to_boundary, cross_lattice, & check_cell_overlap - use output, only: write_message use message_passing use mgxs_header use nuclide_header diff --git a/src/volume_calc.F90 b/src/volume_calc.F90 index 48f93f0e6..5985a236b 100644 --- a/src/volume_calc.F90 +++ b/src/volume_calc.F90 @@ -8,11 +8,12 @@ module volume_calc #endif use constants + use error, only: write_message use geometry, only: find_cell use geometry_header, only: universes, cells use hdf5_interface, only: file_create, file_close, write_attribute, & create_group, close_group, write_dataset - use output, only: write_message, header, time_stamp + use output, only: header, time_stamp use material_header, only: materials use message_passing use nuclide_header, only: nuclides