From dbec66a65d015169529ddbd6d85b70675b6c7406 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Tue, 4 Oct 2022 12:53:22 +0200
Subject: [PATCH] S. Riette 4 octo 2022: bugfixes for uncomplete NPROMA blocs
 in shallow_mf

---
 src/common/turb/mode_compute_bl89_ml.F90  | 31 ++++++++++++++++-------
 src/common/turb/mode_tridiag_massflux.F90 |  4 ++-
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/common/turb/mode_compute_bl89_ml.F90 b/src/common/turb/mode_compute_bl89_ml.F90
index 16a202a3c..75b7dd185 100644
--- a/src/common/turb/mode_compute_bl89_ml.F90
+++ b/src/common/turb/mode_compute_bl89_ml.F90
@@ -80,6 +80,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZDELTVPT,ZHLVPT
 
 INTEGER :: J1D                  !horizontal loop counter
 INTEGER :: JKK                  !loop counters
+INTEGER :: JI, JK
 REAL    :: ZTEST,ZTEST0,ZTESTM  !test for vectorization
 !-------------------------------------------------------------------------------------
 !
@@ -89,17 +90,21 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('COMPUTE_BL89_ML',0,ZHOOK_HANDLE)
 !
 CALL DZM_MF(D, PVPT(:,:), ZDELTVPT(:,:))
-ZDELTVPT(:,D%NKA)=0.
-WHERE (ABS(ZDELTVPT(:,:))<CSTURB%XLINF)
-  ZDELTVPT(:,:)=CSTURB%XLINF
+ZDELTVPT(D%NIJB:D%NIJE,D%NKA)=0.
+!$mnh_expand_where(JI=D%NIJB:D%NIJE,JK=D%NKTB:D%NKTE)
+WHERE (ABS(ZDELTVPT(D%NIJB:D%NIJE,:))<CSTURB%XLINF)
+  ZDELTVPT(D%NIJB:D%NIJE,:)=CSTURB%XLINF
 END WHERE
+!$mnh_end_expand_where(JI=D%NIJB:D%NIJE,JK=D%NKTB:D%NKTE)
 !
 CALL MZM_MF(D, PVPT(:,:), ZHLVPT(:,:))
 !
 !We consider that gradient between mass levels KKB and KKB+KKL is the same as
 !the gradient between flux level KKB and mass level KKB
-ZDELTVPT(:,D%NKB)=PDZZ2D(:,D%NKB)*ZDELTVPT(:,D%NKB+D%NKL)/PDZZ2D(:,D%NKB+D%NKL)
-ZHLVPT(:,D%NKB)=PVPT(:,D%NKB)-ZDELTVPT(:,D%NKB)*0.5
+!$mnh_expand_array(JI=D%NIJB:D%NIJE)
+ZDELTVPT(D%NIJB:D%NIJE,D%NKB)=PDZZ2D(D%NIJB:D%NIJE,D%NKB)*ZDELTVPT(D%NIJB:D%NIJE,D%NKB+D%NKL)/PDZZ2D(D%NIJB:D%NIJE,D%NKB+D%NKL)
+ZHLVPT(D%NIJB:D%NIJE,D%NKB)=PVPT(D%NIJB:D%NIJE,D%NKB)-ZDELTVPT(D%NIJB:D%NIJE,D%NKB)*0.5
+!$mnh_end_expand_array(JI=D%NIJB:D%NIJE)
 !
 !
 !
@@ -108,11 +113,15 @@ ZHLVPT(:,D%NKB)=PVPT(:,D%NKB)-ZDELTVPT(:,D%NKB)*0.5
 !
 
 IF (OUPORDN.EQV..TRUE.) THEN 
- ZINTE(:)=PTKEM_DEP(:)
+ !$mnh_expand_array(JI=D%NIJB:D%NIJE)
+ ZINTE(D%NIJB:D%NIJE)=PTKEM_DEP(D%NIJB:D%NIJE)
+ !$mnh_end_expand_array(JI=D%NIJB:D%NIJE)
  PLWORK=0.
  ZTESTM=1.
  IF(OFLUX)THEN
-   ZVPT_DEP(:)=ZHLVPT(:,KK) ! departure point is on flux level
+   !$mnh_expand_array(JI=D%NIJB:D%NIJE)
+   ZVPT_DEP(D%NIJB:D%NIJE)=ZHLVPT(D%NIJB:D%NIJE,KK) ! departure point is on flux level
+   !$mnh_end_expand_array(JI=D%NIJB:D%NIJE)
    !We must compute what happens between flux level KK and mass level KK
    DO J1D=D%NIJB,D%NIJE
      ZTEST0=0.5+SIGN(0.5,ZINTE(J1D)) ! test if there's energy to consume
@@ -142,7 +151,9 @@ IF (OUPORDN.EQV..TRUE.) THEN
       ZINTE(J1D) = ZINTE(J1D) - ZPOTE(J1D)
    ENDDO
  ELSE
-   ZVPT_DEP(:)=PVPT(:,KK) ! departure point is on mass level
+   !$mnh_expand_array(JI=D%NIJB:D%NIJE)
+   ZVPT_DEP(D%NIJB:D%NIJE)=PVPT(D%NIJB:D%NIJE,KK) ! departure point is on mass level
+   !$mnh_end_expand_array(JI=D%NIJB:D%NIJE)
  ENDIF
 
  DO JKK=KK+D%NKL,D%NKE,D%NKL
@@ -181,7 +192,9 @@ ENDIF
 
 IF (OUPORDN.EQV..FALSE.) THEN 
  IF(OFLUX) CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_BL89_ML','OFLUX option not coded for downward mixing length')
- ZINTE(:)=PTKEM_DEP(:)
+ !$mnh_expand_array(JI=D%NIJB:D%NIJE)
+ ZINTE(D%NIJB:D%NIJE)=PTKEM_DEP(D%NIJB:D%NIJE)
+ !$mnh_end_expand_array(JI=D%NIJB:D%NIJE)
  PLWORK=0.
  ZTESTM=1.
  DO JKK=KK,D%NKB,-D%NKL
diff --git a/src/common/turb/mode_tridiag_massflux.F90 b/src/common/turb/mode_tridiag_massflux.F90
index c2145ba59..a52b6a92f 100644
--- a/src/common/turb/mode_tridiag_massflux.F90
+++ b/src/common/turb/mode_tridiag_massflux.F90
@@ -161,7 +161,9 @@ INTEGER                              :: JK, JI            ! loop counter
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('TRIDIAG_MASSFLUX',0,ZHOOK_HANDLE)
 CALL MZM_MF(D, PRHODJ, ZMZM_RHODJ)
-ZRHODJ_DFDT_O_DZ = ZMZM_RHODJ*PDFDT/PDZZ
+!$mnh_expand_array(JI=D%NIJB:D%NIJE,JK=D%NKTB:D%NKTE)
+ZRHODJ_DFDT_O_DZ(D%NIJB:D%NIJE,:) = ZMZM_RHODJ(D%NIJB:D%NIJE,:)*PDFDT(D%NIJB:D%NIJE,:)/PDZZ(D%NIJB:D%NIJE,:)
+!$mnh_end_expand_array(JI=D%NIJB:D%NIJE,JK=D%NKTB:D%NKTE)
 !
 ZA=0.
 ZB=0.
-- 
GitLab