diff --git a/src/ZSOLVER/advecuvw_rk.f90 b/src/ZSOLVER/advecuvw_rk.f90 index 6bdfae2fe4342040acd6d061ac9fa988b5f72be6..8f26e4bf548757446dacf981a2d6d0df79b7f2a0 100644 --- a/src/ZSOLVER/advecuvw_rk.f90 +++ b/src/ZSOLVER/advecuvw_rk.f90 @@ -205,8 +205,10 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZBUTS! Butcher array coefficients !JUAN TYPE(LIST_ll), POINTER :: TZFIELDMT_ll ! list of fields to exchange TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll ! momentum variables +#ifdef MNH_OPENACC TYPE(HALO2LIST_ll), SAVE , POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT LOGICAL , SAVE :: GFIRST_CALL_ADVECUVW_RK = .TRUE. +#endif INTEGER :: INBVAR INTEGER :: IIU, IJU, IKU ! array sizes !JUAN @@ -455,11 +457,6 @@ ZRWS(:, :, :, : ) = 0. CALL UPDATE_HALO_ll(TZFIELDMT_ll,IINFO_ll) CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll) #else -! acc update self(ZUT,ZVT,ZWT) -!!$ CALL GET_HALO_D(ZUT,HNAME='ZUT') -!!$ CALL GET_HALO_D(ZVT,HNAME='ZVT') -!!$ CALL GET_HALO_D(ZWT,HNAME='ZWT') -!!$ CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll) IF (GFIRST_CALL_ADVECUVW_RK) THEN GFIRST_CALL_ADVECUVW_RK = .FALSE. NULLIFY(TZHALO2_UT,TZHALO2_VT,TZHALO2_WT) @@ -470,7 +467,6 @@ END IF CALL GET_HALO2_DF(ZUT,TZHALO2_UT,HNAME='ZUT') CALL GET_HALO2_DF(ZVT,TZHALO2_VT,HNAME='ZVT') CALL GET_HALO2_DF(ZWT,TZHALO2_WT,HNAME='ZWT') -! acc update device(ZUT,ZVT,ZWT) #endif @@ -487,11 +483,11 @@ END IF CALL ADVECUVW_WENO_K (HLBCX, HLBCY, KWENO_ORDER, ZUT, ZVT, ZWT, & PRUCT, PRVCT, PRWCT, & ZRUS(:,:,:,JS), ZRVS(:,:,:,JS), ZRWS(:,:,:,JS), & - TZHALO2_UT,TZHALO2_VT,TZHALO2_WT & #ifndef MNH_OPENACC - ) + TZHALO2MT_ll ) #else - , ZT3D(:,:,:,IZMEAN), ZT3D(:,:,:,IZWORK) ) + TZHALO2_UT,TZHALO2_VT,TZHALO2_WT & + , ZT3D(:,:,:,IZMEAN), ZT3D(:,:,:,IZWORK) ) #endif ELSE IF ((HUVW_ADV_SCHEME=='CEN4TH') .AND. (HTEMP_SCHEME=='RKC4')) THEN CALL ADVECUVW_4TH (HLBCX, HLBCY, PRUCT, PRVCT, PRWCT, & @@ -561,9 +557,6 @@ CALL MNH_REL_ZT3D(IZMEAN,IZWORK) ! CALL CLEANLIST_ll(TZFIELDMT_ll) CALL DEL_HALO2_ll(TZHALO2MT_ll) -!!$CALL DEL_HALO2_ll(TZHALO2_UT) -!!$CALL DEL_HALO2_ll(TZHALO2_VT) -!!$CALL DEL_HALO2_ll(TZHALO2_WT) !$acc update self(PRUS_ADV,PRVS_ADV,PRWS_ADV) !------------------------------------------------------------------------------- ! diff --git a/src/ZSOLVER/advecuvw_weno_k.f90 b/src/ZSOLVER/advecuvw_weno_k.f90 index f41009ae4ef63792834dff1b2f025e0808f1a2e2..2cc4fb32e4dc0fdd54ff18894ad5ec2294b6095b 100644 --- a/src/ZSOLVER/advecuvw_weno_k.f90 +++ b/src/ZSOLVER/advecuvw_weno_k.f90 @@ -11,10 +11,10 @@ INTERFACE ! SUBROUTINE ADVECUVW_WENO_K(HLBCX, HLBCY, KWENO_ORDER, PUT, PVT, PWT, & PRUCT, PRVCT, PRWCT, PRUS, PRVS, PRWS, & - TPHALO2_UT,TPHALO2_VT,TPHALO2_WT & #ifndef MNH_OPENACC - ) + TPHALO2LIST ) #else + TPHALO2_UT,TPHALO2_VT,TPHALO2_WT & , ZMEAN, ZWORK) #endif ! @@ -33,7 +33,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT, PWT ! U,V,W at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS, PRVS, PRWS ! Source terms ! +#ifndef MNH_OPENACC +TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST ! list for diffusion +#else TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT +#endif ! #ifdef MNH_OPENACC ! Work arrays @@ -49,10 +53,10 @@ END MODULE MODI_ADVECUVW_WENO_K ! ########################################################################## SUBROUTINE ADVECUVW_WENO_K(HLBCX, HLBCY, KWENO_ORDER, PUT, PVT, PWT, & PRUCT, PRVCT, PRWCT, PRUS, PRVS, PRWS, & - TPHALO2_UT,TPHALO2_VT,TPHALO2_WT & #ifndef MNH_OPENACC - ) + TPHALO2LIST ) #else + TPHALO2_UT,TPHALO2_VT,TPHALO2_WT & , ZMEAN, ZWORK) #endif ! ########################################################################## @@ -114,11 +118,15 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT, PVT, PWT ! Variables at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS, PRVS, PRWS ! Source terms ! +#ifndef MNH_OPENACC +TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST ! list for diffusion +#else +TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT +#endif ! !* 0.2 Declarations of local variables : ! -TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT - +TYPE(HALO2LIST_ll), POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT INTEGER :: IINFO_ll ! return code of parallel routine ! #ifndef MNH_OPENACC @@ -166,9 +174,15 @@ CALL INIT_ON_HOST_AND_DEVICE(ZWORK,2e90,'ADVECUVW_WENO_K::ZWORK') !------------------------- ADVECTION OF MOMENTUM ------------------------------ ! ! -!!$TPHALO2_UT => TPHALO2LIST ! 1rst add3dfield in model_n -!!$TPHALO2_VT => TPHALO2LIST%NEXT ! 2nd add3dfield in model_n -!!$TPHALO2_WT => TPHALO2LIST%NEXT%NEXT ! 3rst add3dfield in model_n +#ifndef MNH_OPENACC +TZHALO2_UT => TPHALO2LIST ! 1rst add3dfield in model_n +TZHALO2_VT => TPHALO2LIST%NEXT ! 2nd add3dfield in model_n +TZHALO2_WT => TPHALO2LIST%NEXT%NEXT ! 3rst add3dfield in model_n +#else +TZHALO2_UT => TPHALO2_UT +TZHALO2_VT => TPHALO2_VT +TZHALO2_WT => TPHALO2_WT +#endif ! IKU=SIZE(PUT,3) ! ------------------------------------------------------- @@ -289,13 +303,13 @@ CASE(3) ! WENO 3 ! U component ! ZWORK = MXF(PRUCT) - CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2) + CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) PRUS = PRUS - DXM(ZMEAN) ! IF (.NOT.L2D) THEN ZWORK = MXM(PRVCT) - CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2) + CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2) PRUS = PRUS - DYF(ZMEAN) END IF ! @@ -305,11 +319,11 @@ CASE(3) ! WENO 3 ! IF (.NOT.L2D) THEN ZWORK = MYM(PRUCT) - CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2) + CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) PRVS = PRVS - DXF(ZMEAN) ! ZWORK = MYF(PRVCT) - CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2) + CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2) PRVS = PRVS - DYM(ZMEAN) ! PRVS = PRVS - DZF(WENO_K_2_MZ(PVT, MYM(PRWCT))) @@ -318,12 +332,12 @@ CASE(3) ! WENO 3 ! W component ! ZWORK = MZM(PRUCT) - CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2) + CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) PRWS = PRWS - DXF(ZMEAN) ! IF (.NOT.L2D) THEN ZWORK = MZM(PRVCT) - CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2) + CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2) PRWS = PRWS - DYF(ZMEAN) END IF ! @@ -334,7 +348,7 @@ CASE(3) ! WENO 3 ! U component ! CALL MXF_DEVICE(PRUCT,ZWORK) - CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2%WEST, TPHALO2_UT%HALO2%EAST, & + CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2%WEST, TZHALO2_UT%HALO2%EAST, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) @@ -345,7 +359,7 @@ CASE(3) ! WENO 3 ! IF (.NOT.L2D) THEN CALL MXM_DEVICE(PRVCT,ZWORK) - CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2%NORTH, TPHALO2_UT%HALO2%SOUTH, & + CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2%NORTH, TZHALO2_UT%HALO2%SOUTH, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) @@ -370,7 +384,7 @@ CASE(3) ! WENO 3 ! IF (.NOT.L2D) THEN CALL MYM_DEVICE(PRUCT,ZWORK) - CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2%WEST, TPHALO2_VT%HALO2%EAST, & + CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2%WEST, TZHALO2_VT%HALO2%EAST, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) @@ -380,7 +394,7 @@ CASE(3) ! WENO 3 !$acc end kernels ! CALL MYF_DEVICE(PRVCT,ZWORK) - CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2%NORTH, TPHALO2_VT%HALO2%SOUTH, & + CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2%NORTH, TZHALO2_VT%HALO2%SOUTH, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) @@ -405,7 +419,7 @@ CASE(3) ! WENO 3 ! ! ZWORK = MZM(1,IKU,1,PRUCT) CALL MZM_DEVICE(PRUCT,ZWORK) - CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2%WEST, TPHALO2_WT%HALO2%EAST, & + CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2%WEST, TZHALO2_WT%HALO2%EAST, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) @@ -417,7 +431,7 @@ CASE(3) ! WENO 3 IF (.NOT.L2D) THEN ! ZWORK = MZM(1,IKU,1,PRVCT) CALL MZM_DEVICE(PRVCT,ZWORK) - CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2%NORTH, TPHALO2_WT%HALO2%SOUTH, & + CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2%NORTH, TZHALO2_WT%HALO2%SOUTH, & ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), & ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), & ZT3D(:,:,:,IZOMP1), ZT3D(:,:,:,IZOMP2), ZT3D(:,:,:,IZOMN1), ZT3D(:,:,:,IZOMN2) ) diff --git a/src/ZSOLVER/ppm.f90 b/src/ZSOLVER/ppm.f90 index 6c80487d465aecf2a6ddbc78f07daae49da0017f..2b6a2937cef87f6131a4b7f2500fe05331dc71e5 100644 --- a/src/ZSOLVER/ppm.f90 +++ b/src/ZSOLVER/ppm.f90 @@ -2758,11 +2758,14 @@ INTEGER :: I,J,K REAL, DIMENSION(:,:) :: ZPSRC_HALO2_WEST #endif +#ifndef MNH_OPENACC +TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC +#else TYPE(HALO2LIST_ll), SAVE , POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_X = .TRUE. ! REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZWEST - +#endif !------------------------------------------------------------------------------- !$acc data present( PSRC, PCR, PRHO, PR , & @@ -2794,9 +2797,10 @@ GEAST = LEAST_ll() ! !* initialise & update halo & halo2 for PSRC ! -!!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') -!!$ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:) -!!$!$acc update device (ZPSRC_HALO2_WEST) +#ifndef MNH_OPENACC +CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') +ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:) +#else IF (GFIRST_CALL_PPM_S0_X) THEN GFIRST_CALL_PPM_S0_X = .FALSE. NULLIFY(TZ_PSRC_HALO2_ll) @@ -2806,6 +2810,9 @@ CALL GET_HALO2_DF(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') ZWEST => TZ_PSRC_HALO2_ll%HALO2%WEST !$acc kernels ZPSRC_HALO2_WEST(:,:) = ZWEST(:,:) +!$acc end kernels +#endif +!$acc kernels ZPHAT=PSRC ZFPOS=PSRC ZFNEG=PSRC @@ -3044,7 +3051,9 @@ CALL GET_HALO(PR, HNAME='PR') CALL GET_HALO_D(PR, HDIR="S0_X", HNAME='PR') #endif !------------------------------------------------------------------------------- -!!$CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +#ifndef MNH_OPENACC +CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +#endif IF (MPPDB_INITIALIZED) THEN !Check all INOUT arrays @@ -3203,9 +3212,15 @@ REAL, DIMENSION(:,:,:) :: ZFPOS, ZFNEG ! variable at cell edges REAL, DIMENSION(:,:,:) :: ZPHAT ! +#ifndef MNH_OPENACC +TYPE(HALO2LIST_ll), POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC +#else TYPE(HALO2LIST_ll), SAVE ,POINTER :: TZ_PSRC_HALO2_ll ! halo2 for PSRC LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_Y = .TRUE. +REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZSOUTH +#endif + TYPE(HALO2LIST_ll), POINTER :: TZ_PHAT_HALO2_ll ! halo2 for ZPHAT ! REAL, DIMENSION(:,:,:) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF @@ -3215,8 +3230,6 @@ INTEGER :: I,J,K REAL, DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH #endif ! -REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZSOUTH -! !------------------------------------------------------------------------------- !$acc data present( PSRC, PCR, PRHO, PR , & @@ -3255,10 +3268,11 @@ IF ( L2D ) THEN CALL MPPDB_CHECK(PR,"PPM_S0_Y end:PR") ! RETURN ELSE !not L2D - ! -!!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') -!!$ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:) -!!$!$acc update device (ZPSRC_HALO2_SOUTH) + ! +#ifndef MNH_OPENACC +CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') +ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:) +#else IF (GFIRST_CALL_PPM_S0_Y) THEN GFIRST_CALL_PPM_S0_Y = .FALSE. NULLIFY(TZ_PSRC_HALO2_ll) @@ -3266,11 +3280,14 @@ IF (GFIRST_CALL_PPM_S0_Y) THEN END IF CALL GET_HALO2_DF(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC') ZSOUTH => TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:) +!$acc kernels +ZPSRC_HALO2_SOUTH(:,:) = ZSOUTH(:,:) +!$acc end kernels +#endif ! ! Initialize with relalistic value all work array ! !$acc kernels -ZPSRC_HALO2_SOUTH(:,:) = ZSOUTH(:,:) ZPHAT=PSRC ZFPOS=PSRC ZFNEG=PSRC @@ -3501,7 +3518,9 @@ CALL GET_HALO(PR, HNAME='PR') CALL GET_HALO_D(PR, HDIR="S0_Y", HNAME='PR') #endif ! -!!$CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +#ifndef MNH_OPENACC +CALL DEL_HALO2_ll(TZ_PSRC_HALO2_ll) +#endif ! IF (MPPDB_INITIALIZED) THEN !Check all INOUT arrays diff --git a/src/ZSOLVER/qlap.f90 b/src/ZSOLVER/qlap.f90 index 5f76e50d9b5f77db9717497307716ce2d7e2fef0..417514389d28bc9ddc7ad47cc366b42cb720de82 100644 --- a/src/ZSOLVER/qlap.f90 +++ b/src/ZSOLVER/qlap.f90 @@ -20,8 +20,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type ! Metric coefficients: REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZY ! d*zy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J @@ -47,8 +47,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type ! Metric coefficients: REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZY ! d*zy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J @@ -152,6 +152,9 @@ USE MODI_GRADIENT_M USE MODI_SHUMAN ! USE MODE_MPPDB +#ifdef MNH_OPENACC +USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D +#endif ! IMPLICIT NONE ! @@ -164,8 +167,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type ! Metric coefficients: REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZY ! d*zy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J @@ -177,11 +180,21 @@ REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: PQLAP ! final divergence ! !* 0.2 declarations of local variables ! +#ifndef MNH_OPENACC REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZU ! rho*J*gradient along x ! REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZV ! rho*J*gradient along y ! REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZW ! rho*J*gradient along z +#else +REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZU ! rho*J*gradient along x +! +REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZV ! rho*J*gradient along y +! +REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZW ! rho*J*gradient along z +! +INTEGER :: IZU,IZV,IZW +#endif ! INTEGER :: IIU,IJU,IKU ! I,J,K array sizes INTEGER :: JK,JJ,JI ! vertical loop index @@ -198,6 +211,16 @@ CALL GET_DIM_EXT_ll('B',IIU,IJU) CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKU=SIZE(PY,3) ! +#ifndef MNH_OPENACC +ALLOCATE (ZU(IIU,IJU,IKU)) +ALLOCATE (ZV(IIU,IJU,IKU)) +ALLOCATE (ZW(IIU,IJU,IKU)) +#else +IZU = MNH_ALLOCATE_ZT3D( ZU,IIU,IJU,IKU ) +IZV = MNH_ALLOCATE_ZT3D( ZV,IIU,IJU,IKU ) +IZW = MNH_ALLOCATE_ZT3D( ZW,IIU,IJU,IKU ) +#endif +! ZU = GX_M_U(1,IKU,1,PY,PDXX,PDZZ,PDZX) CALL MPPDB_CHECK3D(ZU,'QLAP::ZU',PRECISION) ! @@ -286,6 +309,11 @@ CALL CLEANLIST_ll(TZFIELDS_ll) ! CALL GDIV(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,ZU,ZV,ZW,PQLAP) ! +#ifndef MNH_OPENACC +DEALLOCATE(ZU,ZV,ZW) +#else +CALL MNH_REL_ZT3D ( IZU,IZV,IZW ) +#endif !------------------------------------------------------------------------------- ! END FUNCTION QLAP @@ -395,8 +423,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! y-direction LBC type ! Metric coefficients: REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! d*xx REAL, DIMENSION(:,:,:), INTENT(IN) :: PDYY ! d*yy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZX ! d*zx -REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZY ! d*zy +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZX ! d*zx +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDZY ! d*zy REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! d*zz ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density of reference * J diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90 index 9d5f3bfa99c5c9e6b916e628f882e8bb9f8e6d7c..e9ae5dcd939754ffd4e59b17a44ded6c21f97474 100644 --- a/src/ZSOLVER/turb.f90 +++ b/src/ZSOLVER/turb.f90 @@ -1581,7 +1581,9 @@ USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODD_CONF ! +#ifdef MNH_OPENACC USE MODI_GET_HALO +#endif ! IMPLICIT NONE ! @@ -1614,17 +1616,18 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! 2 Update halo if necessary ! !!$IF (NHALO == 1) THEN -!!$!$acc update self(PUSLOPE,PVSLOPE) -!!$ CALL ADD2DFIELD_ll( TZFIELDS_ll, PUSLOPE, 'UPDATE_ROTATE_WIND::PUSLOPE' ) -!!$ CALL ADD2DFIELD_ll( TZFIELDS_ll, PVSLOPE, 'UPDATE_ROTATE_WIND::PVSLOPE' ) -!!$ CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) -!!$ CALL CLEANLIST_ll(TZFIELDS_ll) -!!$!$acc update device(PUSLOPE,PVSLOPE) +#ifndef MNH_OPENACC + CALL ADD2DFIELD_ll( TZFIELDS_ll, PUSLOPE, 'UPDATE_ROTATE_WIND::PUSLOPE' ) + CALL ADD2DFIELD_ll( TZFIELDS_ll, PVSLOPE, 'UPDATE_ROTATE_WIND::PVSLOPE' ) + CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) + CALL CLEANLIST_ll(TZFIELDS_ll) +#else ! ! /!\ warning conner needed -> GET_HALO...C ! CALL GET_2D_HALO_DDC( PUSLOPE, HNAME='UPDATE_ROTATE_WIND::PUSLOPE' ) CALL GET_2D_HALO_DDC( PVSLOPE, HNAME='UPDATE_ROTATE_WIND::PVSLOPE' ) +#endif !!$ENDIF ! ! 3 Boundary conditions for non cyclic case diff --git a/src/ZSOLVER/turb_hor_dyn_corr.f90 b/src/ZSOLVER/turb_hor_dyn_corr.f90 index b59a3dfaa26314a1a3360157b626ff755290bc70..df9f9e4c7c4414d059768828020bda4a9337af35 100644 --- a/src/ZSOLVER/turb_hor_dyn_corr.f90 +++ b/src/ZSOLVER/turb_hor_dyn_corr.f90 @@ -176,8 +176,8 @@ USE MODI_BITREP #endif #ifdef MNH_OPENACC USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT3DP , MNH_ALLOCATE_ZT2D -#endif USE MODI_GET_HALO +#endif ! IMPLICIT NONE ! @@ -393,7 +393,9 @@ iztmp4_device = MNH_ALLOCATE_ZT3D( ztmp4_device,JIU,JJU,JKU ) ! !* 1. PRELIMINARY COMPUTATIONS ! ------------------------ +#ifndef MNH_OPENACC NULLIFY(TZFIELDS_ll) +#endif ! IKB = 1+JPVEXT IKE = SIZE(PUM,3)-JPVEXT @@ -429,8 +431,9 @@ CALL GZ_W_M_DEVICE(1,IKU,1,PWM,PDZZ,GZ_W_M_PWM) CALL MZF_DEVICE(1,IKU,1,PDZZ,ZMZF_DZZ) #endif ! +#ifndef MNH_OPENACC CALL ADD3DFIELD_ll( TZFIELDS_ll, ZFLX, 'TURB_HOR_DYN_CORR::ZFLX' ) - +#endif ! compute the coefficients for the uncentred gradient computation near the ! ground @@ -660,10 +663,11 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) - ZFLX(:,:,IKB) !!! to be absolutely sure, we do a wait !$acc wait ! -!!$!$acc update self(ZFLX) -!!$CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) -!!$!$acc update device(ZFLX) async(10) +#ifndef MNH_OPENACC +CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) +#else CALL GET_HALO_D(ZFLX) +#endif ! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN ! stores <U U> @@ -869,10 +873,11 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) - ZFLX(:,:,IKB) ! ! !$acc wait(3) ! !$acc wait(3) -!!$!$acc update self(ZFLX) -!!$CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) -!!$!$acc update device(ZFLX) async(10) +#ifndef MNH_OPENACC +CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll) +#else CALL GET_HALO_D(ZFLX) +#endif ! IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN ! stores <V V> @@ -1266,7 +1271,9 @@ END IF !!! et un dernier wait pour etre sur !$acc wait ! +#ifndef MNH_OPENACC CALL CLEANLIST_ll(TZFIELDS_ll) +#endif if ( mppdb_initialized ) then !Check all inout arrays diff --git a/src/ZSOLVER/update_lm.f90 b/src/ZSOLVER/update_lm.f90 index 7b82c64c7d766f33f34af358abd3c5c5cb3b37ae..b27ff04f2cb430ef4342c6456eff3947c706f130 100644 --- a/src/ZSOLVER/update_lm.f90 +++ b/src/ZSOLVER/update_lm.f90 @@ -66,7 +66,9 @@ USE MODD_PARAMETERS ! USE MODE_ll use mode_mppdb +#ifdef MNH_OPENACC USE MODI_GET_HALO +#endif ! IMPLICIT NONE ! @@ -103,7 +105,9 @@ end if !* 1. COMPUTE DIMENSIONS OF ARRAYS : ! ---------------------------- CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -!!$NULLIFY(TZLM_ll) +#ifndef MNH_OPENACC +NULLIFY(TZLM_ll) +#endif ! !------------------------------------------------------------------------------- ! @@ -112,17 +116,18 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ! !!$IF(NHALO == 1) THEN -!!$!$acc update self(PLM,PLEPS) -!!$ CALL ADD3DFIELD_ll( TZLM_ll, PLM, 'UPDATE_LM::PLM' ) -!!$ CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' ) -!!$ CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll) -!!$ CALL CLEANLIST_ll(TZLM_ll) -!!$!$acc update device(PLM,PLEPS) +#ifndef MNH_OPENACC + CALL ADD3DFIELD_ll( TZLM_ll, PLM, 'UPDATE_LM::PLM' ) + CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' ) + CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll) + CALL CLEANLIST_ll(TZLM_ll) +#else ! ! /!\ Corner update needed ! -> GET_HALO_DDC ! CALL GET_HALO_DDC( PLM, HNAME='UPDATE_LM::PLM' ) CALL GET_HALO_DDC( PLEPS, HNAME='UPDATE_LM::PLEPS' ) +#endif !!$END IF ! !------------------------------------------------------------------------------- diff --git a/src/ZSOLVER/zsolver_inv.f90 b/src/ZSOLVER/zsolver_inv.f90 index 29965951e8ee7546dad9e2e27d6f93e6a1cd3e1e..09e6ee8c091f11d6490ad40cb2bb9b0e75b68a65 100644 --- a/src/ZSOLVER/zsolver_inv.f90 +++ b/src/ZSOLVER/zsolver_inv.f90 @@ -309,10 +309,14 @@ SUBROUTINE ZSOLVER_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & call mg_main_mnh_solve() call mg_main_get_u_mnh(IIB,IIE,IIU,IJB,IJE,IJU,IKU,PF_1_Y) +#ifndef MNH_OPENACC + CALL GET_HALO(PF_1_Y) +#else ! ! WARNING WITH GET_HALO_D not BITREPROD !!! - ! + ! CALL GET_HALO_DDC(PF_1_Y) +#endif ! CALL PF_1_Y_BOUND(PF_1_Y) !-------------------------------------------------------------------------------