From bcf44cffe6461b3e14e5709c4ee5f663fd639a35 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Thu, 2 May 2019 15:03:53 +0200
Subject: [PATCH] Quentin 2/05/2019: parallelization of les_cloud_masksn :
 masks where not applied on processus domain

(cherry picked from commit d7073c560ad682e3c67a06c023706f4caf2d0090)
---
 src/MNH/les_cloud_masksn.f90 | 58 +++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 28 deletions(-)

diff --git a/src/MNH/les_cloud_masksn.f90 b/src/MNH/les_cloud_masksn.f90
index e08d56550..daeb189e9 100644
--- a/src/MNH/les_cloud_masksn.f90
+++ b/src/MNH/les_cloud_masksn.f90
@@ -38,6 +38,7 @@
 !!      P. Aumond        10/2009 Add possibility of user maskS
 !!       F.Couvreux      06/2011 : Conditional sampling
 !!       C.Lac           10/2014 : Correction on user masks   
+!!       Q.Rodier        05/2019 : Missing parallelization 
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -66,7 +67,7 @@ IMPLICIT NONE
 !
 INTEGER :: JK                                  ! vertical loop counter
 INTEGER :: JI                                  ! loop index on masks  
-INTEGER :: IIU, IJU                            ! hor. indices
+INTEGER :: IIU, IJU,IIB,IJB,IIE,IJE            ! hor. indices
 INTEGER :: IKU, KBASE, KTOP                    ! ver. index
 INTEGER :: IRR, IRRC, IRRR, IRRI, IRRS, IRRG   ! moist variables indices
 INTEGER :: JSV                                  ! ind of scalars
@@ -92,6 +93,7 @@ REAL, DIMENSION(:),       ALLOCATABLE :: ZMEANRC
 !-------------------------------------------------------------------------------
 !
 CALL GET_DIM_EXT_ll('B',IIU,IJU)
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 !
 IKU = SIZE(XTHT,3)
 !
@@ -215,8 +217,8 @@ DEALLOCATE(ZWORK1D)
 IF (LLES_NEB_MASK) THEN
   ALLOCATE(LLES_CURRENT_NEB_MASK(IIU,IJU,NLES_K))
   LLES_CURRENT_NEB_MASK (:,:,:) = .FALSE.
-  WHERE ((ZRC_LES>1.E-6 .OR. ZRI_LES>1.E-6) .AND. ZW_LES>0.)
-    LLES_CURRENT_NEB_MASK (:,:,:) = .TRUE.
+  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0.)
+    LLES_CURRENT_NEB_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
   END WHERE
 END IF
 !
@@ -228,9 +230,9 @@ END IF
 IF (LLES_CORE_MASK) THEN
   ALLOCATE(LLES_CURRENT_CORE_MASK(IIU,IJU,NLES_K))
   LLES_CURRENT_CORE_MASK (:,:,:) = .FALSE.
-  WHERE ((ZRC_LES>1.E-6 .OR. ZRI_LES>1.E-6) &
-         .AND. ZW_LES>0. .AND. ZTHV_ANOM>0.)  
-    LLES_CURRENT_CORE_MASK (:,:,:) = .TRUE.
+  WHERE ((ZRC_LES(IIB:IIE,IJB:IJE,:)>1.E-6 .OR. ZRI_LES(IIB:IIE,IJB:IJE,:)>1.E-6) &
+         .AND. ZW_LES(IIB:IIE,IJB:IJE,:)>0. .AND. ZTHV_ANOM(IIB:IIE,IJB:IJE,:)>0.)  
+    LLES_CURRENT_CORE_MASK (IIB:IIE,IJB:IJE,:) = .TRUE.
   END WHERE
 END IF
 !
@@ -243,10 +245,10 @@ IF (LLES_CS_MASK) THEN
 !
   CALL LES_MEAN_ll(ZRC_LES, LLES_CURRENT_CART_MASK, ZMEANRC  )
   ALLOCATE(LLES_CURRENT_CS1_MASK(IIU,IJU,NLES_K))
-  LLES_CURRENT_CS1_MASK (:,:,:) = .FALSE.
+  LLES_CURRENT_CS1_MASK(:,:,:) = .FALSE.
   IF (NSV_CS >= 2) THEN
     ALLOCATE(LLES_CURRENT_CS2_MASK(IIU,IJU,NLES_K))
-    LLES_CURRENT_CS2_MASK (:,:,:) = .FALSE.
+    LLES_CURRENT_CS2_MASK(:,:,:) = .FALSE.
     IF (NSV_CS == 3) THEN
       ALLOCATE(LLES_CURRENT_CS3_MASK(IIU,IJU,NLES_K))
       LLES_CURRENT_CS3_MASK (:,:,:) = .FALSE.
@@ -271,73 +273,73 @@ IF (LLES_CS_MASK) THEN
 ! case no cloud top and base                    
     IF (JSV == NSV_CSBEG) THEN
      IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) >  &
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE       
      END IF
 !
 ! case cloud top and base defined                    
 !
      IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
              XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE
      END IF     
 !
      IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZW_LES(:,:,JK)>0. .AND. ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE (ZW_LES(IIB:IIE,IJB:IJE,JK)>0. .AND. ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1) .AND. &
-          ZRC_LES(:,:,JK)>1.E-6)
-          LLES_CURRENT_CS1_MASK (:,:,JK) = .TRUE.
+          ZRC_LES(IIB:IIE,IJB:IJE,JK)>1.E-6)
+          LLES_CURRENT_CS1_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE  
      END IF
     ELSE IF ( JSV == NSV_CSBEG + 1 ) THEN
      IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE ( ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
               XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE       
      END IF
 !
 ! case cloud top and base defined                    
 !
      IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) >  &
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) >  &
              XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE
      END IF     
 !
      IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
-          LLES_CURRENT_CS2_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS2_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE  
      END IF
 !
     ELSE 
      IF ((KBASE ==2) .AND. (KTOP == NLES_K)) THEN
-      WHERE ( ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE ( ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
               XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE       
      END IF
 !
 ! case cloud top and base defined                    
 !
      IF (XZHAT(JK) < XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN      
-      WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
              XSCAL(JSV-NSV_CSBEG+1) *ZSTD_SV(JK,JSV-NSV_CSBEG+1))
-          LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE
      END IF     
 !
      IF (XZHAT(JK) >= XZHAT(KBASE)+(XZHAT(KTOP)-XZHAT(KBASE))/4.) THEN
-      WHERE (ZSV_ANOM(:,:,JK,JSV-NSV_CSBEG+1) > &
+      WHERE (ZSV_ANOM(IIB:IIE,IJB:IJE,JK,JSV-NSV_CSBEG+1) > &
              XSCAL(JSV-NSV_CSBEG+1) * ZSTD_SV(JK,JSV-NSV_CSBEG+1)) 
-          LLES_CURRENT_CS3_MASK (:,:,JK) = .TRUE.
+          LLES_CURRENT_CS3_MASK (IIB:IIE,IJB:IJE,JK) = .TRUE.
       END WHERE  
      END IF
     END IF
@@ -353,7 +355,7 @@ END IF
 IF (LLES_MY_MASK) THEN
   ALLOCATE(LLES_CURRENT_MY_MASKS(IIU,IJU,NLES_K,NLES_MASKS_USER))
   DO JI=1,NLES_MASKS_USER
-    LLES_CURRENT_MY_MASKS (:,:,:,JI) = .FALSE.
+    LLES_CURRENT_MY_MASKS (IIB:IIE,IJB:IJE,:,JI) = .FALSE.
   END DO
 ! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) 
 !    LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE.
-- 
GitLab