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

Juan 16/11/2022:MNH/*.f90 , Optimization of NOBITREP part , with mnh_expand

parent 57c21d7b
No related branches found
No related tags found
No related merge requests found
...@@ -162,6 +162,7 @@ CALL MNH_MEM_GET( ZLBEXI, SIZE(PRHODREF) ) ...@@ -162,6 +162,7 @@ CALL MNH_MEM_GET( ZLBEXI, SIZE(PRHODREF) )
zzw(:) = 0. zzw(:) = 0.
GWORK(:) = PRCS(:)>0.0 .AND. PSSI(:)>0.0 .AND. PRIT(:)>XRTMIN(4) .AND. PCIT(:)>0.0 GWORK(:) = PRCS(:)>0.0 .AND. PSSI(:)>0.0 .AND. PRIT(:)>XRTMIN(4) .AND. PCIT(:)>0.0
#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
!$mnh_expand_where(JL=1:JLU)
WHERE( GWORK(:) ) WHERE( GWORK(:) )
ZZW(:) = MIN(1.E8,XLBI*( PRHODREF(:)*PRIT(:)/PCIT(:) )**XLBEXI) ! Lbda_i ZZW(:) = MIN(1.E8,XLBI*( PRHODREF(:)*PRIT(:)/PCIT(:) )**XLBEXI) ! Lbda_i
ZZW(:) = MIN( PRCS(:),( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * & ZZW(:) = MIN( PRCS(:),( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * &
...@@ -170,6 +171,7 @@ CALL MNH_MEM_GET( ZLBEXI, SIZE(PRHODREF) ) ...@@ -170,6 +171,7 @@ CALL MNH_MEM_GET( ZLBEXI, SIZE(PRHODREF) )
PRIS(:) = PRIS(:) + ZZW(:) PRIS(:) = PRIS(:) + ZZW(:)
PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCBERI)) PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCBERI))
END WHERE END WHERE
!$mnh_end_expand_where()
#else #else
!!$ Le DO concurrent n'est pas bit-reproductible BUG NVHPC 20.7 !!$ Le DO concurrent n'est pas bit-reproductible BUG NVHPC 20.7
......
...@@ -291,6 +291,7 @@ zzw(JL) = 0. ...@@ -291,6 +291,7 @@ zzw(JL) = 0.
!Evaporation only when there's no cloud (RC must be 0) !Evaporation only when there's no cloud (RC must be 0)
GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRCT(:)<=XRTMIN(2) GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRCT(:)<=XRTMIN(2)
#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
!$mnh_expand_where(JL=1:JLU)
WHERE( GWORK(:) ) WHERE( GWORK(:) )
ZZW(:) = EXP( XALPW - XBETAW/PZT(:) - XGAMW*ALOG(PZT(:) ) ) ! es_w ZZW(:) = EXP( XALPW - XBETAW/PZT(:) - XGAMW*ALOG(PZT(:) ) ) ! es_w
PUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) PUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) )
...@@ -303,6 +304,7 @@ zzw(JL) = 0. ...@@ -303,6 +304,7 @@ zzw(JL) = 0.
PRVS(:) = PRVS(:) + ZZW(:) PRVS(:) = PRVS(:) + ZZW(:)
PTHS(:) = PTHS(:) - ZZW(:)*PLVFACT(:) PTHS(:) = PTHS(:) - ZZW(:)*PLVFACT(:)
END WHERE END WHERE
!$mnh_end_expand_where()
#else #else
!$acc loop independent !$acc loop independent
DO CONCURRENT ( JL=1:JLU ) DO CONCURRENT ( JL=1:JLU )
......
...@@ -423,7 +423,9 @@ CALL MZM_DEVICE(ZKEFF, ZTMP1_DEVICE) !Warning: re-used later ...@@ -423,7 +423,9 @@ CALL MZM_DEVICE(ZKEFF, ZTMP1_DEVICE) !Warning: re-used later
CALL MZM_DEVICE(PRHODJ,ZTMP2_DEVICE) !Warning: re-used later CALL MZM_DEVICE(PRHODJ,ZTMP2_DEVICE) !Warning: re-used later
!$acc kernels ! present(ZA) !$acc kernels ! present(ZA)
#if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
!$mnh_expand_array(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
ZA(:,:,:) = - PTSTEP * XCET * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) / PDZZ(:,:,:)**2 ZA(:,:,:) = - PTSTEP * XCET * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) / PDZZ(:,:,:)**2
!$mnh_end_expand_array()
#else #else
!$acc_nv loop independent collapse(3) !$acc_nv loop independent collapse(3)
DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
......
...@@ -465,13 +465,10 @@ ZFLX(:,:,IKB) = - XCMFS * ZTMP2_DEVICE(:,:,1) * ( ZTMP5_DEVICE(:,:,1) + ZTMP6_DE ...@@ -465,13 +465,10 @@ ZFLX(:,:,IKB) = - XCMFS * ZTMP2_DEVICE(:,:,1) * ( ZTMP5_DEVICE(:,:,1) + ZTMP6_DE
#endif #endif
! !
! extrapolates this flux under the ground with the surface flux ! extrapolates this flux under the ground with the surface flux
#ifdef MNH_COMPILER_CCE !$acc parallel present_cr(ZFLX)
!$acc kernels present(ZFLX)
#else
!$acc kernels
#endif
#ifndef MNH_BITREP #ifndef MNH_BITREP
ZFLX(:,:,IKB-1) = & !$mnh_expand_array(JI=1:JIU,JJ=1:JJU)
ZFLX(:,:,IKB-1) = &
PTAU11M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:)**2 & PTAU11M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:)**2 &
+PTAU12M(:,:) * (PCOSSLOPE(:,:)**2 - PSINSLOPE(:,:)**2) * & +PTAU12M(:,:) * (PCOSSLOPE(:,:)**2 - PSINSLOPE(:,:)**2) * &
PDIRCOSZW(:,:)**2 & PDIRCOSZW(:,:)**2 &
...@@ -481,25 +478,23 @@ ZFLX(:,:,IKB-1) = & ...@@ -481,25 +478,23 @@ ZFLX(:,:,IKB-1) = &
2. * PUSLOPEM(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * & 2. * PUSLOPEM(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * &
PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
+PVSLOPEM(:,:) * (PCOSSLOPE(:,:)**2 - PSINSLOPE(:,:)**2) * ZDIRSINZW(:,:) ) +PVSLOPEM(:,:) * (PCOSSLOPE(:,:)**2 - PSINSLOPE(:,:)**2) * ZDIRSINZW(:,:) )
!$mnh_end_expand_array()
#else #else
!PW: BUG: commented 'acc loop independent collapse(2)' to workaround compiler bug (NVHPC 21.1) !PW: BUG: commented 'acc loop independent collapse(2)' to workaround compiler bug (NVHPC 21.1)
#ifdef MNH_COMPILER_NVHPC !$mnh_expand_array(JI=1:JIU,JJ=1:JJU)
!acc loop independent collapse(2) ZFLX(:,:,IKB-1) = &
#endif PTAU11M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * BR_P2(PDIRCOSZW(:,:)) &
DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +PTAU12M(:,:) * (BR_P2(PCOSSLOPE(:,:)) - BR_P2(PSINSLOPE(:,:))) * &
ZFLX(JI,JJ,IKB-1) = & BR_P2(PDIRCOSZW(:,:)) &
PTAU11M(JI,JJ) * PCOSSLOPE(JI,JJ) * PSINSLOPE(JI,JJ) * BR_P2(PDIRCOSZW(JI,JJ)) & -PTAU22M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) &
+PTAU12M(JI,JJ) * (BR_P2(PCOSSLOPE(JI,JJ)) - BR_P2(PSINSLOPE(JI,JJ))) * & +PTAU33M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * BR_P2(ZDIRSINZW(:,:)) &
BR_P2(PDIRCOSZW(JI,JJ)) & -PCDUEFF(:,:) * ( &
-PTAU22M(JI,JJ) * PCOSSLOPE(JI,JJ) * PSINSLOPE(JI,JJ) & 2. * PUSLOPEM(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * &
+PTAU33M(JI,JJ) * PCOSSLOPE(JI,JJ) * PSINSLOPE(JI,JJ) * BR_P2(ZDIRSINZW(JI,JJ)) & PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
-PCDUEFF(JI,JJ) * ( & +PVSLOPEM(:,:) * (BR_P2(PCOSSLOPE(:,:)) - BR_P2(PSINSLOPE(:,:))) * ZDIRSINZW(:,:) )
2. * PUSLOPEM(JI,JJ) * PCOSSLOPE(JI,JJ) * PSINSLOPE(JI,JJ) * & !$mnh_end_expand_array()
PDIRCOSZW(JI,JJ) * ZDIRSINZW(JI,JJ) &
+PVSLOPEM(JI,JJ) * (BR_P2(PCOSSLOPE(JI,JJ)) - BR_P2(PSINSLOPE(JI,JJ))) * ZDIRSINZW(JI,JJ) )
END DO ! CONCURRENT
#endif #endif
!$acc end kernels !$acc end parallel
! !
#ifndef MNH_OPENACC #ifndef MNH_OPENACC
ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( MYM( ZFLX(:,:,IKB-1:IKB-1) ) ) & ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( MYM( ZFLX(:,:,IKB-1:IKB-1) ) ) &
......
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