Skip to content
Snippets Groups Projects
Commit 1c063160 authored by ESCOBAR Juan's avatar ESCOBAR Juan
Browse files

Juan 21/09/2012: OK HALO_OUT +async + first_call

parent 57dc69ba
No related branches found
No related tags found
No related merge requests found
...@@ -123,20 +123,38 @@ CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ...@@ -123,20 +123,38 @@ CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
! !
TYPE(LIST_ll) , POINTER :: TZ_PSRC_ll ! halo TYPE(LIST_ll) , POINTER :: TZ_PSRC_ll ! halo
INTEGER :: IERROR ! error return code INTEGER :: IERROR ! error return code
INTEGER:: IIB,IJB ! Begining useful area in x,y,z directions INTEGER, SAVE :: IIB,IJB ! Begining useful area in x,y,z directions
INTEGER:: IIE,IJE ! End useful area in x,y,z directions INTEGER, SAVE :: IIE,IJE ! End useful area in x,y,z directions
INTEGER :: IIU,IJU,IKU INTEGER,SAVE :: IIU,IJU,IKU
! !
REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZNORTH, ZSOUTH, ZWEST, ZEAST REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:) :: ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN
REAL, SAVE , ALLOCATABLE, DIMENSION(:,:,:) :: ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT
! !
NULLIFY( TZ_PSRC_ll) LOGICAL, SAVE :: GFIRST_GET_HALO_D = .TRUE.
CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
!
IIU=size(psrc,1)
IJU=size(psrc,2)
IKU=size(psrc,3)
! !
NULLIFY( TZ_PSRC_ll)
IF (GFIRST_GET_HALO_D ) THEN
CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
!
IIU=size(psrc,1)
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_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 ) )
GFIRST_GET_HALO_D = .FALSE.
END IF
!$acc update host (PSRC) !$acc update host (PSRC)
! acc update host (PSRC( : , :IJB , : )) ! acc update host (PSRC( : , :IJB , : ))
...@@ -144,22 +162,18 @@ IKU=size(psrc,3) ...@@ -144,22 +162,18 @@ IKU=size(psrc,3)
! acc update host (PSRC( :IIB , IJB:IJE , : )) ! acc update host (PSRC( :IIB , IJB:IJE , : ))
! acc update host (PSRC( IIE: , IJB:IJE , : )) ! acc update host (PSRC( IIE: , IJB:IJE , : ))
!!$ALLOCATE ( ZNORTH ( IIU , IJE:IJU , IKU ) )
!!$ALLOCATE ( ZSOUTH ( IIU , 1:IJB , IKU ) )
!!$ALLOCATE ( ZWEST ( 1 :IIB , IJU , IKU ) )
!!$ALLOCATE ( ZEAST ( IIE:IIU , IJU , IKU ) )
!!$ !!$
!!$!$acc kernels copyout (ZNORTH,ZSOUTH,ZWEST,ZEAST) !!$!$acc kernels copyout (ZNORTH_IN,ZSOUTH_IN,ZWEST_IN,ZEAST_IN)
!!$ZNORTH = PSRC( : , IJE: , : ) !!$ZNORTH_IN = PSRC( : , IJE: , : )
!!$ZSOUTH = PSRC( : , :IJB , : ) !!$ZSOUTH_IN = PSRC( : , :IJB , : )
!!$ZWEST = PSRC( :IIB , : , : ) !!$ZWEST_IN = PSRC( :IIB , : , : )
!!$ZEAST = PSRC( IIE: , : , : ) !!$ZEAST_IN = PSRC( IIE: , : , : )
!!$!$acc end kernels !!$!$acc end kernels
!!$ !!$
!!$PSRC( : , IJE: , : ) = ZNORTH !!$PSRC( : , IJE: , : ) = ZNORTH_OUT
!!$PSRC( : , :IJB , : ) = ZSOUTH !!$PSRC( : , :IJB , : ) = ZSOUTH_OUT
!!$PSRC( :IIB , : , : ) = ZWEST !!$PSRC( :IIB , : , : ) = ZWEST_OUT
!!$PSRC( IIE: , : , : ) = ZEAST !!$PSRC( IIE: , : , : ) = ZEAST_OUT
CALL ADD3DFIELD_ll(TZ_PSRC_ll,PSRC) CALL ADD3DFIELD_ll(TZ_PSRC_ll,PSRC)
CALL UPDATE_HALO_ll(TZ_PSRC_ll,IERROR, HDIR=HDIR ) CALL UPDATE_HALO_ll(TZ_PSRC_ll,IERROR, HDIR=HDIR )
...@@ -171,37 +185,33 @@ CALL CLEANLIST_ll(TZ_PSRC_ll) ...@@ -171,37 +185,33 @@ CALL CLEANLIST_ll(TZ_PSRC_ll)
!!$! acc update device (PSRC( :IIB-1 , : , : )) !!$! acc update device (PSRC( :IIB-1 , : , : ))
!!$! acc update device (PSRC( IIE+1: , : , : )) !!$! acc update device (PSRC( IIE+1: , : , : ))
!!$ !!$
ALLOCATE ( ZSOUTH ( IIU , 1 :IJB-1 , IKU ) )
ALLOCATE ( ZNORTH ( IIU , IJE+1:IJU , IKU ) )
ALLOCATE ( ZWEST ( 1 :IIB-1 , IJU , IKU ) )
ALLOCATE ( ZEAST ( IIE+1:IIU , IJU , IKU ) )
ZSOUTH = PSRC( : , :IJB-1 , : ) ZSOUTH_OUT = PSRC( : , :IJB-1 , : )
ZNORTH = PSRC( : , IJE+1: , : ) ZNORTH_OUT = PSRC( : , IJE+1: , : )
ZWEST = PSRC( :IIB-1 , : , : ) ZWEST_OUT = PSRC( :IIB-1 , : , : )
ZEAST = PSRC( IIE+1: , : , : ) ZEAST_OUT = PSRC( IIE+1: , : , : )
!!$!$acc kernels copyin (ZNORTH,ZSOUTH,ZWEST,ZEAST) !!$!$acc kernels copyin (ZNORTH_OUT,ZSOUTH_OUT,ZWEST_OUT,ZEAST_OUT)
!!$PSRC( : , :IJB-1 , : ) = ZSOUTH !!$PSRC( : , :IJB-1 , : ) = ZSOUTH_OUT
!!$PSRC( : , IJE+1: , : ) = ZNORTH !!$PSRC( : , IJE+1: , : ) = ZNORTH_OUT
!!$PSRC( :IIB-1 , : , : ) = ZWEST !!$PSRC( :IIB-1 , : , : ) = ZWEST_OUT
!!$PSRC( IIE+1: , : , : ) = ZEAST !!$PSRC( IIE+1: , : , : ) = ZEAST_OUT
!!$!$acc end kernels !!$!$acc end kernels
!$acc kernels copyin (ZSOUTH) async(1) !$acc kernels copyin (ZSOUTH_OUT) async(1)
PSRC( : , :IJB-1 , : ) = ZSOUTH PSRC( : , :IJB-1 , : ) = ZSOUTH_OUT
!$acc end kernels !$acc end kernels
!$acc kernels copyin (ZNORTH) async(2) !$acc kernels copyin (ZNORTH_OUT) async(2)
PSRC( : , IJE+1: , : ) = ZNORTH PSRC( : , IJE+1: , : ) = ZNORTH_OUT
!$acc end kernels !$acc end kernels
!$acc kernels copyin (ZWEST) async(3) !$acc kernels copyin (ZWEST_OUT) async(3)
PSRC( :IIB-1 , : , : ) = ZWEST PSRC( :IIB-1 , : , : ) = ZWEST_OUT
!$acc end kernels !$acc end kernels
!$acc kernels copyin (ZEAST) async(4) !$acc kernels copyin (ZEAST_OUT) async(4)
PSRC( IIE+1: , : , : ) = ZEAST PSRC( IIE+1: , : , : ) = ZEAST_OUT
!$acc end kernels !$acc end kernels
!$acc wait !$acc wait
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment