Skip to content
Snippets Groups Projects
Commit c617a460 authored by ESCOBAR MUNOZ Juan's avatar ESCOBAR MUNOZ Juan
Browse files

Juan 26/10/2022:MNH/rain_ice*rg/rs.f90, Cray CCE/14.0.3++ Optimsation Problems...

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
parent 7bcbb68b
No related branches found
No related tags found
No related merge requests found
......@@ -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")
......
......@@ -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. ) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment