From ed46944249f0f9117c1510b6489c455ae2d9c6aa Mon Sep 17 00:00:00 2001
From: JUan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Fri, 16 Oct 2020 15:10:18 +0200
Subject: [PATCH] Juan 16/10/2020: rain_ice_fast_rs.f90 , OpenACC opti -> DO
 CONCURRENT for BR_POW etc ...

---
 src/MNH/rain_ice_fast_rs.f90 | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
index a64fb281d..76f5e6789 100644
--- a/src/MNH/rain_ice_fast_rs.f90
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -520,32 +520,34 @@ END IF
 !
 !$acc kernels
   GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0 .AND. PZT(:)>XTT
-  WHERE( GWORK(:) )
-    ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
-    ZZW(:) =  PKA(:)*(XTT-PZT(:)) +                                 &
-               ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
-                           *(XESTT-ZZW(:))/(XRV*PZT(:))             )
+  DO CONCURRENT (JJ=1:IGACC)
+   IF ( GWORK(JJ) ) THEN
+    ZZW(JJ) = PRVT(JJ)*PPRES(JJ)/((XMV/XMD)+PRVT(JJ)) ! Vapor pressure
+    ZZW(JJ) =  PKA(JJ)*(XTT-PZT(JJ)) +                                 &
+               ( PDV(JJ)*(XLVTT + ( XCPV - XCL ) * ( PZT(JJ) - XTT )) &
+                           *(XESTT-ZZW(JJ))/(XRV*PZT(JJ))             )
 !
 ! compute RSMLT
 !
 #ifndef MNH_BITREP
-    ZZW(:)  = MIN( PRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) *             &
-                           ( X0DEPS*       PLBDAS(:)**XEX0DEPS +     &
-                             X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) ) / &
-                                             ( PRHODREF(:)*XLMTT ) ) )
+    ZZW(JJ)  = MIN( PRSS(JJ), XFSCVMG*MAX( 0.0,( -ZZW(JJ) *             &
+                           ( X0DEPS*       PLBDAS(JJ)**XEX0DEPS +     &
+                             X1DEPS*PCJ(JJ)*PLBDAS(JJ)**XEX1DEPS ) ) / &
+                                             ( PRHODREF(JJ)*XLMTT ) ) )
 #else
-    ZZW(:)  = MIN( PRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) *                    &
-                           ( X0DEPS*       BR_POW(PLBDAS(:),XEX0DEPS) +     &
-                             X1DEPS*PCJ(:)*BR_POW(PLBDAS(:),XEX1DEPS) ) ) / &
-                                             ( PRHODREF(:)*XLMTT ) ) )
+    ZZW(JJ)  = MIN( PRSS(JJ), XFSCVMG*MAX( 0.0,( -ZZW(JJ) *                    &
+                           ( X0DEPS*       BR_POW(PLBDAS(JJ),XEX0DEPS) +     &
+                             X1DEPS*PCJ(JJ)*BR_POW(PLBDAS(JJ),XEX1DEPS) ) ) / &
+                                             ( PRHODREF(JJ)*XLMTT ) ) )
 #endif
 !
 ! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT)
 ! because the graupeln produced by this process are still icy!!!
 !
-    PRSS(:) = PRSS(:) - ZZW(:)
-    PRGS(:) = PRGS(:) + ZZW(:)
-  END WHERE
+    PRSS(JJ) = PRSS(JJ) - ZZW(JJ)
+    PRGS(JJ) = PRGS(JJ) + ZZW(JJ)
+  END IF
+ END DO ! CONCURRENT
 !$acc end kernels
   IF (LBUDGET_RS) THEN
 !$acc update self(PRSS)
-- 
GitLab