Wrapper to set up MPI if needed and initialize log files
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in), | optional | :: | logfile |
name of the dedicated LightKrylov logfile |
|
integer, | intent(in), | optional | :: | nio |
I/O rank for logging |
|
integer, | intent(in), | optional | :: | log_level |
set logging level 0 : all_level 10 : debug_level 20 : information_level 30 : warning_level 40 : error_level 100 : none_level |
|
logical, | intent(in), | optional | :: | log_stdout |
duplicate log messages to stdout? |
|
logical, | intent(in), | optional | :: | log_timestamp |
add timestamp to log messages |
|
logical, | intent(in), | optional | :: | close_old |
close previously opened logfiles (if present?) - stdout is not closed |
|
integer, | intent(out), | optional | :: | iunit |
log unit identifier |
subroutine logger_setup(logfile, nio, log_level, log_stdout, log_timestamp, close_old, iunit) !! Wrapper to set up MPI if needed and initialize log files character(len=*), optional, intent(in) :: logfile !! name of the dedicated LightKrylov logfile integer, optional, intent(in) :: nio !! I/O rank for logging integer, optional, intent(in) :: log_level !! set logging level !! 0 : all_level !! 10 : debug_level !! 20 : information_level !! 30 : warning_level !! 40 : error_level !! 100 : none_level logical, optional, intent(in) :: log_stdout !! duplicate log messages to stdout? logical, optional, intent(in) :: log_timestamp !! add timestamp to log messages logical, optional, intent(in) :: close_old !! close previously opened logfiles (if present?) - stdout is not closed integer, optional, intent(out) :: iunit !! log unit identifier ! internals character(len=:), allocatable :: logfile_ integer :: nio_ integer :: log_level_ logical :: log_stdout_ logical :: log_timestamp_ logical :: close_old_ integer :: iunit_ ! misc integer :: stat logfile_ = optval(logfile, 'lightkrylov.log') nio_ = optval(nio, 0) log_level_ = optval(log_level, 20) log_level_ = max(0, min(log_level_, 100)) log_stdout_ = optval(log_stdout, .true.) log_timestamp_ = optval(log_timestamp, .true.) close_old_ = optval(close_old, .true.) ! Flush log units if (close_old_) call reset_log_units() ! set log level call logger%configure(level=log_level_, time_stamp=log_timestamp_) ! set up LightKrylov log file call logger%add_log_file(logfile_, unit=iunit_, stat=stat) if (stat /= 0) call stop_error('Unable to open logfile '//trim(logfile_)//'.', module=this_module, procedure='logger_setup') ! Set up comms call comm_setup() ! Set I/O rank if (nio_ /= 0) call set_io_rank(nio_) ! log to stdout if (log_stdout_) then call logger%add_log_unit(unit=6, stat=stat) if (stat /= 0) call stop_error('Unable to add stdout to logger.', module=this_module, procedure='logger_setup') end if ! mark that logger is active logger_is_active = .true. ! return unit if requested if (present(iunit)) iunit = iunit_ return end subroutine logger_setup