From 1f62059a7a72aa4ba5658b7b4c386ab051b70dd7 Mon Sep 17 00:00:00 2001
From: Juan Escobar <juan.escobar@aero.obs-mip.fr>
Date: Tue, 12 Oct 2021 12:02:26 +0200
Subject: [PATCH] Juan 12/10/2021:mass_leak.f90 , allocate 2D work array at
 first call for GPU optimization

---
 src/ZSOLVER/mass_leak.f90 | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/ZSOLVER/mass_leak.f90 b/src/ZSOLVER/mass_leak.f90
index 9ffe52c67..6a6b7206d 100644
--- a/src/ZSOLVER/mass_leak.f90
+++ b/src/ZSOLVER/mass_leak.f90
@@ -132,7 +132,7 @@ REAL, DIMENSION(:,:,:),        INTENT(INOUT) :: PRVS ! momentum  tendencies
 !
 !JUAN16
 REAL                               :: ZLEAK     ! total leak of mass
-REAL, ALLOCATABLE, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D
+REAL, SAVE , ALLOCATABLE, DIMENSION (:,:) :: ZLEAK_W_2D , ZLEAK_E_2D , ZLEAK_S_2D , ZLEAK_N_2D
 !JUAN16
 
 REAL                :: ZUSTOP     ! wind correction!
@@ -151,6 +151,7 @@ INTEGER             :: IINFO_ll   ! return code of parallel routine
 LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH
 REAL    :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N
 !
+LOGICAL , SAVE :: GFIRST_CALL_MASS_LEAK = .TRUE.
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
@@ -177,9 +178,19 @@ ZLEAK_W=0.
 ZLEAK_S=0.
 ZLEAK_N=0.
 !
-IF( HLBCY(1) /= 'CYCL' ) THEN
-   ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
-   ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))   
+IF (GFIRST_CALL_MASS_LEAK) THEN
+   GFIRST_CALL_MASS_LEAK = .FALSE.
+   IF( HLBCX(1) /= 'CYCL' ) THEN
+      ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
+      ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))
+   END IF
+   IF( HLBCY(1) /= 'CYCL' ) THEN
+      ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB))
+      ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))
+   END IF
+END IF
+!
+IF( HLBCX(1) /= 'CYCL' ) THEN
    !$acc kernels async
    ZLEAK_W_2D = 0.0   
    IF( GWEST ) THEN
@@ -209,8 +220,6 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
 END IF
 !
 IF( HLBCY(1) /= 'CYCL' ) THEN
-   ALLOCATE( ZLEAK_S_2D(IIB:IIE,IJB:IJB))
-   ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))
    !
    !$acc kernels async
    ZLEAK_S_2D = 0.0 
@@ -242,10 +251,6 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
 END IF
 !
 ZLEAK = ZLEAK_E + ZLEAK_W + ZLEAK_S + ZLEAK_N
-!!$ZLEAK = ZLEAK_E
-!!$ZLEAK = ZLEAK + ZLEAK_W
-!!$ZLEAK = ZLEAK + ZLEAK_S
-!!$ZLEAK = ZLEAK + ZLEAK_N
 !
 !CALL REDUCESUM_ll(ZLEAK,IINFO_ll)	! we do the reducesum_ll in SUM_DD_R2_ll so we do not do it here
 !
-- 
GitLab