From 05084accc82d493fcb517df6c7f527170ebd46ae Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 3 Nov 2023 16:22:35 +0100
Subject: [PATCH] Philippe 03/11/2023: replace STOP by PRINT_MSG calls

---
 src/MNH/call_rttov13.f90               |  4 +--
 src/MNH/ch_meteo_trans_lima.f90        | 24 ++++++-------
 src/MNH/ch_monitorn.f90                |  4 +--
 src/MNH/drag_bld.f90                   | 47 ++++++++++++--------------
 src/MNH/ground_paramn.f90              | 12 +++----
 src/MNH/prep_real_case.f90             |  1 -
 src/MNH/read_chem_data_cams_case.f90   | 21 +++++++-----
 src/MNH/read_chem_data_mozart_case.f90 | 21 +++++++-----
 src/MNH/write_lfin.f90                 |  9 ++---
 9 files changed, 71 insertions(+), 72 deletions(-)

diff --git a/src/MNH/call_rttov13.f90 b/src/MNH/call_rttov13.f90
index 08cf7ba85..8c681d530 100644
--- a/src/MNH/call_rttov13.f90
+++ b/src/MNH/call_rttov13.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2003-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -497,7 +497,7 @@ DO JSAT=1,IJSAT ! loop over sensors
   CALL rttov_user_options_checkinput(errorstatus, opts, coefs)
   IF (errorstatus /= 0) THEN
     WRITE(*,*) 'error in rttov options'
-    STOP
+    CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'CALL_RTTOV13', 'rttov_user_options_checkinput' )
   ENDIF
 
   profiles(1) % date(1) = TDTCUR%nyear
diff --git a/src/MNH/ch_meteo_trans_lima.f90 b/src/MNH/ch_meteo_trans_lima.f90
index 42e2a5006..56b3757c3 100644
--- a/src/MNH/ch_meteo_trans_lima.f90
+++ b/src/MNH/ch_meteo_trans_lima.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
 !!    ############################### 
       MODULE MODI_CH_METEO_TRANS_LIMA
 !!    ############################### 
@@ -126,6 +122,8 @@ USE MODD_PARAM_LIMA,      ONLY: XNUC, XALPHAC, & ! Cloud droplets distrib. param
 USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC,  & !shape param. of the cloud droplets
                                 XLBR, XLBEXR     !shape param. of the raindrops
 !!
+USE MODE_MSG
+
 USE MODI_GAMMA
 !
 !-------------------------------------------------------------------------------
@@ -182,13 +180,13 @@ firstcall : IF (GSFIRSTCALL) THEN
 !              corresponds to what the CCS expects
 !
   IF (NMETEOVARS /= 13) THEN
-    WRITE(KLUOUT,*) "CH_METEO_TRANS ERROR: number of meteovars to transfer"
-    WRITE(KLUOUT,*) "does not correspond to the number expected by the CCS:"
-    WRITE(KLUOUT,*) "     meteovars to transfer: ", 13
-    WRITE(KLUOUT,*) "     NMETEOVARS expected:   ", NMETEOVARS
-    WRITE(KLUOUT,*) "Check the definition of NMETEOVARS in your .chf file."
-    WRITE(KLUOUT,*) "The program will be stopped now!"
-    STOP 1
+    CMNHMSG(1) = "CH_METEO_TRANS ERROR: number of meteovars to transfer"
+    CMNHMSG(2) = "does not correspond to the number expected by the CCS:"
+    CMNHMSG(3) = "     meteovars to transfer: 13"
+    WRITE(CMNHMSG(4) ,*) "     NMETEOVARS expected:   ", NMETEOVARS
+    CMNHMSG(5) = "Check the definition of NMETEOVARS in your .chf file."
+    CMNHMSG(6) = "The program will be stopped now!"
+    CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'CH_METEO_TRANS_LIMA' )
   END IF
 !
 !*       1.2   initialize names of meteo vars
diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90
index b61f19288..803f3814d 100644
--- a/src/MNH/ch_monitorn.f90
+++ b/src/MNH/ch_monitorn.f90
@@ -646,9 +646,7 @@ SELECT CASE (CCH_TDISCRETIZATION)
     IF (KVERB >= 10) WRITE(KLUOUT,*) "CH_MONITOR_n: using LAGGED option"
   CASE DEFAULT
     ! the following line should never be reached:
-    ! callabortstop
-    CALL ABORT
-    STOP "CH_MONITOR_n: CCH_TDISCRETIZATION option not valid"
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_MONITOR_n', 'invalid CCH_TDISCRETIZATION option ('//trim(CCH_TDISCRETIZATION)//')' )
 END SELECT
 !
 !
diff --git a/src/MNH/drag_bld.f90 b/src/MNH/drag_bld.f90
index edec3affd..a460dd5cc 100644
--- a/src/MNH/drag_bld.f90
+++ b/src/MNH/drag_bld.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2019-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2019-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -8,10 +8,10 @@ MODULE MODI_DRAG_BLD
   !     #######################
   !
   INTERFACE
-     !
-     SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT,    &
-          PRT, PSVT, PRHODJ, PZZ, PRUS, PRVS, PRTKES, PRTHS, PRRS, &
-          PSFTH_WALL, PSFTH_ROOF, PCD_ROOF, PSFRV_WALL, PSFRV_ROOF )
+    !
+    SUBROUTINE DRAG_BLD( PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
+                         PSVT, PRHODJ, PZZ, PRUS, PRVS, PRTKES, PRTHS, PRRS,      &
+                         PSFTH_WALL, PSFTH_ROOF, PCD_ROOF, PSFRV_WALL, PSFRV_ROOF )
        !
        REAL,                     INTENT(IN)    :: PTSTEP ! Time step
        REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT, PVT   ! variables
@@ -32,8 +32,8 @@ MODULE MODI_DRAG_BLD
        !
        REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS       ! Sources of Momentum
        REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTKES           ! Sources of Tke
-       REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS              
-       REAL, DIMENSION(:,:,:), INTENT(INOUT)   :: PRTHS          
+       REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS
+       REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS
        !
      END SUBROUTINE DRAG_BLD
 
@@ -41,11 +41,11 @@ MODULE MODI_DRAG_BLD
 
 END MODULE MODI_DRAG_BLD
 !
-!     ###################################################################
-SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              & 
-                    PSVT, PRHODJ, PZZ, PRUS, PRVS, PRTKES, PRTHS, PRRS, &
-                    PSFTH_WALL, PSFTH_ROOF, PCD_ROOF, PSFRV_WALL, PSFRV_ROOF )
-  !     ###################################################################
+!     #########################################################################
+SUBROUTINE DRAG_BLD( PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
+                     PSVT, PRHODJ, PZZ, PRUS, PRVS, PRTKES, PRTHS, PRRS,      &
+                     PSFTH_WALL, PSFTH_ROOF, PCD_ROOF, PSFRV_WALL, PSFRV_ROOF )
+  !     #######################################################################
   !
   !!****  *DRAG_BLD_n * -
   !!
@@ -87,6 +87,7 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
   USE MODD_PGDFIELDS
 
   use mode_budget,     only: Budget_store_init, Budget_store_end
+  USE MODE_MSG
 
   USE MODI_MNHGET_SURF_PARAM_n
   USE MODI_SHUMAN
@@ -114,8 +115,8 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
   !
   REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS       ! Sources of Momentum
   REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTKES           ! Sources of Tke
-  REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS              
-  REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS          
+  REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS
+  REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS
   !
   !*       0.2   Declarations of local variables :
   !
@@ -231,7 +232,7 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
         ZH_URBTRUN(JI,JJ) = MIN(ZH_URBTRUN(JI,JJ),0.3*ZH_URBTREE(JI,JJ))
         !
         IF (ZH_URBTRUN(JI,JJ).GT.ZH_URBTREE(JI,JJ)) THEN
-           STOP ("Trunk higher than tree")
+           CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Trunk higher than tree' )
         ENDIF
         !
      ENDDO
@@ -299,11 +300,11 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
            ENDDO
            !
            IF ( ICHECK .NE. 1 ) THEN
-              STOP ("Roof level not attributed")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Roof level not attributed' )
            ENDIF
            !
            IF ( ABS(ZSUM_BLD_DENSITY-ZF_BLD(JI,JJ)) .GT. 1.0E-6 ) THEN
-              STOP ("Wrong normalisation of frontal area density")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Wrong normalisation of frontal area density' )
            ENDIF
            !
         ENDIF
@@ -373,7 +374,7 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
            ! Check for correct normalisation of PLAD_CAN
            !
            IF ( ABS(ZSUM_LAD_CAN-ZLAI_URBVEG(JI,JJ)).GT.1.0E-6 ) THEN
-              STOP ("Wrong normalisation of vegetation density")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Wrong normalisation of vegetation density' )
            ENDIF
            !
         ENDIF
@@ -468,19 +469,15 @@ SUBROUTINE DRAG_BLD(PTSTEP, PUT, PVT, PTKET, PPABST, PTHT, PRT,              &
            ! Check for correct normalisation of fluxes
            !
            IF ( ABS(ZSUM_SFTH_WALL-PSFTH_WALL(JI,JJ)).GT.1.0E-6 ) THEN
-              STOP ("Wrong normalisation of wall heat flux")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Wrong normalisation of wall heat flux' )
            ENDIF
            !
            IF ( ABS(ZSUM_SFRV_WALL-PSFRV_WALL(JI,JJ)).GT.1.0E-6 ) THEN
-              STOP ("Wrong normalisation of wall evaporative flux")
-           ENDIF
-           !
-           IF ( ABS(ZSUM_SFTH_ROOF-PSFTH_ROOF(JI,JJ)).GT.1.0E-6 ) THEN
-              STOP ("Wrong normalisation of roof heat flux")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Wrong normalisation of roof heat flux' )
            ENDIF
            !
            IF ( ABS(ZSUM_SFRV_ROOF-PSFRV_ROOF(JI,JJ)).GT.1.0E-6 ) THEN
-              STOP ("Wrong normalisation of roof evaporative flux")
+            CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_BLD', 'Wrong normalisation of roof evaporative flux' )
            ENDIF
            !
         ENDIF
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index e43cd3034..e030f6f5e 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -693,8 +693,8 @@ DO ILEV=1,NLEV_COUPLE
    !
    ZWEIGHT_VERT(:,:) = MIN(1.0,MAX(ZZREF_VERT(:,:)-5.0,0.0)/15.0)
    !
-   IF (MAXVAL(ZWEIGHT_VERT).GT.1.0) STOP ("Wrong weight")
-   IF (MINVAL(ZWEIGHT_VERT).LT.0.0) STOP ("Wrong weight")
+   IF ( MAXVAL(ZWEIGHT_VERT) > 1. .OR. MINVAL(ZWEIGHT_VERT) < 0. ) &
+    CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'GROUND_PARAM_n', 'Wrong weight' )
    !
    ZZREF(:,:,ILEV) = ZWEIGHT_VERT(:,:) * ZZREF_VERT(:,:) + (1.0 - ZWEIGHT_VERT(:,:)) * ZZREF_DIST(:,:)
    !
@@ -1030,10 +1030,10 @@ IF (LFLUXBLDG) THEN
    !
    ! Test conservation of fluxes
    !
-   IF (MAXVAL(ABS(ZSFTH(:,:)/XCPD/XRHODREF(:,:,IKB) - PSFTH(:,:) - PSFTH_WALL(:,:)& 
-           - PSFTH_ROOF(:,:))).GT.1.0E-6) STOP ("Wrong H flux partition")
-   IF (MAXVAL(ABS(ZSFTQ(:,:)/XRHODREF(:,:,IKB)      - PSFRV(:,:) - PSFRV_WALL(:,:)&
-           - PSFRV_ROOF(:,:))).GT.1.0E-6) STOP ("Wrong Q flux partition")
+   IF ( MAXVAL(ABS(ZSFTH(:,:)/XCPD/XRHODREF(:,:,IKB) - PSFTH(:,:) - PSFTH_WALL(:,:) - PSFTH_ROOF(:,:))).GT.1.0E-6 ) &
+     CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'GROUND_PARAM_n', 'Wrong H flux partition' )
+   IF ( MAXVAL(ABS(ZSFTQ(:,:)/XRHODREF(:,:,IKB)      - PSFRV(:,:) - PSFRV_WALL(:,:) - PSFRV_ROOF(:,:))).GT.1.0E-6 ) &
+     CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'GROUND_PARAM_n', 'Wrong Q flux partition' )
    !
 ELSE
    !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 1384ee513..064d1c6be 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -834,7 +834,6 @@ IF(LEN_TRIM(YLIMAFILE)>0)THEN
     WRITE(ILUOUT0,FMT=*)
     !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','Pb in MACC/CAMS file')
-    STOP
   END IF
 END IF
 !
diff --git a/src/MNH/read_chem_data_cams_case.f90 b/src/MNH/read_chem_data_cams_case.f90
index 05335fc92..3a1c62dff 100644
--- a/src/MNH/read_chem_data_cams_case.f90
+++ b/src/MNH/read_chem_data_cams_case.f90
@@ -1066,15 +1066,18 @@ WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successf
 
 CONTAINS
 !
-!     #############################
-      SUBROUTINE HANDLE_ERR(STATUS)
-!     #############################
-     INTEGER(KIND=CDFINT) STATUS
-     IF (STATUS .NE. NF90_NOERR) THEN
-        PRINT *, NF90_STRERROR(STATUS)
-     STOP 'Stopped'
-     ENDIF
-     END SUBROUTINE HANDLE_ERR
+! #############################
+  subroutine handle_err(istatus)
+! #############################
+    use mode_msg
+
+    integer(kind=CDFINT) istatus
+
+    if ( istatus /= NF90_NOERR ) then
+      call Print_msg( NVERB_FATAL, 'IO', 'HANDLE_ERR', NF90_STRERROR(istatus) )
+    end if
+
+  end subroutine handle_err
 !
 !
 !     #############################################
diff --git a/src/MNH/read_chem_data_mozart_case.f90 b/src/MNH/read_chem_data_mozart_case.f90
index e11f1c03a..2dfdb0e70 100644
--- a/src/MNH/read_chem_data_mozart_case.f90
+++ b/src/MNH/read_chem_data_mozart_case.f90
@@ -769,15 +769,18 @@ WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successf
 !
 CONTAINS
 !
-!     #############################
-      SUBROUTINE HANDLE_ERR(STATUS)
-!     #############################
-     INTEGER(KIND=CDFINT) STATUS
-     IF (STATUS .NE. NF90_NOERR) THEN
-        PRINT *, NF90_STRERROR(STATUS)
-     STOP 'Stopped'
-     ENDIF
-     END SUBROUTINE HANDLE_ERR
+! #############################
+  subroutine handle_err(istatus)
+! #############################
+    use mode_msg
+
+    integer(kind=CDFINT) istatus
+
+    if ( istatus /= NF90_NOERR ) then
+      call Print_msg( NVERB_FATAL, 'IO', 'HANDLE_ERR', NF90_STRERROR(istatus) )
+    end if
+
+  end subroutine handle_err
 !
 !
 !     #############################################
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index f2070f6a0..9e99477d3 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -845,7 +845,7 @@ IF (MEAN_COUNT /= 0) THEN
   CALL IO_Field_write(TPFILE,TZFIELD,XWM_MAX)
 !
   !
-  ! Calculation of mean horizontal wind speed and 
+  ! Calculation of mean horizontal wind speed and
   ! wind direction based on average components
   !
   XWIFF_MEAN = SQRT((MXF(XUM_MEAN)/MEAN_COUNT)**2 + (MYF(XVM_MEAN)/MEAN_COUNT)**2)
@@ -855,7 +855,8 @@ IF (MEAN_COUNT /= 0) THEN
      XWIDD_MEAN(:,:,:) = XWIDD_MEAN(:,:,:) - 360.0
   ENDWHERE
   !
-  IF ((MINVAL(XWIDD_MEAN).LT.0.0).OR.(MAXVAL(XWIDD_MEAN).GT.360.0)) STOP ("Wrong wind direction") 
+  IF ( MINVAL(XWIDD_MEAN) < 0. .OR. MAXVAL(XWIDD_MEAN) > 360. ) &
+    call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LFIFM_n', 'Wrong wind direction' )
   !
   TZFIELD%CMNHNAME   = 'WIFFME'
   TZFIELD%CLONGNAME  = 'WIFFME'
@@ -867,7 +868,7 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CLONGNAME  = 'WIDDME'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_horizontal mean wind direction (degrees from north)'
-  CALL IO_Field_write(TPFILE,TZFIELD,XWIDD_MEAN)  
+  CALL IO_Field_write(TPFILE,TZFIELD,XWIDD_MEAN)
   !
   TZFIELD%CMNHNAME   = 'WIFFMAX'
   TZFIELD%CLONGNAME  = 'WIFFMAX'
@@ -882,7 +883,7 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_horizontal maximum wind direction'
   CALL IO_Field_write(TPFILE,TZFIELD,XWIDD_MAX)
   XWIDD_MAX(:,:,:)=XNEGUNDEF
-!  
+!
   TZFIELD%NGRID      = 1
   TZFIELD = TFIELDMETADATA(                          &
     CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
-- 
GitLab