diff --git a/MNH/ppm_met.f90 b/MNH/ppm_met.f90 index 82deee454258ff1c7d6db70e698dd19b9420363c..e18fce18d6b8ca851da7fde05b26382ba2a8e326 100644 --- a/MNH/ppm_met.f90 +++ b/MNH/ppm_met.f90 @@ -6,8 +6,7 @@ CONTAINS SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PTHT, PTKET, PRT, & - PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME, & - ZRHOX11 ) + PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME ) ! ###################################################################### ! !!**** *PPM_MET * @@ -57,12 +56,12 @@ USE MODI_ADVEC_PPM_ALGO ! incorporate ADVEC_4TH_ORDER_ALG, MZF4 and MZM4 !USE MODI_ADVEC_4TH_ORDER_AUX ! -!define ZSRC ZW3D26 USE MODE_MNH_ZWORK, ONLY : ZUNIT3D, & -& ZRHOX1=>ZW3D20 ,ZRHOX2=>ZW3D21, & -& ZRHOY1=>ZW3D22 ,ZRHOY2=>ZW3D23, & -& ZRHOZ1=>ZW3D24 ,ZRHOZ2=>ZW3D25 -!& ZSRC +& ZRHOX1=>ZRHOX1_PPM_MET ,ZRHOX2=>ZRHOX2_PPM_MET, & +& ZRHOY1=>ZRHOY1_PPM_MET ,ZRHOY2=>ZRHOY2_PPM_MET, & +& ZRHOZ1=>ZRHOZ1_PPM_MET ,ZRHOZ2=>ZRHOZ2_PPM_MET, & +& ZSRCTHT=>ZSRC_PPM_MET, & +& ZSRC=>ZSRC_PPM_MET ! IMPLICIT NONE ! @@ -88,7 +87,6 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS, PRTKES! Source terms REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS ! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: ZRHOX11 ! !* 0.2 Declarations of local variables : ! @@ -101,7 +99,7 @@ INTEGER :: IGRID ! localisation on the model grid !* Variables specific to ppm scheme ! ! Advection source term calulated in the PPM algorithm -REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC,ZSRCTHT +!!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC ! ! Temporary advected rhodj !!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,ZRHOX2 @@ -126,56 +124,40 @@ IGRID = 1 ! ! Calculate the advection of the density RHODJ to pass to the algorithm ! -! acc data -! acc update device (PCRV) async(11) -! acc update device (PCRW) async(12) -! acc update device (PTHT) async(13) -! acc update device (PRT) async(14) -! acc & pcopyout(ZRHOX1,ZRHOY1,ZRHOZ1,ZRHOZ2,ZRHOY2,ZRHOX2) - -!$acc data pcopyin (PCRU,PRHODJ) pcopyin(PCRV,PCRW) -! create(ZSRC) +!$acc data pcopyin(PCRU,PCRV,PCRW,PRHODJ) +! create/mirror(ZRHOX1,ZRHOY1,ZRHOZ1,ZRHOZ2,ZRHOY2,ZRHOX2) CALL PPM_S0_X(HLBCX, IGRID, ZUNIT3D, PCRU, PRHODJ, PTSTEP, ZRHOX1) -! acc wait(1) -! acc update device (PCRV) async(11) -! acc wait(11) CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT3D, PCRV, ZRHOX1, PTSTEP, ZRHOY1) -! acc wait(12) CALL PPM_S0_Z(IGRID, ZUNIT3D, PCRW, ZRHOY1, PTSTEP, ZRHOZ1) CALL PPM_S0_Z(IGRID, ZUNIT3D, PCRW, PRHODJ, PTSTEP, ZRHOZ2) CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT3D, PCRV, ZRHOZ2, PTSTEP, ZRHOY2) CALL PPM_S0_X(HLBCX, IGRID, ZUNIT3D, PCRU, ZRHOY2, PTSTEP, ZRHOX2) -! acc end data -! acc update host (ZRHOX1) -! ! ! Potential temperature ! -! acc wait(13) -!$acc data copyin (PTHT) -! pcopyout(ZSRC) -!$acc data create(ZSRCTHT) +!$acc data pcopyin (PTHT) pcopy(PRTHS) +! create/mirror(ZSRCTHT) CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, & ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & - ZSRCTHT, KTCOUNT, PCRU, PCRV, PCRW) + ZSRC, KTCOUNT, PCRU, PCRV, PCRW) +!$acc kernels ! add the advection to the sources -!PRTHS = PRTHS + ZSRCTHT -!$acc update host(ZSRCTHT) -!$acc end data ! create(ZSRCTHT) -!$acc end data ! pcopyout(PRTHS) -PRTHS = PRTHS + ZSRCTHT -! acc end data +PRTHS = PRTHS + ZSRC +!$acc end kernels +!$acc end data ! IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADV_BU_RTH') ! ! Turbulence variables ! IF (GTKEALLOC) THEN -!$acc data pcopyin (PTKET) +!$acc data pcopyin (PTKET) pcopy(PRTKES) CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTKET,PRHODJ,PTSTEP, & ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & ZSRC, KTCOUNT, PCRU, PCRV, PCRW) - PRTKES = PRTKES + ZSRC + !$acc kernels + PRTKES = PRTKES + ZSRC + !$acc end kernels !$acc end data ! IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE') @@ -188,13 +170,16 @@ END IF ! ! acc wait(14) DO JRR=1,KRR -!$acc update device(PRT(:,:,:,JRR)) -! + ! acc update device(PRT(:,:,:,JRR)) + !$acc data pcopy(PRRS(:,:,:,JRR)) pcopyin(PRT(:,:,:,JRR)) CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PRT(:,:,:,JRR), & PRHODJ, PTSTEP, & ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & ZSRC, KTCOUNT, PCRU, PCRV, PCRW) + !$acc kernels PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) + ZSRC(:,:,:) + !$acc end kernels +!$acc end data ! IF (JRR==1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') IF (JRR==2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC')