Skip to content
Snippets Groups Projects
Commit ec4e947a authored by Wautelet Philippe's avatar Wautelet Philippe
Browse files

Philippe 20/10/2021: OpenACC: modifications to get correct results

parent ad93b283
Branches
Tags
1 merge request!4Jean Wurtz 30/04/2025 : Bugfixes mainly for TEB and for simple precision
......@@ -150,30 +150,6 @@ allocate( ZSUMRI (isize ) )
ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
!$acc end kernels
IF(HSUBG_AUCV_RC=='NONE') THEN
#if 0
!PW: bug: crash at execution with PGI 18.10
!$acc kernels
!Cloud water is entirely in low or high part
GWORK(:) = PRCT(:)>ZRCRAUTC(:)
GWORK2(:) = PRCT(:)>XRTMIN(2)
WHERE(GWORK(:))
PHLC_HCF(:)=1.
PHLC_LCF(:)=0.
PHLC_HRC(:)=PRCT(:)
PHLC_LRC(:)=0.
ELSEWHERE(GWORK2(:))
PHLC_HCF(:)=0.
PHLC_LCF(:)=1.
PHLC_HRC(:)=0.
PHLC_LRC(:)=PRCT(:)
ELSEWHERE
PHLC_HCF(:)=0.
PHLC_LCF(:)=0.
PHLC_HRC(:)=0.
PHLC_LRC(:)=0.
END WHERE
!$acc end kernels
#else
!$acc kernels
DO JI = 1, ISIZE
IF (PRCT(JI)>ZRCRAUTC(JI)) THEN
......@@ -194,7 +170,6 @@ IF(HSUBG_AUCV_RC=='NONE') THEN
END IF
END DO
!$acc end kernels
#endif
ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN
!$acc kernels
......@@ -390,22 +365,24 @@ ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion
IF(HSUBG_AUCV_RI=='NONE') THEN
!$acc kernels
!Cloud water is entirely in low or high part
WHERE(PRIT(:)>ZCRIAUTI(:))
PHLI_HCF(:)=1.
PHLI_LCF(:)=0.
PHLI_HRI(:)=PRIT(:)
PHLI_LRI(:)=0.
ELSEWHERE(PRIT(:)>XRTMIN(2))
PHLI_HCF(:)=0.
PHLI_LCF(:)=1.
PHLI_HRI(:)=0.
PHLI_LRI(:)=PRIT(:)
ELSEWHERE
PHLI_HCF(:)=0.
PHLI_LCF(:)=0.
PHLI_HRI(:)=0.
PHLI_LRI(:)=0.
END WHERE
DO JI = 1, ISIZE
IF ( PRIT(JI) > ZCRIAUTI(JI) ) THEN
PHLI_HCF(JI)=1.
PHLI_LCF(JI)=0.
PHLI_HRI(JI)=PRIT(JI)
PHLI_LRI(JI)=0.
ELSE IF ( PRIT(JI) > XRTMIN(2) ) THEN
PHLI_HCF(JI)=0.
PHLI_LCF(JI)=1.
PHLI_HRI(JI)=0.
PHLI_LRI(JI)=PRIT(JI)
ELSE
PHLI_HCF(JI)=0.
PHLI_LCF(JI)=0.
PHLI_HRI(JI)=0.
PHLI_LRI(JI)=0.
END IF
END DO
!$acc end kernels
ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN
!$acc kernels
......
......@@ -73,29 +73,46 @@ END IF
!
!$acc kernels
PPRFR(KIB:KIE,KJB:KJE,KKE)=0.
!$acc end kernels
DO JK=KKE-KKL, KKB, -KKL
IF(PRESENT(PRH)) THEN
!$acc kernels
!$acc loop collapse(2) independent
DO JJ = KJB, KJE
DO JI = KIB,KIE
IF(PRESENT(PRH)) THEN
DO JJ = KJB, KJE
DO JI = KIB,KIE
MASK=PRR(JI,JJ,JK) .GT. XRTMIN(3) .OR. PRS(JI,JJ,JK) .GT. XRTMIN(5) &
.OR. PRG(JI,JJ,JK) .GT. XRTMIN(6) .OR. PRH(JI,JJ,JK) .GT. XRTMIN(7)
ELSE
IF (MASK) THEN
PPRFR(JI,JJ,JK)=MAX(PPRFR(JI,JJ,JK),PPRFR(JI,JJ,JK+KKL))
IF (PPRFR(JI,JJ,JK)==0) THEN
PPRFR(JI,JJ,JK)=1.
END IF
ELSE
PPRFR(JI,JJ,JK)=0.
END IF
END DO
END DO
!$acc end kernels
ELSE
!$acc kernels
!$acc loop collapse(2) independent
DO JJ = KJB, KJE
DO JI = KIB,KIE
MASK=PRR(JI,JJ,JK) .GT. XRTMIN(3) .OR. PRS(JI,JJ,JK) .GT. XRTMIN(5) &
.OR. PRG(JI,JJ,JK) .GT. XRTMIN(6)
END IF
IF (MASK) THEN
PPRFR(JI,JJ,JK)=MAX(PPRFR(JI,JJ,JK),PPRFR(JI,JJ,JK+KKL))
IF (PPRFR(JI,JJ,JK)==0) THEN
PPRFR(JI,JJ,JK)=1.
IF (MASK) THEN
PPRFR(JI,JJ,JK)=MAX(PPRFR(JI,JJ,JK),PPRFR(JI,JJ,JK+KKL))
IF (PPRFR(JI,JJ,JK)==0) THEN
PPRFR(JI,JJ,JK)=1.
END IF
ELSE
PPRFR(JI,JJ,JK)=0.
END IF
ELSE
PPRFR(JI,JJ,JK)=0.
END IF
END DO
END DO
END DO
END DO
!$acc end kernels
END IF
END DO
!
!Check all INOUT arrays
CALL MPPDB_CHECK3D(PPRFR,"ICE4_RAINFR_VERT end:PPRFR",PRECISION)
......
......@@ -1769,7 +1769,7 @@ INTEGER :: izrvsat, izdrvsatdt
!
!-------------------------------------------------------------------------------
!$acc data present( PT, PEXN, PCP, PLOCPEXN, PAMOIST, PATHETA )
!$acc data present( PT, PEXN, PCP, PLOCPEXN, PAMOIST, PATHETA, PPABST, PRT )
if ( mppdb_initialized ) then
!Check all in arrays
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment