From 03228fe12ea857c68ac919ae809004bb5d1b4320 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Tue, 5 Jul 2022 15:43:50 +0200
Subject: [PATCH] S. Riette 05/07/2022 some cleaning

---
 docs/TODO                                     | 62 +++++++-----------
 src/arome/ext/apl_arome.F90                   |  4 +-
 src/arome/ext/aro_shallow_mf.F90              |  6 +-
 src/arome/ext/aro_shallow_mf.h                |  4 +-
 src/arome/ext/aro_turb_mnh.F90                | 11 +---
 src/arome/ext/aro_turb_mnh.h                  |  4 +-
 ...mode_ice4_sedimentation_split_momentum.F90 | 64 +++++++++++--------
 src/common/turb/mode_compute_updraft.F90      |  4 ++
 8 files changed, 78 insertions(+), 81 deletions(-)

diff --git a/docs/TODO b/docs/TODO
index 46bf4632a..56195acbb 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -1,7 +1,9 @@
-Module de clés namelists PHYEX
-Une solution serait de créer un module propre à PHYEX qui contiendrait des clés de contrôle de haut niveau
-  pour la physique. Ce module serait initialisé dans Méso-NH à partir de clés actuellement en dehors
-  de la physique.
+Module de clés namelists PHYEX. Des modules sont assez généraux et utilisés ailleurs dans Méso-NH (répertoire aux)
+  - Une solution serait de créer un module propre à PHYEX qui contiendrait des clés de contrôle de haut niveau
+    pour la physique. Ce module serait initialisé dans Méso-NH à partir de clés actuellement en dehors
+    de la physique.
+  - Une autre solution serait de supprimer ces modules de PHYEX et de recevoir ces quelques clés en argument (ex modd_lunit?)
+  - si certains modules contiennent des clés purement physiques et d'autres purement dynamique, on pourrait scinder le module
 
 Dependencies:
   - définir les interfaces propres
@@ -9,15 +11,21 @@ Dependencies:
   - liste dans document Interfaces
   - pour AROME placés, en attendant, dans phyex/externals
 
-Clé de compilation REPRO48 + REPRO55 ajoutées pour permettre de reproduire le cycle 48 MNH-5.5.0, elles:
-  - contournent des corrections de bug
-  - modifient l'organisation de calculs
-  - REPRO48 reproduit les résultats obtenus avant l'introduction de la fraction précipitante froide dans l'ajustement
-Utilisation des clés:
-    - REPRO48 seule: la version de code qui sera retenue à la fin est celle de Méso-NH 5.5
-    - REPRO55 seule: la version de code qui sera retenue à la fin est celle du cycle 48 d'AROME
-    - defined(REPRO48) || defined(REPRO55): la version de code qui sera retenue à la fin est nouvelle
-Ces clés devront être supprimées
+Intégration de PHYEX dans des cycles/versions officielles:
+- Clés de compilation
+  - Clé de compilation REPRO48 + REPRO55 ajoutées pour permettre de reproduire le cycle 48 MNH-5.5.0, elles:
+      - contournent des corrections de bug
+      - modifient l'organisation de calculs
+      - REPRO48 reproduit les résultats obtenus avant l'introduction de la fraction précipitante froide dans l'ajustement
+  - Utilisation des clés:
+        - REPRO48 seule: la version de code qui sera retenue à la fin est celle de Méso-NH 5.5
+        - REPRO55 seule: la version de code qui sera retenue à la fin est celle du cycle 48 d'AROME
+        - defined(REPRO48) || defined(REPRO55): la version de code qui sera retenue à la fin est nouvelle
+  - Ces clés devront être supprimées
+- Répertoires ext
+  - Répertoire arome/ext et mesonh/ext contiennent les codes non PHYEX qu'il faut modifier dans le pack pour qu'il puisse être compilé.
+  - Ce répertoire devra être vidé à la fin du phasage, les modifications nécessaires ayadevront avoir été fournies par ailleurs
+- modd_spp_type est pour l'instant dans mpa/micro/externals mais n'est pas de la microphysique
 
 Ecrire doc sur marche à suivre pour intégrer un nouveau développement:
   - dev dans MNH à faire en array-syntax
@@ -30,11 +38,6 @@ Ecrire doc sur marche à suivre pour intégrer un nouveau développement:
 
 Merge pb:
   - rain_ice_old a rebrancher dans Meso-NH
-  - rain_ice_red: le cas test MesoNH n'est pas bit repro (diffs > 1% sur rapports de melange)
-                  sur la modif src/mesonh/rain_ice_red au commit bdd10dd (First rain_ice new/red merge)
-  - shallow_mf (appels dans aro_shallow et arp_shallow):
-         Dans Méso-NH: shallow_mf doit être appelé avec PDX=XDXHAT(1) et PDY=XDYHAT(1)
-         Dans AROME/ARP: où trouver la taille de maille?
 
 Pb identifiés à corriger plus tard:
   - deposition devrait être déplacée dans ice4_tendencies
@@ -45,17 +48,9 @@ Pb identifiés à corriger plus tard:
          => à corriger
   - seules quelques options sont testées avec les cas test (par exemple, il faudrait tester RMC01 mais
     l'option n'est pas remontée en namelist)
-  - arome/ini_cmfshall devrait s'appeler ini_param_mfshall
-  - th_r_from_thl_rt appelée partout, il faudrait limiter à OTEST
-  - doute sur le codage de MODD_PRECISION
-  - appel à abort à travers print_msg non testé
-  - indentation inorrecte dans les blocs mnh_expand
-  - sedimentation momentum non branchée (et à trasformer comme sedim_stat)
+  - sedimentation momentum non branchée
   - si possible, modifier ice4_sedimentation_split* dans le même esprit que stat
 
-Répertoire arome/ext et mesonh/ext contiennent les codes non PHYEX qu'il faut modifier dans le pack pour qu'il puisse être compilé.
-Ce répertoire devra être vidé à la fin du phasage, les modifications nécessaires ayadevront avoir été fournies par ailleurs
-
 Budgets/DDH
 - Le code dans budget_DDH devra être transféré dans mode_budget
 - les routines arome specifiques aux budgets sont dans mpa/micro, il faudrait les mettre dans aux
@@ -63,15 +58,4 @@ Budgets/DDH
 - Le code des budgets devrait être revu: pas en phase avec celui de Méso-NH et phasage a priori
   inutile car très peu de code semble réellement utile pour AROME
 
-SPP
-- modd_spp_type est pour l'instant dans mpa/micro/externals mais n'est pas de la microphysique
-
-Nettoyage apl_arome non fait (pb a la compilation) ==> 4 arguments dans aro_turb_mnh supprimés (non utilisés)
-
-turb.F90 : il reste un CALL à SOURCES_NEG_CORRECT à ajouter.
-
-Regarder s'il ne serait pas possible/souhaitable de supprimer modd_lunit de PHYEX. On pourrait se contenter de recevoir le numero d'unité logique
-
-Nettoyage des répertoires aux nécessaire
-
-Initialiser dans AROME la variable ldiag_in_run de MODD_DIAG_IN_RUN pour pouvoir phaser le modd
+Initialiser dans AROME la variable ldiag_in_run de MODD_DIAG_IN_RUN pour pouvoir phaser le modd, ou passer la variable par l'interface
diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90
index 66b261ad8..1af66f4e8 100644
--- a/src/arome/ext/apl_arome.F90
+++ b/src/arome/ext/apl_arome.F90
@@ -2916,6 +2916,7 @@ IF (LMFSHAL) THEN
      & HFRAC_ICE=CFRAC_ICE_SHALLOW_MF,&
      & OMIXUV=LMIXUV, ONOMIXLG=.FALSE.,KSV_LGBEG=0,KSV_LGEND=0,&
      & KTCOUNT=KSTEP+1, PTSTEP=ZDT,&
+     & PDX=YDGEOMETRY%YREGEO%EDELX, PDY=YDGEOMETRY%YREGEO%EDELY,&
      & PZZ=ZZZ_,PZZF=ZZZ_F_,&
      & PDZZF=ZDZZ_F_,&
      & PRHODJ=ZRHODJM__(:,1:KLEV),&
@@ -3067,8 +3068,7 @@ IF (LTURB) THEN
    &LDHARATU=LHARATU,CMICRO=CMICRO,PTSTEP=ZDT,&
    & PZZ=ZZZ_,PZZF=ZZZ_F_,&
    & PZZTOP=ZZTOP_,PRHODJ=ZRHODJM__,PTHVREF=ZTHVREFM__,&
-   & PRHODREF=ZRHODREFM__,HINST_SFU='M',&
-   & HMF_UPDRAFT=CMF_UPDRAFT,&
+   & HINST_SFU='M',&
    & PSFTH=ZSFTH_,PSFRV=ZSFRV_,&
    & PSFSV=ZSFSVLIMA_,PSFU=ZSFU_,&
    & PSFV=ZSFV_,PPABSM=ZPABSM__,&
diff --git a/src/arome/ext/aro_shallow_mf.F90 b/src/arome/ext/aro_shallow_mf.F90
index 4a59175ab..869503034 100644
--- a/src/arome/ext/aro_shallow_mf.F90
+++ b/src/arome/ext/aro_shallow_mf.F90
@@ -2,7 +2,7 @@
       SUBROUTINE  ARO_SHALLOW_MF(KKL, KLON,KLEV, KRR, KRRL, KRRI,KSV,     &
                 HMF_UPDRAFT, HMF_CLOUD, HFRAC_ICE, OMIXUV,            &
                 ONOMIXLG,KSV_LGBEG,KSV_LGEND,                         &
-                KTCOUNT, PTSTEP,                                      &
+                KTCOUNT, PTSTEP, PDX, PDY,                            &
                 PZZ, PZZF, PDZZF,                                            &
                 PRHODJ, PRHODREF,                                     &
                 PPABSM, PEXNM,                                        &
@@ -93,6 +93,8 @@ INTEGER,                INTENT(IN)   :: KSV_LGEND ! last  index of lag. tracer
 
 INTEGER,                  INTENT(IN)   :: KTCOUNT  ! Temporal loop counter
 REAL,                     INTENT(IN)   :: PTSTEP   ! Time step
+REAL,                     INTENT(IN)   :: PDX      ! grid size along x-axis
+REAL,                     INTENT(IN)   :: PDY      ! grid size along y-axis
 !
 REAL, DIMENSION(KLON,KLEV),   INTENT(IN)   :: PZZ     ! Height of layer boundaries
 REAL, DIMENSION(KLON,KLEV),   INTENT(IN)   :: PZZF    ! Height of level
@@ -235,7 +237,7 @@ ZIMPL=1.
      &PTHL_UP=PTHL_UP,PRT_UP=PRT_UP,PRV_UP=PRV_UP,PRC_UP=PRC_UP,PRI_UP=PRI_UP,            &
      &PU_UP=PU_UP, PV_UP=PV_UP, PTHV_UP=PTHV_UP, PW_UP=PW_UP,                             &
      &PFRAC_UP=PFRAC_UP,PEMF=PEMF,PDETR=ZDETR,PENTR=ZENTR,                                &
-     &KKLCL=IKLCL,KKETL=IKETL,KKCTL=IKCTL,PDX=0.,PDY=0.                                   )
+     &KKLCL=IKLCL,KKETL=IKETL,KKCTL=IKCTL,PDX=PDX,PDY=PDY                                 )
 !
 !
 !------------------------------------------------------------------------------
diff --git a/src/arome/ext/aro_shallow_mf.h b/src/arome/ext/aro_shallow_mf.h
index 07cdb7a7d..b86c03fd4 100644
--- a/src/arome/ext/aro_shallow_mf.h
+++ b/src/arome/ext/aro_shallow_mf.h
@@ -2,7 +2,7 @@ INTERFACE
  SUBROUTINE ARO_SHALLOW_MF(KKL, KLON,KLEV, KRR, KRRL, KRRI,KSV,&
  & HMF_UPDRAFT, HMF_CLOUD, HFRAC_ICE, OMIXUV,&
  & ONOMIXLG,KSV_LGBEG,KSV_LGEND,&
- & KTCOUNT, PTSTEP,&
+ & KTCOUNT, PTSTEP, PDX, PDY,&
  & PZZ, PZZF,PDZZF,&
  & PRHODJ, PRHODREF,&
  & PPABSM, PEXNM,&
@@ -31,6 +31,8 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KSV_LGBEG
 INTEGER(KIND=JPIM), INTENT(IN) :: KSV_LGEND
 INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT
 REAL(KIND=JPRB), INTENT(IN) :: PTSTEP
+REAL(KIND=JPRB), INTENT(IN) :: PDX
+REAL(KIND=JPRB), INTENT(IN) :: PDY
 REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(IN) :: PZZ
 REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(IN) :: PZZF
 REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(IN) :: PDZZF
diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90
index 240fa330d..0139d7eb6 100644
--- a/src/arome/ext/aro_turb_mnh.F90
+++ b/src/arome/ext/aro_turb_mnh.F90
@@ -2,12 +2,12 @@
       SUBROUTINE  ARO_TURB_MNH( KKA,KKU,KKL,KLON,KLEV,KRR,KRRL,KRRI,KSV, &
                 KTCOUNT, KGRADIENTS, LDHARATU, CMICRO, PTSTEP,                  &
                 PZZ, PZZF, PZZTOP,                                    &
-                PRHODJ, PTHVREF,PRHODREF,HINST_SFU,HMF_UPDRAFT,       &
+                PRHODJ, PTHVREF,HINST_SFU,                            &
                 PSFTH,PSFRV,PSFSV,PSFU,PSFV,                          &
                 PPABSM,PUM,PVM,PWM,PTKEM,PEPSM,PSVM,PSRCM,            &
                 PTHM,PRM,                                &
                 PRUS,PRVS,PRWS,PRTHS,PRRS,PRSVSIN,PRSVS,PRTKES,PRTKES_OUT,PREPSS, &
-                ZHGRAD,PSIGS,OSUBG_COND,                                     &
+                PHGRAD,PSIGS,OSUBG_COND,                                     &
                 PFLXZTHVMF,PLENGTHM,PLENGTHH,MFMOIST,                 &
                 PDRUS_TURB,PDRVS_TURB,                                &
                 PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB,                 &
@@ -100,7 +100,6 @@ INTEGER,                  INTENT(IN)   :: KTCOUNT  ! Temporal loop counter
 INTEGER,                  INTENT(IN)   :: KGRADIENTS  ! Number of stored horizontal gradients
 LOGICAL,                  INTENT(IN)   :: LDHARATU ! HARATU scheme active
 CHARACTER (LEN=4),        INTENT(IN)   :: CMICRO  ! Microphysics scheme
-CHARACTER (LEN=4), INTENT(IN)     :: HMF_UPDRAFT   ! Type of mass flux scheme
 REAL,                     INTENT(IN)   :: PTSTEP   ! Time step
 !
 !
@@ -113,8 +112,6 @@ REAL, DIMENSION(KLON,1,KLEV+2),   INTENT(INOUT)   :: PRHODJ  !Dry density * Jaco
 REAL, DIMENSION(KLON,1,KLEV+2),   INTENT(INOUT)   :: MFMOIST  !Moist mass flux from Dual scheme
 REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT)     ::  PTHVREF   ! Virtual Potential
                                         ! Temperature of the reference state
-REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT)     ::  PRHODREF  ! dry density of the
-                                        ! reference state
 CHARACTER(LEN=1)           , INTENT(IN)   ::  HINST_SFU    ! temporal location of the
                                                       ! surface friction flux
 !
@@ -229,11 +226,10 @@ REAL,DIMENSION(KLON,1,KLEV+2)         :: ZWRC       ! cloud water flux
 REAL,DIMENSION(KLON,1,KLEV+2,KSV)     :: ZWSV,ZSVM,ZRSVS,ZDRSVS_TURB       ! scalar flux
 REAL,DIMENSION(KLON,1,KLEV+2)         :: ZZZ        ! Local value of PZZ
 REAL,DIMENSION(KLON,1,KLEV+2,KRR)     :: ZRM,ZRRS
-REAL,DIMENSION(KLON,1,KLEV+2,KGRADIENTS) :: ZHGRAD    ! Horizontal Gradients
+REAL,DIMENSION(KLON,1,KLEV+2,KGRADIENTS) :: PHGRAD    ! Horizontal Gradients
 !
 REAL, DIMENSION(KLON,1), TARGET     ::  ZERO, ZONE
 !
-CHARACTER(LEN=4)   ::  CL
 !------------------------------------------------------------------------------
 !
 !*       1.     PRELIMINARY COMPUTATIONS
@@ -377,7 +373,6 @@ ENDDO
 !
 CALL VERTICAL_EXTEND(PRHODJ)
 CALL VERTICAL_EXTEND(PTHVREF)
-CALL VERTICAL_EXTEND(PRHODREF)
 CALL VERTICAL_EXTEND(PPABSM)
 CALL VERTICAL_EXTEND(PUM)
 CALL VERTICAL_EXTEND(PVM)
diff --git a/src/arome/ext/aro_turb_mnh.h b/src/arome/ext/aro_turb_mnh.h
index a09d5ddbb..87d261e86 100644
--- a/src/arome/ext/aro_turb_mnh.h
+++ b/src/arome/ext/aro_turb_mnh.h
@@ -2,7 +2,7 @@ INTERFACE
  SUBROUTINE ARO_TURB_MNH( KKA,KKU,KKL,KLON,KLEV, KRR, KRRL, KRRI,KSV,&
  & KTCOUNT,KGRADIENTS, LDHARATU, CMICRO, PTSTEP,&
  & PZZ, PZZF, PZZTOP,&
- & PRHODJ, PTHVREF,PRHODREF,HINST_SFU,HMF_UPDRAFT,&
+ & PRHODJ, PTHVREF,HINST_SFU,&
  & PSFTH,PSFRV,PSFSV,PSFU,PSFV,&
  & PPABSM,PUM,PVM,PWM,PTKEM,PEPSM,PSVM,PSRCM,&
  & PTHM,PRM,&
@@ -40,7 +40,6 @@ REAL(KIND=JPRB), DIMENSION(KLON),        INTENT(IN) :: PZZTOP
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PRHODJ
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(INOUT)  :: MFMOIST
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PTHVREF
-REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PRHODREF
 CHARACTER*1 , INTENT(IN) :: HINST_SFU
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PSFTH,PSFRV
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PSFU,PSFV
@@ -70,7 +69,6 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRTHLS_TURB
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRRTS_TURB
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(OUT) :: PDRSVS_TURB
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PFLXZTHVMF
-CHARACTER (LEN=4), INTENT(IN)   :: HMF_UPDRAFT 
 LOGICAL , INTENT(INOUT) :: OSUBG_COND
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2),  INTENT(OUT)   :: PDP
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV+2),  INTENT(OUT)   :: PTP
diff --git a/src/common/micro/mode_ice4_sedimentation_split_momentum.F90 b/src/common/micro/mode_ice4_sedimentation_split_momentum.F90
index 43d3094e4..498375058 100644
--- a/src/common/micro/mode_ice4_sedimentation_split_momentum.F90
+++ b/src/common/micro/mode_ice4_sedimentation_split_momentum.F90
@@ -7,11 +7,11 @@ MODULE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM
 IMPLICIT NONE
 CONTAINS
 SUBROUTINE ICE4_SEDIMENTATION_SPLIT_MOMENTUM(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
-                                   &PTSTEP, KRR, OSEDIC, OMOMENTUM, &
-                                   &PSEA, PTOWN, PDZZ, &
+                                   &PTSTEP, KRR, OSEDIC, OMOMENTUM, PDZZ, &
                                    &PRHODREF, PPABST, PTHT, PRHODJ, &
                                    &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,&
                                    &PINPRC, PINPRR, PINPRI, PINPRS, PINPRG, &
+                                   &PSEA, PTOWN,  &
                                    &PINPRH, PRHT, PRHS, PFPR)
 !!
 !!**  PURPOSE
@@ -53,8 +53,6 @@ REAL,                         INTENT(IN)              :: PTSTEP  ! Double Time s
 INTEGER,                      INTENT(IN)              :: KRR     ! Number of moist variable
 LOGICAL,                      INTENT(IN)              :: OSEDIC  ! Switch for droplet sedim.
 LOGICAL,                      INTENT(IN)              :: OMOMENTUM  ! Switch to use momentum flux
-REAL, DIMENSION(KIT,KJT),     INTENT(IN)              :: PSEA    ! Sea Mask
-REAL, DIMENSION(KIT,KJT),     INTENT(IN)              :: PTOWN   ! Fraction that is town
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PDZZ    ! Layer thikness (m)
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PRHODREF! Reference density
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PPABST  ! absolute pressure at t
@@ -75,6 +73,8 @@ REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRR  ! Rain instant
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRI  ! Pristine ice instant precip
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRS  ! Snow instant precip
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRG  ! Graupel instant precip
+REAL, DIMENSION(KIT,KJT),         OPTIONAL, INTENT(IN)    :: PSEA    ! Sea Mask
+REAL, DIMENSION(KIT,KJT),         OPTIONAL, INTENT(IN)    :: PTOWN   ! Fraction that is town
 REAL, DIMENSION(KIT,KJT),         OPTIONAL, INTENT(OUT)   :: PINPRH  ! Hail instant precip
 REAL, DIMENSION(KIT,KJT,KKT),     OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
 REAL, DIMENSION(KIT,KJT,KKT),     OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
@@ -131,16 +131,24 @@ IF (PRESENT(PFPR)) PFPR(:,:,:,:) = 0.
 !
 IF (OSEDIC) THEN
   ZRAY(:,:,:)   = 0.
-  ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
-
-  DO JK=KKTB, KKTE
-    ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
-    ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
-    ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
-    ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
-    ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
-            PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
-  END DO
+  ZLBC(:,:,:)   = XLBC(1)
+  ZFSEDC(:,:,:) = XFSEDC(1)
+  ZCONC3D(:,:,:)= XCONC_LAND
+  ZCONC_TMP(:,:)= XCONC_LAND
+  IF (PRESENT(PSEA)) THEN
+    ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
+    DO JK=KKTB, KKTE
+      ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
+      ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
+      ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
+      ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
+      ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
+                     & PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
+    END DO
+  ELSE
+    ZCONC3D(:,:,:) = XCONC_LAND
+    ZRAY(:,:,:)  = 0.5*(GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)))
+  END IF
   ZRAY(:,:,:)      = MAX(1.,ZRAY(:,:,:))
   ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:))
 ENDIF
@@ -152,12 +160,16 @@ ENDIF
 !  For optimization we consider each variable separately
 !
 ! External tendecies
-IF (OSEDIC) ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)*ZINVTSTEP
+IF (OSEDIC) THEN
+  ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)*ZINVTSTEP
+ENDIF
 ZPRRS(:,:,:) = PRRS(:,:,:)-PRRT(:,:,:)*ZINVTSTEP
 ZPRIS(:,:,:) = PRIS(:,:,:)-PRIT(:,:,:)*ZINVTSTEP
 ZPRSS(:,:,:) = PRSS(:,:,:)-PRST(:,:,:)*ZINVTSTEP
 ZPRGS(:,:,:) = PRGS(:,:,:)-PRGT(:,:,:)*ZINVTSTEP
-IF ( KRR == 7 ) ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)*ZINVTSTEP
+IF ( KRR == 7 ) THEN
+  ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)*ZINVTSTEP
+END IF
 !
 ! mr values inside the time-splitting loop
 ZRCT(:,:,:) = PRCT(:,:,:)
@@ -165,7 +177,9 @@ ZRRT(:,:,:) = PRRT(:,:,:)
 ZRIT(:,:,:) = PRIT(:,:,:)
 ZRST(:,:,:) = PRST(:,:,:)
 ZRGT(:,:,:) = PRGT(:,:,:)
-IF (KRR==7) ZRHT(:,:,:) = PRHT(:,:,:)
+IF (KRR==7) THEN
+  ZRHT(:,:,:) = PRHT(:,:,:)
+END IF
 !
 DO JK = KKTB , KKTE
   ZW(:,:,JK) =1./(PRHODREF(:,:,JK)* PDZZ(:,:,JK))
@@ -189,7 +203,7 @@ IF (OSEDIC) THEN
     CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                           &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                           &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                           &2, &
                           &ZRCT, PRCS, ZWSED, PINPRC, ZPRCS, ZMOMC, ZMOMC_EXT, &
                           &ZRAY, ZLBC, ZFSEDC, ZCONC3D, PFPR=PFPR)
@@ -213,7 +227,7 @@ DO WHILE (ANY(ZREMAINT>0.))
   CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                           &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                           &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                           &3, &
                           &ZRRT, PRRS, ZWSED, PINPRR, ZPRRS, ZMOMR, ZMOMR_EXT, &
                           &PFPR=PFPR)
@@ -236,7 +250,7 @@ DO WHILE (ANY(ZREMAINT>0.))
   CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                           &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                           &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                           &4, &
                           &ZRIT, PRIS, ZWSED, PINPRI, ZPRIS, ZMOMI, ZMOMI_EXT, PFPR=PFPR)
   FIRST = .FALSE.
@@ -258,7 +272,7 @@ DO WHILE (ANY(ZREMAINT>0.))
   CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                           &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                           &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                           &5, &
                           &ZRST, PRSS, ZWSED, PINPRS, ZPRSS, ZMOMS, ZMOMS_EXT, PFPR=PFPR)
   FIRST = .FALSE.
@@ -280,7 +294,7 @@ DO WHILE (ANY(ZREMAINT>0.))
   CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                           &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                           &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                          &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                           &6, &
                           &ZRGT, PRGS, ZWSED, PINPRG, ZPRGS, ZMOMG, ZMOMG_EXT, PFPR=PFPR)
   FIRST = .FALSE.
@@ -303,7 +317,7 @@ IF (KRR==7) THEN
     CALL INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                             &OMOMENTUM, FIRST .AND. OMOMENTUM, &
                             &ISEDIM, GSEDIM, I1, I2, I3, XSPLIT_MAXCFL, ZREMAINT, &
-                            &PRHODREF, ZW, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                            &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, &
                             &7, &
                             &ZRHT, PRHS, ZWSED, PINPRH, ZPRHS, ZMOMH, ZMOMH_EXT, PFPR=PFPR)
     FIRST = .FALSE.
@@ -320,7 +334,7 @@ CONTAINS
   SUBROUTINE INTERNAL_SEDIM_SPLI(KIT, KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, &
                                 &OMOMENTUM, OCOMPUTE_MOM, &
                                 &KSEDIM, LDSEDIM, I1, I2, I3, PMAXCFL, PREMAINT, &
-                                &PRHODREF, POORHODZ, PDZZ, PPABST, PTHT, PSEA, PTOWN, PTSTEP, &
+                                &PRHODREF, POORHODZ, PDZZ, PPABST, PTHT, PTSTEP, &
                                 &KSPE, &
                                 &PRXT, PRXS, PWSED, PINPRX, PPRXS, PMOM, PMOM_EXT, &
                                 &PRAY, PLBC, PFSEDC, PCONC3D, PFPR)
@@ -346,8 +360,6 @@ CONTAINS
     REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: POORHODZ ! One Over (Rhodref times delta Z)
     REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PDZZ ! layer thikness (m)
     REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PPABST
-    REAL, DIMENSION(KIT,KJT),     INTENT(IN)              :: PSEA    ! Sea Mask
-    REAL, DIMENSION(KIT,KJT),     INTENT(IN)              :: PTOWN   ! Fraction that is town
     REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PTHT
     REAL,                         INTENT(IN)              :: PTSTEP  ! total timestep
     INTEGER,                      INTENT(IN)              :: KSPE ! 1 for rc, 2 for rr...
diff --git a/src/common/turb/mode_compute_updraft.F90 b/src/common/turb/mode_compute_updraft.F90
index f3b480826..784afbe68 100644
--- a/src/common/turb/mode_compute_updraft.F90
+++ b/src/common/turb/mode_compute_updraft.F90
@@ -75,6 +75,7 @@ USE MODE_TH_R_FROM_THL_RT_1D, ONLY: TH_R_FROM_THL_RT_1D
 USE MODI_SHUMAN_MF, ONLY: MZM_MF, MZF_MF, GZ_M_W_MF
 
 USE MODE_COMPUTE_BL89_ML, ONLY: COMPUTE_BL89_ML
+USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 
@@ -332,6 +333,9 @@ IF (OENTR_DETR) THEN
 
   ! Mass flux at KKB level (updraft triggered if PSFTH>0.)
   IF (LGZ) THEN
+    IF(PDX==0. .OR. PDY==0.) THEN
+      CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'COMPUTE_UPDRAFT', 'PDX or PDY is NULL with option LGZ!')
+    ENDIF
     ZSURF(:)=TANH(XGZ*SQRT(PDX*PDY)/ZLUP)
   ELSE
     ZSURF(:)=1.
-- 
GitLab