diff --git a/MNH/ppm_met.f90 b/MNH/ppm_met.f90 index b7132970d1d2d5af05ddf6a2a1646af1e2044cd0..82deee454258ff1c7d6db70e698dd19b9420363c 100644 --- a/MNH/ppm_met.f90 +++ b/MNH/ppm_met.f90 @@ -1,48 +1,13 @@ +MODULE MODI_PPM_MET ! -! ##################### - MODULE MODI_PPM_MET -! ##################### -! -INTERFACE -! - SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, & - PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & - PTHT, PTKET, PRT, & - PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME ) -! -USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll -! -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type -CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type -CHARACTER (LEN=6), INTENT(IN) :: HMET_ADV_SCHEME -! -INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KTCOUNT! iteration count -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRU ! Courant -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! numbers -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRW ! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density -! -REAL, INTENT(IN) :: PTSTEP ! Single Time step -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT, PTKET ! Vars at t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRTHS, PRTKES! Source terms -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS -! -END SUBROUTINE PPM_MET -! -END INTERFACE -! -END MODULE MODI_PPM_MET +CONTAINS ! ! ###################################################################### SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PTHT, PTKET, PRT, & - PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME ) + PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME, & + ZRHOX11 ) ! ###################################################################### ! !!**** *PPM_MET * @@ -92,9 +57,12 @@ USE MODI_ADVEC_PPM_ALGO ! incorporate ADVEC_4TH_ORDER_ALG, MZF4 and MZM4 !USE MODI_ADVEC_4TH_ORDER_AUX ! -USE MODE_MNH_ZWORK, ONLY : & -& ZUNIT3D ,& -& ZW3D10 +!define ZSRC ZW3D26 +USE MODE_MNH_ZWORK, ONLY : ZUNIT3D, & +& ZRHOX1=>ZW3D20 ,ZRHOX2=>ZW3D21, & +& ZRHOY1=>ZW3D22 ,ZRHOY2=>ZW3D23, & +& ZRHOZ1=>ZW3D24 ,ZRHOZ2=>ZW3D25 +!& ZSRC ! IMPLICIT NONE ! @@ -120,6 +88,8 @@ 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 : ! INTEGER :: JRR ! Loop index for moist variables @@ -131,13 +101,13 @@ 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 +REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC,ZSRCTHT ! ! Temporary advected rhodj -REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,ZRHOX2 +!!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,ZRHOX2 !!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX2 -REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOY1,ZRHOY2 -REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOZ1,ZRHOZ2 +!!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOY1,ZRHOY2 +!!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOZ1,ZRHOZ2 !!$REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZUNIT3D ! !------------------------------------------------------------------------------- @@ -157,36 +127,56 @@ IGRID = 1 ! Calculate the advection of the density RHODJ to pass to the algorithm ! ! acc data -!$acc data pcopyin (PCRU,PRHODJ,PCRV,PCRW) & -!$acc & pcopyout(ZRHOX1,ZRHOY1,ZRHOZ1,ZRHOZ2,ZRHOY2,ZRHOX2) -!!$ZUNIT3D = 1.0 +! 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) 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 end data ! acc update host (ZRHOX1) ! ! ! Potential temperature ! +! acc wait(13) +!$acc data copyin (PTHT) +! pcopyout(ZSRC) +!$acc data create(ZSRCTHT) CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, & ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & - ZSRC, KTCOUNT, PCRU, PCRV, PCRW) + ZSRCTHT, KTCOUNT, PCRU, PCRV, PCRW) ! add the advection to the sources -PRTHS = PRTHS + ZSRC +!PRTHS = PRTHS + ZSRCTHT +!$acc update host(ZSRCTHT) +!$acc end data ! create(ZSRCTHT) +!$acc end data ! pcopyout(PRTHS) +PRTHS = PRTHS + ZSRCTHT +! acc end data ! IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADV_BU_RTH') ! ! Turbulence variables ! IF (GTKEALLOC) THEN +!$acc data pcopyin (PTKET) 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 end data ! IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE') ! @@ -196,7 +186,9 @@ END IF ! ! Case with KRR moist variables ! +! acc wait(14) DO JRR=1,KRR +!$acc update device(PRT(:,:,:,JRR)) ! CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PRT(:,:,:,JRR), & PRHODJ, PTSTEP, & @@ -213,7 +205,9 @@ DO JRR=1,KRR IF (JRR==7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') ! END DO -! acc end data +!$acc end data ! ! END SUBROUTINE PPM_MET + +END MODULE MODI_PPM_MET