From e22b0c4862d394649e9ed951f8a35bca023e3bcf Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Wed, 8 Jul 2020 11:15:06 +0200
Subject: [PATCH] Juan 08/07/2020: more PGI BUG correction -> use MNH_ALLOCATE

---
 src/MNH/turb.f90 | 43 +++++++++++++++++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 4 deletions(-)

diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index dbe932a9a..f8bdd312d 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -2216,9 +2216,11 @@ REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS ::     &
             ZDTHLDZ,ZDRTDZ,     &!dtheta_l/dz, drt_dz used for computing the stablity
 !                                ! criterion
             ZETHETA,ZEMOIST             !coef ETHETA and EMOIST
+INTEGER :: IZWORK2D,IZDTHLDZ,IZDRTDZ,IZETHETA,IZEMOIST
 !
 #ifdef MNH_OPENACC
 REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: ZTMP1_DEVICE,ZTMP2_DEVICE
+INTEGER :: IZTMP1_DEVICE,IZTMP2_DEVICE
 #endif
 INTEGER  :: JIU,JJU,JKU
 !----------------------------------------------------------------------------
@@ -2247,17 +2249,26 @@ JJU =  size(pthlt, 2 )
 JKU =  size(pthlt, 3 )
 
 !-------------------------------------------------------------------------------
-allocate( ZWORK2D(SIZE(PLM,1),SIZE(PLM,2)) )
+#ifndef MNH_OPENACC
+allocate( ZWORK2D(JIU,JJU) )
 allocate( ZDTHLDZ(JIU,JJU,JKU) )
 allocate( ZDRTDZ (JIU,JJU,JKU) )
 allocate( ZETHETA(JIU,JJU,JKU) )
 allocate( ZEMOIST(JIU,JJU,JKU) )
+#else
+IZWORK2D = MNH_ALLOCATE_ZT2D( ZWORK2D,JIU,JJU)
+IZDTHLDZ = MNH_ALLOCATE_ZT3D( ZDTHLDZ,JIU,JJU,JKU)
+IZDRTDZ  = MNH_ALLOCATE_ZT3D( ZDRTDZ ,JIU,JJU,JKU)
+IZETHETA = MNH_ALLOCATE_ZT3D( ZETHETA,JIU,JJU,JKU)
+IZEMOIST = MNH_ALLOCATE_ZT3D( ZEMOIST,JIU,JJU,JKU)
+#endif
+
 #ifdef MNH_OPENACC
-allocate( ZTMP1_DEVICE(JIU,JJU,JKU) )
-allocate( ZTMP2_DEVICE(JIU,JJU,JKU) )
+IZTMP1_DEVICE = MNH_ALLOCATE_ZT3D( ZTMP1_DEVICE,JIU,JJU,JKU)
+IZTMP2_DEVICE = MNH_ALLOCATE_ZT3D( ZTMP2_DEVICE,JIU,JJU,JKU)
 #endif
 
-!$acc data create( zwork2d, zdthldz, zdrtdz, zetheta, zemoist, &
+!$acc data present(zwork2d, zdthldz, zdrtdz, zetheta, zemoist, &
 !$acc &            ztmp1_device, ztmp2_device )
 
 !
@@ -2277,6 +2288,10 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
 !$acc kernels
     PLM(:,:,:) = SQRT( PLM(:,:,:)*ZTMP1_DEVICE )
 !$acc end kernels
+    if ( mppdb_initialized ) then
+       call Mppdb_check( ZTMP1_DEVICE , "Dear mid: ZTMP1_DEVICE=Mxf" )
+       call Mppdb_check( plm, "Dear mid:plm" )
+    end if
 #endif
   ELSE
 !PW: "BUG" PGI : results different on CPU and GPU due to the power function
@@ -2292,6 +2307,11 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
 !$acc kernels
     PLM(:,:,:) = (PLM(:,:,:)*ZTMP1_DEVICE*ZTMP2_DEVICE ) ** (1./3.)
 !$acc end kernels
+    if ( mppdb_initialized ) then
+       call Mppdb_check( ZTMP1_DEVICE , "Dear mid: ZTMP1_DEVICE=Mxf" )
+       call Mppdb_check( ZTMP2_DEVICE , "Dear mid: ZTMP2_DEVICE=Myf" )
+       call Mppdb_check( plm, "Dear mid:plm" )
+    end if
 #endif
 !
 #else
@@ -2301,9 +2321,17 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
 #else
     CALL MXF_DEVICE(PDXX,ZTMP1_DEVICE)
     CALL MYF_DEVICE(PDYY,ZTMP2_DEVICE)
+    if ( mppdb_initialized ) then
+       call Mppdb_check( ZTMP1_DEVICE , "Dear mid: ZTMP1_DEVICE=Mxf" )
+       call Mppdb_check( ZTMP2_DEVICE , "Dear mid: ZTMP2_DEVICE=Myf" )
+       call Mppdb_check( plm, "Dear mid1:plm" )
+    end if
 !$acc kernels
     PLM(:,:,:) = BR_POW( PLM(:,:,:)*ZTMP1_DEVICE    *ZTMP2_DEVICE     , 1./3. )
 !$acc end kernels
+    if ( mppdb_initialized ) then
+       call Mppdb_check( plm, "Dear mid2:plm" )
+    end if
 #endif
 #endif
   END IF
@@ -2404,6 +2432,13 @@ end if
 
 !$acc end data
 
+#ifndef MNH_OPENACC
+deallocate(zwork2d, zdthldz, zdrtdz, zetheta, zemoist ) 
+#else
+CALL MNH_REL_ZT3D(izwork2d, izdthldz, izdrtdz, izetheta, izemoist, &
+                iztmp1_device, iztmp2_device )
+#endif
+
 !$acc end data
 
 END SUBROUTINE DEAR
-- 
GitLab