diff --git a/src/PHYEX/turb/turb.f90 b/src/PHYEX/turb/turb.f90 index e333635ea5d10e4a6c6af8485e19e52de5f1681e..3cfeaf82b5bedeecfb16cafff4f7398c748f272d 100644 --- a/src/PHYEX/turb/turb.f90 +++ b/src/PHYEX/turb/turb.f90 @@ -502,10 +502,10 @@ REAL :: ZALPHA ! work coefficient : REAL :: ZTIME1, ZTIME2 TYPE(TFIELDMETADATA) :: TZFIELD ! -REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKT -REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKS -REAL, DIMENSION(D%NIJT, KSV+KRR) :: ZWORKSFSV -REAL, DIMENSION(D%NIJT,D%NKT,KSV+KRR) :: ZWORKWSV +REAL, DIMENSION(D%NIJT,D%NKT,MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKT, ZWORKS +REAL, DIMENSION(D%NIJT, MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKSFSV +REAL, DIMENSION(D%NIJT,D%NKT,MERGE(KSV+KRR,KSV,TURBN%LTURB_PRECIP)) :: ZWORKWSV +INTEGER :: ISV ! !* 1.PRELIMINARIES ! ------------- @@ -546,10 +546,12 @@ END IF !Save LIMA scalar variables sources ZRSVS(:,:,1:KSV)=PRSVS(:,:,1:KSV) ! +ISV=KSV +IF (TURBN%LTURB_PRECIP) ISV=KSV+KRR ZWORKT(:,:,1:KSV)=PSVT(:,:,:) ZWORKS(:,:,1:KSV)=PRSVS(:,:,:) -ZWORKT(:,:,KSV+1:KSV+KRR)=PRT(:,:,:) -ZWORKS(:,:,KSV+1:KSV+KRR)=PRRS(:,:,:) +IF (TURBN%LTURB_PRECIP) ZWORKT(:,:,KSV+1:KSV+KRR)=PRT(:,:,:) +IF (TURBN%LTURB_PRECIP) ZWORKS(:,:,KSV+1:KSV+KRR)=PRRS(:,:,:) ZWORKSFSV(:,:)=0. ZWORKWSV(:,:,:)=0. ZWORKSFSV(:,1:KSV)=PSFSV(:,:) @@ -1003,11 +1005,11 @@ IF( BUCONF%LBUDGET_RV ) THEN END IF IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'VTURB', PRRS (:,:, 2) ) -IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', ZWORKS (:,:, KSV + 3) ) +IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', PRRS (:,:, 3) ) IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'VTURB', PRRS (:,:, 4) ) -IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', ZWORKS (:,:, KSV + 5) ) -IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', ZWORKS (:,:, KSV + 6) ) -IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', ZWORKS (:,:, KSV + 7) ) +IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', PRRS (:,:, 5) ) +IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', PRRS (:,:, 6) ) +IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', PRRS (:,:, 7) ) IF( BUCONF%LBUDGET_SV ) THEN DO JSV = 1, KSV @@ -1018,7 +1020,7 @@ END IF CALL TURB_VER(D,CST,CSTURB,TURBN,NEBN,TLES, & KRR,KRRL,KRRI,KGRADIENTS, & OOCEAN, ODEEPOC, OCOMPUTE_SRC, & - KSV+KRR,KSV_LGBEG,KSV_LGEND, & + ISV,KSV_LGBEG,KSV_LGEND, & ZEXPL, O2D, ONOMIXLG, OFLAT, & OCOUPLES,OBLOWSNOW,OFLYER, PRSNOW, & PTSTEP,TPFILE, & @@ -1043,6 +1045,12 @@ CALL TURB_VER(D,CST,CSTURB,TURBN,NEBN,TLES, & ! IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) ! IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH) !END IF +IF (TURBN%LTURB_PRECIP) THEN + IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3) + IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5) + IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6) + IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7) +END IF IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'VTURB', PRUS(:,:) ) IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'VTURB', PRVS(:,:) ) @@ -1070,11 +1078,11 @@ IF( BUCONF%LBUDGET_RV ) THEN END IF IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'VTURB', PRRS(:,:, 2) ) -IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', ZWORKS(:,:, KSV + 3) ) +IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'VTURB', PRRS(:,:, 3) ) IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'VTURB', PRRS(:,:, 4) ) -IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', ZWORKS(:,:, KSV + 5) ) -IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', ZWORKS(:,:, KSV + 6) ) -IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', ZWORKS(:,:, KSV + 7) ) +IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'VTURB', PRRS(:,:, 5) ) +IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'VTURB', PRRS(:,:, 6) ) +IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'VTURB', PRRS(:,:, 7) ) IF( BUCONF%LBUDGET_SV ) THEN DO JSV = 1, KSV @@ -1109,11 +1117,11 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN END IF IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:,:, 2) ) - IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', ZWORKS(:,:, KSV+3) ) + IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', PRRS(:,:, 3) ) IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:,:, 4) ) - IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', ZWORKS(:,:, KSV+5) ) - IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', ZWORKS(:,:, KSV+6) ) - IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', ZWORKS(:,:, KSV+7) ) + IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', PRRS(:,:, 5) ) + IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', PRRS(:,:, 6) ) + IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', PRRS(:,:, 7) ) IF( BUCONF%LBUDGET_SV ) THEN DO JSV = 1, KSV @@ -1121,8 +1129,7 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN END DO END IF CALL TURB_HOR_SPLT(D,CST,CSTURB, TURBN, NEBN, TLES, & - KSPLIT, KRR, KRRL, KRRI, KSV,KSV_LGBEG,KSV_LGEND, & - KSPLIT, KRR, KRRL, KRRI, KSV+KRR,KSV_LGBEG,KSV_LGEND,& + KSPLIT, KRR, KRRL, KRRI, ISV,KSV_LGBEG,KSV_LGEND, & PTSTEP,HLBCX,HLBCY, OFLAT,O2D, ONOMIXLG, & OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & TPFILE, KHALO, & @@ -1145,6 +1152,13 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN ! IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) ! IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH) ! END IF + ! + IF (TURBN%LTURB_PRECIP) THEN + IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3) + IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5) + IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6) + IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7) + END IF ! IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'HTURB', PRUS(:,:) ) IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'HTURB', PRVS(:,:) ) @@ -1172,11 +1186,11 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN END IF IF( BUCONF%LBUDGET_RC ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'HTURB', PRRS(:,:, 2) ) - IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', ZWORKS(:,:, KSV+3) ) + IF( BUCONF%LBUDGET_RR ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'HTURB', PRRS(:,:, 3) ) IF( BUCONF%LBUDGET_RI ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'HTURB', PRRS(:,:, 4) ) - IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', ZWORKS(:,:, KSV+5) ) - IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', ZWORKS(:,:, KSV+6) ) - IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', ZWORKS(:,:, KSV+7) ) + IF( BUCONF%LBUDGET_RS ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'HTURB', PRRS(:,:, 5) ) + IF( BUCONF%LBUDGET_RG ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'HTURB', PRRS(:,:, 6) ) + IF( BUCONF%LBUDGET_RH ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'HTURB', PRRS(:,:, 7) ) IF( BUCONF%LBUDGET_SV ) THEN DO JSV = 1, KSV @@ -1301,6 +1315,8 @@ IF ( TURBN%LTURB_DIAG .AND. TPFILE%LOPENED ) THEN END IF END IF ! +PRSVS(:,:,:) = ZWORKS(:,:,1:KSV) +IF (OFLYER) PWSV(:,:,:)=ZWORKWSV(:,:,1:KSV) !* stores value of conservative variables & wind before turbulence tendency (AROME only) IF(PRESENT(PDRUS_TURB)) THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) @@ -1309,7 +1325,7 @@ IF(PRESENT(PDRUS_TURB)) THEN PDRTHLS_TURB(:,:) = PRTHLS(:,:) - PDRTHLS_TURB(:,:) PDRRTS_TURB(:,:) = PRRS(:,:,1) - PDRRTS_TURB(:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) - !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) PDRSVS_TURB(:,:,:) = PRSVS(:,:,:) - PDRSVS_TURB(:,:,:) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT,JSV=1:KSV) END IF @@ -1345,14 +1361,6 @@ IF ( KRRL >= 1 ) THEN END IF END IF! ! -PRSVS(:,:,:)=ZWORKS(:,:,1:KSV) -IF (TURBN%LTURB_PRECIP) THEN - IF (KRR.GE.3) PRRS(:,:,3)=ZWORKS(:,:,KSV+3) - IF (KRR.GE.5) PRRS(:,:,5)=ZWORKS(:,:,KSV+5) - IF (KRR.GE.6) PRRS(:,:,6)=ZWORKS(:,:,KSV+6) - IF (KRR.GE.7) PRRS(:,:,7)=ZWORKS(:,:,KSV+7) -END IF - IF (OFLYER) PWSV(:,:,:)=ZWORKWSV(:,:,1:KSV) ! ! Remove non-physical negative values (unnecessary in a perfect world) + corresponding budgets CALL SOURCES_NEG_CORRECT_PHY(D,KSV,HCLOUD,HELEC,'NETUR',KRR,PTSTEP,PPABST,PTHLT,PRT,PRTHLS,PRRS,PRSVS)