diff --git a/src/ZSOLVER/get_halo.f90 b/src/ZSOLVER/get_halo.f90 index e53338d1f9e3db6a9798375bf8c17f4289b2ab20..8d6119d7c26032727ecc79dce6380ace5d1dc0a0 100644 --- a/src/ZSOLVER/get_halo.f90 +++ b/src/ZSOLVER/get_halo.f90 @@ -88,23 +88,49 @@ INTERFACE END INTERFACE ! INTERFACE - SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR) + SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,& + PZNORTH_IN , PZSOUTH_IN , PZWEST_IN , PZEAST_IN , & + PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, & + KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1,& + HDIR) + IMPLICIT NONE ! - REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t + REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC ! variable at t ! acc declare present (PSRC) INTEGER :: KNB_REQ , KREQ(8) + REAL :: PZSOUTH_IN ( KIIB:KIIE , KIJB:KIJB+KIHALO_1 , KIKU ) ,& + PZNORTH_IN ( KIIB:KIIE , KIJE-KIHALO_1:KIJE , KIKU ) ,& + PZWEST_IN ( KIIB:KIIB+KIHALO_1 , KIJB:KIJE , KIKU ) ,& + PZEAST_IN ( KIIE-KIHALO_1:KIIE , KIJB:KIJE , KIKU ) ,& + ! + PZSOUTH_OUT ( KIIB:KIIE , 1:KIJB-1 , KIKU ) ,& + PZNORTH_OUT ( KIIB:KIIE , KIJE+1:KIJU , KIKU ) ,& + PZWEST_OUT ( 1:KIIB-1 , KIJB:KIJE , KIKU ) ,& + PZEAST_OUT ( KIIE+1:KIIU , KIJB:KIJE , KIKU ) + INTEGER :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! END SUBROUTINE GET_HALO_START_D END INTERFACE INTERFACE - SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR) + SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,& + PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, & + KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,& + HDIR) + IMPLICIT NONE - REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t + ! + REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC ! variable at t ! acc declare present (PSRC) - INTEGER :: KNB_REQ , KREQ(8) + INTEGER :: KNB_REQ , KREQ(8) + REAL :: PZSOUTH_OUT ( KIIB:KIIE , 1:KIJB-1 , KIKU ) ,& + PZNORTH_OUT ( KIIB:KIIE , KIJE+1:KIJU , KIKU ) ,& + PZWEST_OUT ( 1:KIIB-1 , KIJB:KIJE , KIKU ) ,& + PZEAST_OUT ( KIIE+1:KIIU , KIJB:KIJE , KIKU ) + INTEGER :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction + ! END SUBROUTINE GET_HALO_STOP_D END INTERFACE INTERFACE @@ -409,8 +435,9 @@ END MODULE MODD_HALO_D USE MODD_HALO_D !USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH -!USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU -!USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE +USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU +USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE + !! !USE MODE_DEVICE USE MODE_MPPDB @@ -427,22 +454,30 @@ INTEGER :: INB_REQ , IREQ(8) ! CALL MPPDB_CHECK(PSRC,"GET_HALO_D big:PSRC") ! -CALL GET_HALO_START_D(PSRC,INB_REQ,IREQ,HDIR) -CALL GET_HALO_STOP_D(PSRC,INB_REQ,IREQ,HDIR) +CALL GET_HALO_START_D(PSRC,INB_REQ,IREQ,& + ZNORTH_IN , ZSOUTH_IN , ZWEST_IN , ZEAST_IN , & + ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT, & + IIB,IIE,IJB,IJE,IIU,IJU,IKU,IHALO_1,HDIR) + +CALL GET_HALO_STOP_D(PSRC,INB_REQ,IREQ,& + ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT, & + IIB,IIE,IJB,IJE,IIU,IJU,IKU,HDIR) ! CALL MPPDB_CHECK(PSRC,"GET_HALO_D end:PSRC") ! END SUBROUTINE GET_HALO_D ! ######################### - SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR) +SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,& + PZNORTH_IN , PZSOUTH_IN , PZWEST_IN , PZEAST_IN , & + PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, & + KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1,& + HDIR) ! ######################### #define MNH_GPUDIRECT ! USE MODD_HALO_D USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH -USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU -USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE ! USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD USE MODD_MPIF, ONLY : MPI_STATUSES_IGNORE @@ -453,9 +488,20 @@ USE MODE_MPPDB ! IMPLICIT NONE ! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t +REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC ! variable at t ! acc declare present (PSRC) INTEGER :: KNB_REQ , KREQ(8) +REAL :: PZSOUTH_IN ( KIIB:KIIE , KIJB:KIJB+KIHALO_1 , KIKU ) ,& + PZNORTH_IN ( KIIB:KIIE , KIJE-KIHALO_1:KIJE , KIKU ) ,& + PZWEST_IN ( KIIB:KIIB+KIHALO_1 , KIJB:KIJE , KIKU ) ,& + PZEAST_IN ( KIIE-KIHALO_1:KIIE , KIJB:KIJE , KIKU ) ,& + ! + PZSOUTH_OUT ( KIIB:KIIE , 1:KIJB-1 , KIKU ) ,& + PZNORTH_OUT ( KIIB:KIIE , KIJE+1:KIJU , KIKU ) ,& + PZWEST_OUT ( 1:KIIB-1 , KIJB:KIJE , KIKU ) ,& + PZEAST_OUT ( KIIE+1:KIIU , KIJB:KIJE , KIKU ) +INTEGER :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1 + CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! INTEGER :: IERROR ! error return code @@ -464,19 +510,15 @@ INTEGER,PARAMETER :: IS_WEST=1 , IS_EAST=2, IS_SOUTH=3, IS_NORTH=4 LOGICAL :: LX , LY INTEGER :: NB_REQ, IERR ! -INTEGER :: JI,JJ,JK, JIU,JJU,JKU - -JIU = SIZE(PSRC,1) -JJU = SIZE(PSRC,2) -JKU = SIZE(PSRC,3) +INTEGER :: JI,JJ,JK CALL INIT_HALO_D() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !$acc data present (PSRC) & -!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & -!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) +!$acc present (PZNORTH_IN, PZSOUTH_IN, PZWEST_IN, PZEAST_IN) & +!$acc present (PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT) LX = .FALSE. @@ -490,7 +532,7 @@ ELSE !!$LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" ) LX = ( HDIR == "01_X" .OR. HDIR == "S0_X" .OR. HDIR == "S0_Y" ) LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" .OR. HDIR == "S0_X" ) -!!$print *,"IIB=",IIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6) +!!$print *,"KIIB=",KIIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6) END IF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -504,10 +546,10 @@ NB_REQ = 0 IF (LX) THEN IF (.NOT. GWEST) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZWEST_OUT) + !$acc host_data use_device(PZWEST_OUT) #endif NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(ZWEST_OUT,SIZE(ZWEST_OUT),MNHREAL_MPI,NP_WEST-1,1000+IS_EAST,& + CALL MPI_IRECV(PZWEST_OUT,SIZE(PZWEST_OUT),MNHREAL_MPI,NP_WEST-1,1000+IS_EAST,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -515,10 +557,10 @@ IF (LX) THEN END IF IF (.NOT.GEAST) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZEAST_OUT) + !$acc host_data use_device(PZEAST_OUT) #endif NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(ZEAST_OUT,SIZE(ZEAST_OUT),MNHREAL_MPI,NP_EAST-1,1000+IS_WEST,& + CALL MPI_IRECV(PZEAST_OUT,SIZE(PZEAST_OUT),MNHREAL_MPI,NP_EAST-1,1000+IS_WEST,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -529,10 +571,10 @@ END IF IF (LY) THEN IF (.NOT.GSOUTH) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZSOUTH_OUT) + !$acc host_data use_device(PZSOUTH_OUT) #endif NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(ZSOUTH_OUT,SIZE(ZSOUTH_OUT),MNHREAL_MPI,NP_SOUTH-1,1000+IS_NORTH,& + CALL MPI_IRECV(PZSOUTH_OUT,SIZE(PZSOUTH_OUT),MNHREAL_MPI,NP_SOUTH-1,1000+IS_NORTH,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -540,10 +582,10 @@ IF (LY) THEN ENDIF IF (.NOT.GNORTH) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZNORTH_OUT) + !$acc host_data use_device(PZNORTH_OUT) #endif NB_REQ = NB_REQ + 1 - CALL MPI_IRECV(ZNORTH_OUT,SIZE(ZNORTH_OUT),MNHREAL_MPI,NP_NORTH-1,1000+IS_SOUTH,& + CALL MPI_IRECV(PZNORTH_OUT,SIZE(PZNORTH_OUT),MNHREAL_MPI,NP_NORTH-1,1000+IS_SOUTH,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -558,15 +600,15 @@ END IF IF (LX) THEN IF (.NOT. GWEST) THEN !$acc kernels async(IS_WEST) - !$mnh_expand_array(JI=IIB:IIB+IHALO_1 , JJ=IJB:IJE , JK=1:JKU ) - ZWEST_IN ( IIB:IIB+IHALO_1 , IJB:IJE , : ) = PSRC( IIB:IIB+IHALO_1 , IJB:IJE , : ) + !$mnh_expand_array(JI=KIIB:KIIB+KIHALO_1 , JJ=KIJB:KIJE , JK=1:KIKU ) + PZWEST_IN ( KIIB:KIIB+KIHALO_1 , KIJB:KIJE , : ) = PSRC( KIIB:KIIB+KIHALO_1 , KIJB:KIJE , : ) !$mnh_end_expand_array() !$acc end kernels END IF IF (.NOT.GEAST) THEN !$acc kernels async(IS_EAST) - !$mnh_expand_array(JI=IIE-IHALO_1:IIE , JJ=IJB:IJE , JK=1:JKU) - ZEAST_IN ( IIE-IHALO_1:IIE , IJB:IJE , : ) = PSRC( IIE-IHALO_1:IIE , IJB:IJE , : ) + !$mnh_expand_array(JI=KIIE-KIHALO_1:KIIE , JJ=KIJB:KIJE , JK=1:KIKU) + PZEAST_IN ( KIIE-KIHALO_1:KIIE , KIJB:KIJE , : ) = PSRC( KIIE-KIHALO_1:KIIE , KIJB:KIJE , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF @@ -575,15 +617,15 @@ END IF IF (LY) THEN IF (.NOT.GSOUTH) THEN !$acc kernels async(IS_SOUTH) - !$mnh_expand_array(JI=IIB:IIE , JJ=IJB:IJB+IHALO_1 , JK=1:JKU ) - ZSOUTH_IN ( IIB:IIE , IJB:IJB+IHALO_1 , : ) = PSRC( IIB:IIE , IJB:IJB+IHALO_1 , : ) + !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJB:KIJB+KIHALO_1 , JK=1:KIKU ) + PZSOUTH_IN ( KIIB:KIIE , KIJB:KIJB+KIHALO_1 , : ) = PSRC( KIIB:KIIE , KIJB:KIJB+KIHALO_1 , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF IF (.NOT.GNORTH) THEN !$acc kernels async(IS_NORTH) - !$mnh_expand_array(JI=IIB:IIE , JJ=IJE-IHALO_1:IJE , JK=1:JKU ) - ZNORTH_IN ( IIB:IIE , IJE-IHALO_1:IJE , : ) = PSRC( IIB:IIE , IJE-IHALO_1:IJE , : ) + !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJE-KIHALO_1:KIJE , JK=1:KIKU ) + PZNORTH_IN ( KIIB:KIIE , KIJE-KIHALO_1:KIJE , : ) = PSRC( KIIB:KIIE , KIJE-KIHALO_1:KIJE , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF @@ -597,12 +639,12 @@ ENDIF IF (LX) THEN IF (.NOT. GWEST) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZWEST_IN) + !$acc host_data use_device(PZWEST_IN) #else - !$acc update host(ZWEST_IN) + !$acc update host(PZWEST_IN) #endif NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(ZWEST_IN,SIZE(ZWEST_IN) ,MNHREAL_MPI,NP_WEST-1,1000+IS_WEST,& + CALL MPI_ISEND(PZWEST_IN,SIZE(PZWEST_IN) ,MNHREAL_MPI,NP_WEST-1,1000+IS_WEST,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -610,12 +652,12 @@ IF (LX) THEN END IF IF (.NOT.GEAST) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZEAST_IN) + !$acc host_data use_device(PZEAST_IN) #else - !$acc update host(ZEAST_IN) + !$acc update host(PZEAST_IN) #endif NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(ZEAST_IN,SIZE(ZEAST_IN) ,MNHREAL_MPI,NP_EAST-1,1000+IS_EAST,& + CALL MPI_ISEND(PZEAST_IN,SIZE(PZEAST_IN) ,MNHREAL_MPI,NP_EAST-1,1000+IS_EAST,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -626,12 +668,12 @@ END IF IF (LY) THEN IF (.NOT.GSOUTH) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZSOUTH_IN) + !$acc host_data use_device(PZSOUTH_IN) #else - !$acc update host(ZSOUTH_IN) + !$acc update host(PZSOUTH_IN) #endif NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(ZSOUTH_IN,SIZE(ZSOUTH_IN) ,MNHREAL_MPI,NP_SOUTH-1,1000+IS_SOUTH,& + CALL MPI_ISEND(PZSOUTH_IN,SIZE(PZSOUTH_IN) ,MNHREAL_MPI,NP_SOUTH-1,1000+IS_SOUTH,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -639,12 +681,12 @@ IF (LY) THEN ENDIF IF (.NOT.GNORTH) THEN #ifdef MNH_GPUDIRECT - !$acc host_data use_device(ZNORTH_IN) + !$acc host_data use_device(PZNORTH_IN) #else - !$acc update host(ZNORTH_IN) + !$acc update host(PZNORTH_IN) #endif NB_REQ = NB_REQ + 1 - CALL MPI_ISEND(ZNORTH_IN,SIZE(ZNORTH_IN) ,MNHREAL_MPI,NP_NORTH-1,1000+IS_NORTH,& + CALL MPI_ISEND(PZNORTH_IN,SIZE(PZNORTH_IN) ,MNHREAL_MPI,NP_NORTH-1,1000+IS_NORTH,& NMNH_COMM_WORLD,KREQ(NB_REQ),IERR) #ifdef MNH_GPUDIRECT !$acc end host_data @@ -659,15 +701,18 @@ KNB_REQ = NB_REQ END SUBROUTINE GET_HALO_START_D ! ! ######################### - SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR) +SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,& + PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, & + KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,& + HDIR) ! ######################### #define MNH_GPUDIRECT ! USE MODD_HALO_D USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH -USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU -USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE +!!$USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU +!!$USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE ! USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD USE MODD_MPIF, ONLY : MPI_STATUSES_IGNORE @@ -678,9 +723,15 @@ USE MODE_MPPDB ! IMPLICIT NONE ! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t +REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC ! variable at t ! acc declare present (PSRC) INTEGER :: KNB_REQ , KREQ(8) +REAL :: PZSOUTH_OUT ( KIIB:KIIE , 1:KIJB-1 , KIKU ) ,& + PZNORTH_OUT ( KIIB:KIIE , KIJE+1:KIJU , KIKU ) ,& + PZWEST_OUT ( 1:KIIB-1 , KIJB:KIJE , KIKU ) ,& + PZEAST_OUT ( KIIE+1:KIIU , KIJB:KIJE , KIKU ) +INTEGER :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU + CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! INTEGER :: IERROR ! error return code @@ -689,19 +740,14 @@ INTEGER,PARAMETER :: IS_WEST=1 , IS_EAST=2, IS_SOUTH=3, IS_NORTH=4 LOGICAL :: LX , LY INTEGER :: NB_REQ, IERR ! -INTEGER :: JI,JJ,JK, JIU,JJU,JKU - -JIU = SIZE(PSRC,1) -JJU = SIZE(PSRC,2) -JKU = SIZE(PSRC,3) +INTEGER :: JI,JJ,JK CALL INIT_HALO_D() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !$acc data present (PSRC) & -!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & -!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) +!$acc & present (PZNORTH_OUT,PZSOUTH_OUT,PZWEST_OUT,PZEAST_OUT) LX = .FALSE. LY = .FALSE. @@ -714,7 +760,7 @@ ELSE !!$LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" ) LX = ( HDIR == "01_X" .OR. HDIR == "S0_X" .OR. HDIR == "S0_Y" ) LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" .OR. HDIR == "S0_X" ) -!!$print *,"IIB=",IIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6) +!!$print *,"KIIB=",KIIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6) END IF !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -730,21 +776,21 @@ CALL MPI_WAITALL(NB_REQ,KREQ,MPI_STATUSES_IGNORE,IERR) IF (LX) THEN IF (.NOT.GWEST) THEN #ifndef MNH_GPUDIRECT - !$acc update device(ZWEST_OUT) async(IS_WEST) + !$acc update device(PZWEST_OUT) async(IS_WEST) #endif !$acc kernels async(IS_WEST) - !$mnh_expand_array(JI=1:IIB-1 , JJ=IJB:IJE , JK=1:JKU ) - PSRC( 1:IIB-1 , IJB:IJE , : ) = ZWEST_OUT( 1:IIB-1 , IJB:IJE , : ) + !$mnh_expand_array(JI=1:KIIB-1 , JJ=KIJB:KIJE , JK=1:KIKU ) + PSRC( 1:KIIB-1 , KIJB:KIJE , : ) = PZWEST_OUT( 1:KIIB-1 , KIJB:KIJE , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF IF (.NOT.GEAST) THEN #ifndef MNH_GPUDIRECT - !$acc update device(ZEAST_OUT) async(IS_EAST) + !$acc update device(PZEAST_OUT) async(IS_EAST) #endif !$acc kernels async(IS_EAST) - !$mnh_expand_array(JI=IIE+1:IIU , JJ=IJB:IJE , JK=1:JKU ) - PSRC( IIE+1:IIU , IJB:IJE , : ) = ZEAST_OUT( IIE+1:IIU , IJB:IJE , : ) + !$mnh_expand_array(JI=KIIE+1:KIIU , JJ=KIJB:KIJE , JK=1:KIKU ) + PSRC( KIIE+1:KIIU , KIJB:KIJE , : ) = PZEAST_OUT( KIIE+1:KIIU , KIJB:KIJE , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF @@ -752,21 +798,21 @@ END IF IF (LY) THEN IF (.NOT.GSOUTH) THEN #ifndef MNH_GPUDIRECT - !$acc update device(ZSOUTH_OUT) async(IS_SOUTH) + !$acc update device(PZSOUTH_OUT) async(IS_SOUTH) #endif !$acc kernels async(IS_SOUTH) - !$mnh_expand_array(JI=IIB:IIE , JJ=1:IJB-1 , JK=1:JKU ) - PSRC( IIB:IIE , 1:IJB-1 , : ) = ZSOUTH_OUT( IIB:IIE , 1:IJB-1 , : ) + !$mnh_expand_array(JI=KIIB:KIIE , JJ=1:KIJB-1 , JK=1:KIKU ) + PSRC( KIIB:KIIE , 1:KIJB-1 , : ) = PZSOUTH_OUT( KIIB:KIIE , 1:KIJB-1 , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF IF (.NOT.GNORTH) THEN #ifndef MNH_GPUDIRECT - !$acc update device(ZNORTH_OUT) async(IS_NORTH) + !$acc update device(PZNORTH_OUT) async(IS_NORTH) #endif !$acc kernels async(IS_NORTH) - !$mnh_expand_array(JI=IIB:IIE , JJ=IJE+1:IJU , JK=1:JKU ) - PSRC( IIB:IIE , IJE+1:IJU , : ) = ZNORTH_OUT ( IIB:IIE , IJE+1:IJU , : ) + !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJE+1:KIJU , JK=1:KIKU ) + PSRC( KIIB:KIIE , KIJE+1:KIJU , : ) = PZNORTH_OUT ( KIIB:KIIE , KIJE+1:KIJU , : ) !$mnh_end_expand_array() !$acc end kernels ENDIF