From 88f14ec31f7907f1a6a80a63eb4c6cedd74eaad8 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Tue, 16 Nov 2021 12:24:05 +0100
Subject: [PATCH] Juan 16/11/2021:ZSOLVER, manage compilation with(out)
 MNH_OPENACC/MNH_BITREP for non nvhpc compiler

---
 src/ZSOLVER/p_abs.f90     |  2 +-
 src/ZSOLVER/pressurez.f90 | 40 ++++++++++++++++++++++++++++++---------
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/src/ZSOLVER/p_abs.f90 b/src/ZSOLVER/p_abs.f90
index adfa745cb..2e7025354 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 b7221fa4a..4446fac1b 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
-- 
GitLab