diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index 8b155db279a40bb634355448dc6e230aa8c3128c..2f6d61023d8985a9788129558d5545b4eb7b0233 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -502,6 +502,11 @@ 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 +! !* 1.PRELIMINARIES ! ------------- ! @@ -541,6 +546,13 @@ END IF !Save LIMA scalar variables sources ZRSVS(IIJB:IIJE,1:IKT,1:KSV)=PRSVS(IIJB:IIJE,1:IKT,1:KSV) ! +ZWORKT(:,:,1:KSV)=PSVT(:,:,:) +ZWORKS(:,:,1:KSV)=PRSVS(:,:,:) +ZWORKT(:,:,KSV+1:KSV+KRR)=PRT(:,:,:) +ZWORKS(:,:,KSV+1:KSV+KRR)=PRRS(:,:,:) +ZWORKSFSV(:,:)=0. +ZWORKWSV(:,:,:)=0. +ZWORKSFSV(:,1:KSV)=PSFSV(:,:) ! !---------------------------------------------------------------------------- ! @@ -991,33 +1003,37 @@ 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_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_SV ) THEN DO JSV = 1, KSV - CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:,:, JSV) ) + CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', ZWORKS(:,:, JSV) ) END DO END IF CALL TURB_VER(D,CST,CSTURB,TURBN,NEBN,TLES, & KRR,KRRL,KRRI,KGRADIENTS, & OOCEAN, ODEEPOC, OCOMPUTE_SRC, & - KSV,KSV_LGBEG,KSV_LGEND, & + KSV+KRR,KSV_LGBEG,KSV_LGEND, & ZEXPL, O2D, ONOMIXLG, OFLAT, & OCOUPLES,OBLOWSNOW,OFLYER, PRSNOW, & PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & PRHODJ,PTHVREF,PSFU,PSFV, & - PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV, & + PSFTH,PSFRV,ZWORKSFSV,PSFTH,PSFRV,ZWORKSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M, & - PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & + PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,ZWORKT, & PTKET,ZLM,PLENGTHM,PLENGTHH,ZLEPS,MFMOIST, & ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE, & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,PBL_DEPTH, & PSBL_DEPTH,ZLMO,PHGRAD,PZS, & - PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS, & - PDP,PTP,PSIGS,PWTH,PWRC,PWSV, & + PRUS,PRVS,PRWS,PRTHLS,PRRS,ZWORKS, & + PDP,PTP,PSIGS,PWTH,PWRC,ZWORKWSV, & PSSTFL, PSSTFL_C, PSSRFL_C,PSSUFL_C,PSSVFL_C, & PSSUFL,PSSVFL ) @@ -1054,11 +1070,15 @@ 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_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_SV ) THEN DO JSV = 1, KSV - CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', PRSVS(:,:, JSV) ) + CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'VTURB', ZWORKS(:,:, JSV) ) END DO END IF ! @@ -1089,15 +1109,20 @@ 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_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_SV ) THEN DO JSV = 1, KSV - CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:,:, JSV) ) + CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', ZWORKS(:,:, JSV) ) 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,& PTSTEP,HLBCX,HLBCY, OFLAT,O2D, ONOMIXLG, & OOCEAN,OCOMPUTE_SRC,OBLOWSNOW,PRSNOW, & TPFILE, KHALO, & @@ -1105,14 +1130,14 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN PDIRCOSXW,PDIRCOSYW,PDIRCOSZW, & PCOSSLOPE,PSINSLOPE, & PRHODJ,PTHVREF, & - PSFTH,PSFRV,PSFSV, & + PSFTH,PSFRV,ZWORKSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M, & - PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & + PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,ZWORKT, & PTKET,ZLM,ZLEPS, & ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE, & PDP,PTP,PSIGS, & ZTRH, & - PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS ) + PRUS,PRVS,PRWS,PRTHLS,PRRS,ZWORKS ) ! ! IF (HCLOUD == 'LIMA') THEN ! IF (KSV_LIMA_NR.GT.0) PRSVS(:,:,KSV_LIMA_NR) = ZRSVS(:,:,KSV_LIMA_NR) @@ -1147,11 +1172,15 @@ 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_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_SV ) THEN DO JSV = 1, KSV - CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:,:, JSV) ) + CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', ZWORKS(:,:, JSV) ) END DO END IF END IF @@ -1314,8 +1343,15 @@ IF ( KRRL >= 1 ) THEN * PRRS(IIJB:IIJE,1:IKT,2) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) END IF -END IF - +END IF! +! +PRSVS(:,:,:)=ZWORKS(:,:,1:KSV) +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) +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) !----------------------------------------------------------------------------