From 45413cea360ddf139badf0f93c1db5feab56c139 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Fri, 18 Mar 2022 09:43:25 +0100
Subject: [PATCH] =?UTF-8?q?S=C3=A9bastien=20Riette=2018/03/2022=20Phasing?=
 =?UTF-8?q?=20with=20P.=20Marguinaud's=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Small modifications in ice_adjust and condensation
---
 src/arome/ext/aro_adjust.F90           |  4 +--
 src/common/micro/condensation.F90      | 40 ++++++++++++------------
 src/common/micro/ice_adjust.F90        | 42 ++++++++++++++------------
 src/common/micro/modi_condensation.F90 | 12 ++++----
 src/common/micro/modi_ice_adjust.F90   | 38 ++++++++++++-----------
 5 files changed, 73 insertions(+), 63 deletions(-)

diff --git a/src/arome/ext/aro_adjust.F90 b/src/arome/ext/aro_adjust.F90
index 6198dc6bc..8888d5930 100644
--- a/src/arome/ext/aro_adjust.F90
+++ b/src/arome/ext/aro_adjust.F90
@@ -443,7 +443,7 @@ IF (KRR==6) THEN
     & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, &
     & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2),  &
     & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), &
-    & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, &
+    & PTH=ZRS(:,:,:,0), PTHS=PTHS,OCOMPUTE_SRC=.TRUE.,PSRCS=PSRCS, PCLDFR=PCLDFR, &
     & PRR=ZRS(:,:,:,3), &
     & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), &
     & PRS=ZRS(:,:,:,5), &
@@ -463,7 +463,7 @@ ELSE
     & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, &
     & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), &
     & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), &
-    & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, &
+    & PTH=ZRS(:,:,:,0), PTHS=PTHS,OCOMPUTE_SRC=.TRUE.,PSRCS=PSRCS, PCLDFR=PCLDFR, &
     & PRR=ZRS(:,:,:,3), &
     & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), &
     & PRS=ZRS(:,:,:,5), &
diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90
index b5beb21a6..4c2bf5fd0 100644
--- a/src/common/micro/condensation.F90
+++ b/src/common/micro/condensation.F90
@@ -5,13 +5,13 @@
 !-----------------------------------------------------------------
 !     ######spl
     SUBROUTINE CONDENSATION(D, CST, ICEP, NEB, &
-       HFRAC_ICE, HCONDENS, HLAMBDA3,                                                  &
-       PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT,    &
-       PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,                               &
-       OSIGMAS, OCND2, PSIGQSAT,                                                       &
-       PLV, PLS, PCPH,                                                                 &
-       PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,                                         &
-       PICE_CLD_WGT)
+                           &HFRAC_ICE, HCONDENS, HLAMBDA3,                                                  &
+                           &PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT,    &
+                           &PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,                      &
+                           &OSIGMAS, OCND2, PSIGQSAT,                                                       &
+                           &PLV, PLS, PCPH,                                                                 &
+                           &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,                                         &
+                           &PICE_CLD_WGT)
 !   ################################################################################
 !
 !!
@@ -153,25 +153,24 @@ REAL,    DIMENSION(D%NIT,D%NJT)  :: ZTMIN           ! minimum Temp. related to I
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZLV, ZLS, ZCPD
 REAL :: ZGCOND, ZAUTC, ZAUTI, ZGAUV, ZGAUC, ZGAUI, ZGAUTC, ZGAUTI, ZCRIAUTI   ! Used for Gaussian PDF integration
 REAL :: ZLVS                                      ! thermodynamics
-REAL, DIMENSION(D%NIB:D%NIE) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics
+REAL, DIMENSION(D%NIT) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics
 REAL :: ZLL, DZZ, ZZZ                           ! used for length scales 
 REAL :: ZAH, ZDRW, ZDTL, ZSIG_CONV                     ! related to computation of Sig_s
-REAL, DIMENSION(D%NIB:D%NIE) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s
-REAL, DIMENSION(D%NIB:D%NIE) :: ZCOND
-REAL, DIMENSION(D%NIB:D%NIE) :: ZFRAC           ! Ice fraction
+REAL, DIMENSION(D%NIT) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s
+REAL, DIMENSION(D%NIT) :: ZCOND
+REAL, DIMENSION(D%NIT) :: ZFRAC           ! Ice fraction
 INTEGER  :: INQ1
 REAL :: ZINC
 ! related to OCND2 noise check :
 REAL :: ZRSP,  ZRSW, ZRFRAC, ZRSDIF, ZRCOLD
 ! related to OCND2  ice cloud calulation :
-REAL, DIMENSION(D%NIB:D%NIE) :: ESATW_T
+REAL, DIMENSION(D%NIT) :: ESATW_T
 REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: TCLD
-REAL :: ZDZ(D%NIB:D%NIE), &
-        ZARDUM(D%NIE-D%NIB+1), ZCLDUM(D%NIE-D%NIB+1)
+REAL, DIMENSION(D%NIT) :: ZDZ, ZARDUM, ZCLDUM
 ! end OCND2
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
-INTEGER, DIMENSION(D%NIT) :: IERR
+INTEGER :: IERR
 !
 !
 !*       0.3  Definition of constants :
@@ -300,8 +299,9 @@ DO JK=D%NKTB,D%NKTE
   JKM=MAX(MIN(JK-D%NKL,D%NKTE),D%NKTB)
   DO JJ=D%NJB,D%NJE
     IF (OCND2) THEN
-       ZDZ(D%NIB:D%NIE) = PZZ(D%NIB:D%NIE,JJ,JKP) - &
-                                            PZZ(D%NIB:D%NIE,JJ,JKP-D%NKL)
+       DO JI = D%NIB, D%NIE
+         ZDZ(JI) = PZZ(JI,JJ,JKP) - PZZ(JI,JJ,JKP-D%NKL)
+       ENDDO
        CALL ICECLOUD(D%NIE-D%NIB+1,PPABS(D%NIB,JJ,JK),PZZ(D%NIB,JJ,JK),ZDZ(D%NIB), &
             & PT(D%NIB,JJ,JK),PRV_IN(D%NIB,JJ,JK),1.,-1., &
             & ZCLDUM,1.,TCLD(D%NIB,JJ,JK), &
@@ -329,7 +329,9 @@ DO JK=D%NKTB,D%NKTE
           ZFRAC(JI) = PRI_IN(JI,JJ,JK) / (PRC_IN(JI,JJ,JK)+PRI_IN(JI,JJ,JK))
         ENDIF
       END DO
-      CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(D%NIB:D%NIE), PT(D%NIB:D%NIE,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization
+      DO JI=D%NIB,D%NIE
+        CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(JI), PT(JI,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization
+      ENDDO
     ENDIF
     DO JI=D%NIB,D%NIE
       ZQSL(JI)   = CST%XRD / CST%XRV * ZPV(JI) / ( PPABS(JI,JJ,JK) - ZPV(JI) )
@@ -366,7 +368,7 @@ DO JK=D%NKTB,D%NKTE
         ZLL = ZL(JI,JJ,JK)
         ! standard deviation due to convection
         ZSIG_CONV =0.
-        IF( SIZE(PMFCONV) /= 0) ZSIG_CONV = ZCSIG_CONV * PMFCONV(JI,JJ,JK) / ZA(JI)
+        IF(LMFCONV) ZSIG_CONV = ZCSIG_CONV * PMFCONV(JI,JJ,JK) / ZA(JI)
         ! zsigma should be of order 4.e-4 in lowest 5 km of atmosphere
         ZSIGMA(JI) =  SQRT( MAX( 1.E-25, ZCSIGMA * ZCSIGMA * ZLL*ZLL/(DZZ*DZZ)*(&
              ZA(JI)*ZA(JI)*ZDRW*ZDRW - 2.*ZA(JI)*ZB(JI)*ZDRW*ZDTL + ZB(JI)*ZB(JI)*ZDTL*ZDTL) + &
diff --git a/src/common/micro/ice_adjust.F90 b/src/common/micro/ice_adjust.F90
index d2c9d943a..29b6de043 100644
--- a/src/common/micro/ice_adjust.F90
+++ b/src/common/micro/ice_adjust.F90
@@ -5,18 +5,19 @@
 !-----------------------------------------------------------------
 !     ##########################################################################
       SUBROUTINE ICE_ADJUST (D, CST, ICEP, NEB, BUCONF, KRR,                   &
-                             HFRAC_ICE, HCONDENS, HLAMBDA3,&
-                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
-                             PTSTEP, PSIGQSAT,                                 &
-                             PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,&
-                             PPABST, PZZ,                                      &
-                             PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
-                             PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR,   &
-                             PRR, PRI, PRIS, PRS, PRG, PRH,                    &
-                             POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
-                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
-                             TBUDGETS, KBUDGETS,                               &
-                             PICE_CLD_WGT)
+                            &HFRAC_ICE, HCONDENS, HLAMBDA3,&
+                            &HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
+                            &PTSTEP, PSIGQSAT,                                 &
+                            &PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,&
+                            &PPABST, PZZ,                                      &
+                            &PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
+                            &PRV, PRC, PRVS, PRCS, PTH, PTHS,                  &
+                            &OCOMPUTE_SRC, PSRCS, PCLDFR,   &
+                            &PRR, PRI, PRIS, PRS, PRG, PRH,                    &
+                            &POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
+                            &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
+                            &TBUDGETS, KBUDGETS,                               &
+                            &PICE_CLD_WGT)
 !     #########################################################################
 !
 !!****  *ICE_ADJUST* -  compute the ajustment of water vapor in mixed-phase 
@@ -136,10 +137,10 @@ CHARACTER(LEN=4),         INTENT(IN)    :: HLAMBDA3 ! formulation for lambda3 co
 CHARACTER(LEN=4),         INTENT(IN)    :: HBUNAME  ! Name of the budget
 LOGICAL,                  INTENT(IN)    :: OSUBG_COND ! Switch for Subgrid 
                                                     ! Condensation
-LOGICAL                                 :: OSIGMAS  ! Switch for Sigma_s: 
+LOGICAL,                  INTENT(IN)    :: OSIGMAS  ! Switch for Sigma_s: 
                                                     ! use values computed in CONDENSATION
                                                     ! or that from turbulence scheme
-LOGICAL                                 :: OCND2    ! logical switch to sparate liquid 
+LOGICAL,                  INTENT(IN)    :: OCND2    ! logical switch to sparate liquid 
                                                     ! and ice
                                                     ! more rigid (DEFALT value : .FALSE.)
 CHARACTER(LEN=80),        INTENT(IN)    :: HSUBG_MF_PDF
@@ -172,9 +173,12 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRVS    ! Water vapor m.r.
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PTH     ! Theta to adjust
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)   :: PSRCS   ! Second-order flux
-                                                                                        ! s'rc'/2Sigma_s2 at time t+1
-                                                                                        ! multiplied by Lambda_3
+LOGICAL,                            INTENT(IN)    :: OCOMPUTE_SRC
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(OUT)   :: PSRCS   ! Second-order flux
+                                                                       ! s'rc'/2Sigma_s2 at time t+1
+                                                                       ! multiplied by Lambda_3
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)   :: PCLDFR  ! Cloud fraction          
 !
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT)::  PRIS ! Cloud ice  m.r. at t+1
@@ -199,7 +203,7 @@ REAL, DIMENSION(D%NIT,D%NJT),                OPTIONAL, INTENT(IN)   :: PICE_CLD_
 !
 !
 REAL  :: ZW1,ZW2    ! intermediate fields
-REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) &
                          :: ZT,   &  ! adjusted temperature
                    ZRV, ZRC, ZRI, &  ! adjusted state
                             ZCPH, &  ! guess of the CPh for the mixing
@@ -309,7 +313,7 @@ DO JK=D%NKTB,D%NKTE
         ELSE
           PCLDFR(JI,JJ,JK)  = 0.
         ENDIF
-        IF ( SIZE(PSRCS,3) /= 0 ) THEN
+        IF (OCOMPUTE_SRC) THEN
           PSRCS(JI,JJ,JK) = PCLDFR(JI,JJ,JK)
         END IF
       ENDDO
diff --git a/src/common/micro/modi_condensation.F90 b/src/common/micro/modi_condensation.F90
index 22b37318f..bbcd33283 100644
--- a/src/common/micro/modi_condensation.F90
+++ b/src/common/micro/modi_condensation.F90
@@ -5,12 +5,12 @@
 INTERFACE
 !
        SUBROUTINE CONDENSATION(D, CST, ICEP, NEB, &
-          HFRAC_ICE, HCONDENS, HLAMBDA3, &
-          PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
-          PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,&
-          OSIGMAS, OCND2, PSIGQSAT, &
-          PLV, PLS, PCPH, &
-          PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT)
+                              &HFRAC_ICE, HCONDENS, HLAMBDA3, &
+                              &PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
+                              &PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,&
+                              &OSIGMAS, OCND2, PSIGQSAT, &
+                              &PLV, PLS, PCPH, &
+                              &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT)
 !
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_CST,        ONLY: CST_t
diff --git a/src/common/micro/modi_ice_adjust.F90 b/src/common/micro/modi_ice_adjust.F90
index 9c962de2c..f798792f9 100644
--- a/src/common/micro/modi_ice_adjust.F90
+++ b/src/common/micro/modi_ice_adjust.F90
@@ -5,18 +5,19 @@
 INTERFACE
 !
       SUBROUTINE ICE_ADJUST (D, CST, ICEP, NEB, BUCONF, KRR,                   &
-                             HFRAC_ICE, HCONDENS, HLAMBDA3,&
-                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
-                             PTSTEP, PSIGQSAT,                                 &
-                             PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,&
-                             PPABST, PZZ,                                      &
-                             PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
-                             PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR,   &
-                             PRR, PRI, PRIS, PRS, PRG, PRH,                    &
-                             POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
-                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
-                             TBUDGETS, KBUDGETS,                               &
-                             PICE_CLD_WGT)
+                            &HFRAC_ICE, HCONDENS, HLAMBDA3,&
+                            &HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
+                            &PTSTEP, PSIGQSAT,                                 &
+                            &PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,&
+                            &PPABST, PZZ,                                      &
+                            &PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
+                            &PRV, PRC, PRVS, PRCS, PTH, PTHS,                  &
+                            &OCOMPUTE_SRC, PSRCS, PCLDFR,   &
+                            &PRR, PRI, PRIS, PRS, PRG, PRH,                    &
+                            &POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
+                            &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
+                            &TBUDGETS, KBUDGETS,                               &
+                            &PICE_CLD_WGT)
 USE MODD_BUDGET,         ONLY: TBUDGETDATA, TBUDGETCONF_t
 USE MODD_CST,            ONLY: CST_t
 USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
@@ -40,10 +41,10 @@ CHARACTER(LEN=4),         INTENT(IN)    :: HLAMBDA3 ! formulation for lambda3 co
 CHARACTER(LEN=4),         INTENT(IN)    :: HBUNAME  ! Name of the budget
 LOGICAL,                  INTENT(IN)    :: OSUBG_COND ! Switch for Subgrid
                                                     ! Condensation
-LOGICAL                                 :: OSIGMAS  ! Switch for Sigma_s:
+LOGICAL,                  INTENT(IN)    :: OSIGMAS  ! Switch for Sigma_s:
                                                     ! use values computed in CONDENSATION
                                                     ! or that from turbulence scheme
-LOGICAL                                 :: OCND2    ! logical switch to sparate liquid
+LOGICAL,                  INTENT(IN)    :: OCND2    ! logical switch to sparate liquid
                                                     ! and ice
                                                     ! more rigid (DEFALT value : .FALSE.)
 CHARACTER(LEN=80),        INTENT(IN)    :: HSUBG_MF_PDF
@@ -76,9 +77,12 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRVS    ! Water vapor m.r.
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PTH     ! Theta to adjust
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)   :: PSRCS   ! Second-order flux
-                                                                                        ! s'rc'/2Sigma_s2 at time t+1
-                                                                                        ! multiplied by Lambda_3
+LOGICAL,                            INTENT(IN)    :: OCOMPUTE_SRC
+REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),&
+                MERGE(D%NJT,0,OCOMPUTE_SRC),&
+                MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(OUT)   :: PSRCS   ! Second-order flux
+                                                                       ! s'rc'/2Sigma_s2 at time t+1
+                                                                       ! multiplied by Lambda_3
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)   :: PCLDFR  ! Cloud fraction
 !
 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT)::  PRIS ! Cloud ice  m.r. at t+1
-- 
GitLab