Skip to content
Snippets Groups Projects
Commit ae5b04a8 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 22/01/2024: OpenACC: bl89: better performance (with NVHPC 23.11)

parent 4a8c1a65
No related branches found
No related tags found
No related merge requests found
......@@ -334,12 +334,13 @@ ZUSRBL89 = 1./ZBL89EXP
!
IF( KRR > 0 ) THEN
!$acc kernels
ZSUM(:,:) = 0.
DO JRR=1,KRR
ZSUM(:,:) = ZSUM(:,:)+ZRM(:,:,JRR)
ZSUM(:,:) = ZRM(:,:,1)
DO JRR = 2, KRR
!$mnh_do_concurrent ( JI=1:IIU,JJ=1:IJU )
ZSUM(JI,JJ) = ZSUM(JI,JJ) + ZRM(JI,JJ,JRR)
!$mnh_end_do()
ENDDO
ZVPT(:,:)=ZTHM(:,:) * ( 1. + ZRVORD*ZRM(:,:,1) ) &
/ ( 1. + ZSUM(:,:) )
ZVPT(:,:)=ZTHM(:,:) * ( 1. + ZRVORD*ZRM(:,:,1) ) / ( 1. + ZSUM(:,:) )
!$acc end kernels
ELSE
!$acc kernels
......@@ -379,11 +380,13 @@ end do
ZHLVPT(:,IKTB:IKTE)= 0.5 * ( ZVPT(:,IKTB:IKTE)+ZVPT(:,IKTB-KKL:IKTE-KKL) )
ZHLVPT(:,KKU)= 0.5 * ( ZVPT(:,KKU)+ZVPT(:,KKU-KKL) )
ZHLVPT(:,KKA) = ZVPT(:,KKA)
!$acc end kernels
!-------------------------------------------------------------------------------
!
!* 3. loop on model levels
! --------------------
DO JK=IKTB,IKTE
!$acc kernels
!
!-------------------------------------------------------------------------------
!
......@@ -394,11 +397,11 @@ DO JK=IKTB,IKTE
ZINTE(:)=ZTKEM(:,JK)
ZLWORK(:)=0.
ZTESTM=1.
!$acc loop seq
DO JKK=JK,IKB,-KKL
IF(ZTESTM > 0.) THEN
ZTESTM=0.
DO J1D=1,IIU*IJU
!$mnh_do_concurrent( J1D = 1 : IIU*IJU )
ZTEST0=0.5+SIGN(0.5,ZINTE(J1D))
!--------- SHEAR + STABILITY -----------
......@@ -421,7 +424,7 @@ DO JK=IKTB,IKTE
!--------- SHEAR + STABILITY -----------
ZLWORK2 = (ZG_O_THVREF(J1D,JK) *(ZVPT(J1D,JKK) - ZVPT(J1D,JK)) &
ZLWORK2 = (ZG_O_THVREF(J1D,JK) *(ZVPT(J1D,JKK) - ZVPT(J1D,JK)) &
-XRM17*ZSHEAR(J1D,JKK)*ZSQRT_TKE(J1D,JK) &
#ifndef MNH_BITREP
+ SQRT(ABS( (XRM17*ZSHEAR(J1D,JKK)*ZSQRT_TKE(J1D,JK) &
......@@ -436,8 +439,7 @@ DO JK=IKTB,IKTE
ZLWORK(J1D)=ZLWORK(J1D)+ZTEST0*(ZTEST*ZLWORK1+(1-ZTEST)*ZLWORK2)
ZINTE(J1D) = ZINTE(J1D) - ZPOTE
END DO
!$mnh_end_do()
ENDIF
END DO
!-------------------------------------------------------------------------------
......@@ -456,10 +458,11 @@ DO JK=IKTB,IKTE
ZLWORK(:)=0.
ZTESTM=1.
!
!$acc loop seq
DO JKK=JK+KKL,IKE,KKL
IF(ZTESTM > 0.) THEN
ZTESTM=0.
DO J1D=1,IIU*IJU
!$mnh_do_concurrent( J1D = 1 : IIU*IJU )
ZTEST0=0.5+SIGN(0.5,ZINTE(J1D))
!-------- ORIGINAL -------------
......@@ -508,7 +511,7 @@ DO JK=IKTB,IKTE
ZLWORK(J1D)=ZLWORK(J1D)+ZTEST0*(ZTEST*ZLWORK1+(1-ZTEST)*ZLWORK2)
ZINTE(J1D) = ZINTE(J1D) - ZPOTE
END DO
!$mnh_end_do()
ENDIF
END DO
!
......@@ -516,7 +519,7 @@ DO JK=IKTB,IKTE
!
!* 7. final mixing length
!
DO J1D=1,IIU*IJU
!$mnh_do_concurrent( J1D = 1 : IIU*IJU )
ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10_MNHREAL)
ZLWORK2=MAX(ZLWORK(J1D),1.E-10_MNHREAL)
ZPOTE = ZLWORK1 / ZLWORK2
......@@ -527,7 +530,7 @@ DO JK=IKTB,IKTE
ZLWORK2=1.d0 + br_pow( ZPOTE, ZBL89EXP )
ZLM(J1D,JK) = ZLWORK1 * br_pow( 2. / ZLWORK2, ZUSRBL89 )
#endif
END DO
!$mnh_end_do()
ZLM(:,JK)=MAX(ZLM(:,JK),XLINI)
!
......@@ -535,6 +538,7 @@ DO JK=IKTB,IKTE
!* 8. end of the loop on the vertical levels
! --------------------------------------
!
!$acc end kernels
END DO
!
!-------------------------------------------------------------------------------
......@@ -542,6 +546,7 @@ END DO
!* 9. boundaries
! ----------
!
!$acc kernels
ZLM(:,KKA)=ZLM(:,IKB)
ZLM(:,IKE)=ZLM(:,IKE-KKL)
ZLM(:,KKU)=ZLM(:,IKE-KKL)
......
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