diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 1ee696f3ff82470b1da5b7c0151b013f9e2eb9c5..6ba8a05bb947b6aea209cf90970f805427beb2b4 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -325,6 +325,7 @@ TYPE(TFIELDDATA) :: TZFIELD
 !
 INTEGER  :: JIU,JJU,JKU
 INTEGER  :: JK
+REAL :: ZIBM_EPSI !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 !-------------------------------------------------------------------------------
 !$acc data present( PUT, PVT, PWT, PTHT, PTKET, PRHODJ, PPABST, PRT, PSVT, PTHVREF, &
 !$acc &             PDXX, PDYY, PDZZ, PDZX, PDZY, PRTHS, PRTKES, PRRS, PRSVS, PRTHS_CLD, PRRS_CLD, PRSVS_CLD, PRTKES_ADV )
@@ -469,6 +470,8 @@ CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
 IKB=1+JPVEXT
 IKE=SIZE(PSVT,3) - JPVEXT
 
+ZIBM_EPSI = XIBM_EPSI
+
 #ifdef MNH_OPENACC
 CALL INIT_ON_HOST_AND_DEVICE(PRTKES_ADV,PVALUE=-1e99,HNAME='ADVECTION_METSV::PRTKES_ADV')
 CALL INIT_ON_HOST_AND_DEVICE(ZRUCPPM,PVALUE=-1e90,HNAME='ADVECTION_METSV::ZRUCPPM')
@@ -566,9 +569,9 @@ IF (.NOT. L1D) THEN
     ZCFLW(IIB:IIE,IJB:IJE,:) = ZCFLW(IIB:IIE,IJB:IJE,:)*(1.-Br_exp(-Br_pow(XIBM_LS(IIB:IIE,IJB:IJE,:,4)/&
                                                         Br_pow(XRHODJ(IIB:IIE,IJB:IJE,:)/XRHODREF(IIB:IIE,IJB:IJE,:),1./3.),2.)))
 #endif
-    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,2).GT.(-XIBM_EPSI)) ZCFLU(IIB:IIE,IJB:IJE,:)=0.
-    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,3).GT.(-XIBM_EPSI)) ZCFLV(IIB:IIE,IJB:IJE,:)=0.
-    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,4).GT.(-XIBM_EPSI)) ZCFLW(IIB:IIE,IJB:IJE,:)=0.
+    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,2).GT.(-ZIBM_EPSI)) ZCFLU(IIB:IIE,IJB:IJE,:)=0.
+    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,3).GT.(-ZIBM_EPSI)) ZCFLV(IIB:IIE,IJB:IJE,:)=0.
+    WHERE (XIBM_LS(IIB:IIE,IJB:IJE,:,4).GT.(-ZIBM_EPSI)) ZCFLW(IIB:IIE,IJB:IJE,:)=0.
     !$acc end kernels
   ENDIF
 #ifndef MNH_BITREP
diff --git a/src/MNH/advecuvw_rk.f90 b/src/MNH/advecuvw_rk.f90
index 49c53ed6b5dc65d5ae9f7b74990821e15a0e9ed4..b8d00b9fbf3dfcbc46f131d5a18a86b0d7eb26ce 100644
--- a/src/MNH/advecuvw_rk.f90
+++ b/src/MNH/advecuvw_rk.f90
@@ -228,6 +228,8 @@ TYPE(LIST_ll), POINTER      :: TZFIELDS_ll ! list of fields to exchange
 TYPE(LIST_ll), POINTER      :: TZFIELDS0_ll ! list of fields to exchange
 TYPE(LIST_ll), POINTER      :: TZFIELDS4_ll ! list of fields to exchange
 !
+LOGICAL :: GIBM !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
+REAL    :: ZIBM_EPSI !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 REAL          :: ZTIME1,ZTIME2
 !-------------------------------------------------------------------------------
 !$acc data present( PU, PV, PW, PUT, PVT, PWT, PMXM_RHODJ, PMYM_RHODJ, PMZM_RHODJ, &
@@ -254,6 +256,9 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PRWS_OTHER,"ADVECUVW_RK beg:PRWS_OTHER")
 END IF
 
+GIBM = LIBM
+ZIBM_EPSI = XIBM_EPSI
+
 #ifdef MNH_OPENACC
 if ( LIBM ) call Print_msg( NVERB_FATAL, 'GEN', 'ADVECUVW_RK', 'OpenACC: LIBM=T not yet implemented' )
 #endif
@@ -402,7 +407,7 @@ ALLOCATE(ZRVS(SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3),ISPL))
 ALLOCATE(ZRWS(SIZE(PUT,1),SIZE(PUT,2),SIZE(PWT,3),ISPL))
 #endif
 
-IF ( LIBM ) THEN
+IF ( GIBM ) THEN
 #ifndef MNH_OPENACC
   ALLOCATE( ZIBM(SIZE(PUT,1), SIZE(PUT,2), SIZE(PWT,3), 3) )
 #endif
@@ -412,12 +417,10 @@ IF ( LIBM ) THEN
 END IF
 !
 !$acc kernels present(PRUS_ADV,PRVS_ADV,PRWS_ADV) present(ZUT,ZVT,ZWT) present(PU,PV,PW)
-IF (LIBM .AND. CIBM_ADV=='FREEZE') THEN
-
-  WHERE (XIBM_LS(:,:,:,2).GT.-XIBM_EPSI) ZIBM(:,:,:,1) = 0.
-  WHERE (XIBM_LS(:,:,:,3).GT.-XIBM_EPSI) ZIBM(:,:,:,2) = 0.
-  WHERE (XIBM_LS(:,:,:,4).GT.-XIBM_EPSI) ZIBM(:,:,:,3) = 0.
-
+IF (GIBM .AND. CIBM_ADV=='FREEZE') THEN
+  WHERE (XIBM_LS(:,:,:,2).GT.-ZIBM_EPSI) ZIBM(:,:,:,1) = 0.
+  WHERE (XIBM_LS(:,:,:,3).GT.-ZIBM_EPSI) ZIBM(:,:,:,2) = 0.
+  WHERE (XIBM_LS(:,:,:,4).GT.-ZIBM_EPSI) ZIBM(:,:,:,3) = 0.
 ENDIF
 !
 PRUS_ADV = 0.
@@ -490,7 +493,7 @@ RKLOOP: DO JS = 1, ISPL
 !        --------------------------
 !
 !$acc kernels
-  IF (LIBM .AND. CIBM_ADV=='LOWORD') THEN
+  IF (GIBM .AND. CIBM_ADV=='LOWORD') THEN
     ZIBM(:,:,:,1)=ZRUS(:,:,:,JS)
     ZIBM(:,:,:,2)=ZRVS(:,:,:,JS)
     ZIBM(:,:,:,3)=ZRWS(:,:,:,JS)
@@ -513,7 +516,7 @@ RKLOOP: DO JS = 1, ISPL
                        TZHALO2MT_ll )
   ENDIF
 !
-  IF (LIBM .AND. CIBM_ADV=='LOWORD') THEN
+  IF (GIBM .AND. CIBM_ADV=='LOWORD') THEN
     IF (HUVW_ADV_SCHEME=='WENO_K') THEN
       CALL ADVECUVW_WENO_K (HLBCX, HLBCY,           3, ZUT, ZVT, ZWT,    &
                           PRUCT, PRVCT, PRWCT,                           &
@@ -528,9 +531,9 @@ RKLOOP: DO JS = 1, ISPL
        CALL ADVECUVW_2ND (ZUT, ZVT, ZWT, PRUCT, PRVCT, PRWCT,            &
                           ZIBM(:,:,:,1),  ZIBM(:,:,:,2),  ZIBM(:,:,:,3))
     ENDIF
-    WHERE(XIBM_LS(:,:,:,2).GT.-XIBM_EPSI) ZRUS(:,:,:,JS)=ZIBM(:,:,:,1)
-    WHERE(XIBM_LS(:,:,:,3).GT.-XIBM_EPSI) ZRVS(:,:,:,JS)=ZIBM(:,:,:,2)
-    WHERE(XIBM_LS(:,:,:,4).GT.-XIBM_EPSI) ZRWS(:,:,:,JS)=ZIBM(:,:,:,3)
+    WHERE(XIBM_LS(:,:,:,2).GT.-ZIBM_EPSI) ZRUS(:,:,:,JS)=ZIBM(:,:,:,1)
+    WHERE(XIBM_LS(:,:,:,3).GT.-ZIBM_EPSI) ZRVS(:,:,:,JS)=ZIBM(:,:,:,2)
+    WHERE(XIBM_LS(:,:,:,4).GT.-ZIBM_EPSI) ZRWS(:,:,:,JS)=ZIBM(:,:,:,3)
     ZIBM(:,:,:,:)=1.
   ENDIF
 !
@@ -549,13 +552,13 @@ RKLOOP: DO JS = 1, ISPL
 ! acc update device(ZRUS(:,:,:,JS),ZRVS(:,:,:,JS),ZRWS(:,:,:,JS))
 #endif
 !
-  IF (LIBM .AND. CIBM_ADV=='FREEZE') THEN 
-    WHERE(XIBM_LS(:,:,:,2).GT.-XIBM_EPSI) ZRUS(:,:,:,JS)=ZUT(:,:,:)*PMXM_RHODJ(:,:,:)/PTSTEP
-    WHERE(XIBM_LS(:,:,:,3).GT.-XIBM_EPSI) ZRVS(:,:,:,JS)=ZVT(:,:,:)*PMYM_RHODJ(:,:,:)/PTSTEP
-    WHERE(XIBM_LS(:,:,:,4).GT.-XIBM_EPSI) ZRWS(:,:,:,JS)=ZWT(:,:,:)*PMZM_RHODJ(:,:,:)/PTSTEP
+  IF (GIBM .AND. CIBM_ADV=='FREEZE') THEN
+    WHERE(XIBM_LS(:,:,:,2).GT.-ZIBM_EPSI) ZRUS(:,:,:,JS)=ZUT(:,:,:)*PMXM_RHODJ(:,:,:)/PTSTEP
+    WHERE(XIBM_LS(:,:,:,3).GT.-ZIBM_EPSI) ZRVS(:,:,:,JS)=ZVT(:,:,:)*PMYM_RHODJ(:,:,:)/PTSTEP
+    WHERE(XIBM_LS(:,:,:,4).GT.-ZIBM_EPSI) ZRWS(:,:,:,JS)=ZWT(:,:,:)*PMZM_RHODJ(:,:,:)/PTSTEP
   ENDIF
 
-  IF (LIBM .AND. CIBM_ADV=='FORCIN') THEN 
+  IF (GIBM .AND. CIBM_ADV=='FORCIN') THEN
     CALL SECOND_MNH(ZTIME1)
     CALL IBM_FORCING_ADV(ZRUS(:,:,:,JS),ZRVS(:,:,:,JS),ZRWS(:,:,:,JS))
     CALL SECOND_MNH(ZTIME2)
@@ -565,7 +568,7 @@ RKLOOP: DO JS = 1, ISPL
 ! Guesses at the end of the RK loop
 !
 !$acc kernels present(PRUS_ADV,PRVS_ADV,PRWS_ADV,ZBUTS) present(ZRUS,ZRVS,ZRWS,ZIBM)
-  IF ( .NOT. LIBM ) THEN
+  IF ( .NOT. GIBM ) THEN
     PRUS_ADV(:,:,:) = PRUS_ADV(:,:,:) + ZBUTS(JS) * ZRUS(:,:,:,JS)
     PRVS_ADV(:,:,:) = PRVS_ADV(:,:,:) + ZBUTS(JS) * ZRVS(:,:,:,JS)
     PRWS_ADV(:,:,:) = PRWS_ADV(:,:,:) + ZBUTS(JS) * ZRWS(:,:,:,JS)
@@ -592,7 +595,7 @@ RKLOOP: DO JS = 1, ISPL
 !
 ! Intermediate guesses inside the RK loop
 !
-      IF ( .NOT. LIBM ) THEN
+      IF ( .NOT. GIBM ) THEN
 !$acc kernels
         ZUT(:,:,:) = ZUT(:,:,:) + ZBUT(JS,JI) *  PTSTEP *  &
           ( ZRUS(:,:,:,JI) + PRUS_OTHER(:,:,:) ) / PMXM_RHODJ(:,:,:)
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index ce9dcaf0ce9f90a64fcbb1386f23308e9862c62e..d47b8f465c35a42f183dcc347f55cbd71879a75d 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -483,6 +483,7 @@ INTEGER :: IZTMP1_DEVICE,IZTMP2_DEVICE,IZTMP3_DEVICE
 !
 INTEGER  :: JIU,JJU,JKU
 INTEGER  :: JLU_ZRM, JLU_TURB, JJU_ORMC01, JKU_CLOUD, JKU_TURB
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 !
 !------------------------------------------------------------------------------------------
 !
@@ -716,6 +717,8 @@ IKE=KKU-JPVEXT_TURB*KKL
 ZEXPL = 1.- PIMPL
 ZRVORD= XRV / XRD
 !
+GOCEAN = LOCEAN
+!
 !
 !$acc update device(PTHLT,PRT)
 !$acc kernels
@@ -750,7 +753,7 @@ END DO
 !
 !*      2.2 Exner function at t
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ZEXN(:,:,:) = 1.
 ELSE
 !PW: "BUG" PGI : results different on CPU and GPU due to the power function
@@ -1439,7 +1442,6 @@ IF ( KRRL >= 1 ) THEN
   END IF
 END IF
 
-
 ! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets
 call Sources_neg_correct( hcloud, 'NETUR', krr, ptstep, ppabst, pthlt, prt, prthls, prrs, prsvs )
 !$acc update self( PTHLT ) !PTHLT not modified in Sources_neg_correct
@@ -2114,6 +2116,7 @@ LOGICAL,                INTENT(IN)    :: ODZ
 !
 
 integer :: ji, jj, jk
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 REAL                :: ZALPHA       ! proportionnality constant between Dz/2 and
 !                                   ! BL89 mixing length near the surface
 REAL                :: ZD           ! distance to the surface
@@ -2138,6 +2141,8 @@ allocate( ztmp1_device( size( pdxx, 1 ), size( pdxx, 2 ), size( pdxx, 3 ) ) )
 allocate( ztmp2_device( size( pdxx, 1 ), size( pdxx, 2 ), size( pdxx, 3 ) ) )
 #endif
 
+GOCEAN = LOCEAN
+
 !$acc data create( ztmp1_device, ztmp2_device )
 
 IF (ODZ) THEN
@@ -2227,7 +2232,7 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PLM,2)
     DO JI=1,SIZE(PLM,1)
-      IF (LOCEAN) THEN
+      IF (GOCEAN) THEN
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
           IF ( PLM(JI,JJ,JK)>ZD) THEN
@@ -2359,6 +2364,7 @@ REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: ZTMP1_DEVICE,ZTMP2_DEVICE
 INTEGER :: IZTMP1_DEVICE,IZTMP2_DEVICE
 #endif
 INTEGER  :: JIU,JJU,JKU
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 !----------------------------------------------------------------------------
 
 !$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLM )
@@ -2384,6 +2390,8 @@ JIU =  size(pthlt, 1 )
 JJU =  size(pthlt, 2 )
 JKU =  size(pthlt, 3 )
 
+GOCEAN = LOCEAN
+
 !-------------------------------------------------------------------------------
 #ifndef MNH_OPENACC
 allocate( ZWORK2D(JIU,JJU) )
@@ -2492,7 +2500,7 @@ IF (KRR>0) THEN
                                 (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
         ZDRTDZ(JI,JJ,JK) = 0.5*((PRT(JI,JJ,JK+KKL,1)-PRT(JI,JJ,JK    ,1))/PDZZ(JI,JJ,JK+KKL)+ &
                                 (PRT(JI,JJ,JK    ,1)-PRT(JI,JJ,JK-KKL,1))/PDZZ(JI,JJ,JK    ))
-        IF (LOCEAN) THEN
+        IF (GOCEAN) THEN
           ZVAR=XG*(XALPHAOC*ZDTHLDZ(JI,JJ,JK)-XBETAOC*ZDRTDZ(JI,JJ,JK))
         ELSE
           ZVAR=XG/PTHVREF(JI,JJ,JK)*                                                  &
@@ -2513,7 +2521,7 @@ ELSE! For dry atmos or unsalted ocean runs
       DO JI=1,SIZE(PLM,1)
         ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
                                 (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
-        IF (LOCEAN) THEN
+        IF (GOCEAN) THEN
           ZVAR= XG*XALPHAOC*ZDTHLDZ(JI,JJ,JK)
         ELSE
           ZVAR= XG/PTHVREF(JI,JJ,JK)*ZETHETA(JI,JJ,JK)*ZDTHLDZ(JI,JJ,JK)
@@ -2536,7 +2544,7 @@ ELSE
   ZDRTDZ(:,:,KKB)=0
 ENDIF
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
 #if 0
 !PW: bug: crash with nvhpc 21.11 (OK with 21.9)
   ZWORK2D(:,:)=XG*(XALPHAOC*ZDTHLDZ(:,:,KKB)-XBETAOC*ZDRTDZ(:,:,KKB))
@@ -2577,7 +2585,7 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PLM,2)
     DO JI=1,SIZE(PLM,1)
-      IF (LOCEAN) THEN
+      IF (GOCEAN) THEN
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
           IF ( PLM(JI,JJ,JK)>ZD) THEN
diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90
index ebe93d1f5c76c08c6885269248d492307fa24c66..6ed71c52957c9770148201db61508d5dad21e566 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -483,6 +483,7 @@ TYPE(TFIELDDATA) :: TZFIELD
 !
 INTEGER                               :: JIU,JJU,JKU
 INTEGER                               :: JI,JJ,JK
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 !
 !----------------------------------------------------------------------------
 
@@ -559,6 +560,8 @@ JIU =  size( pthlm, 1 )
 JJU =  size( pthlm, 2 )
 JKU =  size( pthlm, 3 )
 
+GOCEAN = LOCEAN
+
 #ifndef MNH_OPENACC
 allocate( zbeta    (JIU,JJU,JKU) )
 allocate( zsqrt_tke(JIU,JJU,JKU) )
@@ -646,7 +649,7 @@ CALL PRANDTL(KKA,KKU,KKL,KRR,KRRI,OTURB_FLX,       &
 ! Buoyancy coefficient
 !
 !$acc kernels
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ZBETA(:,:,:) = XG*XALPHAOC
 ELSE
   ZBETA(:,:,:) = XG/PTHVREF(:,:,:)
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index 55355f15df882c11c4817d84b090949a8843de2d..15df973c68ecc020ae6b02d7800bd14df9aa4324 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -425,6 +425,7 @@ TYPE(TFIELDDATA) :: TZFIELD
 !
 INTEGER  :: JIU,JJU,JKU
 INTEGER  :: JI,JJ,JK
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 !----------------------------------------------------------------------------
 
 !$acc data present( PDXX, PDYY, PDZZ, PDZX, PDZY, PDIRCOSZW,             &
@@ -639,7 +640,7 @@ CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1))
 !
 !
 ! ZSOURCE= FLUX /DZ
-IF (LOCEAN) THEN  ! OCEAN MODEL ONLY
+IF (GOCEAN) THEN  ! OCEAN MODEL ONLY
 #ifdef MNH_OPENACC
   call Print_msg( NVERB_FATAL, 'GEN', 'TURB_VER_DYN_FLUX', 'OpenACC: LOCEAN=T not yet implemented' )
 #endif
@@ -777,7 +778,7 @@ ZFLXZ(:,:,IKB:IKB)   =   ZTMP1_DEVICE(:,:,IKB:IKB)  *                &
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
 !$acc end kernels
 
-IF (LOCEAN) THEN !ocean model at phys sfc (ocean domain top)
+IF (GOCEAN) THEN !ocean model at phys sfc (ocean domain top)
   ZFLXZ(:,:,IKE:IKE)   =   MXM(PDZZ(:,:,IKE:IKE))  *                &
                            ZSOURCE(:,:,IKE:IKE)                     &
                            / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) )
@@ -846,7 +847,7 @@ PDP(:,:,IKB:IKB) = - ZTMP3_DEVICE(:,:,IKB:IKB)
 !$acc end kernels
 #endif
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
   PDP(:,:,IKE:IKE) = - MXF (                                                      &
     ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-KKL:IKE-KKL))  &
@@ -897,7 +898,7 @@ IF(HTURBDIM=='3DIM') THEN
                 ! used to compute the W source at the ground
 !$acc kernels
   ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation
- IF (LOCEAN) THEN
+ IF (GOCEAN) THEN
    ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation
  END IF
 !$acc end kernels
@@ -1031,7 +1032,7 @@ IF(HTURBDIM=='3DIM') THEN
 !$acc end kernels
 #endif
   !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
   ZA(:,:,IKE:IKE) = - MXF (                                                  &
    ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                              &
@@ -1192,7 +1193,7 @@ END DO
 CALL MYM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1) )
 #endif
 !
-IF (LOCEAN) THEN ! Ocean case
+IF (GOCEAN) THEN ! Ocean case
   IF (LCOUPLES) THEN
     ZSOURCE(:,:,IKE:IKE) =  XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) &
         *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) 
@@ -1322,7 +1323,7 @@ ZFLXZ(:,:,IKB)   =   ZTMP1_DEVICE(:,:,1)  *                 &
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
 !$acc end kernels
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ZFLXZ(:,:,IKE:IKE)   =   MYM(PDZZ(:,:,IKE:IKE))  *                &
       ZSOURCE(:,:,IKE:IKE)                                          &
       / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) )
@@ -1396,7 +1397,7 @@ ZA(:,:,IKB)  = - ZTMP1_DEVICE(:,:,1)
 !$acc end kernels
 #endif
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE)
   ZA(:,:,IKE:IKE) = - MYF (                                                  &
    ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-KKL:IKE-KKL))  &
@@ -1444,7 +1445,7 @@ IF(HTURBDIM=='3DIM') THEN
   ! Compute the source for the W wind component
 !$acc kernels
   ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation 
-  IF (LOCEAN) THEN
+  IF (GOCEAN) THEN
     ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation
   END IF
 !$acc end kernels
@@ -1581,7 +1582,7 @@ IF(HTURBDIM=='3DIM') THEN
 !$acc end kernels
 #endif
   !
-    IF (LOCEAN) THEN
+    IF (GOCEAN) THEN
      ZA(:,:,IKE:IKE) = - MYF (                                              &
       ZFLXZ(:,:,IKE-KKL:IKE-KKL) *                                          &
         ( DYM( PWM(:,:,IKE-KKL:IKE-KKL) )                                   &
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 4ddaec46cce4aea2524111b817e8efd38c67979c..9b924f0ac7ea2e9a865604a97e06910081e06f25 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -529,7 +529,9 @@ INTEGER :: IZTMP1_DEVICE,IZTMP2_DEVICE,IZTMP3_DEVICE,IZTMP4_DEVICE
 #endif
 TYPE(TFIELDDATA) :: TZFIELD
 
-INTEGER  :: JIU,JJU,JKU
+INTEGER :: JIU,JJU,JKU
+LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
+REAL :: ZALTHGRAD, ZCLDTHOLD !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
 
 !----------------------------------------------------------------------------
 
@@ -596,6 +598,10 @@ JIU =  size( pthlm, 1 )
 JJU =  size( pthlm, 2 )
 JKU =  size( pthlm, 3 )
 
+GOCEAN = LOCEAN
+ZALTHGRAD = XALTHGRAD
+ZCLDTHOLD = XCLDTHOLD
+
 #ifndef MNH_OPENACC
 allocate( za        (JIU,JJU,JKU ) )
 allocate( zflxz     (JIU,JJU,JKU ) )
@@ -646,7 +652,7 @@ IJU=SIZE(PTHLM,2)
 !
 !! Compute Shape of sfc flux for Oceanic Deep Conv Case
 ! 
-IF (LOCEAN .AND. LDEEPOC) THEN
+IF (GOCEAN .AND. LDEEPOC) THEN
 #ifdef MNH_OPENACC
   call Print_msg( NVERB_FATAL, 'GEN', 'TURB_VER_THERMO_FLUX', 'OpenACC: LOCEAN=T not yet implemented' )
 #endif
@@ -892,7 +898,7 @@ END IF
 #endif
 ! compute interface flux
 IF (LCOUPLES) THEN   ! Autocoupling O-A LES
-  IF (LOCEAN) THEN    ! ocean model in coupled case 
+  IF (GOCEAN) THEN    ! ocean model in coupled case 
 !$acc kernels
     ZF(:,:,IKE) =  (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) &
                   *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) )
@@ -923,7 +929,7 @@ ELSE  ! No coupling O and A cases
 !$acc end kernels
   END IF
 !
-  IF (LOCEAN) THEN
+  IF (GOCEAN) THEN
 !$acc kernels
     ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE))
 !$acc end kernels
@@ -988,7 +994,7 @@ END IF
 !
 !$acc kernels
 ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB)
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE)
 END IF
 !  
@@ -1001,7 +1007,7 @@ END DO
 !
 PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) 
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL))
   PWTH(:,:,KKA)=0. 
   PWTH(:,:,KKU)=ZFLXZ(:,:,KKU)
@@ -1028,7 +1034,7 @@ IF ( OTURB_FLX .AND. tpfile%lopened ) THEN
 END IF
 !
 ! Contribution of the conservative temperature flux to the buoyancy flux
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
 #ifndef MNH_OPENACC
   PTP(:,:,:)= XG*XALPHAOC * MZF(ZFLXZ )
 #else
@@ -1082,7 +1088,7 @@ PWTHV(:,:,:) = ZTMP1_DEVICE(:,:,:) * ZFLXZ(:,:,:)
 PWTHV(:,:,IKB) = PETHETA(:,:,IKB) * ZFLXZ(:,:,IKB)
 !$acc end kernels
 !
-IF (LOCEAN) THEN
+IF (GOCEAN) THEN
   ! temperature contribution to Buy flux     
 !$acc kernels
   PWTHV(:,:,IKE) = PETHETA(:,:,IKE) * ZFLXZ(:,:,IKE)
@@ -1390,7 +1396,7 @@ IF (KRR /= 0) THEN
   !
   ! compute interface flux
   IF (LCOUPLES) THEN   ! coupling NH O-A
-    IF (LOCEAN) THEN    ! ocean model in coupled case
+    IF (GOCEAN) THEN    ! ocean model in coupled case
       ! evap effect on salinity to be added later !!!
 !$acc kernels
       ZF(:,:,IKE) =  0.
@@ -1423,7 +1429,7 @@ IF (KRR /= 0) THEN
 !$acc end kernels
     END IF
     !
-    IF (LOCEAN) THEN
+    IF (GOCEAN) THEN
       ! General ocean case
       ! salinity/evap effect to be added later !!!!!
 !$acc kernels
@@ -1481,15 +1487,17 @@ DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
 END DO
 !$acc end kernels
 #endif
+#if 1
   !
   ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD
   IF (LHGRAD) THEN
 !$acc kernels
-   WHERE ( (ZCLD_THOLD(:,:,:) >= XCLDTHOLD ) .AND. ( ZALT(:,:,:) >= XALTHGRAD ) )
+   WHERE ( (ZCLD_THOLD(:,:,:) >= ZCLDTHOLD ) .AND. ( ZALT(:,:,:) >= ZALTHGRAD ) )
     ZFLXZ(:,:,:) = ZF_NEW(:,:,:)
    END WHERE
 !$acc end kernels
   END IF
+#endif
   !
 !$acc kernels
   ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
@@ -1521,7 +1529,7 @@ END DO
   END IF
   !
   ! Contribution of the conservative water flux to the Buoyancy flux
-  IF (LOCEAN) THEN
+  IF (GOCEAN) THEN
 #ifndef MNH_OPENACC
     ZA(:,:,:)=  -XG * XBETAOC * MZF(ZFLXZ )
 #else
@@ -1575,7 +1583,7 @@ END DO
   !$acc kernels
   PWTHV(:,:,IKB) = PWTHV(:,:,IKB) + PEMOIST(:,:,IKB) * ZFLXZ(:,:,IKB)
 !$acc end kernels
-  IF (LOCEAN) THEN
+  IF (GOCEAN) THEN
 !$acc kernels
     PWTHV(:,:,IKE) = PWTHV(:,:,IKE) + PEMOIST(:,:,IKE)* ZFLXZ(:,:,IKE)
 !$acc end kernels
@@ -1771,7 +1779,7 @@ IF ( ((OTURB_FLX .AND. tpfile%lopened) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN
 !
 END IF !end of <w Rc>
 
-IF (LOCEAN.AND.LDEEPOC) THEN
+IF (GOCEAN.AND.LDEEPOC) THEN
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 END IF