From b85f81ed61ad54c6bda68132484664b7afc3d5e1 Mon Sep 17 00:00:00 2001
From: ESCOBAR Juan <escj@nuwa.aerologie.net>
Date: Sat, 22 Sep 2012 16:16:20 +0200
Subject: [PATCH] Juan 22/09/2012: OK HALO_IN/OUT , mirror OK by deactive for
 PGI BUG on host part

---
 MNH/get_halo.f90 | 125 ++++++++++++++++++++++++-----------------------
 1 file changed, 64 insertions(+), 61 deletions(-)

diff --git a/MNH/get_halo.f90 b/MNH/get_halo.f90
index a42912258..0655c308b 100644
--- a/MNH/get_halo.f90
+++ b/MNH/get_halo.f90
@@ -64,7 +64,7 @@ TYPE(HALO2LIST_ll), POINTER         :: TP_PSRC_HALO2_ll          ! halo2 for SRC
 INTEGER                          :: IIU,IJU,IKU            ! domain sizes
 TYPE(LIST_ll)     , POINTER      :: TZ_PSRC_ll               ! halo
 INTEGER                          :: IERROR                 ! error return code 
-!
+
 IIU = SIZE(PSRC,1)
 IJU = SIZE(PSRC,2)
 IKU = SIZE(PSRC,3)
@@ -106,11 +106,19 @@ CALL CLEANLIST_ll(TZ_PSRC_ll)
 !
 END SUBROUTINE GET_HALO
 !-----------------------------------------------------------------------
+MODULE MODD_HALO_D
+REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:)  :: ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN
+! acc declare mirror (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN)
+REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:)  :: ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT
+! acc declare mirror (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT)
+
+END MODULE MODD_HALO_D
 !-------------------------------------------------------------------------------
 !     #########################
       SUBROUTINE GET_HALO_D(PSRC,HDIR)
 !     #########################
 !
+USE MODD_HALO_D
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_PARAMETERS, ONLY : JPHEXT
@@ -128,8 +136,10 @@ INTEGER, SAVE :: IIE,IJE    ! End useful area in x,y,z directions
 
 INTEGER,SAVE :: IIU,IJU,IKU
 !
-REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:)  :: ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN
-REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:)  :: ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT
+!!$REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:)  :: ZPSRC
+
+!!$INTEGER                          :: IBB,IBE,JBB,JBE
+!
 !
 LOGICAL, SAVE                               :: GFIRST_GET_HALO_D = .TRUE.
 !
@@ -142,79 +152,72 @@ IF (GFIRST_GET_HALO_D ) THEN
    IJU=size(psrc,2)
    IKU=size(psrc,3)
    !
-   ALLOCATE  ( ZSOUTH_IN (       IIU   ,   1  :IJB-1 , IKU ) )
-   ALLOCATE  ( ZNORTH_IN (       IIU   , IJE+1:IJU   , IKU ) )
-   ALLOCATE  ( ZWEST_IN  ( 1    :IIB-1 ,       IJU   , IKU ) )
-   ALLOCATE  ( ZEAST_IN  ( IIE+1:IIU   ,       IJU   , IKU ) )
+   ALLOCATE  ( ZSOUTH_IN ( 1:IIU   ,   1:IJB   , IKU ) )
+   ALLOCATE  ( ZNORTH_IN ( 1:IIU   ,   IJE:IJU   , IKU ) )
+   ALLOCATE  ( ZWEST_IN  ( 1:IIB   ,   1:IJU   , IKU ) )
+   ALLOCATE  ( ZEAST_IN  ( IIE:IIU   , 1:IJU   , IKU ) )
    !
-   ALLOCATE  ( ZSOUTH_OUT (       IIU   ,   1  :IJB-1 , IKU ) )
-   ALLOCATE  ( ZNORTH_OUT (       IIU   , IJE+1:IJU   , IKU ) )
-   ALLOCATE  ( ZWEST_OUT  ( 1    :IIB-1 ,       IJU   , IKU ) )
-   ALLOCATE  ( ZEAST_OUT  ( IIE+1:IIU   ,       IJU   , IKU ) )
+   ALLOCATE  ( ZSOUTH_OUT (   IIB:IIE   , IJB-1:IJB-1 , IKU ) )
+   ALLOCATE  ( ZNORTH_OUT (   IIB:IIE   , IJE+1:IJE+1 , IKU ) )
+   ALLOCATE  ( ZWEST_OUT  ( IIB-1:IIB-1 ,   IJB:IJE   , IKU ) )
+   ALLOCATE  ( ZEAST_OUT  ( IIE+1:IIE+1 ,   IJB:IJE   , IKU ) )
    
+!!$   ALLOCATE  ( ZPSRC ( IIU, IJU ,IKU ) )
    
    GFIRST_GET_HALO_D = .FALSE.
 END IF 
 
-!$acc update host (PSRC)
-! acc update host (PSRC(    :     ,    :IJB  , : ))
-! acc update host (PSRC(    :     , IJE:     , : ))
-! acc update host (PSRC(    :IIB  , IJB:IJE  , : ))
-! acc update host (PSRC( IIE:     , IJB:IJE  , : ))
+!$acc kernels copyout (ZNORTH_IN,ZSOUTH_IN,ZWEST_IN,ZEAST_IN)
+ZSOUTH_IN = PSRC( 1:IIU  ,    1:IJB  , : )
+ZNORTH_IN = PSRC( 1:IIU  ,    IJE:IJU  , : )
+ZWEST_IN  = PSRC( 1:IIB  ,    1:IJU  , : )
+ZEAST_IN  = PSRC( IIE:IIU  ,  1:IJU  , : )
+!$acc end kernels
+! acc update host (ZNORTH_IN,ZSOUTH_IN,ZWEST_IN,ZEAST_IN)
 
-!!$
-!!$!$acc kernels copyout (ZNORTH_IN,ZSOUTH_IN,ZWEST_IN,ZEAST_IN)
-!!$ZNORTH_IN = PSRC(    :     , IJE:     , : )
-!!$ZSOUTH_IN = PSRC(    :     ,    :IJB  , : )
-!!$ZWEST_IN  = PSRC(    :IIB  ,    :     , : )
-!!$ZEAST_IN  = PSRC( IIE:     ,    :     , : )
-!!$!$acc end kernels
-!!$
-!!$PSRC(    :     , IJE:     , : ) = ZNORTH_OUT
-!!$PSRC(    :     ,    :IJB  , : ) = ZSOUTH_OUT
-!!$PSRC(    :IIB  ,    :     , : ) = ZWEST_OUT
-!!$PSRC( IIE:     ,    :     , : ) = ZEAST_OUT
+PSRC( 1:IIU  , 1:IJB  , : ) = ZSOUTH_IN
+PSRC( 1:IIU  , IJE:IJU  , : ) = ZNORTH_IN
+PSRC( 1:IIB  , 1:IJU  , : ) = ZWEST_IN
+PSRC( IIE:IIU  , 1:IJU  , : ) = ZEAST_IN
 
 CALL ADD3DFIELD_ll(TZ_PSRC_ll,PSRC)
 CALL UPDATE_HALO_ll(TZ_PSRC_ll,IERROR, HDIR=HDIR )
 CALL CLEANLIST_ll(TZ_PSRC_ll)
 
-!!$! acc update device (PSRC)
-!!$! acc update device (PSRC(      :       ,      : IJB-1 , : ))
-!!$! acc update device (PSRC(      :       , IJE+1:       , : ))
-!!$! acc update device (PSRC(      :IIB-1  ,      :       , : ))
-!!$! acc update device (PSRC( IIE+1:       ,      :       , : ))
-!!$
-
-ZSOUTH_OUT = PSRC(    :     ,    :IJB-1  , : )
-ZNORTH_OUT = PSRC(    :     , IJE+1:     , : )
-ZWEST_OUT  = PSRC(    :IIB-1  ,    :     , : )
-ZEAST_OUT  = PSRC( IIE+1:     ,    :     , : )
+ZSOUTH_OUT = PSRC(  IIB:IIE     , IJB-1:IJB-1  , : )
+ZNORTH_OUT = PSRC(  IIB:IIE     , IJE+1:IJE+1  , : )
+ZWEST_OUT  = PSRC( IIB-1:IIB-1  ,   IJB:IJE    , : )
+ZEAST_OUT  = PSRC( IIE+1:IIE+1  ,   IJB:IJE    , : )
 
-!!$!$acc kernels copyin (ZNORTH_OUT,ZSOUTH_OUT,ZWEST_OUT,ZEAST_OUT)
-!!$PSRC(      :       ,      :IJB-1 , : ) = ZSOUTH_OUT
-!!$PSRC(      :       , IJE+1:      , : ) = ZNORTH_OUT
-!!$PSRC(      :IIB-1  ,      :      , : ) = ZWEST_OUT
-!!$PSRC( IIE+1:       ,      :      , : ) = ZEAST_OUT
-!!$!$acc end kernels
-
-!$acc kernels copyin (ZSOUTH_OUT)   async(1)
-PSRC(      :       ,      :IJB-1 , : ) = ZSOUTH_OUT
-!$acc end kernels
-
-!$acc kernels copyin (ZNORTH_OUT)   async(2)
-PSRC(      :       , IJE+1:      , : ) = ZNORTH_OUT
-!$acc end kernels
-
-!$acc kernels copyin (ZWEST_OUT)   async(3)
-PSRC(      :IIB-1  ,      :      , : ) = ZWEST_OUT
-!$acc end kernels
-
-!$acc kernels copyin (ZEAST_OUT)   async(4)
-PSRC( IIE+1:       ,      :      , : ) = ZEAST_OUT
+! acc update device  (ZNORTH_OUT,ZSOUTH_OUT,ZWEST_OUT,ZEAST_OUT)
+!$acc kernels copyin (ZNORTH_OUT,ZSOUTH_OUT,ZWEST_OUT,ZEAST_OUT)
+PSRC(      IIB:IIE       ,  IJB-1:IJB-1 , : ) = ZSOUTH_OUT
+PSRC(      IIB:IIE       , IJE+1:IJE+1 , : ) = ZNORTH_OUT
+PSRC( IIB-1:IIB-1  ,      IJB:IJE      , : ) = ZWEST_OUT
+PSRC( IIE+1:IIE+1  ,      IJB:IJE      , : ) = ZEAST_OUT                     
 !$acc end kernels
 
-!$acc wait
+!!$!$acc update device (ZSOUTH_OUT)   async(1)
+!!$!$acc kernels                      async(1)
+!!$PSRC(      IIB:IIE       ,  IJB-1:IJB-1 , : ) = ZSOUTH_OUT
+!!$!$acc end kernels
+!!$
+!!$!$acc update device (ZNORTH_OUT)   async(2)
+!!$!$acc kernels                      async(2)
+!!$PSRC(      IIB:IIE       , IJE+1:IJE+1 , : ) = ZNORTH_OUT
+!!$!$acc end kernels
+!!$
+!!$!$acc update device (ZWEST_OUT)   async(3)
+!!$!$acc kernels                     async(3)
+!!$PSRC( IIB-1:IIB-1  ,      IJB:IJE      , : ) = ZWEST_OUT
+!!$!$acc end kernels
+!!$
+!!$!$acc update device (ZEAST_OUT)   async(4)
+!!$!$acc kernels                     async(4)
+!!$PSRC( IIE+1:IIE+1  ,      IJB:IJE      , : ) = ZEAST_OUT
+!!$!$acc end kernels
+!!$
+!!$!$acc wait
 
 !
 END SUBROUTINE GET_HALO_D
-- 
GitLab