diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90 index c72f7d21d069a9b13a49a2e85337988ac7d0226d..51405a6cc6b570348f94020697fbc5a5da0a2e23 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