From ae5ec3312b0c5691c56b43a7e671f81bc8bb20bb Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 14 Mar 2019 11:12:25 +0100
Subject: [PATCH] Philippe 14/03/2019: correct ZWS when variable not present in
 file

---
 src/MNH/ini_ls.f90                  | 18 ++++++++++++++----
 src/MNH/ini_modeln.f90              |  3 ++-
 src/MNH/modd_fieldn.f90             |  3 +++
 src/MNH/read_all_data_grib_case.f90 | 13 ++++++++-----
 src/MNH/read_field.f90              | 19 +++++++++++++++----
 src/MNH/spawn_field2.f90            | 18 ++++++++++++++----
 src/MNH/spawn_model2.f90            |  7 ++++---
 src/SURFEX/coupling_seafluxn.F90    | 16 +++++++++++++---
 8 files changed, 73 insertions(+), 24 deletions(-)

diff --git a/src/MNH/ini_ls.f90 b/src/MNH/ini_ls.f90
index 4addd03ac..2d61ca905 100644
--- a/src/MNH/ini_ls.f90
+++ b/src/MNH/ini_ls.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2019 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.
 !-----------------------------------------------------------------
 !     ######################
@@ -83,6 +83,7 @@ END MODULE MODI_INI_LS
 !!      Original        22/09/98
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !!
 !! 
 !-------------------------------------------------------------------------------
@@ -90,6 +91,7 @@ END MODULE MODI_INI_LS
 !*       0.    DECLARATIONS
 !
 USE MODD_CONF
+USE MODD_FIELD_n, only: XZWS_DEFAULT
 USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_TIME ! for type DATE_TIME
 !
@@ -122,7 +124,8 @@ LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md ev
 !
 !*       0.2   declarations of local variables
 !
-!NONE
+CHARACTER(LEN=15) :: YVAL
+INTEGER           :: IRESP
 !
 !-------------------------------------------------------------------------------
 !
@@ -143,7 +146,14 @@ CALL IO_READ_FIELD(TPINIFILE,'LSUM', PLSUM)
 CALL IO_READ_FIELD(TPINIFILE,'LSVM', PLSVM)
 CALL IO_READ_FIELD(TPINIFILE,'LSWM', PLSWM)
 CALL IO_READ_FIELD(TPINIFILE,'LSTHM',PLSTHM)
-CALL IO_READ_FIELD(TPINIFILE,'ZWS',PLSZWSM)
+CALL IO_READ_FIELD(TPINIFILE,'ZWS',PLSZWSM, IRESP)
+!If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+!ZWS is present in files since MesoNH 5.4.2
+IF ( IRESP/=0 ) THEN
+  WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+  CALL PRINT_MSG(NVERB_WARNING,'IO','INI_LS','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+  PLSZWSM(:,:) = XZWS_DEFAULT
+END IF
 !
 IF (HGETRVM == 'READ') THEN         ! LS-vapor                                    
   CALL IO_READ_FIELD(TPINIFILE,'LSRVM',PLSRVM)
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index c879f7b8b..74312b192 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -283,6 +283,7 @@ END MODULE MODI_INI_MODEL_n
 !  P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments of READ_FIELD
 !!                   02/2019 C.Lac add rain fraction as an output field
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file (set to XZWS_DEFAULT)
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -847,7 +848,7 @@ END IF
 ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ;     XSVT  = 0.
 ALLOCATE(XRSVS(IIU,IJU,IKU,NSV));     XRSVS = 0.
 ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0
-ALLOCATE(XZWS(IIU,IJU)) ;     XZWS  = -1.
+ALLOCATE(XZWS(IIU,IJU)) ;             XZWS(:,:) = XZWS_DEFAULT
 !
 IF (LPASPOL) THEN
   ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) )
diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90
index 1bfaab894..92e3b89c6 100644
--- a/src/MNH/modd_fieldn.f90
+++ b/src/MNH/modd_fieldn.f90
@@ -52,6 +52,7 @@
 !!                   02/2019 C.Lac add rain fraction as an output field
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 06/03/2019: correct XZWS entry
+!  P. Wautelet 14/03/2019: add XZWS_DEFAULT parameter
 !!
 !-------------------------------------------------------------------------------
 !
@@ -61,6 +62,8 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
+REAL, PARAMETER :: XZWS_DEFAULT = 2. ! Default value for XZWS: 2 meters
+
 TYPE FIELD_t
   REAL, DIMENSION(:,:),   POINTER :: XZWS=>NULL()    ! significant sea wave
 !  REAL, DIMENSION(:,:,:), POINTER :: XUT=>NULL(),XVT=>NULL(),XWT=>NULL()
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index e8dcc36b6..ead976f34 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1998-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2019 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.
 !-----------------------------------------------------------------
 !     #################################
@@ -129,6 +129,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !!         Pergaud  : 2018 add GFS
 !!                   01/2019 (G.Delautier via Q.Rodier) for GRIB2 ARPEGE and AROME from EPYGRAM
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -153,7 +154,7 @@ USE MODI_CH_AER_INIT_SOA
 USE MODI_INI_CTURB
 USE MODI_CH_OPEN_INPUT
 !
-USE MODD_FIELD_n, ONLY: XZWS
+USE MODD_FIELD_n, ONLY: XZWS, XZWS_DEFAULT
 USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_CONF
 USE MODD_CONF_n
@@ -284,6 +285,7 @@ INTEGER  :: ITIME
 INTEGER  :: IDATE
 INTEGER  :: ITIMESTEP
 CHARACTER(LEN=10) :: CSTEPUNIT
+CHARACTER(LEN=15)  :: YVAL
 !chemistery field
 CHARACTER(LEN=16)                  :: YPRE_MOC="PRE_MOC1.nam"
 INTEGER, DIMENSION(:), ALLOCATABLE :: INUMGRIB, INUMLEV  ! grib
@@ -583,9 +585,10 @@ SELECT CASE (IMODEL)
       CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=229)
       !
       IF(INUM < 0) THEN
+        WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
         WRITE (ILUOUT0,'(A)')' | !!! WARNING !!! Sea wave height is missing in '// &
-               'the GRIB file - the default value of 2 meters is used'
-        XZWS = 2.0       
+               'the GRIB file - the default value of '//TRIM(YVAL)//' meters is used'
+        XZWS = XZWS_DEFAULT
       ELSE
         GFIND=.TRUE.
       END IF
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 15878a3b6..32672d22f 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -72,7 +72,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PRTKEMS         ! tke adv source
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABST          ! pressure at t
 REAL, DIMENSION(:,:,:,:),  INTENT(OUT) :: PRT,PSVT        ! moist and scalar
                                                           ! variables at t
-REAL, DIMENSION(:,:),      INTENT(OUT) :: PZWS
+REAL, DIMENSION(:,:),      INTENT(INOUT) :: PZWS
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
@@ -239,6 +239,7 @@ END MODULE MODI_READ_FIELD
 !!          P. Wautelet 01/2019  corrected intent of PDUM,PDVM,PDWM (OUT->INOUT)
 !  P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments (bugfix: PPABSM was intent(OUT))
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !!-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -253,6 +254,7 @@ USE MODD_CST
 USE MODD_CTURB
 USE MODD_DUST
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_FIELD_n,         only: XZWS_DEFAULT
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE
 #endif
@@ -332,7 +334,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PRTKEMS         ! tke adv source
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABST          ! pressure at t
 REAL, DIMENSION(:,:,:,:),  INTENT(OUT) :: PRT,PSVT        ! moist and scalar
                                                           ! variables at t
-REAL, DIMENSION(:,:),      INTENT(OUT) :: PZWS
+REAL, DIMENSION(:,:),      INTENT(INOUT) :: PZWS
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
@@ -391,6 +393,7 @@ INTEGER                      :: JT           ! loop index
 LOGICAL                      :: GLSOURCE     ! switch for the source term (for ini_ls and ini_lb)
 CHARACTER(LEN=2)             :: INDICE
 CHARACTER(LEN=3)             :: YFRC         ! To mark the different forcing dates
+CHARACTER(LEN=15)            :: YVAL
 REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK        ! to compute supersaturation
 TYPE(TFIELDDATA)             :: TZFIELD
 !
@@ -463,9 +466,17 @@ END SELECT
 !
 SELECT CASE(HGETZWS)
   CASE('READ')
-  CALL IO_READ_FIELD(TPINIFILE,'ZWS',PZWS)
+    CALL IO_READ_FIELD(TPINIFILE,'ZWS',PZWS,IRESP)
+    !If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+    !ZWS is present in files since MesoNH 5.4.2
+    IF ( IRESP/=0 ) THEN
+      WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+      CALL PRINT_MSG(NVERB_WARNING,'IO','READ_FIELD','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+      PZWS(:,:) = XZWS_DEFAULT
+    END IF
+
   CASE('INIT')
-  PZWS(:,:)=0.
+    PZWS(:,:)=0.
 END SELECT 
 !
 SELECT CASE(HGETRVT)             ! vapor
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index b49d86cc6..c029da290 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 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.
 !#######################
 MODULE MODI_SPAWN_FIELD2
@@ -153,6 +153,7 @@ END MODULE MODI_SPAWN_FIELD2
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Modification 05/03/2018 (J.Escobar) bypass gridnesting special case KD(X/Y)RATIO == 1 not parallelized
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -168,7 +169,7 @@ USE MODD_CST
 USE MODD_CONF_n,          ONLY:  CONF_MODEL
 USE MODD_DUST,            ONLY: CDUSTNAMES
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_FIELD_n,         ONLY:  FIELD_MODEL
+USE MODD_FIELD_n,         ONLY: FIELD_MODEL, XZWS_DEFAULT
 USE MODD_IO_ll,           ONLY : TFILEDATA
 USE MODD_LATZ_EDFLX
 USE MODD_LBC_n,           ONLY:  LBC_MODEL
@@ -190,6 +191,7 @@ USE MODE_FIELD,           ONLY: TFIELDDATA,TYPEREAL
 USE MODE_FMREAD
 USE MODE_IO_ll,           ONLY: UPCASE
 USE MODE_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
 USE MODE_THERMO
@@ -273,6 +275,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZPABST1,ZHUT1
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRT1
 LOGICAL :: GUSERV
 !
+CHARACTER(LEN=15) :: YVAL
 CHARACTER(LEN=2)  :: INDICE
 INTEGER           :: I
 TYPE(TFIELDDATA)             :: TZFIELD
@@ -760,7 +763,14 @@ IF (PRESENT(TPSONFILE)) THEN
   PVT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   CALL IO_READ_FIELD(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t
   PWT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'ZWS',ZWORK2D) ! 
+  CALL IO_READ_FIELD(TPSONFILE,'ZWS',ZWORK2D,IRESP) !
+  !If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+  !ZWS is present in files since MesoNH 5.4.2
+  IF ( IRESP/=0 ) THEN
+    WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+    CALL PRINT_MSG(NVERB_WARNING,'IO','SPAWN_FIELD2','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+    ZWORK2D(:,:) = XZWS_DEFAULT
+  END IF
   PZWS(KIB2:KIE2,KJB2:KJE2) = ZWORK2D(KIB1:KIE1,KJB1:KJE1)
   !
   ! moist variables
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 2811911fc..bf6627bc5 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 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.
 !########################
 MODULE MODI_SPAWN_MODEL2
@@ -192,6 +192,7 @@ END MODULE MODI_SPAWN_MODEL2
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -704,7 +705,7 @@ ALLOCATE(ZJ(IIU,IJU,IKU))
 !
 !*       4.2   Prognostic (and diagnostic) variables (module MODD_FIELD2) :
 !
-ALLOCATE(XZWS(IIU,IJU))
+ALLOCATE(XZWS(IIU,IJU)); XZWS(:,:) = XZWS_DEFAULT
 ALLOCATE(XLSZWSM(IIU,IJU))
 ALLOCATE(XUT(IIU,IJU,IKU))
 ALLOCATE(XVT(IIU,IJU,IKU))
diff --git a/src/SURFEX/coupling_seafluxn.F90 b/src/SURFEX/coupling_seafluxn.F90
index f7fc56d80..a7c421d68 100644
--- a/src/SURFEX/coupling_seafluxn.F90
+++ b/src/SURFEX/coupling_seafluxn.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     ###############################################################################
 SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
@@ -50,7 +50,8 @@ SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
 !!      Modified    03/2014 : M.N. Bouin possibility of wave parameters from external source
 !!      Modified    11/2014 : J. Pianezze : add currents for wave coupling
 !!      Modified    02/2019 : S. Bielli Sea salt : significant sea wave height influences salt emission; 5 salt modes
-!!                                       
+!!      Modified    03/2019 : P. Wautelet: correct ZWS when variable not present in file
+!!
 !!---------------------------------------------------------------------
 !
 !
@@ -74,6 +75,10 @@ USE MODD_WATER_PAR,  ONLY : XEMISWAT, XEMISWATICE
 !
 USE MODD_WATER_PAR, ONLY : XALBSEAICE
 !
+#ifdef SFX_MNH
+USE MODD_FIELD_n, only: XZWS_DEFAULT
+#endif
+!
 !
 USE MODI_WATER_FLUX
 USE MODI_MR98
@@ -341,8 +346,13 @@ END IF
 #endif
 ! if HS value is undef : constant value and alert message
 IF (ALL(ZHS==XUNDEF)) THEN
+#ifdef SFX_MNH
+ ZHS(:) = XZWS_DEFAULT
+ WRITE (ILUOUT,*) 'WARNING : no HS values from ECMWF or WW3, then it is initialized to a constant value of XZWS_DEFAULT m'
+#else
  ZHS(:)=2.
  WRITE (ILUOUT,*) 'WARNING : no HS values from ECMWF or WW3, then it is initialized to a constant value of 2 m'
+#endif
 END IF
 !
 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- 
GitLab