diff --git a/src/ZSOLVER/p_abs.f90 b/src/ZSOLVER/p_abs.f90 index adfa745cb1665ad351177b31e3b00abef6d583b3..2e7025354bf4b708a8a6675f685772f9538d971c 100644 --- a/src/ZSOLVER/p_abs.f90 +++ b/src/ZSOLVER/p_abs.f90 @@ -276,7 +276,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN DO JJ = IJB,IJE DO JI = IIB,IIE ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + & -#ifndef MNH_OPENACC +#ifndef MNH_BITREP (PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD & #else BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) & diff --git a/src/ZSOLVER/pressurez.f90 b/src/ZSOLVER/pressurez.f90 index b7221fa4acb1ab350c0658a531032e553d8f22b5..4446fac1bb96ae4380ff8f068fe0fdc2e2452009 100644 --- a/src/ZSOLVER/pressurez.f90 +++ b/src/ZSOLVER/pressurez.f90 @@ -42,7 +42,8 @@ REAL, INTENT(IN) :: PRELAX ! relaxation coefficient for REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference state ! * J ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX,PDZY ! metric coefficients ! REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x ! direction @@ -270,11 +271,11 @@ USE MODI_SHUMAN #ifdef MNH_OPENACC USE MODI_SHUMAN_DEVICE USE MODI_GET_HALO +USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D #endif ! #ifdef MNH_BITREP USE MODI_BITREP -USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D #endif ! IMPLICIT NONE @@ -298,7 +299,8 @@ REAL, INTENT(IN) :: PRELAX ! relaxation coefficient for REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference state ! * J ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX,PDZY ! metric coefficients ! REAL, INTENT(IN) :: PDXHATM ! mean grid increment in the x ! direction @@ -446,6 +448,11 @@ GNORTH2D = ( L2D .AND. LNORTH_ll() ) ! GPRVREF0 = ( SIZE(PRVREF,1) == 0 ) ! +#ifndef MNH_OPENACC +ALLOCATE(ZDV_SOURCE(IIU,IJU,IKU)) +ALLOCATE(ZTHETAV(IIU,IJU,IKU)) +ALLOCATE(ZPHIT(IIU,IJU,IKU)) +#else IZDV_SOURCE = MNH_ALLOCATE_ZT3D(ZDV_SOURCE ,IIU,IJU,IKU ) IZTHETAV = MNH_ALLOCATE_ZT3D(ZTHETAV ,IIU,IJU,IKU ) IZPHIT = MNH_ALLOCATE_ZT3D(ZPHIT ,IIU,IJU,IKU ) @@ -455,6 +462,7 @@ IZMXM_PRHODJ = MNH_ALLOCATE_ZT3D( ZMXM_PRHODJ,IIU,IJU,IKU ) IZMZM_PRHODJ = MNH_ALLOCATE_ZT3D( ZMZM_PRHODJ,IIU,IJU,IKU ) IZGZ_M_W = MNH_ALLOCATE_ZT3D( ZGZ_M_W,IIU,IJU,IKU ) IZMYM_PRHODJ = MNH_ALLOCATE_ZT3D( ZMYM_PRHODJ,IIU,IJU,IKU ) +#endif ! IF (GFIRST_CALL_PRESSUREZ) THEN GFIRST_CALL_PRESSUREZ = .FALSE. @@ -562,7 +570,11 @@ IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN #else !$acc kernels DO CONCURRENT ( JI=1:IIU,JJ=1:IJU,JK=1:IKU ) +#ifndef MNH_BITREP + ZPHIT(JI,JJ,JK)=(PPABST(JI,JJ,JK)/XP00)**(XRD/XCPD)-PEXNREF(JI,JJ,JK) +#else ZPHIT(JI,JJ,JK)=BR_POW((PPABST(JI,JJ,JK)/XP00),(XRD/XCPD))-PEXNREF(JI,JJ,JK) +#endif END DO !$acc end kernels #endif @@ -698,9 +710,11 @@ END IF !$acc wait ! CALL MPPDB_CHECK3DM("before MXM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS) -IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN -!!$ PRUS = PRUS - MXM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE -!!$ PRWS = PRWS - MZM(PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) +IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN +#ifndef MNH_OPENACC + PRUS = PRUS - MXM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE + PRWS = PRWS - MZM(PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) +#else !$acc kernels ZPRHODJ = PRHODJ * XCPD * ZTHETAV !$acc end kernels @@ -711,13 +725,14 @@ IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN PRUS = PRUS - ZMXM_PRHODJ * ZDV_SOURCE PRWS = PRWS - ZMZM_PRHODJ * ZGZ_M_W !$acc end kernels +#endif ELSEIF(CEQNSYS=='LHE') THEN PRUS = PRUS - MXM(PRHODJ) * ZDV_SOURCE PRWS = PRWS - MZM(PRHODJ) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ) END IF ! IF(.NOT. L2D) THEN - ! +! #ifndef MNH_OPENACC ZDV_SOURCE = GY_M_V(1,IKU,1,ZPHIT,PDYY,PDZZ,PDZY) #else @@ -757,11 +772,14 @@ IF(.NOT. L2D) THEN ! CALL MPPDB_CHECK3DM("before MYM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS) IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN -!!$ PRVS = PRVS - MYM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE +#ifndef MNH_OPENACC + PRVS = PRVS - MYM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE +#else CALL MYM_DEVICE(ZPRHODJ,ZMYM_PRHODJ) !$acc kernels PRVS = PRVS - ZMYM_PRHODJ * ZDV_SOURCE !$acc end kernels +#endif ELSEIF(CEQNSYS=='LHE') THEN PRVS = PRVS - MYM(PRHODJ) * ZDV_SOURCE END IF @@ -866,7 +884,11 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN PPABST(:,:,:)=XP00*(ZPHIT+PEXNREF)**(XCPD/XRD) #else !$acc kernels - PPABST(:,:,:)=XP00*BR_POW((ZPHIT+PEXNREF),(XCPD/XRD)) +#ifndef MNH_BITREP + PPABST(:,:,:)=XP00*(ZPHIT+PEXNREF)**(XCPD/XRD) +#else + PPABST(:,:,:)=XP00*BR_POW((ZPHIT+PEXNREF),(XCPD/XRD)) +#endif !$acc end kernels #endif ELSEIF(CEQNSYS=='LHE') THEN