From c617a460d52ad8773354d73d5cafedc0380e581c Mon Sep 17 00:00:00 2001 From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr> Date: Wed, 26 Oct 2022 15:49:19 +0200 Subject: [PATCH] Juan 26/10/2022:MNH/rain_ice*rg/rs.f90, Cray CCE/14.0.3++ Optimsation Problems , replace some "acc kernels" with "acc parallel" + some present_cr --- src/MNH/rain_ice_fast_rg.f90 | 67 +++++++++++++++++++++++++----------- src/MNH/rain_ice_fast_rs.f90 | 10 +++--- 2 files changed, 53 insertions(+), 24 deletions(-) diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90 index f512efac6..7087c38bd 100644 --- a/src/MNH/rain_ice_fast_rg.f90 +++ b/src/MNH/rain_ice_fast_rg.f90 @@ -59,7 +59,7 @@ USE MODI_BITREP #endif #ifdef MNH_BITREP_OMP !$mnh_undef(LOOP) -!$mnh_undef(OPENACC) +! mnh_undef(OPENACC) #endif IMPLICIT NONE @@ -199,10 +199,12 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) ! !* 6.1 rain contact freezing ! -!$acc kernels +!$acc kernels present_cr(ZZW1,GWORK) ZZW1(:,:) = 0.0 GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRRT(:)>XRTMIN(3) .AND. PRIS(:)>0.0 .AND. PRRS(:)>0.0 +!$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) +!$acc parallel present_cr(ZZW1,GWORK) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN @@ -218,7 +220,9 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG) END IF END DO ! CONCURRENT +!$acc end parallel #else +!$acc parallel present_cr(ZZW1,GWORK) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN @@ -234,8 +238,9 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG) END IF END DO ! CONCURRENT +!$acc end parallel #endif -!$acc end kernels + IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(PRRS,"RAIN_ICE_FAST_RG 6.1:PRRS") @@ -269,10 +274,12 @@ END IF ! !* 6.2 compute the Dry growth case ! -!$acc kernels +!$acc kernels present_cr(GWORK) ZZW1(:,:) = 0.0 - GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0 +!$acc end kernels +!$acc parallel present_cr(GWORK) !$mnh_expand_where(JL=1:JLU) + GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0 WHERE( GWORK(:) ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT) @@ -282,8 +289,10 @@ END IF ZZW1(:,1) = MIN( PRCS(:),XFCDRYG * PRCT(:) * ZZW(:) ) ! RCDRYG END WHERE !$mnh_end_expand_where() - GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0 +!$acc end parallel +!$acc parallel present_cr(GWORK) !$mnh_expand_where(JL=1:JLU) + GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0 WHERE( GWORK(:) ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT) @@ -296,14 +305,14 @@ END IF #endif END WHERE !$mnh_end_expand_where() -!$acc end kernels +!$acc end parallel IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2:ZZW1") END IF ! !* 6.2.1 accretion of aggregates on the graupeln ! -!$acc kernels +!$acc kernels present_cr(GWORK) GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. PRSS(:)>0.0 !$acc end kernels #ifndef MNH_OPENACC @@ -341,8 +350,8 @@ END IF ! !* 6.2.3 select the (PLBDAG,PLBDAS) couplet ! -!$acc kernels - !$mnh_expand_where(JL=1:IGDRY) +!$acc parallel present_cr(ZVECLBDAG,ZVECLBDAS) + !$mnh_expand_where(JL=1:IGDRY) ZVECLBDAG(1:IGDRY) = PLBDAG(I1(1:IGDRY)) ZVECLBDAS(1:IGDRY) = PLBDAS(I1(1:IGDRY)) ! @@ -368,6 +377,8 @@ END IF IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) !$mnh_end_expand_where() +!$acc end parallel +!$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAS) ! !* 6.2.5 perform the bilinear interpolation of the normalized ! SDRYG-kernel @@ -425,7 +436,7 @@ END IF ! !* 6.2.6 accretion of raindrops on the graupeln ! -!$acc kernels +!$acc kernels present_cr(GWORK) GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRGT(:)>XRTMIN(6) .AND. PRSS(:)>0.0 !$acc end kernels #ifndef MNH_OPENACC @@ -463,7 +474,7 @@ END IF ! !* 6.2.8 select the (PLBDAG,PLBDAR) couplet ! -!$acc kernels +!$acc parallel present_cr(ZVECLBDAG,ZVECLBDAR) !$mnh_expand_where(JL=1:IGDRY) ZVECLBDAG(1:IGDRY) = PLBDAG(I1(1:IGDRY)) ZVECLBDAR(1:IGDRY) = PLBDAR(I1(1:IGDRY)) @@ -490,10 +501,12 @@ END IF IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) !$mnh_end_expand_where() +!$acc end parallel ! !* 6.2.10 perform the bilinear interpolation of the normalized ! RDRYG-kernel ! +!$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAR,ZZW1) !$acc loop independent DO CONCURRENT (JJ = 1:IGDRY ) ZVEC3(JJ) = ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & @@ -503,7 +516,6 @@ END IF - XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * (ZVEC1(JJ) - 1.0) END DO ! CONCURRENT -! !$acc loop independent , private (JL) DO CONCURRENT (JJ=1:IGDRY) JL = I1(JJ) @@ -543,15 +555,17 @@ END IF #endif END IF ! -!$acc kernels +!$acc kernels present_cr(GWORK) PRDRYG(:) = ZZW1(:,1) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,4) ! !* 6.3 compute the Wet growth case ! PRWETG(:) = 0.0 GWORK(:) = PRGT(:)>XRTMIN(6) +!$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) -!$acc loop independent +!$acc parallel present_cr(GWORK) + !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW1(JL,5) = MIN( PRIS(JL), & @@ -574,7 +588,9 @@ END IF ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) ) ) END IF END DO ! CONCURRENT + !$acc end parallel #else +!$acc parallel present_cr(GWORK) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN @@ -598,10 +614,12 @@ END IF ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) ) ) END IF END DO ! CONCURRENT + !$acc end parallel #endif ! !* 6.4 Select Wet or Dry case ! +!$acc kernels present_cr(GWORK) IF ( KRR == 7 ) THEN !$acc loop independent DO CONCURRENT (JL=1:JLU) @@ -634,7 +652,8 @@ DO CONCURRENT (JL=1:JLU) ENDIF ENDDO ELSE IF( KRR == 6 ) THEN - GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case + !$mnh_expand_where(JL=1:JLU) + GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case WHERE( GWORK(:) ) PRCS(:) = PRCS(:) - ZZW1(:,1) PRIS(:) = PRIS(:) - ZZW1(:,5) @@ -645,7 +664,8 @@ ELSE IF( KRR == 6 ) THEN PTHS(:) = PTHS(:) + (PRWETG(:)-ZZW1(:,5)-ZZW1(:,6))*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCWETG+RRWETG)) END WHERE - END IF + !$mnh_end_expand_where() +END IF !$acc end kernels IF (MPPDB_INITIALIZED) THEN @@ -682,8 +702,10 @@ END IF if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'DRYG', Unpack ( prgs(:) * prhodj(:), & mask = omicro(:,:,:), field = 0. ) ) -!$acc kernels +!$acc kernels present_cr(GWORK) +!$mnh_expand_where(JL=1:JLU) GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)<PRWETG(:) .AND. PRDRYG(:)>0.0 ! Dry case + WHERE( GWORK(:) ) PRCS(:) = PRCS(:) - ZZW1(:,1) PRIS(:) = PRIS(:) - ZZW1(:,2) @@ -693,6 +715,7 @@ END IF PTHS(:) = PTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(PLSFACT(:)-PLVFACT(:)) ! ! f(L_f*(RCDRYG+RRDRYG)) END WHERE + !$mnh_end_expand_where() !$acc end kernels IF (MPPDB_INITIALIZED) THEN @@ -719,9 +742,11 @@ END IF ! !* 6.5 Melting of the graupeln ! -!$acc kernels +!$acc kernels present_cr(GWORK) GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRGS(:)>0.0 .AND. PZT(:)>XTT +!$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) +!$acc parallel present_cr(GWORK) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN @@ -743,7 +768,9 @@ END IF PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR)) END IF END DO ! CONCURRENT +!$acc end parallel #else +!$acc parallel present_cr(GWORK) !$acc loop independent DO CONCURRENT ( JL=1:JLU ) IF ( GWORK(JL) ) THEN @@ -765,8 +792,8 @@ END IF PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR)) END IF END DO ! CONCURRENT +!$acc end parallel #endif -!$acc end kernels IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(PRRS,"RAIN_ICE_FAST_RG 6.5:PRRS") diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90 index 88462be86..24c30713a 100644 --- a/src/MNH/rain_ice_fast_rs.f90 +++ b/src/MNH/rain_ice_fast_rs.f90 @@ -177,7 +177,7 @@ JJU = size(PRHODREF) ! !* 5.1 cloud droplet riming of the aggregates ! -!$acc kernels +!$acc kernels present_cr(GWORK) GWORK(:) = PRCT(:)>XRTMIN(2) .AND. PRST(:)>XRTMIN(5) .AND. PRCS(:)>0.0 .AND. PZT(:)<XTT !$acc end kernels #ifndef MNH_OPENACC @@ -366,7 +366,7 @@ END IF ! !* 5.2 rain accretion onto the aggregates ! -!$acc kernels +!$acc kernels present_cr(GWORK) GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRST(:)>XRTMIN(5) .AND. PRRS(:)>0.0 .AND. PZT(:)<XTT !$acc end kernels #ifndef MNH_OPENACC @@ -586,9 +586,11 @@ END IF ! !* 5.3 Conversion-Melting of the aggregates ! -!$acc kernels +!$acc kernels present_cr(GWORK,zzw) zzw(:) = 0. GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0 .AND. PZT(:)>XTT +!$acc end kernels +!$acc parallel present_cr(GWORK,zzw) !$acc loop independent DO CONCURRENT (JJ=1:JJU) IF ( GWORK(JJ) ) THEN @@ -618,7 +620,7 @@ END IF PRGS(JJ) = PRGS(JJ) + ZZW(JJ) END IF END DO ! CONCURRENT -!$acc end kernels +!$acc end parallel if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', & Unpack ( -zzw(:) * prhodj(:), mask = omicro(:,:,:), field = 0. ) ) -- GitLab