diff --git a/MNH/ppm_met.f90 b/MNH/ppm_met.f90 index 5fca9c10ef978df198ab55a46557986c8cdfe400..78667fdb0bfdf30f0bef4be574d64d272ea0e748 100644 --- a/MNH/ppm_met.f90 +++ b/MNH/ppm_met.f90 @@ -7,6 +7,61 @@ CONTAINS PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PTHT, PTKET, PRT, & PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME ) + + USE MODE_MNH_ZWORK, ONLY : ZT3D, MNH_GET_ZT3D , MNH_REL_ZT3D + USE MODE_MNH_ZWORK, ONLY : ZUNIT3D + + IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +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 ! contravariant +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! components +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRW ! of momentum +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! density +! +REAL, INTENT(IN) :: PTSTEP ! 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 + + +INTEGER :: IZSRC,IZRHOX1,IZRHOX2,IZRHOY1,IZRHOY2,IZRHOZ1,IZRHOZ2 + + CALL MNH_GET_ZT3D(IZSRC,IZRHOX1,IZRHOX2,IZRHOY1,IZRHOY2,IZRHOZ1,IZRHOZ2) + + CALL PPM_MET_D(HLBCX,HLBCY, KRR, KTCOUNT, & + & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & + & PTHT, PTKET, PRT, & + & PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME , & + & ZT3D(:,:,:,IZSRC), & + & ZT3D(:,:,:,IZRHOX1),ZT3D(:,:,:,IZRHOX2),ZT3D(:,:,:,IZRHOY1), & + & ZT3D(:,:,:,IZRHOY2),ZT3D(:,:,:,IZRHOZ1),ZT3D(:,:,:,IZRHOZ2), & + & ZUNIT3D ) + + CALL MNH_REL_ZT3D(IZSRC,IZRHOX1,IZRHOX2,IZRHOY1,IZRHOY2,IZRHOZ1,IZRHOZ2) + +CONTAINS + + SUBROUTINE PPM_MET_D(HLBCX,HLBCY, KRR, KTCOUNT, & + & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & + & PTHT, PTKET, PRT, & + & PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME, & + & ZSRC, & + & ZRHOX1,ZRHOX2,ZRHOY1,ZRHOY2,ZRHOZ1,ZRHOZ2, & + & ZUNIT ) + + ! ###################################################################### ! !!**** *PPM_MET * @@ -56,13 +111,6 @@ 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, & -& 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 ! !* 0.1 Declarations of dummy arguments : @@ -99,14 +147,15 @@ 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 +!$acc declare present (ZSRC) ! ! 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)) :: 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)) :: ZUNIT3D +REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,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)) :: ZUNIT +!$acc declare present (ZRHOX1,ZRHOX2,ZRHOY1,ZRHOY2,ZRHOZ1,ZRHOZ2,ZUNIT) ! !------------------------------------------------------------------------------- ! @@ -124,19 +173,17 @@ IGRID = 1 ! ! Calculate the advection of the density RHODJ to pass to the algorithm ! -!$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) -CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT3D, PCRV, ZRHOX1, PTSTEP, ZRHOY1) -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 data pcopyin(PCRU,PCRV,PCRW,PRHODJ) +CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, PRHODJ, PTSTEP, ZRHOX1) +CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOX1, PTSTEP, ZRHOY1) +CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, ZRHOY1, PTSTEP, ZRHOZ1) +CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, PRHODJ, PTSTEP, ZRHOZ2) +CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOZ2, PTSTEP, ZRHOY2) +CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, ZRHOY2, PTSTEP, ZRHOX2) ! ! Potential temperature ! !$acc data pcopyin (PTHT) pcopy(PRTHS) -! create/mirror(ZSRC) CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, & ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & ZSRC, KTCOUNT, PCRU, PCRV, PCRW) @@ -164,13 +211,9 @@ IF (GTKEALLOC) THEN ! END IF ! -! -! ! Case with KRR moist variables ! -! acc wait(14) DO JRR=1,KRR - ! 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, & @@ -192,7 +235,8 @@ DO JRR=1,KRR END DO !$acc end data ! -! +END SUBROUTINE PPM_MET_D + END SUBROUTINE PPM_MET END MODULE MODI_PPM_MET