diff --git a/src/ZSOLVER/mass_leak.f90 b/src/ZSOLVER/mass_leak.f90 index 9ffe52c67bd2b3bceed6459854309e30d6eb4468..6a6b7206dc5a60d53ac683957f3e8c672ef06732 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 !