From b8952684eada0aceedeee00247e5aaaa61822d72 Mon Sep 17 00:00:00 2001
From: ESCOBAR Juan <escj@nuwa>
Date: Thu, 3 Mar 2022 11:32:11 +0100
Subject: [PATCH] Juan 03/03/2022:ice_adjust.f90, nvhpc22.2 optimisation ->
 replace WHERE+ARRAY SYNTAX -> DO CONCURRENT

---
 src/MNH/ice_adjust.f90 | 54 ++++++++++++++++++++++++------------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90
index 58580edaa..8da04e62e 100644
--- a/src/MNH/ice_adjust.f90
+++ b/src/MNH/ice_adjust.f90
@@ -478,38 +478,46 @@ ENDDO         ! end of the iterative loop
 !               -------------------------------------------------
 !
 !$acc kernels
+#ifdef MNH_COMPILER_NVHPC
+!$acc loop independent collapse(3)
+#endif
+DO CONCURRENT (JI=1:IIU,JJ=1:IJU,JK=1:IKU)
+
 !
 !*       5.0    compute the variation of mixing ratio
 !
                                                       !         Rc - Rc*
-ZW1(:,:,:) = (ZRC(:,:,:) - PRC(:,:,:)) / PTSTEP       ! Pcon = ----------
+ZW1(JI,JJ,JK) = (ZRC(JI,JJ,JK) - PRC(JI,JJ,JK)) / PTSTEP       ! Pcon = ----------
                                                       !         2 Delta t
 
-ZW2(:,:,:) = (ZRI(:,:,:) - PRI(:,:,:)) / PTSTEP       ! idem ZW1 but for Ri
+ZW2(JI,JJ,JK) = (ZRI(JI,JJ,JK) - PRI(JI,JJ,JK)) / PTSTEP       ! idem ZW1 but for Ri
 !
 !*       5.1    compute the sources
 !
-GTEMP(:,:,:) = ZW1(:,:,:) < 0.0
-WHERE( GTEMP(:,:,:) )
-  ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) )
-ELSEWHERE
-  ZW1(:,:,:) = MIN ( ZW1(:,:,:),  PRVS(:,:,:) )
-END WHERE
-PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:)
-PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:)
-PTHS(:,:,:) = PTHS(:,:,:) +        &
-                ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
-!
-GTEMP(:,:,:) = ZW2(:,:,:) < 0.0
-WHERE( GTEMP(:,:,:) )
-  ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) )
-ELSEWHERE
-  ZW2(:,:,:) = MIN ( ZW2(:,:,:),  PRVS(:,:,:) )
-END WHERE
-PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:)
-PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:)
-PTHS(:,:,:) = PTHS(:,:,:) +        &
-              ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
+
+GTEMP(JI,JJ,JK) = ZW1(JI,JJ,JK) < 0.0
+IF( GTEMP(JI,JJ,JK) )THEN
+  ZW1(JI,JJ,JK) = MAX ( ZW1(JI,JJ,JK), -PRCS(JI,JJ,JK) )
+ELSE
+  ZW1(JI,JJ,JK) = MIN ( ZW1(JI,JJ,JK),  PRVS(JI,JJ,JK) )
+ENDIF
+PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZW1(JI,JJ,JK)
+PRCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZW1(JI,JJ,JK)
+PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) +        &
+                ZW1(JI,JJ,JK) * ZLV(JI,JJ,JK) / (ZCPH(JI,JJ,JK) * PEXNREF(JI,JJ,JK))
+!
+GTEMP(JI,JJ,JK) = ZW2(JI,JJ,JK) < 0.0
+IF( GTEMP(JI,JJ,JK) )THEN
+  ZW2(JI,JJ,JK) = MAX ( ZW2(JI,JJ,JK), -PRIS(JI,JJ,JK) )
+ELSE
+  ZW2(JI,JJ,JK) = MIN ( ZW2(JI,JJ,JK),  PRVS(JI,JJ,JK) )
+ENDIF
+PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZW2(JI,JJ,JK)
+PRIS(JI,JJ,JK) = PRIS(JI,JJ,JK) + ZW2(JI,JJ,JK)
+PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) +        &
+     ZW2(JI,JJ,JK) * ZLS(JI,JJ,JK) / (ZCPH(JI,JJ,JK) * PEXNREF(JI,JJ,JK))
+ENDDO
+
 !$acc end kernels
 !
 !
-- 
GitLab