diff --git a/src/ZSOLVER/contrav.f90 b/src/ZSOLVER/contrav.f90 index ec2915c8132b0f54ff7c45584855121962a2e3f2..4b7299be16db2f9a9de4fc2af39649b6d5f12082 100644 --- a/src/ZSOLVER/contrav.f90 +++ b/src/ZSOLVER/contrav.f90 @@ -700,6 +700,8 @@ ELSE ! Z1(:,:,:) = 0. ! Z2(:,:,:) = 0. ! +CALL MPPDB_CHECK3DM("contrav_device :: init Z1/Z2",PRECISION,Z1,Z2) +! IF (KADV_ORDER == 2 ) THEN #ifdef MNH_OPENACC call Print_msg( NVERB_WARNING, 'GEN', 'CONTRAV', 'OpenACC: KADV_ORDER=2 and LFLAT=.TRUE. not yet tested' ) @@ -782,7 +784,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN ! but ji loop can not be collapsed -> 10x slower on GPU ! *ztmp1 and ztmp2 are not necessary but improve readability (no impact on performance) #ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) private(ztmp1, ztmp2) +!$acc loop independent collapse(3) #endif do concurrent(ji=IW:IE,jj=1:iju,jk=IKB:IKE+1) ztmp1 = ( 9.0 * PDZX(ji, jj, jk ) - ( PDZX(ji+1, jj, jk ) + PDZX(ji, jj, jk ) + PDZX(ji-1, jj, jk ) ) / 3.0 ) / 16.0 @@ -804,13 +806,16 @@ ELSE IF (KADV_ORDER == 4 ) THEN - 0.5 * ( ( PRVCT(ji, jj-1, jk ) + PRVCT(ji, jj-1, jk-1 ) ) * PDZY(ji, jj-1, jk ) & + ( PRVCT(ji, jj+2, jk ) + PRVCT(ji, jj+2, jk-1 ) ) * PDZY(ji, jj+2, jk ) ) / 12.0 end do -!$acc end kernels +!$acc end kernels +! +!!$CALL MPPDB_CHECK3DM("contrav_device :: dom Z1/Z2",PRECISION,Z1,Z2) ! !* 3.2 limits of the process subdomain (inside the whole domain or in cyclic conditions) ! !!$ IF (NHALO==1) THEN +!$acc kernels async #ifdef MNH_COMPILER_NVHPC -!$acc parallel loop independent collapse(2) async +!$acc loop independent collapse(2) #endif do concurrent(jj=1:iju,jk=IKB:IKE+1) ztmp1 = ( 9.0 * PDZX(IIE, jj, jk ) - ( PDZX(IIE+1, jj, jk ) + PDZX(IIE, jj, jk ) + PDZX(IIE-1, jj, jk ) ) / 3.0 ) / 16.0 @@ -819,10 +824,12 @@ ELSE IF (KADV_ORDER == 4 ) THEN + ( PRUCT(IIE+1, jj, jk ) + PRUCT(IIE+1, jj, jk-1 ) ) * ztmp2 ) / 12.0 & - 0.5 * ( ( PRUCT(IIE-1, jj, jk ) + PRUCT(IIE-1, jj, jk-1 ) ) * PDZX(IIE-1, jj, jk) & + ( ZU_EAST (jj, jk ) + ZU_EAST (jj, jk-1 ) ) * ZDZX_EAST (jj, jk) ) / 12.0 - end do + end do +!$acc end kernels ! +!$acc kernels async #ifdef MNH_COMPILER_NVHPC -!$acc parallel loop independent collapse(2) async +!$acc loop independent collapse(2) #endif do concurrent(ji=1:iiu,jk=IKB:IKE+1) ztmp1 = ( 9.0 * PDZY(ji, IJE, jk) - ( PDZY (ji, IJE+1, jk) + PDZY(ji, IJE, jk) + PDZY(ji, IJE-1, jk) ) / 3.0 ) / 16.0 @@ -832,6 +839,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN - 0.5 * ( ( PRVCT (ji, IJE-1, jk ) + PRVCT (ji, IJE-1, jk-1 ) ) * PDZY (ji, IJE-1, jk ) & + ( ZV_NORTH(ji, jk ) + ZV_NORTH(ji, jk-1 ) ) * ZDZY_NORTH(ji, jk ) ) / 12.0 end do +!$acc end kernels !$acc wait !!$ END IF ! @@ -885,6 +893,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN end do !$acc end kernels ! +CALL MPPDB_CHECK3DM("contrav_device :: PRWCT/Z1/Z2",PRECISION,PRWCT,Z1,Z2) ! END IF ! diff --git a/src/ZSOLVER/get_halo.f90 b/src/ZSOLVER/get_halo.f90 index 9959c71d26b1be2de10e4c58d1d34c46ccdeb528..94ee57e29fce6830f5e6e8783374514479e8d2fa 100644 --- a/src/ZSOLVER/get_halo.f90 +++ b/src/ZSOLVER/get_halo.f90 @@ -419,15 +419,19 @@ USE MODI_GET_HALO, ONLY : GET_HALO_START_D,GET_HALO_STOP_D IMPLICIT NONE ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t -!$acc declare present (PSRC) +! acc declare present (PSRC) CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction character(len=*), optional, intent(in) :: HNAME ! Name of the field to be added ! 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 MPPDB_CHECK(PSRC,"GET_HALO_D end:PSRC") +! END SUBROUTINE GET_HALO_D ! ######################### SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR) @@ -450,7 +454,7 @@ USE MODE_MPPDB IMPLICIT NONE ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t -!$acc declare present (PSRC) +! acc declare present (PSRC) INTEGER :: KNB_REQ , KREQ(8) CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! @@ -465,8 +469,10 @@ CALL INIT_HALO_D() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!$acc data present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & -!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) +!$acc data present (PSRC) & +!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & +!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) + LX = .FALSE. LY = .FALSE. @@ -660,7 +666,7 @@ USE MODE_MPPDB IMPLICIT NONE ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC ! variable at t -!$acc declare present (PSRC) +! acc declare present (PSRC) INTEGER :: KNB_REQ , KREQ(8) CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction ! @@ -675,7 +681,8 @@ CALL INIT_HALO_D() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!$acc data present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & +!$acc data present (PSRC) & +!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) & !$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) LX = .FALSE. @@ -786,7 +793,12 @@ LOGICAL :: LX , LY INTEGER :: INB_REQ , IREQ(8) INTEGER :: IERR -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_HALO_DD big:PSRC") + +if ( NPROC == 1 ) THEN + CALL MPPDB_CHECK(PSRC,"GET_HALO_DD end:PSRC") + RETURN +end if CALL INIT_HALO_D() @@ -1020,6 +1032,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_HALO_DD end:PSRC") + END SUBROUTINE GET_HALO_DD ! ######################################## SUBROUTINE GET_2D_HALO_DD(PSRC, HDIR, HNAME) @@ -1063,7 +1077,12 @@ LOGICAL :: LX , LY INTEGER :: INB_REQ , IREQ(8) INTEGER :: IERR -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD big:PSRC") + +if ( NPROC == 1 ) THEN + CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD end:PSRC") + RETURN +end if CALL INIT_HALO_D() @@ -1297,6 +1316,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD end:PSRC") + END SUBROUTINE GET_2D_HALO_DD !------------------------------------------------------------------------------- ! ######################################## @@ -1342,7 +1363,12 @@ INTEGER :: INB_REQEW , IREQEW(4) INTEGER :: INB_REQNS , IREQNS(4) INTEGER :: IERR -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC big:PSRC") + +if ( NPROC == 1 ) then + CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC end:PSRC") + RETURN + endif CALL INIT_HALO_D() @@ -1605,6 +1631,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC end:PSRC") + END SUBROUTINE GET_HALO_DDC !------------------------------------------------------------------------------- ! ######################################## @@ -1650,7 +1678,12 @@ INTEGER :: INB_REQEW , IREQEW(4) INTEGER :: INB_REQNS , IREQNS(4) INTEGER :: IERR -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC big:PSRC") + +if ( NPROC == 1 ) then + CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC end:PSRC") + RETURN +end if CALL INIT_HALO_D() @@ -1913,6 +1946,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC end:PSRC") + END SUBROUTINE GET_2D_HALO_DDC !------------------------------------------------------------------------------- ! ######################################## @@ -1957,7 +1992,14 @@ INTEGER :: IERR REAL , DIMENSION(:,:) , POINTER , CONTIGUOUS :: ZH2_EAST,ZH2_WEST,ZH2_NORTH,ZH2_SOUTH -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD big:PSRC") + +if ( NPROC == 1 ) then + CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD end:PSRC") + RETURN +end if + +CALL INIT_HALO_D() !$acc data present ( PSRC ) & !$acc present (ZNORTH2_IN, ZSOUTH2_IN, ZWEST2_IN, ZEAST2_IN) & @@ -2183,6 +2225,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD end:PSRC") + END SUBROUTINE GET_HALO2_DD !------------------------------------------------------------------------------- ! ######################################## @@ -2227,7 +2271,12 @@ INTEGER :: IERR REAL , DIMENSION(:,:) , POINTER , CONTIGUOUS :: ZH2F_EAST,ZH2F_WEST,ZH2F_NORTH,ZH2F_SOUTH -if ( NPROC == 1 ) RETURN +CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF beg:PSRC") + +if ( NPROC == 1 ) then + CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF end:PSRC") + RETURN +end if CALL INIT_HALO_D() @@ -2455,6 +2504,8 @@ END IF !$acc end data +CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF end:PSRC") + END SUBROUTINE GET_HALO2_DF ! ! ################################################### @@ -2464,6 +2515,7 @@ END SUBROUTINE GET_HALO2_DF USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll USE MODI_GET_HALO, ONLY : GET_HALO_D,GET_HALO_DD,GET_HALO2_DD +USE MODE_MPPDB ! IMPLICIT NONE ! @@ -2486,6 +2538,8 @@ else yname = 'PSRC' end if +CALL MPPDB_CHECK(PSRC,"GET_HALO2_D big:PSRC") + CALL GET_HALO_DD(PSRC,HNAME=yname) !!$NULLIFY( TZ_PSRC_ll,TP_PSRC_HALO2_ll) @@ -2497,6 +2551,8 @@ CALL GET_HALO2_DD(PSRC,TP_PSRC_HALO2_ll,'GET_HALO2_DD::'//trim( yname ) ) ! !!$CALL CLEANLIST_ll(TZ_PSRC_ll) ! +CALL MPPDB_CHECK(PSRC,"GET_HALO2_D end:PSRC") +! END SUBROUTINE GET_HALO2_D ! #endif