From f018fafadd8b7b68de661baa9dc56f7268bdcb45 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Tue, 24 Jan 2017 10:58:20 +0100 Subject: [PATCH] Philippe 24/01/2017: IO: added control of verbosity and abort + PRINT_MSG subroutine --- src/LIB/SURCOUCHE/src/modd_io.f90 | 9 ++++ src/LIB/SURCOUCHE/src/mode_io.f90 | 66 ++++++++++++++++++++++++++- src/LIB/SURCOUCHE/src/modn_confio.f90 | 6 ++- 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 8487b96c2..a19ff4c3e 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -19,6 +19,9 @@ USE MODD_NETCDF, ONLY: IDCDF_KIND IMPLICIT NONE ! ! +INTEGER, PARAMETER :: NVERB_NO=0, NVERB_FATAL=1, NVERB_ERROR=2, NVERB_WARNING=3, NVERB_INFO=4, NVERB_DEBUG=5 + + INTEGER, SAVE :: ISTDOUT, ISTDERR INTEGER, SAVE :: ISIOP !! IOproc number @@ -34,6 +37,12 @@ LOGICAL, SAVE :: LIOCDF4 = .FALSE. ! TRUE will enable full NetCDF4 (HDF5) I/O LOGICAL, SAVE :: LLFIOUT = .FALSE. ! TRUE will also force LFI output when LIOCDF4 is on (debug only) LOGICAL, SAVE :: LLFIREAD = .FALSE. ! TRUE will force LFI read (instead of NetCDF) when LIOCDF4 is on (debug only) +INTEGER, SAVE :: NIO_VERB = NVERB_WARNING ! Verbosity level for IO +INTEGER, SAVE :: NIO_ABORT_LEVEL = NVERB_ERROR ! Level of IO error necessary to force stop of application + +INTEGER, SAVE :: NGEN_VERB = NVERB_WARNING ! Verbosity level for 'GEN' (generic) messages +INTEGER, SAVE :: NGEN_ABORT_LEVEL = NVERB_ERROR ! Level of 'GEN' error necessary to force stop of application + TYPE LFIPARAM INTEGER :: FITYP ! FM File Type (used in FMCLOSE) END TYPE LFIPARAM diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 82037434d..1675cf90a 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -949,6 +949,70 @@ CONTAINS ENDIF END FUNCTION io_rank + ! + ! +END MODULE MODE_IO_ll -END MODULE MODE_IO_ll +MODULE MODE_MSG +! +IMPLICIT NONE +! +CONTAINS +! +SUBROUTINE PRINT_MSG(KVERB,HDOMAIN,HSUBR,HMSG) +! +USE MODD_IO_ll +USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD +! +INTEGER, INTENT(IN) :: KVERB !Verbosity level +CHARACTER(LEN=*),INTENT(IN) :: HDOMAIN !Domain/category of message +CHARACTER(LEN=*),INTENT(IN) :: HSUBR !Subroutine/function name +CHARACTER(LEN=*),INTENT(IN) :: HMSG !Message +! +INTEGER :: IERR, IMAXVERB,IABORTLEVEL +CHARACTER(LEN=9) :: YPRE +CHARACTER(LEN=28) :: YSUBR +! +SELECT CASE(HDOMAIN) + CASE('IO') + IMAXVERB = NIO_VERB + IABORTLEVEL = NIO_ABORT_LEVEL + CASE ('GEN') + IMAXVERB = NGEN_VERB + IABORTLEVEL = NGEN_ABORT_LEVEL + CASE DEFAULT + PRINT *,'ERROR: PRINT_MSG: wrong message category (',TRIM(HDOMAIN),')' + RETURN +END SELECT +! +IF (KVERB>IMAXVERB) RETURN +! +SELECT CASE(KVERB) + CASE(NVERB_FATAL) + YPRE='FATAL: ' + CASE(NVERB_ERROR) + YPRE='ERROR: ' + CASE(NVERB_WARNING) + YPRE='WARNING: ' + CASE(NVERB_INFO) + YPRE='INFO: ' + CASE(NVERB_DEBUG) + YPRE='DEBUG: ' + CASE DEFAULT + PRINT *,'ERROR: PRINT_MSG: wrong verbosity level' +END SELECT +! +YSUBR=TRIM(HSUBR)//':' +WRITE (*,"(A9,A28,A)") YPRE,YSUBR,HMSG +! +IF (KVERB<=IABORTLEVEL) THEN + PRINT *,'ABORT asked by application' + CALL MPI_ABORT(NMNH_COMM_WORLD, -10, IERR) + CALL ABORT +END IF +! +END SUBROUTINE PRINT_MSG +! +END MODULE MODE_MSG + diff --git a/src/LIB/SURCOUCHE/src/modn_confio.f90 b/src/LIB/SURCOUCHE/src/modn_confio.f90 index b0ae82460..a23610af0 100644 --- a/src/LIB/SURCOUCHE/src/modn_confio.f90 +++ b/src/LIB/SURCOUCHE/src/modn_confio.f90 @@ -29,14 +29,16 @@ !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll, ONLY : NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL +! IMPLICIT NONE ! LOGICAL,SAVE :: LCDF4 = .FALSE. ! TRUE : enable NetCDF4 Input/Output LOGICAL,SAVE :: LLFIOUT = .FALSE. ! TRUE : add LFI output when NetCDF4 I/O is enabled (debug) LOGICAL,SAVE :: LLFIREAD = .FALSE. ! TRUE : enable LFI reading (disable NetCDF4 reading) ! when NetCDF4 I/O is enabled (debug) -! -NAMELIST/NAM_CONFIO/ LCDF4, LLFIOUT, LLFIREAD + +NAMELIST/NAM_CONFIO/ LCDF4, LLFIOUT, LLFIREAD, NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL ! END MODULE MODN_CONFIO -- GitLab