From dfc17374af48d61bbd0f288cd64c6305da27e298 Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Thu, 15 Jun 2023 19:13:52 +0200
Subject: [PATCH] Juan 15/06/2023:ZSOLVER/turb.f90, For gfortran+openacc doesnt
 allo EXIT on acc loop -> replace with GZD logical test

---
 src/ZSOLVER/turb.f90 | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90
index c72f7d21d..51405a6cc 100644
--- a/src/ZSOLVER/turb.f90
+++ b/src/ZSOLVER/turb.f90
@@ -2216,6 +2216,7 @@ REAL                :: ZD           ! distance to the surface
 real, dimension(:,:,:), pointer , contiguous :: ztmp1_device, ztmp2_device
 #endif
 !
+LOGICAL :: GZD
 !-------------------------------------------------------------------------------
 JIU=SIZE(pdxx,1)
 JJU=SIZE(pdxx,2)
@@ -2332,24 +2333,25 @@ IF (.NOT. ORMC01) THEN
 !$acc kernels  
   DO JJ=1,JJU
     DO JI=1,JIU
+      GZD = .TRUE.
       IF (GOCEAN) THEN
         !$acc loop seq
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
           ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
        END DO
       ELSE
         !$acc loop seq
         DO JK=KKTB,KKTE
           ZD = ZALPHA * ( 0.5 * ( PZZ(JI, JJ, JK) + PZZ(JI, JJ, JK+KKL) ) - PZZ(JI, JJ, KKB) ) * PDIRCOSZW(JI, JJ)
-          IF ( PLM(JI,JJ,JK) > ZD ) THEN
+          IF ( ( PLM(JI,JJ,JK) > ZD ) .AND. GZD ) THEN
             PLM(JI,JJ,JK) = ZD
           ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ENDIF   
@@ -2472,8 +2474,8 @@ REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: ZTMP1_DEVICE,ZTMP2_DEVICE
 #endif
 INTEGER  :: JIU,JJU,JKU
 LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
+LOGICAL :: GZD
 !----------------------------------------------------------------------------
-
 !$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLM )
 
 if ( mppdb_initialized ) then
@@ -2683,14 +2685,15 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PLM,2)
     DO JI=1,SIZE(PLM,1)
+      GZD = .TRUE.       
       IF (GOCEAN) THEN
         !$acc loop seq
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
           ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ELSE
@@ -2698,10 +2701,10 @@ IF (.NOT. ORMC01) THEN
         DO JK=KKTB,KKTE
           ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,KKB)) &
             *PDIRCOSZW(JI,JJ)
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
           ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ENDIF 
-- 
GitLab