From ca3150236905a46130c2a8c96faee78425eaf6c1 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 9 Aug 2022 11:54:34 +0200
Subject: [PATCH] Quentin 09/08/2022: Packing mode_bl_depth_diag and
 mode_sbl_depth

---
 src/common/turb/mode_bl_depth_diag.F90 |  52 +++++-----
 src/common/turb/mode_sbl_depth.F90     | 126 ++++++++++++-------------
 2 files changed, 86 insertions(+), 92 deletions(-)

diff --git a/src/common/turb/mode_bl_depth_diag.F90 b/src/common/turb/mode_bl_depth_diag.F90
index 73c472275..b054c0b8b 100644
--- a/src/common/turb/mode_bl_depth_diag.F90
+++ b/src/common/turb/mode_bl_depth_diag.F90
@@ -55,19 +55,19 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 !
 IMPLICIT NONE
 !
-TYPE(DIMPHYEX_t),                   INTENT(IN)           :: D
-REAL, DIMENSION(D%NIT,D%NJT),       INTENT(IN)           :: PSURF        ! surface flux
-REAL, DIMENSION(D%NIT,D%NJT),       INTENT(IN)           :: PZS          ! orography
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)           :: PFLUX        ! flux
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)           :: PZZ          ! altitude of flux points
-REAL,                               INTENT(IN)           :: PFTOP_O_FSURF! Flux at BL top / Surface flux
-REAL, DIMENSION(D%NIT,D%NJT),       INTENT(OUT)          :: BL_DEPTH_DIAG3D
+TYPE(DIMPHYEX_t),              INTENT(IN)           :: D
+REAL, DIMENSION(D%NIJT),       INTENT(IN)           :: PSURF        ! surface flux
+REAL, DIMENSION(D%NIJT),       INTENT(IN)           :: PZS          ! orography
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)           :: PFLUX        ! flux
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)           :: PZZ          ! altitude of flux points
+REAL,                          INTENT(IN)           :: PFTOP_O_FSURF! Flux at BL top / Surface flux
+REAL, DIMENSION(D%NIJT),       INTENT(OUT)          :: BL_DEPTH_DIAG3D
 !
 !
 !       0.2  declaration of local variables
 !
-INTEGER :: JI,JJ,JK ! loop counters
-INTEGER :: IKB,IKE,IIB,IIE,IJB,IJE   ! index value for the Beginning
+INTEGER :: JIJ,JK ! loop counters
+INTEGER :: IKB,IKE,IIJB,IIJE   ! index value for the Beginning
 REAL    :: ZFLX     ! flux at top of BL
 !
 !----------------------------------------------------------------------------
@@ -76,34 +76,30 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',0,ZHOOK_HANDLE)
 IKB=D%NKTB
 IKE=D%NKTE
-IIE=D%NIEC
-IIB=D%NIBC
-IJE=D%NJEC
-IJB=D%NJBC
+IIJE=D%NIJE
+IIJB=D%NIJB 
 !
-BL_DEPTH_DIAG3D(:,:) = 0.
+BL_DEPTH_DIAG3D(:) = 0.
 !
 
-DO JJ=1,IJE
-  DO JI=1,IIE
-    IF (PSURF(JI,JJ)==0.) CYCLE
+DO JIJ=IIJB,IIJE
+    IF (PSURF(JIJ)==0.) CYCLE
     DO JK=IKB,IKE,D%NKL
-      IF (PZZ(JI,JJ,JK-D%NKL)<=PZS(JI,JJ)) CYCLE
-      ZFLX = PSURF(JI,JJ) * PFTOP_O_FSURF
-      IF ( (PFLUX(JI,JJ,JK)-ZFLX)*(PFLUX(JI,JJ,JK-D%NKL)-ZFLX) <= 0. ) THEN
-        BL_DEPTH_DIAG3D(JI,JJ) = (PZZ  (JI,JJ,JK-D%NKL) - PZS(JI,JJ))     &
-                         + (PZZ  (JI,JJ,JK) - PZZ  (JI,JJ,JK-D%NKL))    &
-                         * (ZFLX            - PFLUX(JI,JJ,JK-D%NKL)  )  &
-                         / (PFLUX(JI,JJ,JK) - PFLUX(JI,JJ,JK-D%NKL)   )
+      IF (PZZ(JIJ,JK-D%NKL)<=PZS(JIJ)) CYCLE
+      ZFLX = PSURF(JIJ) * PFTOP_O_FSURF
+      IF ( (PFLUX(JIJ,JK)-ZFLX)*(PFLUX(JIJ,JK-D%NKL)-ZFLX) <= 0. ) THEN
+        BL_DEPTH_DIAG3D(JIJ) = (PZZ  (JIJ,JK-D%NKL) - PZS(JIJ))     &
+                         + (PZZ  (JIJ,JK) - PZZ  (JIJ,JK-D%NKL))    &
+                         * (ZFLX          - PFLUX(JIJ,JK-D%NKL)  )  &
+                         / (PFLUX(JIJ,JK) - PFLUX(JIJ,JK-D%NKL)   )
         EXIT
       END IF
     END DO
-  END DO
 END DO
 !
-!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
-BL_DEPTH_DIAG3D(IIB:IIE,IJB:IJE) = BL_DEPTH_DIAG3D(IIB:IIE,IJB:IJE) / (1. - PFTOP_O_FSURF)
-!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+BL_DEPTH_DIAG3D(IIJB:IIJE) = BL_DEPTH_DIAG3D(IIJB:IIJE) / (1. - PFTOP_O_FSURF)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 IF (LHOOK) CALL DR_HOOK('BL_DEPTH_DIAG_3D',1,ZHOOK_HANDLE)
 END SUBROUTINE BL_DEPTH_DIAG_3D
diff --git a/src/common/turb/mode_sbl_depth.F90 b/src/common/turb/mode_sbl_depth.F90
index 93c7fd5c7..162575319 100644
--- a/src/common/turb/mode_sbl_depth.F90
+++ b/src/common/turb/mode_sbl_depth.F90
@@ -58,29 +58,29 @@ IMPLICIT NONE
 !
 TYPE(DIMPHYEX_t),       INTENT(IN)    :: D
 TYPE(CSTURB_t),         INTENT(IN)    :: CSTURB
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PZZ       ! altitude of flux levels
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PFLXU     ! u'w'
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PFLXV     ! v'w'
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)    :: PWTHV     ! buoyancy flux
-REAL, DIMENSION(D%NIT,D%NJT),   INTENT(IN)    :: PLMO      ! Monin-Obukhov length
-REAL, DIMENSION(D%NIT,D%NJT),   INTENT(INOUT) :: PSBL_DEPTH! boundary layer height
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PZZ       ! altitude of flux levels
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PFLXU     ! u'w'
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PFLXV     ! v'w'
+REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN)    :: PWTHV     ! buoyancy flux
+REAL, DIMENSION(D%NIJT),   INTENT(IN)    :: PLMO      ! Monin-Obukhov length
+REAL, DIMENSION(D%NIJT),   INTENT(INOUT) :: PSBL_DEPTH! boundary layer height
 !
 !-------------------------------------------------------------------------------
 !
 !       0.2  declaration of local variables
 !
 !
-INTEGER                                  :: JLOOP,JI,JJ,JK    ! loop counter
-INTEGER :: IKB,IKE,IIB,IIE,IJB,IJE   ! index value for the Beginning
-REAL, DIMENSION(D%NIT,D%NJT) :: ZQ0      ! surface buoyancy flux
-REAL, DIMENSION(D%NIT,D%NJT) :: ZWU      ! surface friction u'w'
-REAL, DIMENSION(D%NIT,D%NJT) :: ZWV      ! surface friction v'w'
-REAL, DIMENSION(D%NIT,D%NJT) :: ZUSTAR2  ! surface friction
-REAL, DIMENSION(D%NIT,D%NJT) :: ZSBL_DYN ! SBL wih dynamical criteria
-REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZWIND
+INTEGER                                  :: JLOOP,JIJ,JK    ! loop counter
+INTEGER :: IKB,IKE,IIJB,IIJE   ! index value for the Beginning
+REAL, DIMENSION(D%NIJT) :: ZQ0      ! surface buoyancy flux
+REAL, DIMENSION(D%NIJT) :: ZWU      ! surface friction u'w'
+REAL, DIMENSION(D%NIJT) :: ZWV      ! surface friction v'w'
+REAL, DIMENSION(D%NIJT) :: ZUSTAR2  ! surface friction
+REAL, DIMENSION(D%NIJT) :: ZSBL_DYN ! SBL wih dynamical criteria
+REAL, DIMENSION(D%NIJT,D%NKT) :: ZWIND
                                          ! intermediate wind for SBL calculation
-REAL, DIMENSION(D%NIT,D%NJT) :: ZSBL_THER! SBL wih thermal   criteria
-REAL, DIMENSION(D%NIT,D%NJT) :: ZA       ! ponderation coefficient
+REAL, DIMENSION(D%NIJT) :: ZSBL_THER! SBL wih thermal   criteria
+REAL, DIMENSION(D%NIJT) :: ZA       ! ponderation coefficient
 !----------------------------------------------------------------------------
 !
 !* initialisations
@@ -91,82 +91,80 @@ IF (LHOOK) CALL DR_HOOK('SBL_DEPTH',0,ZHOOK_HANDLE)
 !
 IKB=D%NKTB
 IKE=D%NKTE
-IIE=D%NIEC
-IIB=D%NIBC
-IJE=D%NJEC
-IJB=D%NJBC
+IIJE=D%NIJE
+IIJB=D%NIJB 
 !
-!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
-ZWU(IIB:IIE,IJB:IJE) = PFLXU(IIB:IIE,IJB:IJE,IKB)
-ZWV(IIB:IIE,IJB:IJE) = PFLXV(IIB:IIE,IJB:IJE,IKB)
-ZQ0(IIB:IIE,IJB:IJE) = PWTHV(IIB:IIE,IJB:IJE,IKB)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZWU(IIJB:IIJE) = PFLXU(IIJB:IIJE,IKB)
+ZWV(IIJB:IIJE) = PFLXV(IIJB:IIJE,IKB)
+ZQ0(IIJB:IIJE) = PWTHV(IIJB:IIJE,IKB)
 !
-ZUSTAR2(IIB:IIE,IJB:IJE) = SQRT(ZWU(IIB:IIE,IJB:IJE)**2+ZWV(IIB:IIE,IJB:IJE)**2)
+ZUSTAR2(IIJB:IIJE) = SQRT(ZWU(IIJB:IIJE)**2+ZWV(IIJB:IIJE)**2)
 !
-!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !----------------------------------------------------------------------------
 !
 !* BL and SBL diagnosed with friction criteria
 !
-!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-ZWIND(IIB:IIE,IJB:IJE,:)=SQRT(PFLXU(IIB:IIE,IJB:IJE,:)**2+PFLXV(IIB:IIE,IJB:IJE,:)**2)
-!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
-CALL BL_DEPTH_DIAG(D,ZUSTAR2,PZZ(:,:,IKB),ZWIND,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_DYN)
-!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
-ZSBL_DYN(IIB:IIE,IJB:IJE) = CSTURB%XSBL_O_BL * ZSBL_DYN(IIB:IIE,IJB:IJE)
-!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+ZWIND(IIJB:IIJE,1:D%NKT)=SQRT(PFLXU(IIJB:IIJE,1:D%NKT)**2+PFLXV(IIJB:IIJE,1:D%NKT)**2)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT)
+CALL BL_DEPTH_DIAG(D,ZUSTAR2,PZZ(:,IKB),ZWIND,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_DYN)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZSBL_DYN(IIJB:IIJE) = CSTURB%XSBL_O_BL * ZSBL_DYN(IIJB:IIJE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !----------------------------------------------------------------------------
 !
 !* BL and SBL diagnosed with buoyancy flux criteria
 !
-CALL BL_DEPTH_DIAG(D,ZQ0,PZZ(:,:,IKB),PWTHV,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_THER)
-!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
-ZSBL_THER(IIB:IIE,IJB:IJE)= CSTURB%XSBL_O_BL * ZSBL_THER(IIB:IIE,IJB:IJE)
-!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
+CALL BL_DEPTH_DIAG(D,ZQ0,PZZ(:,IKB),PWTHV,PZZ,CSTURB%XFTOP_O_FSURF,ZSBL_THER)
+!$mnh_expand_array(JIJ=IIJB:IIJE)
+ZSBL_THER(IIJB:IIJE)= CSTURB%XSBL_O_BL * ZSBL_THER(IIJB:IIJE)
+!$mnh_end_expand_array(JIJ=IIJB:IIJE)
 !
 !----------------------------------------------------------------------------
 !
 !* SBL depth
 !
-PSBL_DEPTH(:,:) = 0.
-!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-WHERE (ZSBL_THER(IIB:IIE,IJB:IJE)> 0. .AND. ZSBL_DYN(IIB:IIE,IJB:IJE)> 0.) 
-  PSBL_DEPTH = MIN(ZSBL_THER(IIB:IIE,IJB:IJE),ZSBL_DYN(IIB:IIE,IJB:IJE))
+PSBL_DEPTH(:) = 0.
+!$mnh_expand_where(JIJ=IIJB:IIJE)
+WHERE (ZSBL_THER(IIJB:IIJE)> 0. .AND. ZSBL_DYN(IIJB:IIJE)> 0.) 
+  PSBL_DEPTH = MIN(ZSBL_THER(IIJB:IIJE),ZSBL_DYN(IIJB:IIJE))
 END WHERE
-!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !
-!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-WHERE (ZSBL_THER(IIB:IIE,IJB:IJE)> 0. .AND. ZSBL_DYN(IIB:IIE,IJB:IJE)==0.) 
-  PSBL_DEPTH(IIB:IIE,IJB:IJE) = ZSBL_THER(IIB:IIE,IJB:IJE)
+!$mnh_expand_where(JIJ=IIJB:IIJE)
+WHERE (ZSBL_THER(IIJB:IIJE)> 0. .AND. ZSBL_DYN(IIJB:IIJE)==0.) 
+  PSBL_DEPTH(IIJB:IIJE) = ZSBL_THER(IIJB:IIJE)
 END WHERE
-!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !
-!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-WHERE (ZSBL_THER(IIB:IIE,IJB:IJE)==0. .AND. ZSBL_DYN(IIB:IIE,IJB:IJE)> 0.) 
-  PSBL_DEPTH(IIB:IIE,IJB:IJE) = ZSBL_DYN(IIB:IIE,IJB:IJE)
+!$mnh_expand_where(JIJ=IIJB:IIJE)
+WHERE (ZSBL_THER(IIJB:IIJE)==0. .AND. ZSBL_DYN(IIJB:IIJE)> 0.) 
+  PSBL_DEPTH(IIJB:IIJE) = ZSBL_DYN(IIJB:IIJE)
 END WHERE
-!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !
 DO JLOOP=1,5
-  !$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-  WHERE (PLMO(IIB:IIE,IJB:IJE)/=XUNDEF .AND. ABS(PLMO(IIB:IIE,IJB:IJE))>=0.01 )
-    ZA(IIB:IIE,IJB:IJE) = TANH(2.*PSBL_DEPTH(IIB:IIE,IJB:IJE)/PLMO(IIB:IIE,IJB:IJE))**2
-    PSBL_DEPTH(IIB:IIE,IJB:IJE) = 0.2 * PSBL_DEPTH(IIB:IIE,IJB:IJE) + 0.8 * ((1.-ZA(IIB:IIE,IJB:IJE)) &
-                                * ZSBL_DYN(IIB:IIE,IJB:IJE) + ZA(IIB:IIE,IJB:IJE) * ZSBL_THER(IIB:IIE,IJB:IJE) )
+  !$mnh_expand_where(JIJ=IIJB:IIJE)
+  WHERE (PLMO(IIJB:IIJE)/=XUNDEF .AND. ABS(PLMO(IIJB:IIJE))>=0.01 )
+    ZA(IIJB:IIJE) = TANH(2.*PSBL_DEPTH(IIJB:IIJE)/PLMO(IIJB:IIJE))**2
+    PSBL_DEPTH(IIJB:IIJE) = 0.2 * PSBL_DEPTH(IIJB:IIJE) + 0.8 * ((1.-ZA(IIJB:IIJE)) &
+                                * ZSBL_DYN(IIJB:IIJE) + ZA(IIJB:IIJE) * ZSBL_THER(IIJB:IIJE) )
   END WHERE
-  !$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
+  !$mnh_end_expand_where(JIJ=IIJB:IIJE)
 END DO
-!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-WHERE (ABS(PLMO(IIB:IIE,IJB:IJE))<=0.01 ) 
-  PSBL_DEPTH(IIB:IIE,IJB:IJE) = ZSBL_THER(IIB:IIE,IJB:IJE)
+!$mnh_expand_where(JIJ=IIJB:IIJE)
+WHERE (ABS(PLMO(IIJB:IIJE))<=0.01 ) 
+  PSBL_DEPTH(IIJB:IIJE) = ZSBL_THER(IIJB:IIJE)
 END WHERE
-!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-!$mnh_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
-WHERE (PLMO(IIB:IIE,IJB:IJE)==XUNDEF)
-  PSBL_DEPTH(IIB:IIE,IJB:IJE) = ZSBL_DYN(IIB:IIE,IJB:IJE)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE)
+!$mnh_expand_where(JIJ=IIJB:IIJE)
+WHERE (PLMO(IIJB:IIJE)==XUNDEF)
+  PSBL_DEPTH(IIJB:IIJE) = ZSBL_DYN(IIJB:IIJE)
 END WHERE
-!$mnh_end_expand_where(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_end_expand_where(JIJ=IIJB:IIJE)
 !
 !----------------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('SBL_DEPTH',1,ZHOOK_HANDLE)
-- 
GitLab