From dd822867c652c38c6656479a41de32a1e03a7f42 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Fri, 14 Sep 2012 17:26:14 +0200
Subject: [PATCH] Juan 14/09/2012: acc ppm_s0_z & some optimization by commun
 dimension declaration

---
 MNH/ppm.f90 | 58 ++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 18 deletions(-)

diff --git a/MNH/ppm.f90 b/MNH/ppm.f90
index f293b5b1d..3e4ebc41e 100644
--- a/MNH/ppm.f90
+++ b/MNH/ppm.f90
@@ -1288,7 +1288,7 @@ IKU=size(psrc,3)
 
 #define JUAN_ACC_01_Z
 #ifdef JUAN_ACC_01_Z
-!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr)
+!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) 
 !$acc region  
 #endif
 !
@@ -1309,6 +1309,8 @@ ZDMQ(:,:,IKB:IKE) = &
      MIN(PSRC(:,:,IKB-1:IKE-1),PSRC(:,:,IKB:IKE),PSRC(:,:,IKB+1:IKE+1))),    &
      2.0*(MAX(PSRC(:,:,IKB-1:IKE-1),PSRC(:,:,IKB:IKE),PSRC(:,:,IKB+1:IKE+1)) - &
      PSRC(:,:,IKB:IKE)) )), ZDMQ(:,:,IKB:IKE) )
+!!$ZDMQ(:,:,IKB-1) = ZDMQ(:,:,IKB)
+!!$ZDMQ(:,:,IKE+1) = ZDMQ(:,:,IKE)   
 ZDMQ(:,:,IKB-1) = & 
      SIGN( (MIN( ABS(ZDMQ(:,:,IKB-1)), 2.0*(PSRC(:,:,IKB-1) - &
      MIN(PSRC(:,:,IKE-1),PSRC(:,:,IKB-1),PSRC(:,:,IKB))),   &
@@ -1796,7 +1798,7 @@ USE MODI_GET_HALO
 !
 USE MODD_LUNIT
 USE MODD_CONF
-!USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 USE MODD_PARAMETERS, ONLY : JPHEXT
 USE MODE_MPPDB
 !
@@ -1815,18 +1817,20 @@ REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER:: IIB,IJB    ! Begining useful area in x,y,z directions
-INTEGER:: IIE,IJE    ! End useful area in x,y,z directions
-!
 ! advection fluxes
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
+                                                     , ZFPOS, ZFNEG &
 !
 ! variable at cell edges
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT
+                                                     , ZPHAT &
+!
+                                                     , ZRHO_MYM , ZCR_MYM , ZCR_DYF
+!
+INTEGER:: IIB,IJB    ! Begining useful area in x,y,z directions
+INTEGER:: IIE,IJE    ! End useful area in x,y,z directions
 !
 !BEG JUAN PPM_LL
 TYPE(HALO2LIST_ll), POINTER      :: TZ_PSRC_HALO2_ll         ! halo2 for PSRC
@@ -1834,7 +1838,6 @@ INTEGER                          :: ILUOUT,IRESP             ! for prints
 INTEGER                          :: IIW,IIA
 !END JUAN PPM_LL
 !JUAN ACC
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF
 INTEGER                          :: I,J,K ,IIU,IJU,IKU
 LOGICAL                          :: GSOUTH , GNORTH
 !
@@ -2098,18 +2101,20 @@ REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER:: IKB    ! Begining useful area in x,y,z directions
-INTEGER:: IKE    ! End useful area in x,y,z directions
-!
 ! advection fluxes
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
+                                                   , ZFPOS, ZFNEG &
 !
 ! interpolated variable at cell edges
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT
+                                                      , ZPHAT &
+                                                      , ZRHO_MZM ,ZCR_MZM,ZCR_DZF
+!
+INTEGER:: IKB    ! Begining useful area in x,y,z directions
+INTEGER:: IKE    ! End useful area in x,y,z directions
+INTEGER:: IKU
 !
 !-------------------------------------------------------------------------------
 !
@@ -2119,12 +2124,20 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZPHAT
 IKB = 1 + JPVEXT
 IKE = SIZE(PSRC,3) - JPVEXT
 !
+IKU=size(psrc,3)
+!
 !-------------------------------------------------------------------------------
 !
 ! calculate 4th order fluxes at cell edges in the inner domain
 !
 CALL GET_HALO(PSRC)
 !
+#define JUAN_ACC_S0_Z
+#ifdef JUAN_ACC_S0_Z
+!$acc data region local(ZPHAT,ZFPOS,ZFNEG,ZRHO_MZM,ZCR_MZM,ZCR_DZF) copyin (psrc,pcr,prho)  copyout(pr) 
+!$acc region
+#endif
+!
 ZPHAT(:,:,IKB+1:IKE) = (7.0 * &
                        (PSRC(:,:,IKB+1:IKE) + PSRC(:,:,IKB:IKE-1)) - &
                        (PSRC(:,:,IKB+2:IKE+1) + PSRC(:,:,IKB-1:IKE-2))) / 12.0
@@ -2171,14 +2184,23 @@ ZFNEG(:,:,IKE+1) = (ZPHAT(:,:,IKE+1) - PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + &
 !
 ! calculate the advection
 !
-PR = PSRC * PRHO - &
-     DZF( PCR*MZM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & 
-                          ZFNEG*(0.5-SIGN(0.5,PCR)) ) )
+   mzm(ZRHO_MZM,PRHO)
+   ZCR_MZM =  PCR* ZRHO_MZM*( ZFPOS*(0.5+SIGN(0.5,PCR)) + ZFNEG*(0.5-SIGN(0.5,PCR)) ) 
+   dzf(ZCR_DZF,ZCR_MZM)
+   PR = PSRC * PRHO - ZCR_DZF
+!!$PR = PSRC * PRHO - &
+!!$     DZF( PCR*MZM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & 
+!!$                          ZFNEG*(0.5-SIGN(0.5,PCR)) ) )
 !
 ! in OPEN case fix boundary conditions
 !
       PR(:,:,IKB-1) = PR(:,:,IKB)
       PR(:,:,IKE+1) = PR(:,:,IKE)
+!
+#ifdef JUAN_ACC_S0_Z
+!$acc end region 
+!$acc end data region 
+#endif
 !
    CALL GET_HALO(PR) ! JUAN
    CALL MPPDB_CHECK3DM("PPM::PPM_S0_Z ::PR",PRECISION,PR)
-- 
GitLab