Skip to content
Snippets Groups Projects
Commit 88f14ec3 authored by Juan Escobar's avatar Juan Escobar
Browse files

Juan 16/11/2021:ZSOLVER, manage compilation with(out) MNH_OPENACC/MNH_BITREP for non nvhpc compiler

parent 9bdb8f07
No related branches found
No related tags found
No related merge requests found
......@@ -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) &
......
......@@ -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
......
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