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

Juan 18/09/2020: Opimisation OpenACC , BR_POW parallelized by adding temp 1D...

Juan 18/09/2020: Opimisation OpenACC , BR_POW parallelized by adding temp 1D array ZLBEXI(:) = XLBEXI ,
DO CONCURRENT not bit-reporductible <-> NVHPC 20.7 Bug ?
parent 6ad3c470
No related branches found
No related tags found
No related merge requests found
......@@ -60,7 +60,9 @@ REAL, DIMENSION(:), INTENT(INOUT) :: PTHS ! Theta source
!
LOGICAL, DIMENSION(:), ALLOCATABLE :: GWORK
REAL, DIMENSION(:), ALLOCATABLE :: ZZW ! Work array
REAL, DIMENSION(:), ALLOCATABLE :: ZLBEXI
!
INTEGER :: JL,JLU
!-------------------------------------------------------------------------------
!
! IN variables
......@@ -98,10 +100,13 @@ IF (MPPDB_INITIALIZED) THEN
CALL MPPDB_CHECK(PTHS,"RAIN_ICE_FAST_RI beg:PTHS")
END IF
!
JLU = size(PRHODREF)
!
ALLOCATE( GWORK(size(PRHODREF)) )
ALLOCATE( ZZW (size(PRHODREF)) )
ALLOCATE( ZLBEXI (size(PRHODREF)) )
!$acc data create( GWORK, ZZW )
!$acc data create( GWORK, ZZW , ZLBEXI )
!
!* 7.1 cloud ice melting
......@@ -131,21 +136,43 @@ ALLOCATE( ZZW (size(PRHODREF)) )
!* 7.2 Bergeron-Findeisen effect: RCBERI
!
!$acc kernels
GWORK(:) = PRCS(:)>0.0 .AND. PSSI(:)>0.0 .AND. PRIT(:)>XRTMIN(4) .AND. PCIT(:)>0.0
WHERE( GWORK(:) )
GWORK(:) = PRCS(:)>0.0 .AND. PSSI(:)>0.0 .AND. PRIT(:)>XRTMIN(4) .AND. PCIT(:)>0.0
#ifndef MNH_BITREP
WHERE( GWORK(:) )
ZZW(:) = MIN(1.E8,XLBI*( PRHODREF(:)*PRIT(:)/PCIT(:) )**XLBEXI) ! Lbda_i
ZZW(:) = MIN( PRCS(:),( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * &
( X0DEPI/ZZW(:) + X2DEPI*PCJ(:)*PCJ(:)/ZZW(:)**(XDI+2.0) ) )
PRCS(:) = PRCS(:) - ZZW(:)
PRIS(:) = PRIS(:) + ZZW(:)
PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCBERI))
END WHERE
#else
ZZW(:) = MIN(1.E8,XLBI*BR_POW( PRHODREF(:)*PRIT(:)/PCIT(:), XLBEXI ) ) ! Lbda_i
!!$ Le DO concurrent n'est pas bit-reproductible BUG NVHPC 20.7
!!$ DO CONCURRENT ( JL=1:JLU )
!!$ ZLBEXI(JL) = XLBEXI
!!$ IF ( GWORK(JL) ) THEN
!!$ ZZW(JL) = MIN(1.E8,XLBI*BR_POW( PRHODREF(JL)*PRIT(JL)/PCIT(JL), ZLBEXI(JL) ) ) ! Lbda_i
!!$ ZZW(JL) = MIN( PRCS(JL),( PSSI(JL) / (PRHODREF(JL)*PAI(JL)) ) * PCIT(JL) * &
!!$ ( X0DEPI/ZZW(JL) + X2DEPI*PCJ(JL)*PCJ(JL)/BR_POW(ZZW(JL),XDI+2.0) ) )
!!$ PRCS(JL) = PRCS(JL) - ZZW(JL)
!!$ PRIS(JL) = PRIS(JL) + ZZW(JL)
!!$ PTHS(JL) = PTHS(JL) + ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCBERI))
!!$ END IF
!!$ END DO ! CONCURRENT
WHERE( GWORK(:) )
ZLBEXI(:) = XLBEXI
ZZW(:) = MIN(1.E8,XLBI*BR_POW( PRHODREF(:)*PRIT(:)/PCIT(:), ZLBEXI(:) ) ) ! Lbda_i
ZZW(:) = MIN( PRCS(:),( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * &
( X0DEPI/ZZW(:) + X2DEPI*PCJ(:)*PCJ(:)/BR_POW(ZZW(:),XDI+2.0) ) )
#endif
( X0DEPI/ZZW(:) + X2DEPI*PCJ(:)*PCJ(:)/BR_POW(ZZW(:),XDI+2.0) ) )
PRCS(:) = PRCS(:) - ZZW(:)
PRIS(:) = PRIS(:) + ZZW(:)
PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCBERI))
END WHERE
END WHERE
#endif
!$acc end kernels
IF (LBUDGET_TH) THEN
!$acc update self(PTHS)
......
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