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