diff --git a/src/common/micro/modd_fields_address.F90 b/src/common/micro/modd_fields_address.F90 index 322b9957ea830dde6c34b2108f5a385d036deb16..45786b5a345ddb2ad6ccc02514a1d9cc1fde73dd 100644 --- a/src/common/micro/modd_fields_address.F90 +++ b/src/common/micro/modd_fields_address.F90 @@ -44,4 +44,50 @@ INTEGER, PARAMETER :: & ! pointer of fields in microphysic species arrays : & IRG=6, & ! Graupel & IRH=7 ! Hail ! +! Pointers for tendency arrays +! Tendencies are computed either directly as a tendency or as a mixing ratio change that is transformed, afterwards, in a tendency +! The second type is suffixed by _MR +! Some final tendencies can have two contributions (one from a tendency, one from a mixing ratio change). +! In the following list, order matters: +! - first are the normal tendencies directly computed as tendencies +! - second are the tendencies computed only from a mixing ratio change +! - third are the indexes used to designate the mising ratio change part of double-contribution tendencies +INTEGER, PARAMETER :: IBUNUM=47, & ! Total number + IBUNUM_MR=3, & ! Number of tendencies computed only from a mixing ratio change + IBUNUM_EXTRA=2 ! Extra terms +INTEGER, PARAMETER :: & + !normal tendencies directly computed as tendencies + & IRCHONI=1, & ! Homogeneous nucleation + & IRVDEPS=2, & ! Deposition on r_s, + & IRIAGGS=3, & ! Aggregation on r_s + & IRIAUTS=4, & ! Autoconversion of r_i for r_s production + & IRVDEPG=5, & ! Deposition on r_g + & IRCAUTR=6, & ! Autoconversion of r_c for r_r production + & IRCACCR=7, & ! Accretion of r_c for r_r production + & IRREVAV=8, & ! Evaporation of r_r + & IRCBERI=9, & ! Bergeron-Findeisen effect + & IRHMLTR=10, & ! Melting of the hailstones + & IRSMLTG=11, & ! Conversion-Melting of the aggregates + & IRCMLTSR=12, & ! Cloud droplet collection onto aggregates by positive temperature + & IRRACCSS=13, IRRACCSG=14, IRSACCRG=15, & ! Rain accretion onto the aggregates + & IRCRIMSS=16, IRCRIMSG=17, IRSRIMCG=18, & ! Cloud droplet riming of the aggregates + & IRICFRRG=19, IRRCFRIG=20, IRICFRR=21, & ! Rain contact freezing + & IRCWETG=22, IRIWETG=23, IRRWETG=24, IRSWETG=25, & ! Graupel wet growth + & IRCDRYG=26, IRIDRYG=27, IRRDRYG=28, IRSDRYG=29, & ! Graupel dry growth + & IRWETGH=30, & ! Conversion of graupel into hail + & IRGMLTR=31, & ! Melting of the graupel + & IRCWETH=32, IRIWETH=33, IRSWETH=34, IRGWETH=35, IRRWETH=36, & ! Dry growth of hailstone + & IRCDRYH=37, IRIDRYH=38, IRSDRYH=39, IRRDRYH=40, IRGDRYH=41, & ! Wet growth of hailstone + & IRDRYHG=42, & + + !tendencies computed only with a mixing ratio change + & IRVHENI_MR=43, & ! heterogeneous nucleation mixing ratio change + & IRRHONG_MR=44, & ! Spontaneous freezing mixing ratio change + & IRIMLTC_MR=45, & ! Cloud ice melting mixing ratio change + + !Extra term computed as a mixing ratio change, to be added to other term + & IRSRIMCG_MR=46,& ! Cloud droplet riming of the aggregates + & IRWETGH_MR=47 ! Conversion of graupel into hail +INTEGER, PARAMETER, DIMENSION(IBUNUM-IBUNUM_EXTRA+1:IBUNUM) :: IBUEXTRAIND=(/18, 30/) +! END MODULE MODD_FIELDS_ADDRESS diff --git a/src/common/micro/mode_ice4_budgets.F90 b/src/common/micro/mode_ice4_budgets.F90 new file mode 100644 index 0000000000000000000000000000000000000000..851e9e7d54ab5bf3c70d3c06db5fea23743e1e54 --- /dev/null +++ b/src/common/micro/mode_ice4_budgets.F90 @@ -0,0 +1,434 @@ +!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ######spl +MODULE MODE_ICE4_BUDGETS +IMPLICIT NONE +CONTAINS +SUBROUTINE ICE4_BUDGETS(D, PARAMI, BUCONF, KSIZE, KPROMA, PTSTEP, KRR, K1, K2, & + PLVFACT, PLSFACT, PRHODJ, & + PRVHENI, PBU_PACK, & + TBUDGETS, KBUDGETS) +! +!* 0. DECLARATIONS +! ------------ +! +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK + +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RI, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH +USE MODD_PARAM_ICE, ONLY: PARAM_ICE_t +! +USE MODD_FIELDS_ADDRESS ! index number for prognostic (theta and mixing ratios) and budgets +! +USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY +! +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(PARAM_ICE_t), INTENT(IN) :: PARAMI +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +INTEGER, INTENT(IN) :: KSIZE +INTEGER, INTENT(IN) :: KPROMA +REAL, INTENT(IN) :: PTSTEP +INTEGER, INTENT(IN) :: KRR +INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K1 +INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K2 +REAL, DIMENSION(D%NIJT, D%NKT), INTENT(IN) :: PLVFACT +REAL, DIMENSION(D%NIJT, D%NKT), INTENT(IN) :: PLSFACT +REAL, DIMENSION(D%NIJT, D%NKT), INTENT(IN) :: PRHODJ +REAL, DIMENSION(D%NIJT, D%NKT), INTENT(IN) :: PRVHENI +REAL, DIMENSION(KSIZE, IBUNUM-IBUNUM_EXTRA), INTENT(IN) :: PBU_PACK +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! +! +!* 0.2 Declarations of local variables : +! +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +INTEGER :: JIJ, JK, JL +INTEGER :: IKTB, IKTE, IKB, IIJB, IIJE +REAL, DIMENSION(D%NIJT, D%NKT) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 ! work array +REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_DIFF +REAL :: ZINV_TSTEP +! +!------------------------------------------------------------------------------- +IF (LHOOK) CALL DR_HOOK('ICE4_BUDGETS', 0, ZHOOK_HANDLE) +! +IKTB=D%NKTB +IKTE=D%NKTE +IKB=D%NKB +IIJB=D%NIJB +IIJE=D%NIJE +ZINV_TSTEP=1./PTSTEP +! +IF (BUCONF%LBUDGET_TH) THEN + ZZ_DIFF(:,:)=0. + DO JK = IKTB, IKTE + DO JIJ = IIJB, IIJE + ZZ_DIFF(JIJ, JK) = PLSFACT(JIJ, JK) - PLVFACT(JIJ, JK) + ENDDO + ENDDO +END IF + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVHENI_MR) * ZINV_TSTEP +END DO +DO JK = IKTB, IKTE + DO JIJ = IIJB, IIJE + ZW1(JIJ,JK)=ZW1(JIJ,JK)+PRVHENI(JIJ,JK) + ENDDO +ENDDO +#ifdef REPRO48 +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HENU', ZW1(:, :) *PRHODJ(:, :)) +#else +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIN', ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIN', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIN', ZW1(:, :) *PRHODJ(:, :)) +#endif +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCHONI) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HON', ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HON', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HON', ZW1(:, :) *PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRRHONG_MR) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'SFR', ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'SFR', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'SFR', ZW1(:, :) *PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVDEPS) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS', ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS', ZW1(:, :) *PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIAGGS) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS', -ZW1(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS', ZW1(:, :)*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIAUTS) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AUTS', -ZW1(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AUTS', ZW1(:, :)*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRVDEPG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG', ZW1(:, :)*PLSFACT(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG', ZW1(:, :) *PRHODJ(:, :)) + +IF(PARAMI%LWARM) THEN + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCAUTR) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO', -ZW1(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO', ZW1(:, :)*PRHODJ(:, :)) + + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCACCR) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR', -ZW1(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR', ZW1(:, :)*PRHODJ(:, :)) + + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRREVAV) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA', -ZW1(:, :)*PLVFACT(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA', ZW1(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA', -ZW1(:, :) *PRHODJ(:, :)) +ENDIF + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCRIMSS) * ZINV_TSTEP +END DO +ZW2(:,:) = 0. +DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRCRIMSG) * ZINV_TSTEP +END DO +ZW3(:,:) = 0. +DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRSRIMCG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRRACCSS) * ZINV_TSTEP +END DO +ZW2(:,:) = 0. +DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRACCSG) * ZINV_TSTEP +END DO +ZW3(:,:) = 0. +DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRSACCRG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRSMLTG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL', -ZW1(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL', ZW1(:, :)*PRHODJ(:, :)) +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCMLTSR) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CMEL', -ZW1(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CMEL', ZW1(:, :)*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRICFRRG) * ZINV_TSTEP +END DO +ZW2(:,:) = 0. +DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRCFRIG) * ZINV_TSTEP +END DO +ZW3(:,:) = 0. +DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRICFRR) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :)+ZW2(:, :))*PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCWETG) * ZINV_TSTEP +END DO +ZW2(:,:) = 0. +DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRWETG) * ZINV_TSTEP +END DO +ZW3(:,:) = 0. +DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIWETG) * ZINV_TSTEP +END DO +ZW4(:,:) = 0. +DO JL=1, KSIZE + ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSWETG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG', -ZW2(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG', -ZW3(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG', -ZW4(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) & + & *PRHODJ(:, :)) + +IF(KRR==7) THEN + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRWETGH) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GHCV', -ZW1(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'GHCV', ZW1(:, :)*PRHODJ(:, :)) +END IF + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCDRYG) * ZINV_TSTEP +END DO +ZW2(:,:) = 0. +DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRDRYG) * ZINV_TSTEP +END DO +ZW3(:,:) = 0. +DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIDRYG) * ZINV_TSTEP +END DO +ZW4(:,:) = 0. +DO JL=1, KSIZE + ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSDRYG) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG', -ZW2(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG', -ZW3(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG', -ZW4(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) & + & *PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRGMLTR) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT', ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ZW1(:, :) *PRHODJ(:, :)) + +IF(KRR==7) THEN + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCWETH) * ZINV_TSTEP + END DO + ZW2(:,:) = 0. + DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRWETH) * ZINV_TSTEP + END DO + ZW3(:,:) = 0. + DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIWETH) * ZINV_TSTEP + END DO + ZW4(:,:) = 0. + DO JL=1, KSIZE + ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSWETH) * ZINV_TSTEP + END DO + ZW5(:,:) = 0. + DO JL=1, KSIZE + ZW5(K1(JL), K2(JL)) = PBU_PACK(JL, IRGWETH) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :) *PRHODJ(:, :)) +#ifdef REPRO48 +#else + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :) *PRHODJ(:, :)) +#endif + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ & + &ZW4(:, :)+ZW5(:, : )) *PRHODJ(:, :)) + +#if defined(REPRO48) || defined(REPRO55) + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRGWETH) * ZINV_TSTEP + END DO +#endif +#ifdef REPRO48 + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :)-ZW1(:, :))*PRHODJ(:, :)) +#endif +#ifdef REPRO55 + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW1(:, :)*PRHODJ(:, :)) +#endif +#if defined(REPRO48) || defined(REPRO55) + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV', ZW1(:, :)*PRHODJ(:, :)) +#endif + + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCDRYH) * ZINV_TSTEP + END DO + ZW2(:,:) = 0. + DO JL=1, KSIZE + ZW2(K1(JL), K2(JL)) = PBU_PACK(JL, IRRDRYH) * ZINV_TSTEP + END DO + ZW3(:,:) = 0. + DO JL=1, KSIZE + ZW3(K1(JL), K2(JL)) = PBU_PACK(JL, IRIDRYH) * ZINV_TSTEP + END DO + ZW4(:,:) = 0. + DO JL=1, KSIZE + ZW4(K1(JL), K2(JL)) = PBU_PACK(JL, IRSDRYH) * ZINV_TSTEP + END DO + ZW5(:,:) = 0. + DO JL=1, KSIZE + ZW5(K1(JL), K2(JL)) = PBU_PACK(JL, IRGDRYH) * ZINV_TSTEP + END DO + ZW6(:,:) = 0. +#if defined(REPRO48) || defined(REPRO55) + !ZW6 must be removed when REPRO* will be suppressed + DO JL=1, KSIZE + ZW6(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP + END DO +#endif + IF (BUCONF%LBUDGET_TH) & + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :)+ZW6(:, :)) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ & + &ZW4(:, :)+ZW5(:, :)-ZW6(:, :)) & + & *PRHODJ(:, :)) + +#if defined(REPRO48) || defined(REPRO55) +#else + !When REPRO48 will be suppressed, ZW6 must be removed + ZW(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRDRYHG) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW1(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV', ZW1(:, :)*PRHODJ(:, :)) +#endif + + ZW1(:,:) = 0. + DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRHMLTR) * ZINV_TSTEP + END DO + IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT', ZW1(:, :) *PRHODJ(:, :)) + IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ZW1(:, :) *PRHODJ(:, :)) +ENDIF + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRIMLTC_MR) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT', -ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT', ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT', -ZW1(:, :) *PRHODJ(:, :)) + +ZW1(:,:) = 0. +DO JL=1, KSIZE + ZW1(K1(JL), K2(JL)) = PBU_PACK(JL, IRCBERI) * ZINV_TSTEP +END DO +IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI', ZW1(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', -ZW1(:, :) *PRHODJ(:, :)) +IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI', ZW1(:, :) *PRHODJ(:, :)) +! +IF (LHOOK) CALL DR_HOOK('ICE4_BUDGETS', 1, ZHOOK_HANDLE) +! +END SUBROUTINE ICE4_BUDGETS +! +END MODULE MODE_ICE4_BUDGETS diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90 index fd722114c661d755f28eb062e2075deac77b44c0..6be883b1972b34e168459523d40532c110cd6193 100644 --- a/src/common/micro/mode_ice4_tendencies.F90 +++ b/src/common/micro/mode_ice4_tendencies.F90 @@ -13,15 +13,7 @@ SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, BUCONF, KPROMA, KSIZE, & &PPRES, PCF, PSIGMA_RC, & &PCIT, & &PT, PVART, & - &PRVHENI_MR, PRRHONG_MR, PRIMLTC_MR, PRSRIMCG_MR, & - &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, PRCMLTSR, & - &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, & - &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, & - &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & - &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, & - &PRCBERI, & + &PBU_INST, & &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & &PA, PB, & &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & @@ -54,16 +46,7 @@ USE MODD_PARAM_ICE, ONLY: PARAM_ICE_t USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t ! -USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress - & ITH, & ! Potential temperature - & IRV, & ! Water vapor - & IRC, & ! Cloud water - & IRR, & ! Rain water - & IRI, & ! Pristine ice - & IRS, & ! Snow/aggregate - & IRG, & ! Graupel - & IRH ! Hail -! +USE MODD_FIELDS_ADDRESS USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD @@ -108,53 +91,7 @@ REAL, DIMENSION(KPROMA), INTENT(IN) :: PSIGMA_RC REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PCIT REAL, DIMENSION(KPROMA), INTENT(IN) :: PT REAL, DIMENSION(KPROMA,0:KRR), INTENT(IN) :: PVART -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRVHENI_MR -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRHONG_MR -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRIMLTC_MR -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSRIMCG_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCHONI -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRVDEPS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIAGGS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIAUTS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRVDEPG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCAUTR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCACCR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRREVAV -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCRIMSS -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCRIMSG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSRIMCG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRACCSS -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRACCSG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSACCRG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSMLTG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCMLTSR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRICFRRG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRCFRIG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRICFRR -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCWETG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRIWETG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRWETG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSWETG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCDRYG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRIDRYG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRDRYG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSDRYG -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRWETGH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRWETGH_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCWETH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRIWETH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSWETH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRGWETH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRWETH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRCDRYH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRIDRYH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRSDRYH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRRDRYH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRGDRYH -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRDRYHG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCBERI +REAL, DIMENSION(KPROMA, IBUNUM),INTENT(INOUT):: PBU_INST REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRS_TEND REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRG_TEND REAL, DIMENSION(KPROMA, 10), INTENT(INOUT) :: PRH_TEND @@ -198,10 +135,10 @@ DO JV=0,KRR ENDDO ! IF(ODSOFT) THEN - PRVHENI_MR(:)=0. - PRRHONG_MR(:)=0. - PRIMLTC_MR(:)=0. - PRSRIMCG_MR(:)=0. + PBU_INST(:, IRVHENI_MR)=0. + PBU_INST(:, IRRHONG_MR)=0. + PBU_INST(:, IRIMLTC_MR)=0. + PBU_INST(:, IRSRIMCG_MR)=0. ELSE ! !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES @@ -209,12 +146,12 @@ ELSE CALL ICE4_NUCLEATION(CST, PARAMI, ICEP, ICED, KSIZE, LDCOMPUTE(:), & ZVART(:,ITH), PPRES(:), PRHODREF(:), PEXN(:), PLSFACT(:), ZT(:), & ZVART(:,IRV), & - PCIT(:), PRVHENI_MR(:)) + PCIT(:), PBU_INST(:, IRVHENI_MR)) DO JL=1, KSIZE - ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*PLSFACT(JL) + ZVART(JL,ITH)=ZVART(JL,ITH) + PBU_INST(JL, IRVHENI_MR)*PLSFACT(JL) ZT(JL) = ZVART(JL,ITH) * PEXN(JL) - ZVART(JL,IRV)=ZVART(JL,IRV) - PRVHENI_MR(JL) - ZVART(JL,IRI)=ZVART(JL,IRI) + PRVHENI_MR(JL) + ZVART(JL,IRV)=ZVART(JL,IRV) - PBU_INST(JL, IRVHENI_MR) + ZVART(JL,IRI)=ZVART(JL,IRI) + PBU_INST(JL, IRVHENI_MR) ENDDO ! !* 3.3 compute the spontaneous freezing source: RRHONG @@ -223,12 +160,12 @@ ELSE &PEXN, PLVFACT, PLSFACT, & &ZT, ZVART(:,IRR), & &ZVART(:,ITH), & - &PRRHONG_MR) + &PBU_INST(:, IRRHONG_MR)) DO JL=1, KSIZE - ZVART(JL,ITH) = ZVART(JL,ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG)) + ZVART(JL,ITH) = ZVART(JL,ITH) + PBU_INST(JL, IRRHONG_MR)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG)) ZT(JL) = ZVART(JL,ITH) * PEXN(JL) - ZVART(JL,IRR) = ZVART(JL,IRR) - PRRHONG_MR(JL) - ZVART(JL,IRG) = ZVART(JL,IRG) + PRRHONG_MR(JL) + ZVART(JL,IRR) = ZVART(JL,IRR) - PBU_INST(JL, IRRHONG_MR) + ZVART(JL,IRG) = ZVART(JL,IRG) + PBU_INST(JL, IRRHONG_MR) ENDDO ! !* 7.1 cloud ice melting @@ -237,12 +174,12 @@ ELSE &PEXN, PLVFACT, PLSFACT, & &ZT, & &ZVART(:,ITH), ZVART(:,IRI), & - &PRIMLTC_MR) + &PBU_INST(:, IRIMLTC_MR)) DO JL=1, KSIZE - ZVART(JL,ITH) = ZVART(JL,ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC)) + ZVART(JL,ITH) = ZVART(JL,ITH) - PBU_INST(JL, IRIMLTC_MR)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC)) ZT(JL) = ZVART(JL,ITH) * PEXN(JL) - ZVART(JL,IRC) = ZVART(JL,IRC) + PRIMLTC_MR(JL) - ZVART(JL,IRI) = ZVART(JL,IRI) - PRIMLTC_MR(JL) + ZVART(JL,IRC) = ZVART(JL,IRC) + PBU_INST(JL, IRIMLTC_MR) + ZVART(JL,IRI) = ZVART(JL,IRI) - PBU_INST(JL, IRIMLTC_MR) ENDDO ! ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) @@ -259,33 +196,33 @@ ELSE &PRHODREF, & &ZLBDAS, & &ZT, ZVART(:,IRC), ZVART(:,IRS), & - &PRSRIMCG_MR) + &PBU_INST(:, IRSRIMCG_MR)) DO JL=1, KSIZE - ZVART(JL,IRS) = ZVART(JL,IRS) - PRSRIMCG_MR(JL) - ZVART(JL,IRG) = ZVART(JL,IRG) + PRSRIMCG_MR(JL) + ZVART(JL,IRS) = ZVART(JL,IRS) - PBU_INST(JL, IRSRIMCG_MR) + ZVART(JL,IRG) = ZVART(JL,IRG) + PBU_INST(JL, IRSRIMCG_MR) ENDDO ELSE - PRSRIMCG_MR(:) = 0. + PBU_INST(:, IRSRIMCG_MR) = 0. ENDIF DO JL=1, KSIZE - PB(JL, ITH)=PB(JL, ITH) + PRVHENI_MR(JL)*PLSFACT(JL) - PB(JL, ITH)=PB(JL, ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PB(JL, ITH)=PB(JL, ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) + PB(JL, ITH)=PB(JL, ITH) + PBU_INST(JL, IRVHENI_MR)*PLSFACT(JL) + PB(JL, ITH)=PB(JL, ITH) + PBU_INST(JL, IRRHONG_MR)*(PLSFACT(JL)-PLVFACT(JL)) + PB(JL, ITH)=PB(JL, ITH) - PBU_INST(JL, IRIMLTC_MR)*(PLSFACT(JL)-PLVFACT(JL)) - PB(JL, IRV)=PB(JL, IRV) - PRVHENI_MR(JL) + PB(JL, IRV)=PB(JL, IRV) - PBU_INST(JL, IRVHENI_MR) - PB(JL, IRC)=PB(JL, IRC) + PRIMLTC_MR(JL) + PB(JL, IRC)=PB(JL, IRC) + PBU_INST(JL, IRIMLTC_MR) - PB(JL, IRR)=PB(JL, IRR) - PRRHONG_MR(JL) + PB(JL, IRR)=PB(JL, IRR) - PBU_INST(JL, IRRHONG_MR) - PB(JL, IRI)=PB(JL, IRI) + PRVHENI_MR(JL) - PB(JL, IRI)=PB(JL, IRI) - PRIMLTC_MR(JL) + PB(JL, IRI)=PB(JL, IRI) + PBU_INST(JL, IRVHENI_MR) + PB(JL, IRI)=PB(JL, IRI) - PBU_INST(JL, IRIMLTC_MR) - PB(JL, IRS)=PB(JL, IRS) - PRSRIMCG_MR(JL) + PB(JL, IRS)=PB(JL, IRS) - PBU_INST(JL, IRSRIMCG_MR) - PB(JL, IRG)=PB(JL, IRG) + PRRHONG_MR(JL) - PB(JL, IRG)=PB(JL, IRG) + PRSRIMCG_MR(JL) + PB(JL, IRG)=PB(JL, IRG) + PBU_INST(JL, IRRHONG_MR) + PB(JL, IRG)=PB(JL, IRG) + PBU_INST(JL, IRSRIMCG_MR) ENDDO ! !* Derived fields @@ -385,7 +322,7 @@ CALL ICE4_SLOW(CST, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, PRHODREF, ZT, &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), & &ZLBDAS, ZLBDAG, & &ZAI, ZCJ, PHLI_HCF, PHLI_HRI, & - &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG) + &PBU_INST(:, IRCHONI), PBU_INST(:, IRVDEPS), PBU_INST(:, IRIAGGS), PBU_INST(:, IRIAUTS), PBU_INST(:, IRVDEPG)) ! !------------------------------------------------------------------------------- ! @@ -403,11 +340,11 @@ IF(PARAMI%LWARM) THEN ! Check if the formation of the raindrops by the slow &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & &PCF, ZRAINFR, & &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), & - &PRCAUTR, PRCACCR, PRREVAV) + &PBU_INST(:, IRCAUTR), PBU_INST(:, IRCACCR), PBU_INST(:, IRREVAV)) ELSE - PRCAUTR(:)=0. - PRCACCR(:)=0. - PRREVAV(:)=0. + PBU_INST(:, IRCAUTR)=0. + PBU_INST(:, IRCACCR)=0. + PBU_INST(:, IRREVAV)=0. END IF ! !------------------------------------------------------------------------------- @@ -421,10 +358,10 @@ CALL ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, & &ZDV, ZKA, ZCJ, & &ZLBDAR, ZLBDAS, & &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRS), & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & + &PBU_INST(:, IRIAGGS), & + &PBU_INST(:, IRCRIMSS), PBU_INST(:, IRCRIMSG), PBU_INST(:, IRSRIMCG), & + &PBU_INST(:, IRRACCSS), PBU_INST(:, IRRACCSG), PBU_INST(:, IRSACCRG), PBU_INST(:, IRSMLTG), & + &PBU_INST(:, IRCMLTSR), & &PRS_TEND) ! !------------------------------------------------------------------------------- @@ -434,9 +371,9 @@ CALL ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, & ! ------------------------------------------------------ ! DO JL=1, KSIZE - ZRGSI(JL) = PRVDEPG(JL) + PRSMLTG(JL) + PRRACCSG(JL) + & - & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL) - ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL) + ZRGSI(JL) = PBU_INST(JL, IRVDEPG) + PBU_INST(JL, IRSMLTG) + PBU_INST(JL, IRRACCSG) + & + & PBU_INST(JL, IRSACCRG) + PBU_INST(JL, IRCRIMSG) + PBU_INST(JL, IRSRIMCG) + ZRGSI_MR(JL) = PBU_INST(JL, IRRHONG_MR) + PBU_INST(JL, IRSRIMCG_MR) ENDDO CALL ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & @@ -445,8 +382,10 @@ CALL ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, KRR &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), & &ZRGSI, ZRGSI_MR(:), & &LLWETG, & - &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, & - &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, & + &PBU_INST(:, IRICFRRG), PBU_INST(:, IRRCFRIG), PBU_INST(:, IRICFRR), PBU_INST(:, IRCWETG), & + &PBU_INST(:, IRIWETG), PBU_INST(:, IRRWETG), PBU_INST(:, IRSWETG), & + &PBU_INST(:, IRCDRYG), PBU_INST(:, IRIDRYG), PBU_INST(:, IRRDRYG), PBU_INST(:, IRSDRYG), & + &PBU_INST(:, IRWETGH), PBU_INST(:, IRWETGH_MR), PBU_INST(:, IRGMLTR), & &PRG_TEND) ! !------------------------------------------------------------------------------- @@ -461,22 +400,23 @@ IF (KRR==7) THEN &ZDV, ZKA, ZCJ, & &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), ZVART(:,IRH), & - &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & - &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, & + &PBU_INST(:, IRCWETH), PBU_INST(:, IRIWETH), PBU_INST(:, IRSWETH), PBU_INST(:, IRGWETH), PBU_INST(:, IRRWETH), & + &PBU_INST(:, IRCDRYH), PBU_INST(:, IRIDRYH), PBU_INST(:, IRSDRYH), PBU_INST(:, IRRDRYH), & + &PBU_INST(:, IRGDRYH), PBU_INST(:, IRDRYHG), PBU_INST(:, IRHMLTR), & &PRH_TEND) ELSEIF (BUCONF%LBU_ENABLE) THEN - PRCWETH(:)=0. - PRIWETH(:)=0. - PRSWETH(:)=0. - PRGWETH(:)=0. - PRRWETH(:)=0. - PRCDRYH(:)=0. - PRIDRYH(:)=0. - PRSDRYH(:)=0. - PRRDRYH(:)=0. - PRGDRYH(:)=0. - PRDRYHG(:)=0. - PRHMLTR(:)=0. + PBU_INST(:, IRCWETH)=0. + PBU_INST(:, IRIWETH)=0. + PBU_INST(:, IRSWETH)=0. + PBU_INST(:, IRGWETH)=0. + PBU_INST(:, IRRWETH)=0. + PBU_INST(:, IRCDRYH)=0. + PBU_INST(:, IRIDRYH)=0. + PBU_INST(:, IRSDRYH)=0. + PBU_INST(:, IRRDRYH)=0. + PBU_INST(:, IRGDRYH)=0. + PBU_INST(:, IRDRYHG)=0. + PBU_INST(:, IRHMLTR)=0. END IF ! !------------------------------------------------------------------------------- @@ -490,7 +430,7 @@ CALL ICE4_FAST_RI(ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, & &ZAI, ZCJ, PCIT, & &PSSI, & &ZVART(:,IRC), ZVART(:,IRI), & - &PRCBERI) + &PBU_INST(:, IRCBERI)) ! !------------------------------------------------------------------------------- ! @@ -499,108 +439,109 @@ CALL ICE4_FAST_RI(ICEP, ICED, KPROMA, KSIZE, ODSOFT, LDCOMPUTE, & ! ------------------------- ! DO JL=1, KSIZE - PA(JL, ITH) = PA(JL, ITH) + PRVDEPG(JL)*PLSFACT(JL) - PA(JL, ITH) = PA(JL, ITH) + PRCHONI(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + PRVDEPS(JL)*PLSFACT(JL) - PA(JL, ITH) = PA(JL, ITH) - PRREVAV(JL)*PLVFACT(JL) - PA(JL, ITH) = PA(JL, ITH) + PRCRIMSS(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + PRCRIMSG(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + PRRACCSS(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + PRRACCSG(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + (PRRCFRIG(JL) - PRICFRR(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + (PRCWETG(JL) + PRRWETG(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + (PRCDRYG(JL)+PRRDRYG(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) - PRGMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRVDEPG)*PLSFACT(JL) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCHONI)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRVDEPS)*PLSFACT(JL) + PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRREVAV)*PLVFACT(JL) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCRIMSS)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCRIMSG)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRRACCSS)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRRACCSG)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRRCFRIG) - PBU_INST(JL, IRICFRR))*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCWETG) + PBU_INST(JL, IRRWETG))*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCDRYG)+PBU_INST(JL, IRRDRYG))*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRGMLTR)*(PLSFACT(JL)-PLVFACT(JL)) IF (KRR==7) THEN - PA(JL, ITH) = PA(JL, ITH) + (PRRWETH(JL)+PRCWETH(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) + (PRCDRYH(JL)+PRRDRYH(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, ITH) = PA(JL, ITH) - PRHMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRRWETH)+PBU_INST(JL, IRCWETH))*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + (PBU_INST(JL, IRCDRYH)+PBU_INST(JL, IRRDRYH))*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) - PBU_INST(JL, IRHMLTR)*(PLSFACT(JL)-PLVFACT(JL)) ENDIF - PA(JL, ITH) = PA(JL, ITH) + PRCBERI(JL)*(PLSFACT(JL)-PLVFACT(JL)) + PA(JL, ITH) = PA(JL, ITH) + PBU_INST(JL, IRCBERI)*(PLSFACT(JL)-PLVFACT(JL)) - PA(JL, IRV) = PA(JL, IRV) - PRVDEPG(JL) - PA(JL, IRV) = PA(JL, IRV) - PRVDEPS(JL) - PA(JL, IRV) = PA(JL, IRV) + PRREVAV(JL) + PA(JL, IRV) = PA(JL, IRV) - PBU_INST(JL, IRVDEPG) + PA(JL, IRV) = PA(JL, IRV) - PBU_INST(JL, IRVDEPS) + PA(JL, IRV) = PA(JL, IRV) + PBU_INST(JL, IRREVAV) - PA(JL, IRC) = PA(JL, IRC) - PRCHONI(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCAUTR(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCACCR(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCRIMSS(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCRIMSG(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCMLTSR(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCWETG(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCDRYG(JL) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCHONI) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCAUTR) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCACCR) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCRIMSS) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCRIMSG) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCMLTSR) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCWETG) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCDRYG) IF (KRR==7) THEN - PA(JL, IRC) = PA(JL, IRC) - PRCWETH(JL) - PA(JL, IRC) = PA(JL, IRC) - PRCDRYH(JL) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCWETH) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCDRYH) ENDIF - PA(JL, IRC) = PA(JL, IRC) - PRCBERI(JL) + PA(JL, IRC) = PA(JL, IRC) - PBU_INST(JL, IRCBERI) - PA(JL, IRR) = PA(JL, IRR) + PRCAUTR(JL) - PA(JL, IRR) = PA(JL, IRR) + PRCACCR(JL) - PA(JL, IRR) = PA(JL, IRR) - PRREVAV(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRACCSS(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRACCSG(JL) - PA(JL, IRR) = PA(JL, IRR) + PRCMLTSR(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRCFRIG(JL) + PRICFRR(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRWETG(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRDRYG(JL) - PA(JL, IRR) = PA(JL, IRR) + PRGMLTR(JL) + PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCAUTR) + PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCACCR) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRREVAV) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRACCSS) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRACCSG) + PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRCMLTSR) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRCFRIG) + PBU_INST(JL, IRICFRR) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRWETG) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRDRYG) + PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRGMLTR) IF(KRR==7) THEN - PA(JL, IRR) = PA(JL, IRR) - PRRWETH(JL) - PA(JL, IRR) = PA(JL, IRR) - PRRDRYH(JL) - PA(JL, IRR) = PA(JL, IRR) + PRHMLTR(JL) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRWETH) + PA(JL, IRR) = PA(JL, IRR) - PBU_INST(JL, IRRDRYH) + PA(JL, IRR) = PA(JL, IRR) + PBU_INST(JL, IRHMLTR) ENDIF - PA(JL, IRI) = PA(JL, IRI) + PRCHONI(JL) - PA(JL, IRI) = PA(JL, IRI) - PRIAGGS(JL) - PA(JL, IRI) = PA(JL, IRI) - PRIAUTS(JL) - PA(JL, IRI) = PA(JL, IRI) - PRICFRRG(JL) - PRICFRR(JL) - PA(JL, IRI) = PA(JL, IRI) - PRIWETG(JL) - PA(JL, IRI) = PA(JL, IRI) - PRIDRYG(JL) + PA(JL, IRI) = PA(JL, IRI) + PBU_INST(JL, IRCHONI) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIAGGS) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIAUTS) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRICFRRG) - PBU_INST(JL, IRICFRR) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIWETG) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIDRYG) IF (KRR==7) THEN - PA(JL, IRI) = PA(JL, IRI) - PRIWETH(JL) - PA(JL, IRI) = PA(JL, IRI) - PRIDRYH(JL) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIWETH) + PA(JL, IRI) = PA(JL, IRI) - PBU_INST(JL, IRIDRYH) ENDIF - PA(JL, IRI) = PA(JL, IRI) + PRCBERI(JL) + PA(JL, IRI) = PA(JL, IRI) + PBU_INST(JL, IRCBERI) - PA(JL, IRS) = PA(JL, IRS) + PRVDEPS(JL) - PA(JL, IRS) = PA(JL, IRS) + PRIAGGS(JL) - PA(JL, IRS) = PA(JL, IRS) + PRIAUTS(JL) - PA(JL, IRS) = PA(JL, IRS) + PRCRIMSS(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSRIMCG(JL) - PA(JL, IRS) = PA(JL, IRS) + PRRACCSS(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSACCRG(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSMLTG(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSWETG(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSDRYG(JL) + PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRVDEPS) + PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRIAGGS) + PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRIAUTS) + PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRCRIMSS) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSRIMCG) + PA(JL, IRS) = PA(JL, IRS) + PBU_INST(JL, IRRACCSS) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSACCRG) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSMLTG) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSWETG) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSDRYG) IF (KRR==7) THEN - PA(JL, IRS) = PA(JL, IRS) - PRSWETH(JL) - PA(JL, IRS) = PA(JL, IRS) - PRSDRYH(JL) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSWETH) + PA(JL, IRS) = PA(JL, IRS) - PBU_INST(JL, IRSDRYH) ENDIF - PA(JL, IRG) = PA(JL, IRG) + PRVDEPG(JL) - PA(JL, IRG) = PA(JL, IRG) + PRCRIMSG(JL)+PRSRIMCG(JL) - PA(JL, IRG) = PA(JL, IRG) + PRRACCSG(JL)+PRSACCRG(JL) - PA(JL, IRG) = PA(JL, IRG) + PRSMLTG(JL) - PA(JL, IRG) = PA(JL, IRG) + PRICFRRG(JL) + PRRCFRIG(JL) - PA(JL, IRG) = PA(JL, IRG) + PRCWETG(JL) + PRIWETG(JL) + PRSWETG(JL) + PRRWETG(JL) - PA(JL, IRG) = PA(JL, IRG) - PRWETGH(JL) - PB(JL, IRG) = PB(JL, IRG) - PRWETGH_MR(JL) - PA(JL, IRG) = PA(JL, IRG) + PRCDRYG(JL) + PRIDRYG(JL) + PRSDRYG(JL) + PRRDRYG(JL) - PA(JL, IRG) = PA(JL, IRG) - PRGMLTR(JL) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRVDEPG) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCRIMSG)+PBU_INST(JL, IRSRIMCG) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRRACCSG)+PBU_INST(JL, IRSACCRG) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRSMLTG) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRICFRRG) + PBU_INST(JL, IRRCFRIG) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCWETG) + PBU_INST(JL, IRIWETG) + PBU_INST(JL, IRSWETG) + PBU_INST(JL, IRRWETG) + PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRWETGH) + PB(JL, IRG) = PB(JL, IRG) - PBU_INST(JL, IRWETGH_MR) + PA(JL, IRG) = PA(JL, IRG) + PBU_INST(JL, IRCDRYG) + PBU_INST(JL, IRIDRYG) + PBU_INST(JL, IRSDRYG) + PBU_INST(JL, IRRDRYG) + PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGMLTR) IF (KRR==7) THEN - PA(JL, IRG) = PA(JL, IRG) - PRGWETH(JL) - PA(JL, IRG) = PA(JL, IRG) - PRGDRYH(JL) + PRDRYHG(JL) + PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGWETH) + PA(JL, IRG) = PA(JL, IRG) - PBU_INST(JL, IRGDRYH) + PBU_INST(JL, IRDRYHG) ENDIF IF (KRR==7) THEN - PA(JL, IRH) = PA(JL, IRH) + PRWETGH(JL) - PB(JL, IRH) = PB(JL, IRH) + PRWETGH_MR(JL) - PA(JL, IRH) = PA(JL, IRH) + PRCWETH(JL)+PRIWETH(JL)+PRSWETH(JL)+PRGWETH(JL)+PRRWETH(JL) - PA(JL, IRH) = PA(JL, IRH) + PRCDRYH(JL)+PRIDRYH(JL)+PRSDRYH(JL)+& - &PRRDRYH(JL)+PRGDRYH(JL) - PRDRYHG(JL) - PA(JL, IRH) = PA(JL, IRH) - PRHMLTR(JL) + PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRWETGH) + PB(JL, IRH) = PB(JL, IRH) + PBU_INST(JL, IRWETGH_MR) + PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRCWETH)+PBU_INST(JL, IRIWETH)+PBU_INST(JL, IRSWETH)+& + & PBU_INST(JL, IRGWETH)+PBU_INST(JL, IRRWETH) + PA(JL, IRH) = PA(JL, IRH) + PBU_INST(JL, IRCDRYH)+PBU_INST(JL, IRIDRYH)+PBU_INST(JL, IRSDRYH)+& + & PBU_INST(JL, IRRDRYH)+PBU_INST(JL, IRGDRYH) - PBU_INST(JL, IRDRYHG) + PA(JL, IRH) = PA(JL, IRH) - PBU_INST(JL, IRHMLTR) ENDIF ENDDO ! diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90 index 44edc4c0ee65413e7c9f5434da0c9080f4864b2d..45076d2175e8a19ed02b826d0cefc1f0f49efffd 100644 --- a/src/common/micro/rain_ice.F90 +++ b/src/common/micro/rain_ice.F90 @@ -196,11 +196,17 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & IRI, & ! Pristine ice & IRS, & ! Snow/aggregate & IRG, & ! Graupel - & IRH ! Hail + & IRH, & ! Hail + & IBUNUM, & ! Number of tendency terms + & IBUNUM_MR, & ! Number of tendency terms expressed as mixing ratio changes + & IBUNUM_EXTRA, & ! Number of extra tendency terms + & IRREVAV, & ! Index for the evaporation tendency + & IBUEXTRAIND ! Index indirection USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL +USE MODE_ICE4_BUDGETS, ONLY: ICE4_BUDGETS USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT USE MODE_ICE4_SEDIMENTATION, ONLY: ICE4_SEDIMENTATION USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES @@ -288,8 +294,6 @@ REAL, DIMENSION(D%NIJT, D%NKT) :: ZW ! work array REAL, DIMENSION(D%NIJT, D%NKT) :: ZT ! Temperature REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change & ZZ_RVHENI ! heterogeneous nucleation -REAL, DIMENSION(MERGE(D%NIJT, 0, BUCONF%LBU_ENABLE), & - &MERGE(D%NKT, 0, BUCONF%LBU_ENABLE)) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 !Work arrays REAL, DIMENSION(D%NIJT, D%NKT) :: ZZ_LVFACT, ZZ_LSFACT, ZZ_DIFF ! REAL, DIMENSION(D%NIJT,D%NKT) :: ZRCT ! Cloud water m.r. source at t @@ -299,7 +303,6 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZRST ! Snow/aggregate m.r. source at t REAL, DIMENSION(D%NIJT,D%NKT) :: ZRGT ! Graupel m.r. source at t REAL, DIMENSION(D%NIJT,D%NKT) :: ZRHT ! Hail m.r. source at t REAL, DIMENSION(D%NIJT,D%NKT) :: ZCITOUT ! Output value for CIT -REAL, DIMENSION(D%NIJT,D%NKT) :: ZLBDAS ! Modif !lbda parameter snow ! LOGICAL :: GEXT_TEND @@ -313,35 +316,11 @@ REAL :: ZTIME_THRESHOLD ! Time to reach threshold REAL, DIMENSION(D%NIJT,D%NKT,0:7) :: ZWR ! !Output packed total mixing ratio change (for budgets only) -REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change - & ZTOT_RCHONI, & ! Homogeneous nucleation - & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change - & ZTOT_RVDEPS, & ! Deposition on r_s, - & ZTOT_RIAGGS, & ! Aggregation on r_s - & ZTOT_RIAUTS, & ! Autoconversion of r_i for r_s production - & ZTOT_RVDEPG, & ! Deposition on r_g - & ZTOT_RCAUTR, & ! Autoconversion of r_c for r_r production - & ZTOT_RCACCR, & ! Accretion of r_c for r_r production - & ZTOT_RREVAV, & ! Evaporation of r_r - & ZTOT_RCRIMSS, ZTOT_RCRIMSG, ZTOT_RSRIMCG, & ! Cloud droplet riming of the aggregates - & ZTOT_RIMLTC, & ! Cloud ice melting mixing ratio change - & ZTOT_RCBERI, & ! Bergeron-Findeisen effect - & ZTOT_RHMLTR, & ! Melting of the hailstones - & ZTOT_RSMLTG, & ! Conversion-Melting of the aggregates - & ZTOT_RCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature - & ZTOT_RRACCSS, ZTOT_RRACCSG, ZTOT_RSACCRG, & ! Rain accretion onto the aggregates - & ZTOT_RICFRRG, ZTOT_RRCFRIG, ZTOT_RICFRR, & ! Rain contact freezing - & ZTOT_RCWETG, ZTOT_RIWETG, ZTOT_RRWETG, ZTOT_RSWETG, & ! Graupel wet growth - & ZTOT_RCDRYG, ZTOT_RIDRYG, ZTOT_RRDRYG, ZTOT_RSDRYG, & ! Graupel dry growth - & ZTOT_RWETGH, & ! Conversion of graupel into hail - & ZTOT_RGMLTR, & ! Melting of the graupel - & ZTOT_RCWETH, ZTOT_RIWETH, ZTOT_RSWETH, ZTOT_RGWETH, ZTOT_RRWETH, & ! Dry growth of hailstone - & ZTOT_RCDRYH, ZTOT_RIDRYH, ZTOT_RSDRYH, ZTOT_RRDRYH, ZTOT_RGDRYH, & ! Wet growth of hailstone - & ZTOT_RDRYHG ! Conversion of hailstone into graupel +REAL, DIMENSION(KSIZE, IBUNUM-IBUNUM_EXTRA) :: ZBU_PACK ! !For packing INTEGER :: IMICRO ! Case r_x>0 locations -INTEGER :: JL, JV +INTEGER :: JL, JV, JJV REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and ends with PTSTEP) REAL, DIMENSION(KPROMA) :: & & ZMAXTIME, & ! Time on which we can apply the current tendencies @@ -369,32 +348,8 @@ REAL, DIMENSION(KPROMA) :: & LOGICAL, DIMENSION(KPROMA) :: LLCOMPUTE ! .TRUE. or points where we must compute tendencies, ! !Output packed tendencies (for budgets only) -REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change - & ZRCHONI, & ! Homogeneous nucleation - & ZRRHONG_MR, & ! Spontaneous freezing mixing ratio change - & ZRVDEPS, & ! Deposition on r_s, - & ZRIAGGS, & ! Aggregation on r_s - & ZRIAUTS, & ! Autoconversion of r_i for r_s production - & ZRVDEPG, & ! Deposition on r_g - & ZRCAUTR, & ! Autoconversion of r_c for r_r production - & ZRCACCR, & ! Accretion of r_c for r_r production - & ZRREVAV, & ! Evaporation of r_r - & ZRIMLTC_MR, & ! Cloud ice melting mixing ratio change - & ZRCBERI, & ! Bergeron-Findeisen effect - & ZRHMLTR, & ! Melting of the hailstones - & ZRSMLTG, & ! Conversion-Melting of the aggregates - & ZRCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature - & ZRRACCSS, ZRRACCSG, ZRSACCRG, & ! Rain accretion onto the aggregates - & ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRSRIMCG_MR, & ! Cloud droplet riming of the aggregates - & ZRICFRRG, ZRRCFRIG, ZRICFRR, & ! Rain contact freezing - & ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, & ! Graupel wet growth - & ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, & ! Graupel dry growth - & ZRWETGH, & ! Conversion of graupel into hail - & ZRWETGH_MR, & ! Conversion of graupel into hail, mr change - & ZRGMLTR, & ! Melting of the graupel - & ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, & ! Dry growth of hailstone - & ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, & ! Wet growth of hailstone - & ZRDRYHG ! Conversion of hailstone into graupel +REAL, DIMENSION(KPROMA, IBUNUM-IBUNUM_EXTRA) :: ZBU_SUM +REAL, DIMENSION(KPROMA, IBUNUM) :: ZBU_INST ! !For mixing-ratio-splitting LOGICAL :: LLCPZ0RT @@ -467,33 +422,6 @@ DO JK = IKTB,IKTE ENDDO ENDDO ! -!Compute lambda_snow parameter -!ZT en KELVIN -DO JK = IKTB,IKTE - DO JIJ = IIJB,IIJE - ZLBDAS(JIJ,JK)=1000. - END DO -END DO -DO JK = IKTB,IKTE - DO JIJ = IIJB,IIJE - IF (PARAMI%LSNOW_T) THEN - IF (PRST(JIJ,JK)>ICED%XRTMIN(5)) THEN - IF(ZT(JIJ,JK)>CST%XTT-10.0) THEN - ZLBDAS(JIJ,JK) = MAX(MIN(ICED%XLBDAS_MAX, 10**(14.554-0.0423*ZT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS - ELSE - ZLBDAS(JIJ,JK) = MAX(MIN(ICED%XLBDAS_MAX, 10**(6.226-0.0106*ZT(JIJ,JK))),ICED%XLBDAS_MIN)*ICED%XTRANS_MP_GAMMAS - END IF - END IF -#if defined(REPRO48) || defined(REPRO55) -#else - ELSE - IF (PRST(JIJ,JK).GT.ICED%XRTMIN(5)) THEN - ZLBDAS(JIJ,JK) = MAX(MIN(ICED%XLBDAS_MAX,ICED%XLBS*(PRHODREF(JIJ,JK)*PRST(JIJ,JK))**ICED%XLBEXS),ICED%XLBDAS_MIN) - END IF -#endif - END IF - END DO -END DO ! !------------------------------------------------------------------------------- ! @@ -550,51 +478,10 @@ DO JK = IKTB,IKTE ENDDO IF(BUCONF%LBU_ENABLE) THEN - ZTOT_RVHENI(:)=0. - ZTOT_RCHONI(:)=0. - ZTOT_RRHONG(:)=0. - ZTOT_RVDEPS(:)=0. - ZTOT_RIAGGS(:)=0. - ZTOT_RIAUTS(:)=0. - ZTOT_RVDEPG(:)=0. - ZTOT_RCAUTR(:)=0. - ZTOT_RCACCR(:)=0. - ZTOT_RREVAV(:)=0. - ZTOT_RCRIMSS(:)=0. - ZTOT_RCRIMSG(:)=0. - ZTOT_RSRIMCG(:)=0. - ZTOT_RIMLTC(:)=0. - ZTOT_RCBERI(:)=0. - ZTOT_RHMLTR(:)=0. - ZTOT_RSMLTG(:)=0. - ZTOT_RCMLTSR(:)=0. - ZTOT_RRACCSS(:)=0. - ZTOT_RRACCSG(:)=0. - ZTOT_RSACCRG(:)=0. - ZTOT_RICFRRG(:)=0. - ZTOT_RRCFRIG(:)=0. - ZTOT_RICFRR(:)=0. - ZTOT_RCWETG(:)=0. - ZTOT_RIWETG(:)=0. - ZTOT_RRWETG(:)=0. - ZTOT_RSWETG(:)=0. - ZTOT_RCDRYG(:)=0. - ZTOT_RIDRYG(:)=0. - ZTOT_RRDRYG(:)=0. - ZTOT_RSDRYG(:)=0. - ZTOT_RWETGH(:)=0. - ZTOT_RGMLTR(:)=0. - ZTOT_RCWETH(:)=0. - ZTOT_RIWETH(:)=0. - ZTOT_RSWETH(:)=0. - ZTOT_RGWETH(:)=0. - ZTOT_RRWETH(:)=0. - ZTOT_RCDRYH(:)=0. - ZTOT_RIDRYH(:)=0. - ZTOT_RSDRYH(:)=0. - ZTOT_RRDRYH(:)=0. - ZTOT_RGDRYH(:)=0. - ZTOT_RDRYHG(:)=0. + DO JV=1, IBUNUM-IBUNUM_EXTRA + ZBU_PACK(:, JV)=0. + ZBU_SUM(:, JV)=0. + ENDDO ENDIF !------------------------------------------------------------------------------- @@ -785,15 +672,7 @@ IF (KSIZE > 0) THEN &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & &ZZT, ZVART, & - &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & - &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, & - &ZRCAUTR, ZRCACCR, ZRREVAV, & - &ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRRACCSS, ZRRACCSG, ZRSACCRG, ZRSMLTG, ZRCMLTSR, & - &ZRICFRRG, ZRRCFRIG, ZRICFRR, ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, & - &ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, ZRWETGH, ZRWETGH_MR, ZRGMLTR, & - &ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, & - &ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, ZRDRYHG, ZRHMLTR, & - &ZRCBERI, & + &ZBU_INST, & &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & &ZA, ZB, & &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & @@ -923,52 +802,26 @@ IF (KSIZE > 0) THEN !*** 4.4 Mixing ratio change due to each process ! IF(BUCONF%LBU_ENABLE) THEN - DO JL=1, IMICRO - ZTOT_RVHENI (JMICRO+JL-1)=ZTOT_RVHENI (JMICRO+JL-1)+ZRVHENI_MR(JL) - ZTOT_RCHONI (JMICRO+JL-1)=ZTOT_RCHONI (JMICRO+JL-1)+ZRCHONI (JL)*ZMAXTIME(JL) - ZTOT_RRHONG (JMICRO+JL-1)=ZTOT_RRHONG (JMICRO+JL-1)+ZRRHONG_MR(JL) - ZTOT_RVDEPS (JMICRO+JL-1)=ZTOT_RVDEPS (JMICRO+JL-1)+ZRVDEPS (JL)*ZMAXTIME(JL) - ZTOT_RIAGGS (JMICRO+JL-1)=ZTOT_RIAGGS (JMICRO+JL-1)+ZRIAGGS (JL)*ZMAXTIME(JL) - ZTOT_RIAUTS (JMICRO+JL-1)=ZTOT_RIAUTS (JMICRO+JL-1)+ZRIAUTS (JL)*ZMAXTIME(JL) - ZTOT_RVDEPG (JMICRO+JL-1)=ZTOT_RVDEPG (JMICRO+JL-1)+ZRVDEPG (JL)*ZMAXTIME(JL) - ZTOT_RCAUTR (JMICRO+JL-1)=ZTOT_RCAUTR (JMICRO+JL-1)+ZRCAUTR (JL)*ZMAXTIME(JL) - ZTOT_RCACCR (JMICRO+JL-1)=ZTOT_RCACCR (JMICRO+JL-1)+ZRCACCR (JL)*ZMAXTIME(JL) - ZTOT_RREVAV (JMICRO+JL-1)=ZTOT_RREVAV (JMICRO+JL-1)+ZRREVAV (JL)*ZMAXTIME(JL) - ZTOT_RCRIMSS(JMICRO+JL-1)=ZTOT_RCRIMSS(JMICRO+JL-1)+ZRCRIMSS (JL)*ZMAXTIME(JL) - ZTOT_RCRIMSG(JMICRO+JL-1)=ZTOT_RCRIMSG(JMICRO+JL-1)+ZRCRIMSG (JL)*ZMAXTIME(JL) - ZTOT_RSRIMCG(JMICRO+JL-1)=ZTOT_RSRIMCG(JMICRO+JL-1)+ZRSRIMCG (JL)*ZMAXTIME(JL)+ZRSRIMCG_MR(JL) - ZTOT_RRACCSS(JMICRO+JL-1)=ZTOT_RRACCSS(JMICRO+JL-1)+ZRRACCSS (JL)*ZMAXTIME(JL) - ZTOT_RRACCSG(JMICRO+JL-1)=ZTOT_RRACCSG(JMICRO+JL-1)+ZRRACCSG (JL)*ZMAXTIME(JL) - ZTOT_RSACCRG(JMICRO+JL-1)=ZTOT_RSACCRG(JMICRO+JL-1)+ZRSACCRG (JL)*ZMAXTIME(JL) - ZTOT_RSMLTG (JMICRO+JL-1)=ZTOT_RSMLTG (JMICRO+JL-1)+ZRSMLTG (JL)*ZMAXTIME(JL) - ZTOT_RCMLTSR(JMICRO+JL-1)=ZTOT_RCMLTSR(JMICRO+JL-1)+ZRCMLTSR (JL)*ZMAXTIME(JL) - ZTOT_RICFRRG(JMICRO+JL-1)=ZTOT_RICFRRG(JMICRO+JL-1)+ZRICFRRG (JL)*ZMAXTIME(JL) - ZTOT_RRCFRIG(JMICRO+JL-1)=ZTOT_RRCFRIG(JMICRO+JL-1)+ZRRCFRIG (JL)*ZMAXTIME(JL) - ZTOT_RICFRR (JMICRO+JL-1)=ZTOT_RICFRR (JMICRO+JL-1)+ZRICFRR (JL)*ZMAXTIME(JL) - ZTOT_RCWETG (JMICRO+JL-1)=ZTOT_RCWETG (JMICRO+JL-1)+ZRCWETG (JL)*ZMAXTIME(JL) - ZTOT_RIWETG (JMICRO+JL-1)=ZTOT_RIWETG (JMICRO+JL-1)+ZRIWETG (JL)*ZMAXTIME(JL) - ZTOT_RRWETG (JMICRO+JL-1)=ZTOT_RRWETG (JMICRO+JL-1)+ZRRWETG (JL)*ZMAXTIME(JL) - ZTOT_RSWETG (JMICRO+JL-1)=ZTOT_RSWETG (JMICRO+JL-1)+ZRSWETG (JL)*ZMAXTIME(JL) - ZTOT_RWETGH (JMICRO+JL-1)=ZTOT_RWETGH (JMICRO+JL-1)+ZRWETGH (JL)*ZMAXTIME(JL)+ZRWETGH_MR(JL) - ZTOT_RCDRYG (JMICRO+JL-1)=ZTOT_RCDRYG (JMICRO+JL-1)+ZRCDRYG (JL)*ZMAXTIME(JL) - ZTOT_RIDRYG (JMICRO+JL-1)=ZTOT_RIDRYG (JMICRO+JL-1)+ZRIDRYG (JL)*ZMAXTIME(JL) - ZTOT_RRDRYG (JMICRO+JL-1)=ZTOT_RRDRYG (JMICRO+JL-1)+ZRRDRYG (JL)*ZMAXTIME(JL) - ZTOT_RSDRYG (JMICRO+JL-1)=ZTOT_RSDRYG (JMICRO+JL-1)+ZRSDRYG (JL)*ZMAXTIME(JL) - ZTOT_RGMLTR (JMICRO+JL-1)=ZTOT_RGMLTR (JMICRO+JL-1)+ZRGMLTR (JL)*ZMAXTIME(JL) - ZTOT_RCWETH (JMICRO+JL-1)=ZTOT_RCWETH (JMICRO+JL-1)+ZRCWETH (JL)*ZMAXTIME(JL) - ZTOT_RIWETH (JMICRO+JL-1)=ZTOT_RIWETH (JMICRO+JL-1)+ZRIWETH (JL)*ZMAXTIME(JL) - ZTOT_RSWETH (JMICRO+JL-1)=ZTOT_RSWETH (JMICRO+JL-1)+ZRSWETH (JL)*ZMAXTIME(JL) - ZTOT_RGWETH (JMICRO+JL-1)=ZTOT_RGWETH (JMICRO+JL-1)+ZRGWETH (JL)*ZMAXTIME(JL) - ZTOT_RRWETH (JMICRO+JL-1)=ZTOT_RRWETH (JMICRO+JL-1)+ZRRWETH (JL)*ZMAXTIME(JL) - ZTOT_RCDRYH (JMICRO+JL-1)=ZTOT_RCDRYH (JMICRO+JL-1)+ZRCDRYH (JL)*ZMAXTIME(JL) - ZTOT_RIDRYH (JMICRO+JL-1)=ZTOT_RIDRYH (JMICRO+JL-1)+ZRIDRYH (JL)*ZMAXTIME(JL) - ZTOT_RSDRYH (JMICRO+JL-1)=ZTOT_RSDRYH (JMICRO+JL-1)+ZRSDRYH (JL)*ZMAXTIME(JL) - ZTOT_RRDRYH (JMICRO+JL-1)=ZTOT_RRDRYH (JMICRO+JL-1)+ZRRDRYH (JL)*ZMAXTIME(JL) - ZTOT_RGDRYH (JMICRO+JL-1)=ZTOT_RGDRYH (JMICRO+JL-1)+ZRGDRYH (JL)*ZMAXTIME(JL) - ZTOT_RDRYHG (JMICRO+JL-1)=ZTOT_RDRYHG (JMICRO+JL-1)+ZRDRYHG (JL)*ZMAXTIME(JL) - ZTOT_RHMLTR (JMICRO+JL-1)=ZTOT_RHMLTR (JMICRO+JL-1)+ZRHMLTR (JL)*ZMAXTIME(JL) - ZTOT_RIMLTC (JMICRO+JL-1)=ZTOT_RIMLTC (JMICRO+JL-1)+ZRIMLTC_MR(JL) - ZTOT_RCBERI (JMICRO+JL-1)=ZTOT_RCBERI (JMICRO+JL-1)+ZRCBERI (JL)*ZMAXTIME(JL) + !Mixing ratio change due to a tendency + DO JV=1, IBUNUM-IBUNUM_MR-IBUNUM_EXTRA + DO JL=1, IMICRO + ZBU_SUM(JL, JV) = ZBU_SUM(JL, JV) + ZBU_INST(JL, JV)*ZMAXTIME(JL) + ENDDO + ENDDO + + !Mixing ratio change due to a mixing ratio change + DO JV=IBUNUM-IBUNUM_MR-IBUNUM_EXTRA+1, IBUNUM-IBUNUM_EXTRA + DO JL=1, IMICRO + ZBU_SUM(JL, JV) = ZBU_SUM(JL, JV) + ZBU_INST(JL, JV) + ENDDO + ENDDO + + !Extra contribution as a mixing ratio change + DO JV=IBUNUM-IBUNUM_EXTRA+1, IBUNUM + JJV=IBUEXTRAIND(JV) + DO JL=1, IMICRO + ZBU_SUM(JL, JJV) = ZBU_SUM(JL, JJV) + ZBU_INST(JL, JV) + ENDDO ENDDO ENDIF ! @@ -995,7 +848,7 @@ IF (KSIZE > 0) THEN DO JL=1, IMICRO ZCITOUT (I1(JL),I2(JL))=ZCIT (JL) IF(PARAMI%LWARM) THEN - PEVAP3D(I1(JL),I2(JL))=ZRREVAV(JL) + PEVAP3D(I1(JL),I2(JL))=ZBU_INST(JL, IRREVAV) ENDIF ZWR(I1(JL),I2(JL),IRV)=ZVART(JL, IRV) ZWR(I1(JL),I2(JL),IRC)=ZVART(JL, IRC) @@ -1007,6 +860,14 @@ IF (KSIZE > 0) THEN ZWR(I1(JL),I2(JL),IRH)=ZVART(JL, IRH) ENDIF ENDDO + IF(BUCONF%LBU_ENABLE) THEN + DO JV=1, IBUNUM-IBUNUM_EXTRA + DO JL=1, IMICRO + ZBU_PACK(JMICRO+JL-1, JV) = ZBU_SUM(JL, JV) + ENDDO + ENDDO + ENDIF + ENDDO ! JMICRO ENDIF ! KSIZE > 0 @@ -1088,366 +949,15 @@ ENDDO !*** 7.2 LBU_ENABLE case ! IF(BUCONF%LBU_ENABLE) THEN - IF (BUCONF%LBUDGET_TH) THEN - ZZ_DIFF(:,:)=0. - DO JK = IKTB, IKTE - DO JIJ = IIJB, IIJE - ZZ_DIFF(JIJ, JK) = ZZ_LSFACT(JIJ, JK) - ZZ_LVFACT(JIJ, JK) - ENDDO - ENDDO - END IF - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP - END DO - DO JK = IKTB, IKTE - DO JIJ = IIJB, IIJE - ZW(JIJ,JK)=ZW(JIJ,JK)+ZZ_RVHENI(JIJ,JK) - ENDDO - ENDDO -#ifdef REPRO48 - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HENU', ZW(:, :) *PRHODJ(:, :)) -#else - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIN', ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIN', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIN', ZW(:, :) *PRHODJ(:, :)) -#endif - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HON', ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HON', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HON', ZW(:, :) *PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RRHONG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'SFR', ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'SFR', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'SFR', ZW(:, :) *PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVDEPS(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS', ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS', ZW(:, :) *PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIAGGS(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS', ZW(:, :)*PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIAUTS(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AUTS', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AUTS', ZW(:, :)*PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RVDEPG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG', ZW(:, :)*ZZ_LSFACT(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG', ZW(:, :) *PRHODJ(:, :)) - - IF(PARAMI%LWARM) THEN - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCAUTR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO', ZW(:, :)*PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCACCR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR', ZW(:, :)*PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RREVAV(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA', -ZW(:, :)*ZZ_LVFACT(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA', ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA', -ZW(:, :) *PRHODJ(:, :)) - ENDIF - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCRIMSS(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RCRIMSG(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RSRIMCG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RRACCSS(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRACCSG(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RSACCRG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :)-ZW2(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RSMLTG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL', ZW(:, :)*PRHODJ(:, :)) - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCMLTSR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CMEL', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CMEL', ZW(:, :)*PRHODJ(:, :)) - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RICFRRG(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRCFRIG(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RICFRR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :)+ZW3(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :)-ZW3(:, :))*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :)+ZW2(:, :))*PRHODJ(:, :)) - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCWETG(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRWETG(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIWETG(JL) * ZINV_TSTEP - END DO - ZW4(:,:) = 0. - DO JL=1, KSIZE - ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSWETG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG', -ZW1(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG', -ZW2(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG', -ZW3(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG', -ZW4(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) & - & *PRHODJ(:, :)) - - IF(KRR==7) THEN - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RWETGH(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GHCV', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'GHCV', ZW(:, :)*PRHODJ(:, :)) - END IF - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCDRYG(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRDRYG(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIDRYG(JL) * ZINV_TSTEP - END DO - ZW4(:,:) = 0. - DO JL=1, KSIZE - ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSDRYG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :)+ZW2(:, :) )*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG', -ZW1(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG', -ZW2(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG', -ZW3(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG', -ZW4(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ZW4(:, :)) & - & *PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RGMLTR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT', ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ZW(:, :) *PRHODJ(:, :)) - - IF(KRR==7) THEN - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCWETH(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRWETH(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIWETH(JL) * ZINV_TSTEP - END DO - ZW4(:,:) = 0. - DO JL=1, KSIZE - ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSWETH(JL) * ZINV_TSTEP - END DO - ZW5(:,:) = 0. - DO JL=1, KSIZE - ZW5(I1TOT(JL), I2TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :) *PRHODJ(:, :)) -#ifdef REPRO48 -#else - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :) *PRHODJ(:, :)) -#endif - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ & - &ZW4(:, :)+ZW5(:, : )) *PRHODJ(:, :)) - -#if defined(REPRO48) || defined(REPRO55) - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP - END DO -#endif -#ifdef REPRO48 - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :)-ZW(:, :))*PRHODJ(:, :)) -#endif -#ifdef REPRO55 - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :)*PRHODJ(:, :)) -#endif -#if defined(REPRO48) || defined(REPRO55) - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV', ZW(:, :)*PRHODJ(:, :)) -#endif - - ZW1(:,:) = 0. - DO JL=1, KSIZE - ZW1(I1TOT(JL), I2TOT(JL)) = ZTOT_RCDRYH(JL) * ZINV_TSTEP - END DO - ZW2(:,:) = 0. - DO JL=1, KSIZE - ZW2(I1TOT(JL), I2TOT(JL)) = ZTOT_RRDRYH(JL) * ZINV_TSTEP - END DO - ZW3(:,:) = 0. - DO JL=1, KSIZE - ZW3(I1TOT(JL), I2TOT(JL)) = ZTOT_RIDRYH(JL) * ZINV_TSTEP - END DO - ZW4(:,:) = 0. - DO JL=1, KSIZE - ZW4(I1TOT(JL), I2TOT(JL)) = ZTOT_RSDRYH(JL) * ZINV_TSTEP - END DO - ZW5(:,:) = 0. - DO JL=1, KSIZE - ZW5(I1TOT(JL), I2TOT(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP - END DO - ZW6(:,:) = 0. -#if defined(REPRO48) || defined(REPRO55) - !ZW6 must be removed when REPRO* will be suppressed - DO JL=1, KSIZE - ZW6(I1TOT(JL), I2TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP - END DO -#endif - IF (BUCONF%LBUDGET_TH) & - CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :)+ZW2(:, :))*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :)+ZW6(:, :)) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :)+ZW2(:, :)+ZW3(:, :)+ & - &ZW4(:, :)+ZW5(:, :)-ZW6(:, :)) & - & *PRHODJ(:, :)) - -#if defined(REPRO48) || defined(REPRO55) -#else - !When REPRO48 will be suppressed, ZW6 must be removed - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HGCV', ZW(:, :)*PRHODJ(:, :)) -#endif - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT', ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ZW(:, :) *PRHODJ(:, :)) - ENDIF - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RIMLTC(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT', -ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT', ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT', -ZW(:, :) *PRHODJ(:, :)) - - ZW(:,:) = 0. - DO JL=1, KSIZE - ZW(I1TOT(JL), I2TOT(JL)) = ZTOT_RCBERI(JL) * ZINV_TSTEP - END DO - IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI', ZW(:, :)*ZZ_DIFF(:, :)*PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', -ZW(:, :) *PRHODJ(:, :)) - IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI', ZW(:, :) *PRHODJ(:, :)) - -ENDIF -! -!*** 7.3 Final tendencies -! -IF (BUCONF%LBU_ENABLE) THEN + !Budgets for the different processes + !They have been put in a subroutine because they perform pack/unpack + CALL ICE4_BUDGETS(D, PARAMI, BUCONF, KSIZE, KPROMA, PTSTEP, KRR, I1TOT, I2TOT, & + ZZ_LVFACT, ZZ_LSFACT, PRHODJ, & + ZZ_RVHENI, ZBU_PACK, & + TBUDGETS, KBUDGETS) + ! + !*** 7.3 Final tendencies + ! IF (BUCONF%LBUDGET_TH) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :)*PRHODJ(:, :)) IF (BUCONF%LBUDGET_RV) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :)*PRHODJ(:, :)) IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :)*PRHODJ(:, :))