From f40dc1ee901dc871d16fc0efbb645a8281621910 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Fri, 29 Jul 2022 22:30:37 +0200
Subject: [PATCH] Quentin 29/07/2022: Packing turb: mode_tm06_h

---
 src/common/turb/mode_tm06_h.F90 | 63 +++++++++++++++++++++------------
 1 file changed, 41 insertions(+), 22 deletions(-)

diff --git a/src/common/turb/mode_tm06_h.F90 b/src/common/turb/mode_tm06_h.F90
index 7d32fdd62..240b8b311 100644
--- a/src/common/turb/mode_tm06_h.F90
+++ b/src/common/turb/mode_tm06_h.F90
@@ -5,7 +5,7 @@
 MODULE MODE_TM06_H
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE TM06_H(KKB,KKTB,KKTE,PTSTEP,PZZ,PFLXZ,PBL_DEPTH)
+SUBROUTINE TM06_H(D,PTSTEP,PZZ,PFLXZ,PBL_DEPTH)
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !     #################################################################
@@ -46,6 +46,7 @@ SUBROUTINE TM06_H(KKB,KKTB,KKTE,PTSTEP,PZZ,PFLXZ,PBL_DEPTH)
 !          ------------
 !
 USE MODD_PARAMETERS, ONLY : XUNDEF
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 !
 !
 IMPLICIT NONE
@@ -53,23 +54,21 @@ IMPLICIT NONE
 !
 !*      0.1  declarations of arguments
 !
-INTEGER,                INTENT(IN)    :: KKB       ! index of 1st physical level
-                                                   ! close to ground 
-INTEGER,                INTENT(IN)    :: KKTB      ! first physical level in k
-INTEGER,                INTENT(IN)    :: KKTE      ! last physical level in k
+TYPE(DIMPHYEX_t),       INTENT(IN)   :: D
 REAL,                   INTENT(IN)    :: PTSTEP    ! Double time step
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PZZ       ! altitude of flux levels
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PFLXZ     ! heat flux
-REAL, DIMENSION(:,:),   INTENT(INOUT) :: PBL_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)    :: PFLXZ     ! heat flux
+REAL, DIMENSION(D%NIJT),   INTENT(INOUT) :: PBL_DEPTH ! boundary layer height
 !
 !-------------------------------------------------------------------------------
 !
 !       0.2  declaration of local variables
 !
 !
-INTEGER                                  :: JK     ! loop counter
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZFLXZMIN ! minimum of temperature flux 
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZBL_DEPTH! BL depth at previous time-step
+INTEGER                                  :: JK,JI,JJ     ! loop counter
+INTEGER :: IKB,IKTB,IKTE,IIJB,IIJE
+REAL, DIMENSION(D%NIJT) :: ZFLXZMIN ! minimum of temperature flux 
+REAL, DIMENSION(D%NIJT) :: ZBL_DEPTH! BL depth at previous time-step
 REAL                                     :: ZGROWTH  ! maximum BL growth rate
 !----------------------------------------------------------------------------
 !
@@ -80,20 +79,40 @@ ZGROWTH = 2.0 ! (m/s)
 !
 !----------------------------------------------------------------------------
 !
-ZBL_DEPTH(:,:) = PBL_DEPTH(:,:)
-WHERE(ZBL_DEPTH(:,:)==XUNDEF) ZBL_DEPTH(:,:)=0.
-!
-PBL_DEPTH(:,:) = XUNDEF
-ZFLXZMIN (:,:) = PFLXZ(:,:,KKB)
-!
-DO JK=KKTB,KKTE
-  WHERE (PFLXZ(:,:,KKB)>0. .AND. PFLXZ(:,:,JK)<ZFLXZMIN(:,:))
-    PBL_DEPTH(:,:) = PZZ  (:,:,JK) - PZZ(:,:,KKB)
-    ZFLXZMIN (:,:) = PFLXZ(:,:,JK)
+IKTB=D%NKTB          
+IKTE=D%NKTE
+IKB=D%NKB
+IIJE=D%NIJE
+IIJB=D%NIJB
+
+!
+ZBL_DEPTH(IIJB:IIJE) = PBL_DEPTH(IIJB:IIJE)
+!
+!$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
+WHERE(ZBL_DEPTH(IIJB:IIJE)==XUNDEF)
+  ZBL_DEPTH(IIJB:IIJE)=0.
+END WHERE
+!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
+!
+!$mnh_expand_array(JIJ=D%NIJB:D%NIJE)
+PBL_DEPTH(IIJB:IIJE) = XUNDEF
+ZFLXZMIN (IIJB:IIJE) = PFLXZ(IIJB:IIJE,IKB)
+!$mnh_end_expand_array(JIJ=D%NIJB:D%NIJE)
+!
+DO JK=IKTB,IKTE
+!$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
+  WHERE(PFLXZ(IIJB:IIJE,IKB)>0. .AND. PFLXZ(IIJB:IIJE,JK)<ZFLXZMIN(IIJB:IIJE))
+    PBL_DEPTH(IIJB:IIJE) = PZZ  (IIJB:IIJE,JK) - PZZ(IIJB:IIJE,IKB)
+    ZFLXZMIN (IIJB:IIJE) = PFLXZ(IIJB:IIJE,JK)
   END WHERE
+!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
 END DO
 !
-WHERE(PBL_DEPTH(:,:)/=XUNDEF) PBL_DEPTH(:,:)=MIN(PBL_DEPTH(:,:),ZBL_DEPTH(:,:)+ZGROWTH*PTSTEP)
+!$mnh_expand_where(JIJ=D%NIJB:D%NIJE)
+WHERE(PBL_DEPTH(IIJB:IIJE)/=XUNDEF) 
+  PBL_DEPTH(IIJB:IIJE)=MIN(PBL_DEPTH(IIJB:IIJE),ZBL_DEPTH(IIJB:IIJE)+ZGROWTH*PTSTEP)
+END WHERE
+!$mnh_end_expand_where(JIJ=D%NIJB:D%NIJE)
 !
 !----------------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('TM06_H',1,ZHOOK_HANDLE)
-- 
GitLab