Skip to content
Snippets Groups Projects
Commit 1b9d84b2 authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 02/07/2024: optimize perf bugfix GPU for turb

parent c5a2469e
No related branches found
No related tags found
No related merge requests found
...@@ -1990,14 +1990,20 @@ END IF ...@@ -1990,14 +1990,20 @@ END IF
CALL ETHETA(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,GOCEAN,OCOMPUTE_SRC,ZETHETA) CALL ETHETA(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZATHETA,PSRCT,GOCEAN,OCOMPUTE_SRC,ZETHETA)
CALL EMOIST(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,GOCEAN,ZEMOIST) CALL EMOIST(D,CST,KRR,KRRI,PTHLT,PRT,ZLOCPEXNM,ZAMOIST,PSRCT,GOCEAN,ZEMOIST)
! !
!$acc kernels present(ZWORK2D,PLM)
IF (KRR>0) THEN IF (KRR>0) THEN
DO JK = IKTB+1,IKTE-1 !$acc kernels
DO JIJ=IIJB,IIJE !$acc loop independent collapse(2)
DO CONCURRENT (JK=IKTB+1:IKTE-1,JIJ=IIJB:IIJE)
ZDTHLDZ(JIJ,JK)= 0.5*((PTHLT(JIJ,JK+IKL)-PTHLT(JIJ,JK ))/PDZZ(JIJ,JK+IKL)+ & ZDTHLDZ(JIJ,JK)= 0.5*((PTHLT(JIJ,JK+IKL)-PTHLT(JIJ,JK ))/PDZZ(JIJ,JK+IKL)+ &
(PTHLT(JIJ,JK )-PTHLT(JIJ,JK-IKL))/PDZZ(JIJ,JK )) (PTHLT(JIJ,JK )-PTHLT(JIJ,JK-IKL))/PDZZ(JIJ,JK ))
ZDRTDZ(JIJ,JK) = 0.5*((PRT(JIJ,JK+IKL,1)-PRT(JIJ,JK ,1))/PDZZ(JIJ,JK+IKL)+ & ZDRTDZ(JIJ,JK) = 0.5*((PRT(JIJ,JK+IKL,1)-PRT(JIJ,JK ,1))/PDZZ(JIJ,JK+IKL)+ &
(PRT(JIJ,JK ,1)-PRT(JIJ,JK-IKL,1))/PDZZ(JIJ,JK )) (PRT(JIJ,JK ,1)-PRT(JIJ,JK-IKL,1))/PDZZ(JIJ,JK ))
END DO
!$acc end kernels
!$acc kernels
!$acc loop independent collapse(2) private(ZVAR)
DO CONCURRENT (JK=IKTB+1:IKTE-1,JIJ=IIJB:IIJE)
IF (GOCEAN) THEN IF (GOCEAN) THEN
ZVAR=CST%XG*(CST%XALPHAOC*ZDTHLDZ(JIJ,JK)-CST%XBETAOC*ZDRTDZ(JIJ,JK)) ZVAR=CST%XG*(CST%XALPHAOC*ZDTHLDZ(JIJ,JK)-CST%XBETAOC*ZDRTDZ(JIJ,JK))
ELSE ELSE
...@@ -2009,11 +2015,13 @@ IF (KRR>0) THEN ...@@ -2009,11 +2015,13 @@ IF (KRR>0) THEN
PLM(JIJ,JK)=MAX(CST%XMNH_EPSILON,MIN(PLM(JIJ,JK), & PLM(JIJ,JK)=MAX(CST%XMNH_EPSILON,MIN(PLM(JIJ,JK), &
0.76* SQRT(PTKET(JIJ,JK)/ZVAR))) 0.76* SQRT(PTKET(JIJ,JK)/ZVAR)))
END IF END IF
END DO
END DO END DO
!$acc end kernels
ELSE! For dry atmos or unsalted ocean runs ELSE! For dry atmos or unsalted ocean runs
DO JK = IKTB+1,IKTE-1 !$acc kernels
DO JIJ=IIJB,IIJE !$acc loop independent collapse(2) private(ZVAR)
DO CONCURRENT (JK=IKTB+1:IKTE-1,JIJ=IIJB:IIJE)
ZDTHLDZ(JIJ,JK)= 0.5*((PTHLT(JIJ,JK+IKL)-PTHLT(JIJ,JK ))/PDZZ(JIJ,JK+IKL)+ & ZDTHLDZ(JIJ,JK)= 0.5*((PTHLT(JIJ,JK+IKL)-PTHLT(JIJ,JK ))/PDZZ(JIJ,JK+IKL)+ &
(PTHLT(JIJ,JK )-PTHLT(JIJ,JK-IKL))/PDZZ(JIJ,JK )) (PTHLT(JIJ,JK )-PTHLT(JIJ,JK-IKL))/PDZZ(JIJ,JK ))
IF (GOCEAN) THEN IF (GOCEAN) THEN
...@@ -2026,9 +2034,10 @@ ELSE! For dry atmos or unsalted ocean runs ...@@ -2026,9 +2034,10 @@ ELSE! For dry atmos or unsalted ocean runs
PLM(JIJ,JK)=MAX(CST%XMNH_EPSILON,MIN(PLM(JIJ,JK), & PLM(JIJ,JK)=MAX(CST%XMNH_EPSILON,MIN(PLM(JIJ,JK), &
0.76* SQRT(PTKET(JIJ,JK)/ZVAR))) 0.76* SQRT(PTKET(JIJ,JK)/ZVAR)))
END IF END IF
END DO
END DO END DO
!$acc end kernels
END IF END IF
!$acc kernels present(ZWORK2D, PLM)
! special case near the surface ! special case near the surface
!$mnh_expand_array(JIJ=IIJB:IIJE) !$mnh_expand_array(JIJ=IIJB:IIJE)
ZDTHLDZ(:,IKB)=(PTHLT(:,IKB+IKL)-PTHLT(:,IKB))/PDZZ(:,IKB+IKL) ZDTHLDZ(:,IKB)=(PTHLT(:,IKB+IKL)-PTHLT(:,IKB))/PDZZ(:,IKB+IKL)
......
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