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