diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 8848e9d414206d23bd8ee760e5054c9515f71672..b4b37943f00df398246553713cdaef47df454b95 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -261,7 +261,8 @@ END MODULE MODI_MODEL_n ! P. Wautelet 19/04/2019: removed unused dummy arguments and variables ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine -!!------------------------------------------------------------------------------- +! P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates +!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -510,6 +511,7 @@ LOGICAL :: KSEDI LOGICAL :: KHHONI ! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS +!$acc declare create(ZRWS) REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPABST !To give pressure at t ! (and not t+1) to resolved_cloud REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZJ @@ -1487,6 +1489,7 @@ XTIME_LES_BU_PROCESS = 0. !$acc data create (XUT, XVT, XWT) & !$acc & copyin (XTHT, XPABST, XRT, XSVT, XRTHS_CLD, XRRS_CLD, XTHVREF) & !$acc & copy (XRTHS, XRRS, XRUS, XRVS, XRWS) & +!$acc & copy (XRWS_PRES) & !XRWS_PRES copy and not copyout (hidden in UPDATE_HALO) !$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ) ! !$acc update device(XUT, XVT, XWT, XRHODJ) @@ -1571,7 +1574,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN END IF ELSE -!$acc data copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES) +!$acc data copyin(XRUS_PRES, XRVS_PRES) CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME, & NWENO_ORDER, LSPLIT_WENO, & CLBCX, CLBCY, XTSTEP, & @@ -1754,12 +1757,22 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XRTHS_CLD = XRTHS XRRS_CLD = XRRS XRSVS_CLD = XRSVS +!$acc data present(XRHODJ) & +!$acc & copyin (NRR, LSEDIC, CSUBG_AUCV, XTSTEP, KWARM, & +!$acc & XZZ, XRHODREF, XEXNREF, ZPABST, XTHT, XSIGS, VSIGQSAT, XMFCONV, XTHM, XPABSM, & +!$acc & XRCM, ZWT_ACT_NUC, XDTHRAD, XCF_MF, XRC_MF, XRI_MF, & +!$acc & XSOLORG, XMI) & +!$acc & copy (XSUPSAT, XNACT, XNPRO, XSSPRO, & +!$acc & XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D, & +!$acc & XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP) & +!$acc & copyout(XSRCT, XRAINFR) IF (CSURF=='EXTE') THEN ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ZSEA(:,:) = 0. ZTOWN(:,:)= 0. CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:)) +!$acc data copyin(ZSEA, ZTOWN ) CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & NSPLITG, IMI, KTCOUNT, & CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM, & @@ -1779,6 +1792,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSOLORG, XMI, & XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR, & ZSEA, ZTOWN ) +!$acc end data DEALLOCATE(ZTOWN) ELSE CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & @@ -1800,6 +1814,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSOLORG, XMI, & XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR ) END IF +!$acc end data XRTHS_CLD = XRTHS - XRTHS_CLD XRRS_CLD = XRRS - XRRS_CLD XRSVS_CLD = XRSVS - XRSVS_CLD diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index e0e88cf895429fc3f1a8f4bf5abcd947db3658c8..ec7847af70335ce2d5bec5bc212a682b6164be48 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -268,9 +268,10 @@ END MODULE MODI_RESOLVED_CLOUD !! 10/2016 (C.Lac) Add droplet deposition !! S.Riette : 11/2016 : ice_adjust before and after rain_ice !! ICE3/ICE4 modified, old version under LRED=F -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! P. Wautelet: 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated) -!! 02/2019 C.Lac add rain fraction as an output field +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated) +! C. Lac 02/2019: add rain fraction as an output field +! P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -298,6 +299,7 @@ USE MODE_MPPDB #ifdef _OPENACC USE MODE_MSG #endif +use mode_sum_ll, only: MIN_ll, SUM3D_ll ! #ifdef MNH_BITREP USE MODI_BITREP @@ -438,25 +440,23 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRAINFR ! Rain fraction REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! -!PW: TODO: copyin variables only if used (depending on HCLOUD) -! ! IN variables ! -!$acc declare copyin(KRR,OSEDIC,HSUBG_AUCV,PTSTEP,OWARM) -!$acc declare present(PRHODJ) & -!$acc & copyin(PZZ,PRHODREF,PEXNREF,PPABST,PTHT,PSIGS,PSIGQSAT,PMFCONV,PTHM,PPABSM,PRCM,PW_ACT,PDTHRAD,& -!$acc & PCF_MF,PRC_MF,PRI_MF) -!In acc data: PSOLORG,PMI,PSEA,PTOWN +!$acc declare present(KRR, OSEDIC, HSUBG_AUCV, PTSTEP, OWARM, & +!$acc & PRHODJ, PZZ, PRHODREF, PEXNREF, PPABST, PTHT, PSIGS, PSIGQSAT, & +!$acc & PMFCONV, PTHM, PPABSM, PRCM, PW_ACT, PDTHRAD, & +!$acc & PCF_MF, PRC_MF, PRI_MF, & +!$acc & PSOLORG, PMI, PSEA, PTOWN, & ! ! INOUT variables ! -!$acc declare create(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,& -!$acc & PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,& -!$acc & PSUPSAT,PNACT,PNPRO,PSSPRO) +!$acc & PTHS, PRT, PRS, PSVT, PSVS, PCLDFR, PCIT, & +!$acc & PINPRC, PINPRR, PINPRR3D, PEVAP3D, PINPRS, PINPRG, PINPRH, PINDEP, & +!$acc & PSUPSAT, PNACT, PNPRO, PSSPRO, & ! ! OUT variables ! -!$acc declare create(PSRCS, PRAINFR) +!$acc & PSRCS, PRAINFR ) ! ! Variables from modules !$acc declare copyin(CSEDIM) @@ -478,11 +478,11 @@ INTEGER :: JI,JJ,JK,JL !$acc declare create(IKA,IKU,IKL) ! ! -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDZZ -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZT,ZEXN,ZLV,ZLS,ZCPH -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZCOR +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDZZ +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT,ZEXN,ZLV,ZLS,ZCPH +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOR ! for the correction of negative rv -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZZZ +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZZ ! model layer height REAL :: ZMASSTOT ! total mass for one water category ! including the negative values @@ -501,23 +501,14 @@ LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limi INTEGER :: JMOD, JMOD_IFN LOGICAL :: GWEST,GEAST,GNORTH,GSOUTH ! BVIE work array waiting for PINPRI -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI -! REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZTHSSTEP -! REAL,DIMENSION(:,:,:,:),ALLOCATABLE :: ZRSSTEP -REAL,DIMENSION(SIZE(PTHS,1),SIZE(PTHS,2),SIZE(PTHS,3)) :: ZTHSSTEP -REAL,DIMENSION(SIZE(PRS,1),SIZE(PRS,2),SIZE(PRS,3),SIZE(PRS,4)) :: ZRSSTEP +REAL, DIMENSION(:,:), ALLOCATABLE :: ZINPRI +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHSSTEP +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRSSTEP ! !$acc declare create(ZDZZ,ZEXN,ZLV,ZLS,ZCPH,ZZZ,ZSVT,ZSVS) create(ZT) create(ZCOR,ZRSMIN) & !$acc & create(ZTHSSTEP,ZRSSTEP,LLMICRO) & !$acc & copyin(XRTMIN) ! -! -! INOUT variables -! -!$acc update device(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,& -!$acc & PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,& -!$acc & PSUPSAT,PNACT,PNPRO,PSSPRO) -! !------------------------------------------------------------------------------ ! !* 1. PRELIMINARY COMPUTATIONS @@ -587,6 +578,18 @@ IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(PSSPRO,"RESOLVED_CLOUD beg:PSSPRO") END IF ! +allocate ( ZDZZ ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZT ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZEXN ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZLV ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZLS ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZCPH ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZCOR ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZZZ ( SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3) ) ) +allocate ( ZINPRI ( SIZE(PZZ,1), SIZE(PZZ,2) ) ) +allocate ( ZTHSSTEP ( SIZE(PTHS,1), SIZE(PTHS,2), SIZE(PTHS,3) ) ) +allocate ( ZRSSTEP ( SIZE(PRS,1), SIZE(PRS,2), SIZE(PRS,3), SIZE(PRS,4) ) ) + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) !$acc kernels IKA=1 @@ -636,7 +639,6 @@ END IF !* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES ! --------------------------------------- ! -!$acc update device(PTHS,PRT,PRS,PRHODJ) !$acc kernels present(PTHS,PRS,PRHODJ,PPABST,ZEXN,ZLV,ZLS,ZCPH,ZSVS) PTHS(:,:,:) = PTHS(:,:,:) / PRHODJ(:,:,:) DO JRR = 1,KRR @@ -719,10 +721,6 @@ ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1) !$acc end kernels -!$acc update self(PTHS,PRT,PRS,ZEXN,ZLV,ZLS,ZCPH) -IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN -!$acc update self(ZSVS,ZSVT) -ENDIF ! ! !* 3. REMOVE NEGATIVE VALUES @@ -737,30 +735,44 @@ IF (HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3' & DO JRR = 3,KRR SELECT CASE (JRR) CASE(3,5,6,7) ! rain, snow, graupel and hail - - IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll) < 0.0 ) THEN +#ifndef _OPENACC + IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll ) < 0.0 ) THEN +#else + IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) < 0.0 ) THEN +#endif ! ! compute the total water mass computation ! +#ifndef _OPENACC ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) +#else + ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) ) +#endif ! ! remove the negative values ! +!$acc kernels PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) +!$acc end kernels ! ! compute the new total mass ! +#ifndef _OPENACC ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) ) +#else + ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) ) +#endif ! ! correct again in such a way to conserve the total mass ! ZRATIO = ZMASSTOT / ZMASSPOS +!$acc kernels PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO +!$acc end kernels ! END IF END SELECT END DO -!$acc update device(PRS) END IF ! !* 3.2 Adjustement for liquid and solid cloud @@ -996,33 +1008,67 @@ END SELECT !* 3.3 STORE THE BUDGET TERMS ! ---------------------- ! -!OPENACC: PW: TODO: update self of PTHS and PRS for budgets IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC') + IF (LBUDGET_TH) THEN +!$acc update self(PTHS) + CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') + END IF + IF (LBUDGET_RV) THEN +!$acc update self(PRS(:,:,:,1)) + CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV') + END IF + IF (LBUDGET_RC) THEN +!$acc update self(PRS(:,:,:,2)) + CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC') + END IF +END IF +IF (LBUDGET_RR) THEN +!$acc update self(PRS(:,:,:,3)) + CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR') +END IF +IF (LBUDGET_RI) THEN +!$acc update self(PRS(:,:,:,4)) + CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') +END IF +IF (LBUDGET_RS) THEN +!$acc update self(PRS(:,:,:,5)) + CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') +END IF +IF (LBUDGET_RG) THEN +!$acc update self(PRS(:,:,:,6)) + CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') +END IF +IF (LBUDGET_RH) THEN +!$acc update self(PRS(:,:,:,7)) + CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') END IF -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV') - IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV') - IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV') - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & + IF ( OWARM ) THEN +!$acc update self(ZSVS(:,:,:,NSV_LIMA_NC)) + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV') + END IF + IF ( OWARM .AND. ORAIN ) THEN +!$acc update self(ZSVS(:,:,:,NSV_LIMA_NR)) + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV') + END IF + IF ( LCOLD ) THEN +!$acc update self(ZSVS(:,:,:,NSV_LIMA_NI)) + CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV') + END IF + IF ( NMOD_CCN >= 1 ) THEN +!$acc update self(ZSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)) + DO JL=1, NMOD_CCN + CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') - END DO - END IF - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & + END DO + END IF + IF ( NMOD_IFN >= 1 ) THEN +!$acc update self(ZSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)) + DO JL=1, NMOD_IFN + CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') - END DO - END IF + END DO + END IF END IF ! @@ -1099,7 +1145,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente !* 7.1 Compute the explicit microphysical sources ! ! -!$acc data copyin(PSOLORG,PMI) CALL RAIN_C2R2_KHKO ( HCLOUD, OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & TPFILE, OCLOSE_OUT, PZZ, PRHODJ, PRHODREF, PEXNREF, & PPABST, PTHT, PRT(:,:,:,1), PRT(:,:,:,2), PRT(:,:,:,3), & @@ -1110,7 +1155,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PINPRC, PINPRR, PINPRR3D, PEVAP3D , & PSVT(:,:,:,:), PSOLORG, PMI, HACTCCN, & PINDEP, PSUPSAT, PNACT ) -!$acc end data ! ! !* 7.2 Perform the saturation adjustment @@ -1162,7 +1206,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente CALL MZF_DEVICE(1,IKU,1,PZZ,ZZZ) #endif IF(LRED .AND. LADJ_BEFORE) THEN -!$acc data present(ZRSSTEP,ZTHSSTEP) CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'ADJU', & OSUBG_COND, OSIGMAS, PTSTEP,PSIGQSAT, & PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, ZZZ, & @@ -1174,7 +1217,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PRI=ZRSSTEP(:,:,:,4), PRIS=PRS(:,:,:,4), & PRS=ZRSSTEP(:,:,:,5), & PRG=ZRSSTEP(:,:,:,6) ) -!$acc end data ENDIF IF (LRED) THEN !$acc kernels present(LLMICRO,PRT,XRTMIN,ZRSMIN) @@ -1191,11 +1233,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PRS(:,:,:,6)>ZRSMIN(6) !$acc end kernels -!To remove once RAIN_ICE_RED is on GPU -!$acc update self(LLMICRO) - -!$acc update device(PCIT) -!$acc data copyin(PSEA,PTOWN) CALL RAIN_ICE_RED ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,IKA,IKU,IKL, & PTSTEP, KRR, LLMICRO, ZEXN, & ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,& @@ -1207,12 +1244,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PINPRC,PINPRR, PEVAP3D, & ! PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR,, PSEA,PTOWN, PFPR=ZFPR) PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA=PSEA,PTOWN=PTOWN) -!$acc end data -!$acc update self(PRAINFR) ELSE -!$acc update device(PCIT,PCLDFR, & -!$acc & PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINDEP) -!$acc data copyin(PSEA,PTOWN) present(PEXNREF) CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & KSPLITR, PTSTEP, KRR, & ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,& @@ -1225,15 +1257,12 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, & ! PSEA, PTOWN, PFPR=ZFPR ) PSEA, PTOWN ) -!$acc end data -!$acc update self(PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINDEP,PCIT,PRAINFR) END IF ! !* 9.2 Perform the saturation adjustment over cloud ice and cloud water ! ! IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN -!$acc data present(PRS) CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'DEPI', & OSUBG_COND, OSIGMAS, PTSTEP,PSIGQSAT, & PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, ZZZ, & @@ -1245,8 +1274,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente PRI=ZRSSTEP(:,:,:,4), PRIS=PRS(:,:,:,4), & PRS=ZRSSTEP(:,:,:,5), & PRG=ZRSSTEP(:,:,:,6) ) -!$acc end data -!$acc update self(PCLDFR,PSRCS) END IF ! ! DEALLOCATE(ZRSSTEP) @@ -1269,7 +1296,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented') ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK) ENDDO !$acc end kernels -!$acc update self(ZDZZ) ZZZ = MZF(1,IKU,1, PZZ ) IF(LRED .AND. LADJ_BEFORE) THEN CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'ADJU', & @@ -1311,10 +1337,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented') PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN, & ! PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR ) PRT(:,:,:,7), PRS(:,:,:,7), PINPRH ) -!$acc update self(PRAINFR) ELSE -!$acc update device(PCIT,PCLDFR) -!$acc data copyin(PSEA,PTOWN) CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1, & KSPLITR, PTSTEP, KRR, & ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& @@ -1328,8 +1351,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented') PSEA, PTOWN, & ! PRT(:,:,:,7), PRS(:,:,:,7), PINPRH,PFPR=ZFPR ) PRT(:,:,:,7), PRS(:,:,:,7), PINPRH) -!$acc end data -!$acc update self(PCIT,PRAINFR) END IF @@ -1471,7 +1492,6 @@ DO JRR = 1,KRR PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * PRHODJ(:,:,:) END DO !$acc end kernels -!$acc update self(PTHS,PRS) ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN DO JSV = 1,SIZE(ZSVS,4) @@ -1484,16 +1504,6 @@ IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') DEALLOCATE(ZSVT) ENDIF ! -! INOUT variables -! -!$acc update self(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,& -!$acc & PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,& -!$acc & PSUPSAT,PNACT,PNPRO,PSSPRO) -! -! OUT variables -! -!$acc update self(PSRCS) -! IF (MPPDB_INITIALIZED) THEN !Check all INOUT arrays CALL MPPDB_CHECK(PRT(:,:,:,1),"RESOLVED_CLOUD end:PRT(:,:,:,1)")