From 98adf2c65b69fa0f229664cc786e73db301f77cd Mon Sep 17 00:00:00 2001
From: ESCOBAR Juan <escj@nuwa>
Date: Wed, 20 Nov 2013 18:04:39 +0100
Subject: [PATCH] Juan 20/11/2013 : add present/upate(PRHODJ) & inline
 MXM/MYM/MZM

---
 MNH/advection.f90 | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/MNH/advection.f90 b/MNH/advection.f90
index a113ecc71..adfe7e0ac 100644
--- a/MNH/advection.f90
+++ b/MNH/advection.f90
@@ -237,10 +237,7 @@ USE MODI_MPDATA_SCALAR
 USE MODI_PPM_MET
 USE MODI_PPM_SCALAR
 !
-#ifndef USET3D
-!!$USE MODE_MNH_ZWORK, ONLY : ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT
-#endif
-!!$USE MODE_MNH_ZWORK, ONLY : ZRUT,ZRVT,ZRWT
+USE MODD_PARAMETERS , ONLY : JPHEXT
 !
 !-------------------------------------------------------------------------------
 !
@@ -276,6 +273,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUM, PVM, PWM
                                                   ! Variables at t-dt
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT , PVT  , PWT
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET, PRHODJ
+!$acc declara present(PRHODJ)
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT , PSVT
                                                   ! Variables at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX,PDYY,PDZZ,PDZX,PDZY
@@ -289,6 +287,7 @@ TYPE(HALO2LIST_ll), POINTER :: TPHALO2MLIST ! momentum variables
 TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST  ! meteorological scalar variables
 TYPE(HALO2LIST_ll), POINTER :: TPHALO2SLIST ! tracer scalar variables
 !
+INTEGER                                              :: IIU,IJU,IKU
 !
 !*       0.2   declarations of local variables
 !
@@ -299,7 +298,6 @@ REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRUT
 REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRVT 
 REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRWT
 !$acc declare present (ZRUT,ZRVT,ZRWT)
-
                                                   ! cartesian 
                                                   ! components of
                                                   ! momentum
@@ -315,17 +313,34 @@ REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) :: ZRWCT
 !
 INTEGER                     :: IINFO_ll    ! return code of parallel routine
 TYPE(LIST_ll), POINTER      :: TZFIELDS_ll ! list of fields to exchange
-
+!
+#define mxm(PMXM,PA) PMXM(2:IIU,:,:) = 0.5*( PA(2:IIU,:,:)+PA(1:IIU-1,:,:) ) ; PMXM(1,:,:) = PMXM(IIU-2*JPHEXT+1,:,:) ! MXM(PMXM,PA)
+#define mym(PMYM,PA) PMYM(:,2:IJU,:) = 0.5*( PA(:,2:IJU,:)+PA(:,1:IJU-1,:) ) ; PMYM(:,1,:) = PMYM(:,IJU-2*JPHEXT+1,:) ! MYM(PMYM,PA)
+#define mzm(PMZM,PA) PMZM(:,:,2:IKU) = 0.5*( PA(:,:,2:IKU)+PA(:,:,1:IKU-1) ) ; PMZM(:,:,1)    = -999. ! MZM(PMZM,PA)
 !
 !-------------------------------------------------------------------------------
 !
+!*       0.     COMPUTES THE DOMAIN DIMENSIONS
+!               ------------------------------
+CALL GET_DIM_EXT_ll('B',IIU,IJU)     
+IKU=SIZE(PUT,3)
 !
 !*       1.     COMPUTES THE CONTRAVARIANT COMPONENTS
 !	        -------------------------------------
 !
-ZRUT = PUT(:,:,:) * MXM(PRHODJ)
-ZRVT = PVT(:,:,:) * MYM(PRHODJ)
-ZRWT = PWT(:,:,:) * MZM(PRHODJ)
+!!$ZRUT = PUT(:,:,:) * MXM(PRHODJ)
+!!$ZRVT = PVT(:,:,:) * MYM(PRHODJ)
+!!$ZRWT = PWT(:,:,:) * MZM(PRHODJ)
+!$acc update device(PRHODJ)
+!$acc kernels pcopyin(PUT,PVT,PWT)
+mxm(ZRUT,PRHODJ)
+ZRUT = PUT(:,:,:) * ZRUT
+mym(ZRVT,PRHODJ)
+ZRVT = PVT(:,:,:) * ZRVT
+mzm(ZRWT,PRHODJ)
+ZRWT = PWT(:,:,:) * ZRWT
+!$acc end kernels
+!$acc update host (ZRUT,ZRVT,ZRWT)
 !
 CALL CONTRAV (ZRUT,ZRVT,ZRWT,PDXX,PDYY,PDZZ,PDZX,PDZY,ZRUCT,ZRVCT,ZRWCT)
 !
-- 
GitLab