diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90 index b21c4cf7308df7dea85752538ea99358709806ba..c8164539c22451f1c6aa15fbdf22402f11a9e158 100644 --- a/src/MNH/ice4_compute_pdf.f90 +++ b/src/MNH/ice4_compute_pdf.f90 @@ -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 diff --git a/src/MNH/ice4_rainfr_vert.f90 b/src/MNH/ice4_rainfr_vert.f90 index a851b3ef86bb0189e3c4d6674e7ffc6b52365b0b..629613e5d13fd48bf5a5e917fa7b11b4ff076ddb 100644 --- a/src/MNH/ice4_rainfr_vert.f90 +++ b/src/MNH/ice4_rainfr_vert.f90 @@ -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) diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 1def8bc5802e5e87adca61697befc75e5aaa9a3d..ff8b8437d750c364d711bea14db6e906e96a300f 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -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