diff --git a/src/arome/micro/ice4_tendencies.F90 b/src/arome/micro/ice4_tendencies.F90 deleted file mode 100644 index 32fdfd6ce5470794df73a137f874f07eb8dd3d8c..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_tendencies.F90 +++ /dev/null @@ -1,500 +0,0 @@ -! -! -! -! -! -! -!!! NOTE: quand l'array syntax sera remplacée par des boucles, en profiter -!!! pour supprimer les arguments PA et PB des différentes routines -!!! pour calquer le fonctionnement de nucleation, rimltc et rrhong -! -! -! -! -! -! -SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, LDMICRO, K1, K2, K3, & - &PPRES, PCF, PSIGMA_RC, & - &PCIT, & - &PT, PTHT, & - &PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, PRRT3D, & - &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, & - &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & - &PA_TH, PA_RV, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, & - &PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RS, PB_RG, PB_RH, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRAINFR) -!! -!!** PURPOSE -!! ------- -!! Computes the tendencies -!! -!! AUTHOR -!! ------ -!! S. Riette from the splitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : CSNOWRIMING - -USE MODI_ICE4_NUCLEATION -USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG -USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC -USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD -USE MODE_ICE4_COMPUTE_PDF, ONLY: ICE4_COMPUTE_PDF -USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT -USE MODE_ICE4_SLOW, ONLY: ICE4_SLOW -USE MODE_ICE4_WARM, ONLY: ICE4_WARM -USE MODE_ICE4_FAST_RS, ONLY: ICE4_FAST_RS -USE MODE_ICE4_FAST_RG, ONLY: ICE4_FAST_RG -USE MODE_ICE4_FAST_RH, ONLY: ICE4_FAST_RH -USE MODE_ICE4_FAST_RI, ONLY: ICE4_FAST_RI - -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -LOGICAL, INTENT(IN) :: OWARM -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LDMICRO -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K1 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K2 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K3 -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRRT3D -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVHENI_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRHONG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIMLTC_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSACCRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRDRYHG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PSSI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - & ZT, ZTHT, & - & ZZW, & - & ZKA, ZDV, ZAI, ZCJ, & - & ZRF, & - & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, & - & ZRGSI, ZRGSI_MR -REAL, DIMENSION(KSIZE) :: PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI -CHARACTER(len=80) :: HSUBG_AUCV_RI='NONE' -REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D -INTEGER :: JL -REAL, DIMENSION(KSIZE) :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -IF (LHOOK) CALL DR_HOOK('ICE4_TENDENCIES', 0, ZHOOK_HANDLE) - -PA_TH(:)=0. -PA_RV(:)=0. -PA_RC(:)=0. -PA_RR(:)=0. -PA_RI(:)=0. -PA_RS(:)=0. -PA_RG(:)=0. -PA_RH(:)=0. -PB_TH(:)=0. -PB_RV(:)=0. -PB_RC(:)=0. -PB_RR(:)=0. -PB_RI(:)=0. -PB_RS(:)=0. -PB_RG(:)=0. -PB_RH(:)=0. -! -DO JL=1, KSIZE - ZRVT(JL)=PRVT(JL) - ZRCT(JL)=PRCT(JL) - ZRRT(JL)=PRRT(JL) - ZRIT(JL)=PRIT(JL) - ZRST(JL)=PRST(JL) - ZRGT(JL)=PRGT(JL) - ZTHT(JL)=PTHT(JL) - ZT(JL)=PT(JL) -ENDDO -IF(LDSOFT) THEN - PRVHENI_MR(:)=0. - PRRHONG_MR(:)=0. - PRIMLTC_MR(:)=0. - PRSRIMCG_MR(:)=0. -ELSE - ! - !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES - ! -------------------------------------- - CALL ICE4_NUCLEATION(KSIZE, LDSOFT, PCOMPUTE==1., & - ZTHT, PPRES, PRHODREF, PEXN, PLSFACT, ZT, & - ZRVT, & - PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) - PB_RI(:)=PB_RI(:) + PRVHENI_MR(:) - PB_RV(:)=PB_RV(:) - PRVHENI_MR(:) - PB_TH(:)=PB_TH(:) + PRVHENI_MR(:)*PLSFACT(:) - DO JL=1, KSIZE - ZRIT(JL)=ZRIT(JL) + PRVHENI_MR(JL) - ZRVT(JL)=ZRVT(JL) - PRVHENI_MR(JL) - ZTHT(JL)=ZTHT(JL) + PRVHENI_MR(JL)*PLSFACT(JL) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - !* 3.3 compute the spontaneous freezing source: RRHONG - ! - CALL ICE4_RRHONG(KSIZE, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &ZT, ZRRT, & - &ZTHT, & - &PRRHONG_MR, PB_TH, PB_RR, PB_RG) - DO JL=1, KSIZE - PB_RG(JL) = PB_RG(JL) + PRRHONG_MR(JL) - PB_RR(JL) = PB_RR(JL) - PRRHONG_MR(JL) - PB_TH(JL) = PB_TH(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) - ENDDO - DO JL=1, KSIZE - ZRGT(JL) = ZRGT(JL) + PRRHONG_MR(JL) - ZRRT(JL) = ZRRT(JL) - PRRHONG_MR(JL) - ZTHT(JL) = ZTHT(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG)) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - !* 7.1 cloud ice melting - ! - CALL ICE4_RIMLTC(KSIZE, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &ZT, & - &ZTHT, ZRIT, & - &PRIMLTC_MR) - DO JL=1, KSIZE - PB_RC(JL) = PB_RC(JL) + PRIMLTC_MR(JL) - PB_RI(JL) = PB_RI(JL) - PRIMLTC_MR(JL) - PB_TH(JL) = PB_TH(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) - ENDDO - DO JL=1, KSIZE - ZRCT(JL) = ZRCT(JL) + PRIMLTC_MR(JL) - ZRIT(JL) = ZRIT(JL) - PRIMLTC_MR(JL) - ZTHT(JL) = ZTHT(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC)) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) - ! - IF(CSNOWRIMING=='OLD ') THEN - ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE - CALL ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, PCOMPUTE==1., & - &PRHODREF, & - &ZLBDAS, & - &ZT, ZRCT, ZRST, & - &PRSRIMCG_MR, PB_RS, PB_RG) - DO JL=1, KSIZE - ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL) - ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL) - ENDDO - ELSE - PRSRIMCG_MR(:) = 0. - ENDIF -ENDIF -! -!* Derived fields -! -IF(KSIZE>0) THEN - IF(.NOT. LDSOFT) THEN - ZZW(:) = EXP(XALPI-XBETAI/ZT(:)-XGAMI*ALOG(ZT(:))) - DO JL=1, KSIZE - PSSI(JL) = ZRVT(JL)*( PPRES(JL)-ZZW(JL) ) / ( XEPSILO * ZZW(JL) ) - 1.0 - ! Supersaturation over ice - ZKA(JL) = 2.38E-2 + 0.0071E-2*(ZT(JL)-XTT) ! k_a - ZDV(JL) = 0.211E-4*(ZT(JL)/XTT)**1.94 * (XP00/PPRES(JL)) ! D_v - ZAI(JL) = (XLSTT+(XCPV-XCI)*(ZT(JL)-XTT))**2 / (ZKA(JL)*XRV*ZT(JL)**2) & - + ( XRV*ZT(JL) ) / (ZDV(JL)*ZZW(JL)) - ZCJ(JL) = XSCFAC*PRHODREF(JL)**0.3 / SQRT(1.718E-5+0.0049E-5*(ZT(JL)-XTT)) - ENDDO - ENDIF - ! - !Cloud water split between high and low content part is done here - CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,& - PRHODREF, ZRCT, ZRIT, PCF, ZT, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC,& - PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRF) - IF(HSUBG_RC_RR_ACCR=='PRFR') THEN - !Diagnostic of precipitation fraction - PRAINFR(:,:,:)=UNPACK(ZRF(:), MASK=LDMICRO(:,:,:), FIELD=PRAINFR(:,:,:)) - ZRRT3D(:,:,:)=PRRT3D(:,:,:)-UNPACK(PRRHONG_MR(:), MASK=LDMICRO(:,:,:), FIELD=0.) - ZRST3D(:,:,:)=0. !need phasing - ZRGT3D(:,:,:)=0. !need phasing - IF (KRR==7) ZRHT3D(:,:,:)=0. !need phasing - CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), - &ZRRT3D(:,:,:), ZRST3D(:,:,:), ZRGT3D(:,:,:), ZRHT3D(:,:,:)) - DO JL=1,KSIZE - ZRF(JL)=PRAINFR(K1(JL), K2(JL), K3(JL)) - END DO - ELSE - PRAINFR(:,:,:)=1. - ZRF(:)=1. - ENDIF - ! - !* compute the slope parameters - ! - ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE - ZLBDAG(:)=0. - WHERE(ZRGT(:)>0.) - ZLBDAG(:) = XLBG*(PRHODREF(:)*MAX(ZRGT(:), XRTMIN(6)))**XLBEXG - END WHERE - !ZLBDAR will be used when we consider rain diluted over the grid box - ZLBDAR(:)=0. - WHERE(ZRRT(:)>0.) - ZLBDAR(:) = XLBR*( PRHODREF(:)*MAX( ZRRT(:), XRTMIN(3)))**XLBEXR - END WHERE - !ZLBDAR_RF is used when we consider rain concentrated in its fraction - IF (HSUBG_RC_RR_ACCR=='PRFR') THEN - ZLBDAR_RF(:)=0. - WHERE(ZRRT(:)>0. .AND. ZRF(:)>0.) - ZLBDAR_RF(:) = XLBR*( PRHODREF(:) *MAX( ZRRT(:)/ZRF(:) , XRTMIN(3)))**XLBEXR - END WHERE - ELSE - ZLBDAR_RF(:) = ZLBDAR(:) - ENDIF - IF(KRR==7) THEN - ZLBDAH(:)=0. - WHERE(PRHT(:)>0.) - ZLBDAH(:) = XLBH*(PRHODREF(:)*MAX(PRHT(:), XRTMIN(7)))**XLBEXH - END WHERE - ENDIF -ENDIF -! -! -PHLI_HCF=1 -CALL ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, ZT, & - &PSSI, PLVFACT, PLSFACT, & - &ZRVT, ZRCT, ZRIT, ZRST, ZRGT, & - &ZLBDAS, ZLBDAG, & - &ZAI, ZCJ, PHLI_HCF, ZRIT, & !!!!!!! en attendant phasage plus complet - &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & - &PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG) -! -!------------------------------------------------------------------------------- -! -! -!* 3. COMPUTES THE SLOW WARM PROCESS SOURCES -! -------------------------------------- -! -! -IF(OWARM) THEN ! Check if the formation of the raindrops by the slow - ! warm processes is allowed - CALL ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, ZT, PPRES, ZTHT,& - &ZLBDAR, ZLBDAR_RF, ZKA, ZDV, ZCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, ZRF, & - &ZRVT, ZRCT, ZRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) -ELSE - PRCAUTR(:)=0. - PRCACCR(:)=0. - PRREVAV(:)=0. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 4. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s -! ---------------------------------------------- -! -CALL ICE4_FAST_RS(KSIZE, KSIZE, LDSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, & - &ZLBDAR, ZLBDAS, & - &ZT, ZRVT, ZRCT, ZRRT, ZRST, & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & - &PRS_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RS, PA_RG) -! -!------------------------------------------------------------------------------- -! -! -!* 5. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g -! ------------------------------------------------------ -! -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) -ENDDO -CALL ICE4_FAST_RG(KSIZE, KSIZE, LDSOFT, PCOMPUTE, KRR, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, PCIT, & - &ZLBDAR, ZLBDAS, ZLBDAG, & - &ZT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - &ZRGSI, ZRGSI_MR(:), & - &ZWETG, & - &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, & - &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, & - &PRG_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, PB_RG, PB_RH) -! -!------------------------------------------------------------------------------- -! -! -!* 6. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_h -! ---------------------------------------------- -! -IF (KRR==7) THEN - CALL ICE4_FAST_RH(KSIZE, KSIZE, LDSOFT, PCOMPUTE, ZWETG, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, & - &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & - &ZT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, PRHT, & - &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & - &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, & - &PRH_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH) -ELSE - PRCWETH(:)=0. - PRIWETH(:)=0. - PRSWETH(:)=0. - PRGWETH(:)=0. - PRRWETH(:)=0. - PRCDRYH(:)=0. - PRIDRYH(:)=0. - PRSDRYH(:)=0. - PRRDRYH(:)=0. - PRGDRYH(:)=0. - PRDRYHG(:)=0. - PRHMLTR(:)=0. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 7. COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES -! ------------------------------------------------------------- -! -CALL ICE4_FAST_RI(KSIZE, LDSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, & - &ZAI, ZCJ, PCIT, & - &PSSI, & - &ZRCT, ZRIT, & - &PRCBERI, PA_TH, PA_RC, PA_RI) -! -IF (LHOOK) CALL DR_HOOK('ICE4_TENDENCIES', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_TENDENCIES diff --git a/src/arome/micro/modi_ice4_tendencies.F90 b/src/arome/micro/modi_ice4_tendencies.F90 deleted file mode 100644 index 467d89707860c6257aea71b09d336c0000070328..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_ice4_tendencies.F90 +++ /dev/null @@ -1,130 +0,0 @@ -MODULE MODI_ICE4_TENDENCIES -INTERFACE -SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, LDMICRO, K1, K2, K3, & - &PPRES, PCF, PSIGMA_RC, & - &PCIT, & - &PT, PTHT, & - &PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, PRRT3D, & - &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, & - &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & - &PA_TH, PA_RV, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, & - &PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RS, PB_RG, PB_RH, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRAINFR) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -LOGICAL, INTENT(IN) :: OWARM -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LDMICRO -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K1 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K2 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K3 -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRRT3D -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVHENI_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRHONG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIMLTC_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSACCRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGDRYH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRDRYHG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PSSI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction -END SUBROUTINE ICE4_TENDENCIES -END INTERFACE -END MODULE MODI_ICE4_TENDENCIES diff --git a/src/arome/micro/rain_ice.F90 b/src/arome/micro/rain_ice.F90 index 7b33f9f2a158a63c29309ec784d858feb50709be..74aa8152e665f9f7e53e83bef85ed7ef042a74a5 100644 --- a/src/arome/micro/rain_ice.F90 +++ b/src/arome/micro/rain_ice.F90 @@ -1,7 +1,12 @@ +!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 SUBROUTINE RAIN_ICE ( KIT, KJT, KKT, KSIZE, & OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM,KKA,KKU,KKL,& - PTSTEP, KRR, LDMICRO, PEXN, & + PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & @@ -63,7 +68,6 @@ !! 'CART' for cartesian box configuration !! 'MASK' for budget zone defined by a mask !! 'NONE' ' for no budget -!! NBUPROCCTR : process counter used for each budget variable !! LBU_RTH : logical for budget of RTH (potential temperature) !! .TRUE. = budget of RTH !! .FALSE. = no budget of RTH @@ -155,11 +159,21 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_RAIN_ICE_DESCR +USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW +USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF +USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & + & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN USE MODD_RAIN_ICE_PARAM -USE MODD_PARAM_ICE +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_BUDGET USE MODD_LES USE MODI_BUDGET @@ -168,7 +182,7 @@ USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER -USE MODI_ICE4_TENDENCIES +USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH @@ -193,7 +207,7 @@ INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, INTENT(IN) :: PTSTEP ! Double Time step (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LDMICRO ! mask to limit computation +LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: ODMICRO ! mask to limit computation ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thikness (m) @@ -253,7 +267,7 @@ INTEGER :: IMICRO ! Case r_x>0 locations INTEGER, DIMENSION(KSIZE) :: I1,I2,I3 ! Used to replace the COUNT INTEGER :: JL ! and PACK intrinsics ! -!Arrays for nucleation call outisde of LDMICRO points +!Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature REAL, DIMENSION(KIT, KJT, KKT) :: & @@ -266,7 +280,11 @@ REAL, DIMENSION(KIT, KJT, KKT) :: ZRAINFR, & & ZHLC_HCF3D,& ! HLCLOUDS cloud fraction in high water content part & ZHLC_LCF3D,& ! HLCLOUDS cloud fraction in low water content part & ZHLC_HRC3D,& ! HLCLOUDS cloud water content in high water content - & ZHLC_LRC3D ! HLCLOUDS cloud water content in low water content + & ZHLC_LRC3D,& ! HLCLOUDS cloud water content in low water content + & ZHLI_HCF3D,& ! HLCLOUDS cloud fraction in high ice content part + & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part + & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content + & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! !Packed variables @@ -291,8 +309,12 @@ REAL, DIMENSION(KSIZE) :: ZRVT, & ! Water vapor m.r. at t & ZHLC_LCF, & ! HLCLOUDS : fraction of Low Cloud Fraction in grid ! note that ZCF = ZHLC_HCF + ZHLC_LCF & ZHLC_HRC, & ! HLCLOUDS : LWC that is High LWC in grid - & ZHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid + & ZHLC_LRC, & ! HLCLOUDS : LWC that is Low LWC in grid ! note that ZRC = ZHLC_HRC + ZHLC_LRC + & ZHLI_HCF, & + & ZHLI_LCF, & + & ZHLI_HRI, & + & ZHLI_LRI ! !Output packed tendencies (for budgets only) REAL, DIMENSION(KSIZE) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change @@ -356,9 +378,22 @@ REAL, DIMENSION(KSIZE) :: Z0RVT, & ! Water vapor m.r. at the beginig of th & Z0RIT, & ! Pristine ice m.r. at the beginig of the current loop & Z0RST, & ! Snow/aggregate m.r. at the beginig of the current loop & Z0RGT, & ! Graupel m.r. at the beginig of the current loop - & Z0RHT, & ! Hail m.r. at the beginig of the current loop - & ZA_TH, ZA_RV, ZA_RC, ZA_RR, ZA_RI, ZA_RS, ZA_RG, ZA_RH, & - & ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH + & Z0RHT ! Hail m.r. at the beginig of the current loop + + + + + +!en attendant phasage on utilise KSIZE à la place de KPROMA +REAL, DIMENSION(KSIZE,0:7) :: & + & ZVART, & !Packed variables + & ZA, ZB + + + + + + ! !To take into acount external tendencies inside the splitting REAL, DIMENSION(KSIZE) :: ZEXT_RV, & ! External tendencie for rv @@ -370,7 +405,7 @@ REAL, DIMENSION(KSIZE) :: ZEXT_RV, & ! External tendencie for rv & ZEXT_RH, & ! External tendencie for rh & ZEXT_TH, & ! External tendencie for th & ZEXT_WW ! Working array -LOGICAL :: LEXT_TEND +LOGICAL :: GEXT_TEND ! INTEGER, DIMENSION(KSIZE) :: IITER ! Number of iterations done (with real tendencies computation) INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) @@ -392,6 +427,7 @@ REAL, DIMENSION(KSIZE) :: ZSSI REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & &ZW_RVS, ZW_RCS, ZW_RRS, ZW_RIS, ZW_RSS, ZW_RGS, ZW_RHS, ZW_THS ! +CHARACTER(LEN=80) :: HSUBG_AUCV_RI='NONE' !------------------------------------------------------------------------------- IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 0, ZHOOK_HANDLE) ! @@ -416,7 +452,7 @@ IKTB=1+JPVEXT IKTE=KKT-JPVEXT ! ZINV_TSTEP=1./PTSTEP -LEXT_TEND=.TRUE. +GEXT_TEND=.TRUE. ! ! LSFACT and LVFACT without exner IF(KRR==7) THEN @@ -563,7 +599,7 @@ ENDIF ! the microphysical fields are larger than a minimal value only !!! ! IMICRO=0 -IF(KSIZE/=0) IMICRO=RAIN_ICE_COUNTJV(LDMICRO(:,:,:), KIT, KJT, KKT, KSIZE, I1(:), I2(:), I3(:)) +IF(KSIZE/=0) IMICRO=RAIN_ICE_COUNTJV(ODMICRO(:,:,:), KIT, KJT, KKT, KSIZE, I1(:), I2(:), I3(:)) !Packing IF(IMICRO>0) THEN DO JL=1, IMICRO @@ -580,7 +616,7 @@ IF(IMICRO>0) THEN ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ZEXN(JL) = PEXN(I1(JL),I2(JL),I3(JL)) ENDDO - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JL=1, IMICRO ZEXT_RV(JL) = PRVS(I1(JL),I2(JL),I3(JL)) - ZRVT(JL)*ZINV_TSTEP ZEXT_RC(JL) = PRCS(I1(JL),I2(JL),I3(JL)) - ZRCT(JL)*ZINV_TSTEP @@ -601,14 +637,14 @@ IF(IMICRO>0) THEN DO JL=1, IMICRO ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL)) ENDDO - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JL=1, IMICRO ZEXT_RH(JL) = PRHS(I1(JL),I2(JL),I3(JL)) - ZRHT(JL)*ZINV_TSTEP ENDDO ENDIF ELSE ZRHT(:)=0. - IF(LEXT_TEND) ZEXT_RH(:)=0. + IF(GEXT_TEND) ZEXT_RH(:)=0. ENDIF IF(LBU_ENABLE) THEN ZTOT_RVHENI(:)=0. @@ -721,14 +757,27 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !*** 4.1 Tendecies computation ! ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise - CALL ICE4_TENDENCIES(IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & + + + +!KPROMA=IMICRO: temporary merging step +ZVART(:, ITH)=ZTHT(:) +ZVART(:, IRV)=ZRVT(:) +ZVART(:, IRC)=ZRCT(:) +ZVART(:, IRR)=ZRRT(:) +ZVART(:, IRI)=ZRIT(:) +ZVART(:, IRS)=ZRST(:) +ZVART(:, IRG)=ZRGT(:) +IF(KRR==7) ZVART(:, IRH)=ZRHT(:) + + CALL ICE4_TENDENCIES(IMICRO, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & &KRR, LSOFT, ZCOMPUTE, & - &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, HSUBG_AUCV_RC, CSUBG_PR_PDF, & - &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, LDMICRO, I1, I2, I3, & + &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & + &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & + &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & - &ZZT, ZTHT, & - &ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT, PRRT, & + &ZZT, ZVART, & &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, & &ZRCAUTR, ZRCACCR, ZRREVAV, & @@ -739,20 +788,28 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies &ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, ZRDRYHG, ZRHMLTR, & &ZRCBERI, & &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & - &ZA_TH, ZA_RV, ZA_RC, ZA_RR, ZA_RI, ZA_RS, ZA_RG, ZA_RH, & - &ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH, & - &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, ZRAINFR) + &ZA, ZB, & + &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & + &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, ZRAINFR) +ZTHT(:)=ZVART(:, ITH) +ZRVT(:)=ZVART(:, IRV) +ZRCT(:)=ZVART(:, IRC) +ZRRT(:)=ZVART(:, IRR) +ZRIT(:)=ZVART(:, IRI) +ZRST(:)=ZVART(:, IRS) +ZRGT(:)=ZVART(:, IRG) +IF(KRR==7) ZRHT(:)=ZVART(:, IRH) ! External tendencies - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JL=1, IMICRO - ZA_TH(JL) = ZA_TH(JL) + ZEXT_TH(JL) - ZA_RV(JL) = ZA_RV(JL) + ZEXT_RV(JL) - ZA_RC(JL) = ZA_RC(JL) + ZEXT_RC(JL) - ZA_RR(JL) = ZA_RR(JL) + ZEXT_RR(JL) - ZA_RI(JL) = ZA_RI(JL) + ZEXT_RI(JL) - ZA_RS(JL) = ZA_RS(JL) + ZEXT_RS(JL) - ZA_RG(JL) = ZA_RG(JL) + ZEXT_RG(JL) - ZA_RH(JL) = ZA_RH(JL) + ZEXT_RH(JL) + ZA(JL, ITH) = ZA(JL, ITH) + ZEXT_TH(JL) + ZA(JL, IRV) = ZA(JL, IRV) + ZEXT_RV(JL) + ZA(JL, IRC) = ZA(JL, IRC) + ZEXT_RC(JL) + ZA(JL, IRR) = ZA(JL, IRR) + ZEXT_RR(JL) + ZA(JL, IRI) = ZA(JL, IRI) + ZEXT_RI(JL) + ZA(JL, IRS) = ZA(JL, IRS) + ZEXT_RS(JL) + ZA(JL, IRG) = ZA(JL, IRG) + ZEXT_RG(JL) + IF(KRR==7) ZA(JL, IRH) = ZA(JL, IRH) + ZEXT_RH(JL) ENDDO ENDIF ! @@ -764,15 +821,15 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !We need to adjust tendencies when temperature reaches 0 IF(LFEEDBACKT) THEN DO JL=1, IMICRO - !Is ZB_TH enough to change temperature sign? - ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB_TH(JL) - XTT/ZEXN(JL)) + !Is ZB(:, ITH) enough to change temperature sign? + ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB(JL, ITH) - XTT/ZEXN(JL)) ZMAXTIME(JL)=ZMAXTIME(JL)*MAX(0., SIGN(1., ZW1D(JL))) - !Can ZA_TH make temperature change of sign? - ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA_TH(JL)))) ! WHERE(ABS(ZA_TH(:))>1.E-20) + !Can ZA(:, ITH) make temperature change of sign? + ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA(JL, ITH)))) ! WHERE(ABS(ZA(:, ITH))>1.E-20) ZTIME_THRESHOLD(JL)=(1. - ZW1D(JL))*(-1.) + & ZW1D(JL) * & - (XTT/ZEXN(JL) - ZB_TH(JL) - ZTHT(JL))/ & - SIGN(MAX(ABS(ZA_TH(JL)), 1.E-20), ZA_TH(JL)) + (XTT/ZEXN(JL) - ZB(JL, ITH) - ZTHT(JL))/ & + SIGN(MAX(ABS(ZA(JL, ITH)), 1.E-20), ZA(JL, ITH)) ZW1D(JL)=MAX(0., -SIGN(1., -ZTIME_THRESHOLD(JL))) ! WHERE(ZTIME_THRESHOLD(:)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) @@ -782,43 +839,43 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !We need to adjust tendencies when a specy disappears !When a specy is missing, only the external tendencies can be negative (and we must keep track of it) DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RV(JL)+1.E-20)) * & ! WHERE(ZA_RV(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRV)+1.E-20)) * & ! WHERE(ZA(:, IRV)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(1)-ZRVT(JL))) ! WHERE(ZRVT(:)>XRTMIN(1)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RV(JL)+ZRVT(JL))/MIN(ZA_RV(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRV)+ZRVT(JL))/MIN(ZA(JL, IRV), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RC(JL)+1.E-20)) * & ! WHERE(ZA_RC(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRC)+1.E-20)) * & ! WHERE(ZA(:, IRC)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(2)-ZRCT(JL))) ! WHERE(ZRCT(:)>XRTMIN(2)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RC(JL)+ZRCT(JL))/MIN(ZA_RC(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRC)+ZRCT(JL))/MIN(ZA(JL, IRC), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RR(JL)+1.E-20)) * & ! WHERE(ZA_RR(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRR)+1.E-20)) * & ! WHERE(ZA(:, IRR)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(3)-ZRRT(JL))) ! WHERE(ZRRT(:)>XRTMIN(3)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RR(JL)+ZRRT(JL))/MIN(ZA_RR(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRR)+ZRRT(JL))/MIN(ZA(JL, IRR), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RI(JL)+1.E-20)) * & ! WHERE(ZI_RV(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRI)+1.E-20)) * & ! WHERE(ZA(:, IRI)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(4)-ZRIT(JL))) ! WHERE(ZRIT(:)>XRTMIN(4)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RI(JL)+ZRIT(JL))/MIN(ZA_RI(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRI)+ZRIT(JL))/MIN(ZA(JL, IRI), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RS(JL)+1.E-20)) * & ! WHERE(ZA_RS(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRS)+1.E-20)) * & ! WHERE(ZA(:, IRS)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(5)-ZRST(JL))) ! WHERE(ZRST(:)>XRTMIN(5)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RS(JL)+ZRST(JL))/MIN(ZA_RS(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRS)+ZRST(JL))/MIN(ZA(JL, IRS), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RG(JL)+1.E-20)) * & ! WHERE(ZA_RG(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRG)+1.E-20)) * & ! WHERE(ZA(:, IRG)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) ! WHERE(ZRGT(:)>XRTMIN(6)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RG(JL)+ZRGT(JL))/MIN(ZA_RG(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRG)+ZRGT(JL))/MIN(ZA(JL, IRG), -1.E-20)) ENDDO IF(KRR==7) THEN DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RH(JL)+1.E-20)) * & ! WHERE(ZA_RH(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRH)+1.E-20)) * & ! WHERE(ZA(:, IRH)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(7)-ZRHT(JL))) ! WHERE(ZRHT(:)>XRTMIN(7)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RH(JL)+ZRHT(JL))/MIN(ZA_RH(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRH)+ZRHT(JL))/MIN(ZA(JL, IRH), -1.E-20)) ENDDO ENDIF @@ -842,79 +899,79 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies IF(XMRSTEP/=0.) THEN DO JL=1, IMICRO ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RV(JL)))) ! WHERE(ABS(ZA_RV(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRV)))) ! WHERE(ABS(ZA(:, IRV))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RV(JL))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB_RV(JL))/ & - &SIGN(MAX(ABS(ZA_RV(JL)), 1.E-20), ZA_RV(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRV))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB(JL, IRV))/ & + &SIGN(MAX(ABS(ZA(JL, IRV)), 1.E-20), ZA(JL, IRV)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRVT(JL))) + & !WHERE(ZRVT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RV(JL)))) !WHERE(ZA_RV(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRV)))) !WHERE(ZA(:, IRV)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RC(JL)))) ! WHERE(ABS(ZA_RC(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRC)))) ! WHERE(ABS(ZA(:, IRC))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RC(JL))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB_RC(JL))/ & - &SIGN(MAX(ABS(ZA_RC(JL)), 1.E-20), ZA_RC(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRC))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB(JL, IRC))/ & + &SIGN(MAX(ABS(ZA(JL, IRC)), 1.E-20), ZA(JL, IRC)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRCT(JL))) + & !WHERE(ZRCT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RC(JL)))) !WHERE(ZA_RC(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRC)))) !WHERE(ZA(:, IRC)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RR(JL)))) ! WHERE(ABS(ZA_RR(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRR)))) ! WHERE(ABS(ZA(:, IRR))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RR(JL))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB_RR(JL))/ & - &SIGN(MAX(ABS(ZA_RR(JL)), 1.E-20), ZA_RR(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRR))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB(JL, IRR))/ & + &SIGN(MAX(ABS(ZA(JL, IRR)), 1.E-20), ZA(JL, IRR)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRRT(JL))) + & !WHERE(ZRRT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RR(JL)))) !WHERE(ZA_RR(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRR)))) !WHERE(ZA(:, IRR)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RI(JL)))) ! WHERE(ABS(ZA_RI(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRI)))) ! WHERE(ABS(ZA(:, IRI))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RI(JL))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB_RI(JL))/ & - &SIGN(MAX(ABS(ZA_RI(JL)), 1.E-20), ZA_RI(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRI))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB(JL, IRI))/ & + &SIGN(MAX(ABS(ZA(JL, IRI)), 1.E-20), ZA(JL, IRI)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRIT(JL))) + & !WHERE(ZRIT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RI(JL)))) !WHERE(ZA_RI(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRI)))) !WHERE(ZA(:, IRI)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RS(JL)))) ! WHERE(ABS(ZA_RS(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRS)))) ! WHERE(ABS(ZA(:, IRS))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RS(JL))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB_RS(JL))/ & - &SIGN(MAX(ABS(ZA_RS(JL)), 1.E-20), ZA_RS(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRS))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB(JL, IRS))/ & + &SIGN(MAX(ABS(ZA(JL, IRS)), 1.E-20), ZA(JL, IRS)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRST(JL))) + & !WHERE(ZRST(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RS(JL)))) !WHERE(ZA_RS(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRS)))) !WHERE(ZA(:, IRS)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RG(JL)))) ! WHERE(ABS(ZA_RG(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRG)))) ! WHERE(ABS(ZA(:, IRG))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RG(JL))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB_RG(JL))/ & - &SIGN(MAX(ABS(ZA_RG(JL)), 1.E-20), ZA_RG(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRG))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB(JL, IRG))/ & + &SIGN(MAX(ABS(ZA(JL, IRG)), 1.E-20), ZA(JL, IRG)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) + & !WHERE(ZRGT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RG(JL)))) !WHERE(ZA_RG(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRG)))) !WHERE(ZA(:, IRG)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) @@ -923,14 +980,14 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies IF(KRR==7) THEN DO JL=1, IMICRO ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RH(JL)))) ! WHERE(ABS(ZA_RH(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRH)))) ! WHERE(ABS(ZA(:, IRH))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RH(JL))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB_RH(JL))/ & - &SIGN(MAX(ABS(ZA_RH(JL)), 1.E-20), ZA_RH(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRH))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB(JL, IRH))/ & + &SIGN(MAX(ABS(ZA(JL, IRH)), 1.E-20), ZA(JL, IRH)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRHT(JL))) + & !WHERE(ZRHT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RH(JL)))) !WHERE(ZA_RH(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRH)))) !WHERE(ZA(:, IRH)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) @@ -938,8 +995,13 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ENDIF DO JL=1, IMICRO - ZW1D(JL)=MAX(ABS(ZB_RV(JL)), ABS(ZB_RC(JL)), ABS(ZB_RR(JL)), ABS(ZB_RI(JL)), & - &ABS(ZB_RS(JL)), ABS(ZB_RG(JL)), ABS(ZB_RH(JL))) + IF(KRR==7) THEN + ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & + &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG)), ABS(ZB(JL, IRH))) + ELSE + ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & + &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG))) + ENDIF ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & !WHERE(IITER(:)<INB_ITER_MAX) &MAX(0., -SIGN(1., XMRSTEP-ZW1D(JL))) !WHERE(ZW1D(:)>XMRSTEP) ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL) @@ -950,16 +1012,16 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !*** 4.3 New values of variables for next iteration ! DO JL=1, IMICRO - ZTHT(JL)=ZTHT(JL)+ZA_TH(JL)*ZMAXTIME(JL)+ZB_TH(JL) - ZRVT(JL)=ZRVT(JL)+ZA_RV(JL)*ZMAXTIME(JL)+ZB_RV(JL) - ZRCT(JL)=ZRCT(JL)+ZA_RC(JL)*ZMAXTIME(JL)+ZB_RC(JL) - ZRRT(JL)=ZRRT(JL)+ZA_RR(JL)*ZMAXTIME(JL)+ZB_RR(JL) - ZRIT(JL)=ZRIT(JL)+ZA_RI(JL)*ZMAXTIME(JL)+ZB_RI(JL) - ZRST(JL)=ZRST(JL)+ZA_RS(JL)*ZMAXTIME(JL)+ZB_RS(JL) - ZRGT(JL)=ZRGT(JL)+ZA_RG(JL)*ZMAXTIME(JL)+ZB_RG(JL) + ZTHT(JL)=ZTHT(JL)+ZA(JL, ITH)*ZMAXTIME(JL)+ZB(JL, ITH) + ZRVT(JL)=ZRVT(JL)+ZA(JL, IRV)*ZMAXTIME(JL)+ZB(JL, IRV) + ZRCT(JL)=ZRCT(JL)+ZA(JL, IRC)*ZMAXTIME(JL)+ZB(JL, IRC) + ZRRT(JL)=ZRRT(JL)+ZA(JL, IRR)*ZMAXTIME(JL)+ZB(JL, IRR) + ZRIT(JL)=ZRIT(JL)+ZA(JL, IRI)*ZMAXTIME(JL)+ZB(JL, IRI) + ZRST(JL)=ZRST(JL)+ZA(JL, IRS)*ZMAXTIME(JL)+ZB(JL, IRS) + ZRGT(JL)=ZRGT(JL)+ZA(JL, IRG)*ZMAXTIME(JL)+ZB(JL, IRG) ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0. ENDDO - IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA_RH(:)*ZMAXTIME(:)+ZB_RH(:) + IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA(:, IRH)*ZMAXTIME(:)+ZB(:, IRH) ! !*** 4.4 Mixing ratio change due to each process ! @@ -1024,14 +1086,14 @@ ENDDO ! IF(IMICRO>0) THEN ZW(:,:,:) = 0. - ZHLC_HCF3D(:,:,:) = UNPACK(ZHLC_HCF(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_HCF3D(:,:,:) = UNPACK(ZHLC_HCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_LCF3D(:,:,:) = UNPACK(ZHLC_LCF(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_LCF3D(:,:,:) = UNPACK(ZHLC_LCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_HRC3D(:,:,:) = UNPACK(ZHLC_HRC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + ZHLC_HRC3D(:,:,:) = UNPACK(ZHLC_HRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ZW(:,:,:) = 0. - ZHLC_LRC3D(:,:,:) = UNPACK(ZHLC_LRC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) - PCIT(:,:,:) = UNPACK(ZCIT(:), MASK=LDMICRO(:,:,:), FIELD=PCIT(:,:,:)) + ZHLC_LRC3D(:,:,:) = UNPACK(ZHLC_LRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) + PCIT(:,:,:) = UNPACK(ZCIT(:), MASK=ODMICRO(:,:,:), FIELD=PCIT(:,:,:)) ELSE ZRAINFR(:,:,:)=0. ZHLC_HCF3D(:,:,:)=0. @@ -1042,14 +1104,14 @@ ELSE ENDIF IF(OWARM) THEN ZW(:,:,:)=0. - PEVAP3D(:,:,:)=UNPACK(ZRREVAV(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:)) + PEVAP3D(:,:,:)=UNPACK(ZRREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) ENDIF ! ! -!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF LDMICRO POINTS +!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS ! ---------------------------------------------------------------- ! -CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. LDMICRO, & +CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, & PRVT, & PCIT, ZZ_RVHENI_MR) @@ -1075,7 +1137,7 @@ ENDDO ! ! ZW_??S variables will contain the new S variables values ! -IF(LEXT_TEND) THEN +IF(GEXT_TEND) THEN !Z..T variables contain the exeternal tendency, we substract it DO JL=1, IMICRO ZRVT(JL) = ZRVT(JL) - ZEXT_RV(JL) * PTSTEP @@ -1089,14 +1151,14 @@ IF(LEXT_TEND) THEN IF (KRR==7) ZRHT(:) = ZRHT(:) - ZEXT_RH(:) * PTSTEP ENDIF !Tendencies computed from difference between old state and new state (can be negative) -ZW_RVS(:,:,:) = (UNPACK(ZRVT(:), MASK=LDMICRO(:,:,:), FIELD=PRVT(:,:,:)) - PRVT(:,:,:))*ZINV_TSTEP -ZW_RCS(:,:,:) = (UNPACK(ZRCT(:), MASK=LDMICRO(:,:,:), FIELD=PRCT(:,:,:)) - PRCT(:,:,:))*ZINV_TSTEP -ZW_RRS(:,:,:) = (UNPACK(ZRRT(:), MASK=LDMICRO(:,:,:), FIELD=PRRT(:,:,:)) - PRRT(:,:,:))*ZINV_TSTEP -ZW_RIS(:,:,:) = (UNPACK(ZRIT(:), MASK=LDMICRO(:,:,:), FIELD=PRIT(:,:,:)) - PRIT(:,:,:))*ZINV_TSTEP -ZW_RSS(:,:,:) = (UNPACK(ZRST(:), MASK=LDMICRO(:,:,:), FIELD=PRST(:,:,:)) - PRST(:,:,:))*ZINV_TSTEP -ZW_RGS(:,:,:) = (UNPACK(ZRGT(:), MASK=LDMICRO(:,:,:), FIELD=PRGT(:,:,:)) - PRGT(:,:,:))*ZINV_TSTEP +ZW_RVS(:,:,:) = (UNPACK(ZRVT(:), MASK=ODMICRO(:,:,:), FIELD=PRVT(:,:,:)) - PRVT(:,:,:))*ZINV_TSTEP +ZW_RCS(:,:,:) = (UNPACK(ZRCT(:), MASK=ODMICRO(:,:,:), FIELD=PRCT(:,:,:)) - PRCT(:,:,:))*ZINV_TSTEP +ZW_RRS(:,:,:) = (UNPACK(ZRRT(:), MASK=ODMICRO(:,:,:), FIELD=PRRT(:,:,:)) - PRRT(:,:,:))*ZINV_TSTEP +ZW_RIS(:,:,:) = (UNPACK(ZRIT(:), MASK=ODMICRO(:,:,:), FIELD=PRIT(:,:,:)) - PRIT(:,:,:))*ZINV_TSTEP +ZW_RSS(:,:,:) = (UNPACK(ZRST(:), MASK=ODMICRO(:,:,:), FIELD=PRST(:,:,:)) - PRST(:,:,:))*ZINV_TSTEP +ZW_RGS(:,:,:) = (UNPACK(ZRGT(:), MASK=ODMICRO(:,:,:), FIELD=PRGT(:,:,:)) - PRGT(:,:,:))*ZINV_TSTEP IF(KRR==7) THEN - ZW_RHS(:,:,:) = (UNPACK(ZRHT(:), MASK=LDMICRO(:,:,:), FIELD=PRHT(:,:,:)) - PRHT(:,:,:))*ZINV_TSTEP + ZW_RHS(:,:,:) = (UNPACK(ZRHT(:), MASK=ODMICRO(:,:,:), FIELD=PRHT(:,:,:)) - PRHT(:,:,:))*ZINV_TSTEP ELSE ZW_RHS(:,:,:) = 0. ENDIF @@ -1127,7 +1189,7 @@ CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, ZW_RVS, ZW_RCS, ZW_RRS, & ! IF(LBU_ENABLE) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1136,7 +1198,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1145,7 +1207,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1154,7 +1216,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1163,21 +1225,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1187,21 +1249,21 @@ IF(LBU_ENABLE) THEN IF(OWARM) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) @@ -1211,17 +1273,17 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1230,17 +1292,17 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1249,11 +1311,11 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) @@ -1262,16 +1324,16 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1280,21 +1342,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1306,7 +1368,7 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) @@ -1314,21 +1376,21 @@ IF(LBU_ENABLE) THEN END IF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1339,7 +1401,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1349,25 +1411,25 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1378,36 +1440,36 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1419,7 +1481,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1429,7 +1491,7 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1438,7 +1500,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) diff --git a/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 b/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 index b569d752e31c01dc0bb5809ebf3c12bf85f49422..d5f1bb22b9e1c19f130b9f3529924ceab5dff08c 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 +++ b/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 @@ -1,7 +1,12 @@ +!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 SUBROUTINE RAIN_ICE ( KPROMA, KIT, KJT, KKT, KSIZE, & OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM,KKA,KKU,KKL,& - PTSTEP, KRR, LDMICRO, PEXN, & + PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & @@ -63,7 +68,6 @@ !! 'CART' for cartesian box configuration !! 'MASK' for budget zone defined by a mask !! 'NONE' ' for no budget -!! NBUPROCCTR : process counter used for each budget variable !! LBU_RTH : logical for budget of RTH (potential temperature) !! .TRUE. = budget of RTH !! .FALSE. = no budget of RTH @@ -156,11 +160,12 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_RAIN_ICE_DESCR +USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW +USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF +USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & + & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN USE MODD_RAIN_ICE_PARAM -USE MODD_PARAM_ICE USE MODD_BUDGET USE MODD_LES USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress @@ -174,10 +179,11 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & IRH ! Hail USE MODI_BUDGET USE MODI_ICE4_RAINFR_VERT -USE MODI_ICE4_SEDIMENTATION_STAT -USE MODI_ICE4_SEDIMENTATION_SPLIT -USE MODI_ICE4_NUCLEATION_WRAPPER -USE MODI_ICE4_TENDENCIES +USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT +USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT +USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM +USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER +USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH @@ -203,7 +209,7 @@ INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, INTENT(IN) :: PTSTEP ! Double Time step (single if cold start) INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LDMICRO ! mask to limit computation +LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: ODMICRO ! mask to limit computation ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thikness (m) @@ -265,7 +271,7 @@ INTEGER :: IKE, IKTE ! INTEGER :: JI, JJ, JK INTEGER :: ISTI, ISTJ, ISTK ! -!Arrays for nucleation call outisde of LDMICRO points +!Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature REAL, DIMENSION(KIT, KJT, KKT) :: & @@ -288,10 +294,14 @@ REAL, DIMENSION(KIT, KJT, KKT) :: & & ZHLC_HCF3D,& ! HLCLOUDS cloud fraction in high water content part & ZHLC_LCF3D,& ! HLCLOUDS cloud fraction in low water content part & ZHLC_HRC3D,& ! HLCLOUDS cloud water content in high water content - & ZHLC_LRC3D ! HLCLOUDS cloud water content in low water content + & ZHLC_LRC3D,& ! HLCLOUDS cloud water content in low water content + & ZHLI_HCF3D,& ! HLCLOUDS cloud fraction in high ice content part + & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part + & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content + & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! -LOGICAL :: LEXT_TEND +LOGICAL :: GEXT_TEND LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) REAL :: ZW1D @@ -352,6 +362,10 @@ REAL, DIMENSION(KPROMA) :: & & ZHLC_HRC, & ! HLCLOUDS : LWC that is High LWC in grid & ZHLC_LRC, & ! HLCLOUDS : LWC that is Low LWC in grid ! note that ZRC = ZHLC_HRC + ZHLC_LRC + & ZHLI_HCF, & + & ZHLI_LCF, & + & ZHLI_HRI, & + & ZHLI_LRI & ZRAINFR ! rain fraction ! !Output packed tendencies (for budgets only) @@ -430,7 +444,7 @@ IKTB=1+JPVEXT IKTE=KKT-JPVEXT ! ZINV_TSTEP=1./PTSTEP -LEXT_TEND=.TRUE. +GEXT_TEND=.TRUE. ! ! LSFACT and LVFACT without exner DO JK = 1, KKT @@ -641,7 +655,7 @@ ENDIF ! optimization by looking for locations where ! the microphysical fields are larger than a minimal value only !!! ! -IF (KSIZE /= COUNT(LDMICRO)) CALL ABOR1('RAIN_ICE : KSIZE /= COUNT(LDMICRO)') +IF (KSIZE /= COUNT(ODMICRO)) CALL ABOR1('RAIN_ICE : KSIZE /= COUNT(ODMICRO)') IF (KSIZE > 0) THEN @@ -676,9 +690,9 @@ IF (KSIZE > 0) THEN ! Setup packing parameters OUTER_LOOP: DO JK = ISTK, KKT DO JJ = ISTJ, KJT - IF (ANY(LDMICRO(:,JJ,JK))) THEN + IF (ANY(ODMICRO(:,JJ,JK))) THEN DO JI = ISTI, KIT - IF (LDMICRO(JI,JJ,JK)) THEN + IF (ODMICRO(JI,JJ,JK)) THEN IC=IC+1 ! Initialization of variables in packed format : ZVART(IC,ITH)=PTHT(JI,JJ,JK) @@ -691,7 +705,7 @@ IF (KSIZE > 0) THEN IF (KRR==7) THEN ZVART(IC,IRH)=PRHT(JI,JJ,JK) ENDIF - IF (LEXT_TEND) THEN + IF (GEXT_TEND) THEN ZEXTPK(IC,ITH)=PTHS(JI,JJ,JK) ZEXTPK(IC,IRV)=PRVS(JI,JJ,JK) ZEXTPK(IC,IRC)=PRCS(JI,JJ,JK) @@ -751,7 +765,7 @@ IF (KSIZE > 0) THEN ISTJ=1 ENDDO OUTER_LOOP - IF (LEXT_TEND) THEN + IF (GEXT_TEND) THEN DO JL = 1,IMICRO ZEXTPK(JL,ITH)=ZEXTPK(JL,ITH)-ZVART(JL,ITH)*ZINV_TSTEP ZEXTPK(JL,IRV)=ZEXTPK(JL,IRV)-ZVART(JL,IRV)*ZINV_TSTEP @@ -818,29 +832,31 @@ IF (KSIZE > 0) THEN !*** 4.1 Tendencies computation ! ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise - CALL ICE4_TENDENCIES(KPROMA,IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & - &KRR, LSOFT, ZCOMPUTE, & - &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, HSUBG_AUCV_RC, CSUBG_PR_PDF, & - &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & - &ZPRES, ZCF, ZSIGMA_RC, & - &ZCIT, & - &ZZT, ZVART, & - &PRRT, & - &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, & - &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & - &ZA,ZB, & - &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC) + CALL ICE4_TENDENCIES(KPROMA,IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & + &KRR, LSOFT, ZCOMPUTE, & + &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & + &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & + &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & + &ZPRES, ZCF, ZSIGMA_RC, & + &ZCIT, & + &ZZT, ZVART, & + &PRRT, & + &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, & + &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & + &ZA, ZB, & + &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & + &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, PRAINFR) ! External tendencies - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN DO JV=0,KRR DO JL=1, IMICRO ZA(JL,JV) = ZA(JL,JV) + ZEXTPK(JL,JV) @@ -1007,7 +1023,7 @@ IF (KSIZE > 0) THEN ENDDO ENDDO - IF(LEXT_TEND) THEN + IF(GEXT_TEND) THEN !Z..T variables contain the external tendency, we substract it DO JV=0,KRR DO JL=1, IMICRO @@ -1056,7 +1072,7 @@ ENDIF ! KSIZE > 0 !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:POST_MICRO', 0, ZHOOK_HANDLE3) -!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF LDMICRO POINTS +!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS ! ---------------------------------------------------------------- ! DO JK = 1, KKT @@ -1075,7 +1091,7 @@ DO JK = 1, KKT ENDDO ENDDO ! -CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. LDMICRO, & +CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT/PEXN, ZT, & PRVT, & PCIT, ZZ_RVHENI_MR) @@ -1116,7 +1132,7 @@ CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, ZWR(:,:,:,IRV), ZWR(:,:,:,IRC), ZW ! IF(LBU_ENABLE) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1125,7 +1141,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1134,7 +1150,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1143,7 +1159,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1152,21 +1168,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) @@ -1176,21 +1192,21 @@ IF(LBU_ENABLE) THEN IF(OWARM) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) @@ -1200,17 +1216,17 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1219,17 +1235,17 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1238,11 +1254,11 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) @@ -1251,16 +1267,16 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1269,21 +1285,21 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1295,7 +1311,7 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) @@ -1303,21 +1319,21 @@ IF(LBU_ENABLE) THEN END IF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1328,7 +1344,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1338,25 +1354,25 @@ IF(LBU_ENABLE) THEN IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1367,36 +1383,36 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH',YDDDH, YDLDDH, YDMDDH) @@ -1408,7 +1424,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1418,7 +1434,7 @@ IF(LBU_ENABLE) THEN ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1427,7 +1443,7 @@ IF(LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=LDMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP + ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) @@ -1548,10 +1564,10 @@ IF(LSEDIM_AFTER) THEN ! It is initialized with the m.r. at T and is modified by two tendencies: ! sedimentation tendency and an external tendency which represents all other ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a species at a given sub-timestep. From + ! are negative, sedimentation can remove a specie at a given sub-timestep. From ! this point sedimentation stops for the remaining sub-timesteps but the other tendency ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a species, instead we apply + ! We could prevent the algorithm to not consume too much a specie, instead we apply ! a correction here. CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & &PRIS, PRSS, PRGS, & diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rrhong.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rrhong.F90 deleted file mode 100644 index 24cb97d499e483220ae9159ca74fa2d2b8545d26..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rrhong.F90 +++ /dev/null @@ -1,3 +0,0 @@ -MODULE MODI_ICE4_RRHONG -! dead code -END MODULE MODI_ICE4_RRHONG diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_tendencies.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_tendencies.F90 deleted file mode 100644 index 32ec019cb40ce36faf9941448df4334b443236a5..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_tendencies.F90 +++ /dev/null @@ -1,106 +0,0 @@ -MODULE MODI_ICE4_TENDENCIES -INTERFACE -SUBROUTINE ICE4_TENDENCIES(KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, K1, K2, K3, & - &PPRES, PCF, PSIGMA_RC, & - &PCIT, & - &PT, PVART, & - &PRRT3D, & - &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, & - &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & - &PA, PB, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KPROMA), INTENT(IN) :: PCOMPUTE -LOGICAL, INTENT(IN) :: OWARM -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KPROMA), INTENT(IN) :: PEXN -REAL, DIMENSION(KPROMA), INTENT(IN) :: PRHODREF -REAL, DIMENSION(KPROMA), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KPROMA), INTENT(IN) :: PLSFACT -INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K1 -INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K2 -INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K3 -REAL, DIMENSION(KPROMA), INTENT(IN) :: PPRES -REAL, DIMENSION(KPROMA), INTENT(IN) :: PCF -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(KIT,KJT,KKT), INTENT(IN) :: PRRT3D -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRVHENI_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRHONG_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIMLTC_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: 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(INOUT) :: PRCRIMSS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCRIMSG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSRIMCG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRACCSS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRACCSG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: 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(INOUT) :: PRCWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRWETGH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRWETGH_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRDRYHG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCBERI -REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRS_TEND -REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRG_TEND -REAL, DIMENSION(KPROMA, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PSSI -REAL, DIMENSION(KPROMA,0:KRR),INTENT(OUT) :: PA -REAL, DIMENSION(KPROMA,0:KRR),INTENT(OUT) :: PB -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LRC -END SUBROUTINE ICE4_TENDENCIES -END INTERFACE -END MODULE MODI_ICE4_TENDENCIES diff --git a/src/arome/modset_Ryad/mpa/micro/module/modd_fields_address.F90 b/src/common/micro/modd_fields_address.F90 similarity index 100% rename from src/arome/modset_Ryad/mpa/micro/module/modd_fields_address.F90 rename to src/common/micro/modd_fields_address.F90 diff --git a/src/common/micro/mode_ice4_compute_pdf.F90 b/src/common/micro/mode_ice4_compute_pdf.F90 index 2058f4e5ad7e2e3118afaca7f6b6e4a4cc415ec3..6fb091d6c2c54691f9cad6371574c0f6417049d3 100644 --- a/src/common/micro/mode_ice4_compute_pdf.F90 +++ b/src/common/micro/mode_ice4_compute_pdf.F90 @@ -248,13 +248,24 @@ ENDIF !Ice water split between high and low content part is done according to autoconversion option ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion ri threshold IF(HSUBG_AUCV_RI=='NONE') THEN + + +!La raison de la non reproduction n'est pas comprise avec certitude +!Il faudra vérifier que le code fait toujours ce qui est attendu +!une fois tous les éléments assemblés +#ifdef REPRO48 + PHLI_HCF(:)=1. + PHLI_LCF(:)=0. + PHLI_HRI(:)=PRIT(:) + PHLI_LRI(:)=0. +#else !Cloud water is entirely in low or high part WHERE(PRIT(:)>ZCRIAUTI(:)) PHLI_HCF(:)=1. PHLI_LCF(:)=0. PHLI_HRI(:)=PRIT(:) PHLI_LRI(:)=0. - ELSEWHERE(PRIT(:)>XRTMIN(2)) + ELSEWHERE(PRIT(:)>XRTMIN(4)) PHLI_HCF(:)=0. PHLI_LCF(:)=1. PHLI_HRI(:)=0. @@ -265,6 +276,7 @@ IF(HSUBG_AUCV_RI=='NONE') THEN PHLI_HRI(:)=0. PHLI_LRI(:)=0. END WHERE +#endif ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN !Cloud water is only in the cloudy part and entirely in low or high part WHERE(PCF(:)>0. .AND. PRIT(:)>ZCRIAUTI(:)*PCF(:)) @@ -272,7 +284,7 @@ ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN PHLI_LCF(:)=0. PHLI_HRI(:)=PRIT(:) PHLI_LRI(:)=0. - ELSEWHERE(PCF(:)>0. .AND. PRIT(:)>XRTMIN(2)) + ELSEWHERE(PCF(:)>0. .AND. PRIT(:)>XRTMIN(4)) PHLI_HCF(:)=0. PHLI_LCF(:)=PCF(:) PHLI_HRI(:)=0.0 diff --git a/src/common/micro/mode_ice4_slow.F90 b/src/common/micro/mode_ice4_slow.F90 index 813138b9daa905df8fa831b10d4f60d982e0daec..d4282190654f60bc33f820cce7d441cc8d311a5d 100644 --- a/src/common/micro/mode_ice4_slow.F90 +++ b/src/common/micro/mode_ice4_slow.F90 @@ -168,7 +168,7 @@ ENDIF ! DO JL=1, KSIZE ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PHLI_HRI(JL))) * & ! PHLI_HRI(:)>XRTMIN(4) - &MAX(0., -SIGN(1., 1.E-20-PHLI_HCF(JL))) * & ! PHLI_HCF(:) .GT. 0. + &MAX(0., -SIGN(1., 1.E-20-PHLI_HCF(JL))) * & ! PHLI_HCF(:) .GT. 1.E-20 &PCOMPUTE(JL) ENDDO IF(LDSOFT) THEN diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90 similarity index 57% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 rename to src/common/micro/mode_ice4_tendencies.F90 index aeffaef19e9f3c71a520be3f5366f4d12a34a8f0..766b7e4b03a296c83523ccafd857d0e7eb0db5f4 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 +++ b/src/common/micro/mode_ice4_tendencies.F90 @@ -1,11 +1,35 @@ -SUBROUTINE ICE4_TENDENCIES(KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, LDSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, HSUBG_AUCV_RC, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, K1, K2, K3,& +!MNH_LIC Copyright 1994-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. +!----------------------------------------------------------------- +MODULE MODE_ICE4_TENDENCIES +IMPLICIT NONE +CONTAINS +! +! +! +! +! +! +!!! NOTE: *quand l'array syntax sera remplacée par des boucles, en profiter +!!! pour supprimer les arguments PA et PB des différentes routines +!!! pour generaliser le fonctionnement de nucleation, rimltc et rrhong +!!! *avec loop, pcompute *et* llcompute utiles tous les deux? +! +! +! +! +! +! +SUBROUTINE ICE4_TENDENCIES(KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & + &KRR, ODSOFT, PCOMPUTE, & + &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & + &HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & + &PEXN, PRHODREF, PLVFACT, PLSFACT, K1, K2, K3, & &PPRES, PCF, PSIGMA_RC, & &PCIT, & &PT, PVART, & - &PRRT3D, & &PRVHENI_MR, PRRHONG_MR, PRIMLTC_MR, PRSRIMCG_MR, & &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & &PRCAUTR, PRCACCR, PRREVAV, & @@ -17,7 +41,9 @@ SUBROUTINE ICE4_TENDENCIES(KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, &PRCBERI, & &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & &PA, PB, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC) + &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & + &PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, & + &PRAINFR) !! !!** PURPOSE !! ------- @@ -30,17 +56,19 @@ SUBROUTINE ICE4_TENDENCIES(KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, !! MODIFICATIONS !! ------------- !! +! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) !! R. El Khatib 24-Aug-2021 Optimizations ! ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : CSNOWRIMING, LFEEDBACKT USE MODD_BUDGET, ONLY : LBU_ENABLE +USE MODD_CST, ONLY: XALPI, XBETAI, XCI, XCPV, XEPSILO, XGAMI, XLSTT, XMD, XMV, XP00, XRV, XTT +USE MODD_PARAM_ICE, ONLY: CSNOWRIMING +USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX, XLBEXG, XLBEXH, XLBEXR, XLBEXS, XLBG, XLBH, XLBR, XLBS, XRTMIN +USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC +! USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & ITH, & ! Potential temperature & IRV, & ! Water vapor @@ -50,17 +78,20 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & IRS, & ! Snow/aggregate & IRG, & ! Graupel & IRH ! Hail -USE MODI_ICE4_NUCLEATION -USE MODI_ICE4_RSRIMCG_OLD -USE MODI_ICE4_COMPUTE_PDF -USE MODI_ICE4_RAINFR_VERT -USE MODI_ICE4_SLOW -USE MODI_ICE4_WARM -USE MODI_ICE4_FAST_RS -USE MODI_ICE4_FAST_RG -USE MODI_ICE4_FAST_RH -USE MODI_ICE4_FAST_RI - +! +USE MODE_ICE4_NUCLEATION, ONLY: ICE4_NUCLEATION +USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG +USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC +USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD +USE MODE_ICE4_COMPUTE_PDF, ONLY: ICE4_COMPUTE_PDF +USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT +USE MODE_ICE4_SLOW, ONLY: ICE4_SLOW +USE MODE_ICE4_WARM, ONLY: ICE4_WARM +USE MODE_ICE4_FAST_RS, ONLY: ICE4_FAST_RS +USE MODE_ICE4_FAST_RG, ONLY: ICE4_FAST_RG +USE MODE_ICE4_FAST_RH, ONLY: ICE4_FAST_RH +USE MODE_ICE4_FAST_RI, ONLY: ICE4_FAST_RI +! USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -68,20 +99,20 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -INTEGER, INTENT(IN) :: KPROMA,KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL +INTEGER, INTENT(IN) :: KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: LDSOFT +LOGICAL, INTENT(IN) :: ODSOFT REAL, DIMENSION(KPROMA), INTENT(IN) :: PCOMPUTE LOGICAL, INTENT(IN) :: OWARM -CHARACTER*80, INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER*80, INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_RC_RR_ACCR +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_RR_EVAP +CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation REAL, DIMENSION(KPROMA), INTENT(IN) :: PEXN REAL, DIMENSION(KPROMA), INTENT(IN) :: PRHODREF REAL, DIMENSION(KPROMA), INTENT(IN) :: PLVFACT REAL, DIMENSION(KPROMA), INTENT(IN) :: PLSFACT - INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K1 INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K2 INTEGER, DIMENSION(KPROMA), INTENT(IN) :: K3 @@ -91,18 +122,10 @@ 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(KIT,KJT,KKT), INTENT(IN) :: PRRT3D REAL, DIMENSION(KPROMA), INTENT(OUT) :: PRVHENI_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRHONG_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIMLTC_MR -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSRIMCG_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 @@ -111,65 +134,56 @@ 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(INOUT) :: PRCRIMSS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCRIMSG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSRIMCG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRACCSS -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRACCSG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSACCRG +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(INOUT) :: PRCWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSWETG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSDRYG -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRWETGH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRWETGH_MR +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(INOUT) :: PRCWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRWETH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRCDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRIDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRSDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRRDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRGDRYH -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PRDRYHG +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, 8), INTENT(INOUT) :: PRS_TEND REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRG_TEND REAL, DIMENSION(KPROMA, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PSSI +REAL, DIMENSION(KPROMA), INTENT(OUT) :: PSSI REAL, DIMENSION(KPROMA,0:KRR), INTENT(OUT) :: PA - - - - - - - REAL, DIMENSION(KPROMA,0:KRR), INTENT(OUT) :: PB - - - - - - - REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HCF REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LCF REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HRC REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LRC +REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_HCF +REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_LCF +REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_HRI +REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_LRI +REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction ! !* 0.2 declaration of local variables ! @@ -178,13 +192,13 @@ REAL, DIMENSION(KPROMA) :: ZT, ZRAINFR, & & ZKA, ZDV, ZAI, ZCJ, & & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, & & ZRGSI, ZRGSI_MR -REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D, ZRAINFR3D +REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D INTEGER :: JL, JV REAL, DIMENSION(KPROMA) :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise -REAL(KIND=JPRB) :: ZZW +REAL :: ZZW LOGICAL :: LLRFR LOGICAL, DIMENSION(KPROMA) :: LLCOMPUTE - +! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('ICE4_TENDENCIES', 0, ZHOOK_HANDLE) @@ -195,100 +209,74 @@ LLCOMPUTE(1:KSIZE)=PCOMPUTE(1:KSIZE)==1. ZT(:)=PT(:) DO JV=0,KRR ZVART(:,JV)=PVART(:,JV) -! better fill PA/PB arrays always inside this subroutine. REK. PA(:,JV)=0. + PB(:,JV)=0. ENDDO - -IF(LDSOFT) THEN - +! +IF(ODSOFT) THEN PRVHENI_MR(:)=0. PRRHONG_MR(:)=0. PRIMLTC_MR(:)=0. PRSRIMCG_MR(:)=0. - DO JV=0,KRR - PB(:,JV)=0. - ENDDO - ELSE ! !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES ! -------------------------------------- - CALL ICE4_NUCLEATION(KSIZE, LLCOMPUTE, & ZVART(:,ITH), PPRES, PRHODREF, PEXN, PLSFACT, ZT, & ZVART(:,IRV), & PCIT, PRVHENI_MR) + DO JL=1, KSIZE + ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*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) + ENDDO + ! + !* 3.3 compute the spontaneous freezing source: RRHONG + ! + CALL ICE4_RRHONG(KSIZE, PCOMPUTE, & + &PEXN, PLVFACT, PLSFACT, & + &ZT, ZVART(:,IRR), & + &ZVART(:,ITH), & + &PRRHONG_MR) + DO JL=1, KSIZE + ZVART(JL,ITH) = ZVART(JL,ITH) + PRRHONG_MR(JL)*(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) + ENDDO + ! + !* 7.1 cloud ice melting + ! + CALL ICE4_RIMLTC(KSIZE, PCOMPUTE, & + &PEXN, PLVFACT, PLSFACT, & + &ZT, & + &ZVART(:,ITH), ZVART(:,IRI), & + &PRIMLTC_MR) + DO JL=1, KSIZE + ZVART(JL,ITH) = ZVART(JL,ITH) - PRIMLTC_MR(JL)*(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) + ENDDO - DO JL=1, KSIZE - ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*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) - ENDDO - ! - !* 3.3 compute the spontaneous freezing source: RRHONG - ! - DO JL=1, KSIZE - IF (ZT(JL)<XTT-35.0 .AND. ZVART(JL,IRR)>XRTMIN(3) .AND. LLCOMPUTE(JL)) THEN - PRRHONG_MR(JL)=ZVART(JL,IRR) - ELSE - PRRHONG_MR(JL) = 0. - ENDIF - ENDDO - IF (LFEEDBACKT) THEN - DO JL=1, KSIZE - !Limitation due to -35 crossing of temperature - PRRHONG_MR(JL)=MIN(PRRHONG_MR(JL), MAX(0., ((XTT-35.)/PEXN(JL)-ZVART(JL,ITH))/(PLSFACT(JL)-PLVFACT(JL)))) - ENDDO - ENDIF - DO JL=1, KSIZE - ZVART(JL,ITH) = ZVART(JL,ITH) + PRRHONG_MR(JL)*(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) - ENDDO - ! - !* 7.1 cloud ice melting - ! - DO JL=1, KSIZE - IF (ZVART(JL,IRI)>0. .AND. ZT(JL)>XTT .AND. LLCOMPUTE(JL)) THEN - PRIMLTC_MR(JL)=ZVART(JL,IRI) - ELSE - PRIMLTC_MR(JL)=0. - ENDIF - ENDDO - IF(LFEEDBACKT) THEN - DO JL=1, KSIZE - !Limitation due to 0 crossing of temperature - PRIMLTC_MR(JL)=MIN(PRIMLTC_MR(JL), MAX(0., (ZVART(JL,ITH)-XTT/PEXN(JL)) / (PLSFACT(JL)-PLVFACT(JL)))) - ENDDO - ENDIF - DO JL=1, KSIZE - ZVART(JL,ITH) = ZVART(JL,ITH) - PRIMLTC_MR(JL)*(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) - ENDDO - - DO JL=1, KSIZE - 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,IRV) = - PRVHENI_MR(JL) + 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,IRC) = + PRIMLTC_MR(JL) + PB(JL, IRV)=PB(JL, IRV) - PRVHENI_MR(JL) - PB(JL,IRR) = - PRRHONG_MR(JL) + PB(JL, IRC)=PB(JL, IRC) + PRIMLTC_MR(JL) - PB(JL,IRI) = + PRVHENI_MR(JL) - PB(JL,IRI) = PB(JL,IRI) - PRIMLTC_MR(JL) + PB(JL, IRR)=PB(JL, IRR) - PRRHONG_MR(JL) - PB(JL,IRS) = 0. + PB(JL, IRI)=PB(JL, IRI) + PRVHENI_MR(JL) + PB(JL, IRI)=PB(JL, IRI) - PRIMLTC_MR(JL) - PB(JL,IRG) = + PRRHONG_MR(JL) - ENDDO - IF (KRR==7) PB(:,IRH)=0. + PB(JL, IRG)=PB(JL, IRG) + PRRHONG_MR(JL) + ENDDO ! ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) ! @@ -297,11 +285,11 @@ ELSE WHERE(ZVART(1:KSIZE,IRS)>0.) ZLBDAS(1:KSIZE) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(1:KSIZE)*MAX(ZVART(1:KSIZE,IRS), XRTMIN(5)))**XLBEXS) END WHERE - CALL ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LLCOMPUTE, & + CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, LLCOMPUTE, & &PRHODREF, & &ZLBDAS, & &ZT, ZVART(:,IRC), ZVART(:,IRS), & - &PRSRIMCG_MR, PB(:,IRS), PB(:,IRG)) + &PRSRIMCG_MR, PB(:, IRS), PB(:, IRG)) DO JL=1, KSIZE ZVART(JL,IRS) = ZVART(JL,IRS) - PRSRIMCG_MR(JL) ZVART(JL,IRG) = ZVART(JL,IRG) + PRSRIMCG_MR(JL) @@ -309,10 +297,9 @@ ELSE ELSE PRSRIMCG_MR(:) = 0. ENDIF - -! -!* Derived fields -! + ! + !* Derived fields + ! DO JL=1, KSIZE ZZW = EXP(XALPI-XBETAI/ZT(JL)-XGAMI*ALOG(ZT(JL))) PSSI(JL) = ZVART(JL,IRV)*( PPRES(JL)-ZZW ) / ( XEPSILO * ZZW ) - 1.0 @@ -323,30 +310,39 @@ ELSE + ( XRV*ZT(JL) ) / (ZDV(JL)*ZZW) ZCJ(JL) = XSCFAC*PRHODREF(JL)**0.3 / SQRT(1.718E-5+0.0049E-5*(ZT(JL)-XTT)) ENDDO - -ENDIF ! LDSOFT +ENDIF ! ODSOFT ! !Cloud water split between high and low content part is done here -CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_PR_PDF,& - PRHODREF, ZVART(:,IRC), PCF, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, ZRAINFR) -! ZRAINFR is computed above, then overwritten below :-( .REK. - - -j ai des doutes sur le codage de Ryad, normalement zrainfr sert à remplir prainfr qui remplit à son tour zrainfr - -LLRFR=HSUBG_RC_RR_ACCR=='PRFR' +CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,& + PRHODREF, ZVART(:,IRC), ZVART(:,IRI), PCF, ZT, PSIGMA_RC, & + PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & + PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRAINFR) +LLRFR=HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR' IF (LLRFR) THEN !Diagnostic of precipitation fraction - ZRRT3D(:,:,:)=PRRT3D(:,:,:) + PRAINFR(:,:,:) = 0. + ZRRT3D (:,:,:) = 0. + ZRST3D (:,:,:) = 0. + ZRGT3D (:,:,:) = 0. + ZRHT3D (:,:,:) = 0. DO JL=1,KSIZE - ZRRT3D (K1(JL),K2(JL),K3(JL))=PVART(JL,IRR)-PRRHONG_MR(JL) - ENDDO - CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, ZRAINFR3D(:,:,:), ZRRT3D(:,:,:)) + PRAINFR(K1(JL), K2(JL), K3(JL)) = ZRAINFR(JL) + ZRRT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRR) + ZRST3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRS) + ZRGT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRG) + END DO + IF (KRR==7) THEN + DO JL=1,KSIZE + ZRHT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRH) + ENDDO + ENDIF + CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), & + &ZRRT3D(:,:,:), ZRST3D(:,:,:), ZRGT3D(:,:,:), ZRHT3D(:,:,:)) DO JL=1,KSIZE - ZRAINFR(JL)=ZRAINFR3D(K1(JL), K2(JL), K3(JL)) - ENDDO + ZRAINFR(JL)=PRAINFR(K1(JL), K2(JL), K3(JL)) + END DO ELSE + PRAINFR(:,:,:)=1. ZRAINFR(:)=1. ENDIF ! @@ -354,34 +350,34 @@ ENDIF ! DO JL=1, KSIZE !ZLBDAR will be used when we consider rain diluted over the grid box - IF (ZVART(JL,IRR)>0.) THEN - ZLBDAR(JL) = XLBR*( PRHODREF(JL)*MAX(ZVART(JL,IRR), XRTMIN(3)))**XLBEXR + IF(ZVART(JL,IRR)>0.) THEN + ZLBDAR(JL)=XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR), XRTMIN(3)))**XLBEXR ELSE ZLBDAR(JL)=0. ENDIF !ZLBDAR_RF is used when we consider rain concentrated in its fraction - IF (LLRFR) THEN - IF (ZVART(JL,IRR)>0. .AND. ZRAINFR(JL)>0.) THEN - ZLBDAR_RF(JL) = XLBR*( PRHODREF(JL)*MAX(ZVART(JL,IRR)/ZRAINFR(JL), XRTMIN(3)))**XLBEXR + IF(LLRFR) THEN + IF(ZVART(JL,IRR)>0. .AND. ZRAINFR(JL)>0.) THEN + ZLBDAR_RF(JL)=XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR)/ZRAINFR(JL), XRTMIN(3)))**XLBEXR ELSE ZLBDAR_RF(JL)=0. ENDIF ELSE - ZLBDAR_RF(JL) = ZLBDAR(JL) + ZLBDAR_RF(JL)=ZLBDAR(JL) ENDIF - IF (ZVART(JL,IRS)>0.) THEN - ZLBDAS(JL) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZVART(JL,IRS), XRTMIN(5)))**XLBEXS) + IF(ZVART(JL,IRS)>0.) THEN + ZLBDAS(JL)=MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZVART(JL,IRS), XRTMIN(5)))**XLBEXS) ELSE ZLBDAS(JL)=0. ENDIF - IF (ZVART(JL,IRG)>0.) THEN - ZLBDAG(JL) = XLBG*(PRHODREF(JL)*MAX(ZVART(JL,IRG), XRTMIN(6)))**XLBEXG + IF(ZVART(JL,IRG)>0.) THEN + ZLBDAG(JL)=XLBG*(PRHODREF(JL)*MAX(ZVART(JL,IRG), XRTMIN(6)))**XLBEXG ELSE ZLBDAG(JL)=0. ENDIF - IF (KRR==7) THEN - IF (PVART(JL,IRH)>0.) THEN - ZLBDAH(JL) = XLBH*(PRHODREF(JL)*MAX(PVART(JL,IRH), XRTMIN(7)))**XLBEXH + IF(KRR==7) THEN + IF(ZVART(JL,IRH)>0.) THEN + ZLBDAH(JL)=XLBH*(PRHODREF(JL)*MAX(ZVART(JL,IRH), XRTMIN(7)))**XLBEXH ELSE ZLBDAH(JL)=0. ENDIF @@ -389,13 +385,13 @@ DO JL=1, KSIZE ENDDO ! ! -CALL ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, ZT, & +CALL ICE4_SLOW(KSIZE, ODSOFT, PCOMPUTE, PRHODREF, ZT, & &PSSI, PLVFACT, PLSFACT, & &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), & &ZLBDAS, ZLBDAG, & - &ZAI, ZCJ, & + &ZAI, ZCJ, PHLI_HCF, PHLI_HRI, & &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & - &PA(:,ITH), PA(:,IRV), PA(:,IRC), PA(:,IRI), PA(:,IRS), PA(:,IRG)) + &PA(:, ITH), PA(:, IRV), PA(:, IRC), PA(:, IRI), PA(:, IRS), PA(:, IRG)) ! !------------------------------------------------------------------------------- ! @@ -406,7 +402,7 @@ CALL ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, ZT, & ! IF(OWARM) THEN ! Check if the formation of the raindrops by the slow ! warm processes is allowed - CALL ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & + CALL ICE4_WARM(KSIZE, ODSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & &PRHODREF, PLVFACT, ZT, PPRES, ZVART(:,ITH),& &ZLBDAR, ZLBDAR_RF, ZKA, ZDV, ZCJ, & &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & @@ -426,7 +422,7 @@ END IF !* 4. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s ! ---------------------------------------------- ! -CALL ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, & +CALL ICE4_FAST_RS(KPROMA, KSIZE, ODSOFT, PCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAR, ZLBDAS, & @@ -444,13 +440,12 @@ CALL ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, & !* 5. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g ! ------------------------------------------------------ ! -! Move these inits inside. REK 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) ENDDO -CALL ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, & +CALL ICE4_FAST_RG(KPROMA, KSIZE, ODSOFT, PCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, PCIT, & &ZLBDAR, ZLBDAS, ZLBDAG, & @@ -469,11 +464,11 @@ CALL ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, & ! ---------------------------------------------- ! IF (KRR==7) THEN - CALL ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, ZWETG, & + CALL ICE4_FAST_RH(KPROMA, KSIZE, ODSOFT, PCOMPUTE, ZWETG, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & - &ZT, ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRR), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), PVART(:,IRH), & + &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, & &PRH_TEND, & @@ -499,7 +494,7 @@ END IF !* 7. COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES ! ------------------------------------------------------------- ! -CALL ICE4_FAST_RI(KSIZE, LDSOFT, PCOMPUTE, & +CALL ICE4_FAST_RI(KSIZE, ODSOFT, PCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, & &ZAI, ZCJ, PCIT, & &PSSI, & @@ -509,3 +504,4 @@ CALL ICE4_FAST_RI(KSIZE, LDSOFT, PCOMPUTE, & IF (LHOOK) CALL DR_HOOK('ICE4_TENDENCIES', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_TENDENCIES +END MODULE MODE_ICE4_TENDENCIES diff --git a/src/mesonh/micro/ice4_tendencies.f90 b/src/mesonh/micro/ice4_tendencies.f90 deleted file mode 100644 index b7de7efd33a076a697204550d3233bc67e540b70..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/ice4_tendencies.f90 +++ /dev/null @@ -1,633 +0,0 @@ -!MNH_LIC Copyright 1994-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. -!----------------------------------------------------------------- -MODULE MODI_ICE4_TENDENCIES -INTERFACE -SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, ODSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, K1, K2, K3, & - &PPRES, PCF, PSIGMA_RC, & - &PCIT, & - &PT, PTHT, & - &PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & - &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, & - &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & - &PA_TH, PA_RV, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, & - &PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RS, PB_RG, PB_RH, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & - &PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, PRAINFR) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: ODSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -LOGICAL, INTENT(IN) :: OWARM -CHARACTER(len=80), INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER(len=80), INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER(len=80), INTENT(IN) :: HSUBG_AUCV_RI -CHARACTER(len=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K1 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K2 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K3 -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRVHENI_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRHONG_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIMLTC_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSRIMCG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCRIMSS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCRIMSG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSRIMCG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRACCSS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRACCSG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSACCRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRWETGH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRWETGH_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRGWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRGDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRDRYHG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PSSI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_HRI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_LRI -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction -END SUBROUTINE ICE4_TENDENCIES -END INTERFACE -END MODULE MODI_ICE4_TENDENCIES -SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & - &KRR, ODSOFT, PCOMPUTE, & - &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & - &PEXN, PRHODREF, PLVFACT, PLSFACT, K1, K2, K3, & - &PPRES, PCF, PSIGMA_RC, & - &PCIT, & - &PT, PTHT, & - &PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & - &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, & - &PRS_TEND, PRG_TEND, PRH_TEND, PSSI, & - &PA_TH, PA_RV, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, & - &PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RS, PB_RG, PB_RH, & - &PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & - &PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, PRAINFR) -!! -!!** PURPOSE -!! ------- -!! Computes the tendencies -!! -!! AUTHOR -!! ------ -!! S. Riette from the splitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -! -! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: XALPI,XBETAI,XCI,XCPV,XEPSILO,XGAMI,XLSTT,XMD,XMV,XP00,XRV,XTT -USE MODD_PARAM_ICE, ONLY: CSNOWRIMING -USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,XLBG,XLBH,XLBR,XLBS,XRTMIN -USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC -! -USE MODE_ICE4_COMPUTE_PDF -USE MODE_ICE4_FAST_RG -USE MODE_ICE4_FAST_RH -USE MODE_ICE4_FAST_RI -USE MODE_ICE4_FAST_RS -USE MODE_ICE4_NUCLEATION -USE MODE_ICE4_RAINFR_VERT -USE MODE_ICE4_RIMLTC -USE MODE_ICE4_RRHONG -USE MODE_ICE4_RSRIMCG_OLD -USE MODE_ICE4_SLOW -USE MODE_ICE4_WARM -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -INTEGER, INTENT(IN) :: KRR -LOGICAL, INTENT(IN) :: ODSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -LOGICAL, INTENT(IN) :: OWARM -CHARACTER(len=80), INTENT(IN) :: HSUBG_RC_RR_ACCR -CHARACTER(len=80), INTENT(IN) :: HSUBG_RR_EVAP -CHARACTER(len=4), INTENT(IN) :: HSUBG_AUCV_RC -CHARACTER(len=80), INTENT(IN) :: HSUBG_AUCV_RI -CHARACTER(len=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K1 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K2 -INTEGER, DIMENSION(KSIZE), INTENT(IN) :: K3 -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRVHENI_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRHONG_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIMLTC_MR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSRIMCG_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCAUTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCACCR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRREVAV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCRIMSS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCRIMSG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSRIMCG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRACCSS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRACCSG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSACCRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSWETG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSDRYG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRWETGH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRWETGH_MR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRGWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRWETH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRCDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRSDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRGDRYH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRDRYHG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCBERI -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PSSI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RV -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RS -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PB_RH -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_HCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_HRI -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLI_LRI -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - & ZT, ZTHT, ZRHT, & - & ZZW, & - & ZKA, ZDV, ZAI, ZCJ, & - & ZRF, & - & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, & - & ZRGSI, ZRGSI_MR -REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D -INTEGER :: JL -REAL, DIMENSION(KSIZE) :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise - -PA_TH(:)=0. -PA_RV(:)=0. -PA_RC(:)=0. -PA_RR(:)=0. -PA_RI(:)=0. -PA_RS(:)=0. -PA_RG(:)=0. -PA_RH(:)=0. -PB_TH(:)=0. -PB_RV(:)=0. -PB_RC(:)=0. -PB_RR(:)=0. -PB_RI(:)=0. -PB_RS(:)=0. -PB_RG(:)=0. -PB_RH(:)=0. -! -DO JL=1, KSIZE - ZRVT(JL)=PRVT(JL) - ZRCT(JL)=PRCT(JL) - ZRRT(JL)=PRRT(JL) - ZRIT(JL)=PRIT(JL) - ZRST(JL)=PRST(JL) - ZRGT(JL)=PRGT(JL) - ZTHT(JL)=PTHT(JL) - ZRHT(JL)=PRHT(JL) - ZT(JL)=PT(JL) -ENDDO -IF(ODSOFT) THEN - PRVHENI_MR(:)=0. - PRRHONG_MR(:)=0. - PRIMLTC_MR(:)=0. - PRSRIMCG_MR(:)=0. -ELSE - ! - !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES - ! -------------------------------------- - CALL ICE4_NUCLEATION(KSIZE, PCOMPUTE==1., & - ZTHT, PPRES, PRHODREF, PEXN, PLSFACT, ZT, & - ZRVT, & - PCIT, PRVHENI_MR) - PB_RI(:)=PB_RI(:) + PRVHENI_MR(:) - PB_RV(:)=PB_RV(:) - PRVHENI_MR(:) - PB_TH(:)=PB_TH(:) + PRVHENI_MR(:)*PLSFACT(:) - DO JL=1, KSIZE - ZRIT(JL)=ZRIT(JL) + PRVHENI_MR(JL) - ZRVT(JL)=ZRVT(JL) - PRVHENI_MR(JL) - ZTHT(JL)=ZTHT(JL) + PRVHENI_MR(JL)*PLSFACT(JL) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - !* 3.3 compute the spontaneous freezing source: RRHONG - ! - CALL ICE4_RRHONG(KSIZE, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &ZT, ZRRT, & - &ZTHT, & - &PRRHONG_MR) - DO JL=1, KSIZE - PB_RG(JL) = PB_RG(JL) + PRRHONG_MR(JL) - PB_RR(JL) = PB_RR(JL) - PRRHONG_MR(JL) - PB_TH(JL) = PB_TH(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) - END DO - DO JL=1, KSIZE - ZRGT(JL) = ZRGT(JL) + PRRHONG_MR(JL) - ZRRT(JL) = ZRRT(JL) - PRRHONG_MR(JL) - ZTHT(JL) = ZTHT(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG)) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - !* 7.1 cloud ice melting - ! - CALL ICE4_RIMLTC(KSIZE, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &ZT, & - &ZTHT, ZRIT, & - &PRIMLTC_MR) - DO JL=1, KSIZE - PB_RC(JL) = PB_RC(JL) + PRIMLTC_MR(JL) - PB_RI(JL) = PB_RI(JL) - PRIMLTC_MR(JL) - PB_TH(JL) = PB_TH(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) - END DO - DO JL=1, KSIZE - ZRCT(JL) = ZRCT(JL) + PRIMLTC_MR(JL) - ZRIT(JL) = ZRIT(JL) - PRIMLTC_MR(JL) - ZTHT(JL) = ZTHT(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC)) - ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO - ! - ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) - ! - IF(CSNOWRIMING=='OLD ') THEN - ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE - CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, PCOMPUTE==1., & - &PRHODREF, & - &ZLBDAS, & - &ZT, ZRCT, ZRST, & - &PRSRIMCG_MR, PB_RS, PB_RG) - DO JL=1, KSIZE - ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL) - ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL) - ENDDO - ELSE - PRSRIMCG_MR(:) = 0. - ENDIF -ENDIF -! -!* Derived fields -! -IF(KSIZE>0) THEN - IF(.NOT. ODSOFT) THEN - ZZW(:) = EXP(XALPI-XBETAI/ZT(:)-XGAMI*ALOG(ZT(:))) - DO JL=1, KSIZE - PSSI(JL) = ZRVT(JL)*( PPRES(JL)-ZZW(JL) ) / ( XEPSILO * ZZW(JL) ) - 1.0 - ! Supersaturation over ice - ZKA(JL) = 2.38E-2 + 0.0071E-2*(ZT(JL)-XTT) ! k_a - ZDV(JL) = 0.211E-4*(ZT(JL)/XTT)**1.94 * (XP00/PPRES(JL)) ! D_v - ZAI(JL) = (XLSTT+(XCPV-XCI)*(ZT(JL)-XTT))**2 / (ZKA(JL)*XRV*ZT(JL)**2) & - + ( XRV*ZT(JL) ) / (ZDV(JL)*ZZW(JL)) - ZCJ(JL) = XSCFAC*PRHODREF(JL)**0.3 / SQRT(1.718E-5+0.0049E-5*(ZT(JL)-XTT)) - ENDDO - ENDIF - ! - !Cloud water split between high and low content part is done here - CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,& - PRHODREF, ZRCT, ZRIT, PCF, ZT, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC,& - PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRF) - IF(HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN - !Diagnostic of precipitation fraction - PRAINFR(:,:,:) = 0. - ZRRT3D (:,:,:) = 0. - ZRST3D (:,:,:) = 0. - ZRGT3D (:,:,:) = 0. - ZRHT3D (:,:,:) = 0. - DO JL=1,KSIZE - PRAINFR(K1(JL), K2(JL), K3(JL)) = ZRF(JL) - ZRRT3D (K1(JL), K2(JL), K3(JL)) = ZRRT(JL) - ZRST3D (K1(JL), K2(JL), K3(JL)) = ZRST(JL) - ZRGT3D (K1(JL), K2(JL), K3(JL)) = ZRGT(JL) - END DO - IF (KRR==7) THEN - DO JL=1,KSIZE - ZRHT3D (K1(JL), K2(JL), K3(JL)) = ZRHT(JL) - ENDDO - ENDIF - CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), ZRRT3D(:,:,:), & - &ZRST3D(:,:,:), ZRGT3D(:,:,:), ZRHT3D(:,:,:)) - DO JL=1,KSIZE - ZRF(JL)=PRAINFR(K1(JL), K2(JL), K3(JL)) - END DO - ELSE - PRAINFR(:,:,:)=1. - ZRF(:)=1. - ENDIF - ! - !* compute the slope parameters - ! - ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE - ZLBDAG(:)=0. - WHERE(ZRGT(:)>0.) - ZLBDAG(:) = XLBG*(PRHODREF(:)*MAX(ZRGT(:), XRTMIN(6)))**XLBEXG - END WHERE - !ZLBDAR will be used when we consider rain diluted over the grid box - ZLBDAR(:)=0. - WHERE(ZRRT(:)>0.) - ZLBDAR(:) = XLBR*( PRHODREF(:)*MAX( ZRRT(:), XRTMIN(3)))**XLBEXR - END WHERE - !ZLBDAR_RF is used when we consider rain concentrated in its fraction - IF (HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN - ZLBDAR_RF(:)=0. - WHERE(ZRRT(:)>0. .AND. ZRF(:)>0.) - ZLBDAR_RF(:) = XLBR*( PRHODREF(:) *MAX( ZRRT(:)/ZRF(:) , XRTMIN(3)))**XLBEXR - END WHERE - ELSE - ZLBDAR_RF(:) = ZLBDAR(:) - ENDIF - IF(KRR==7) THEN - ZLBDAH(:)=0. - WHERE(PRHT(:)>0.) - ZLBDAH(:) = XLBH*(PRHODREF(:)*MAX(PRHT(:), XRTMIN(7)))**XLBEXH - END WHERE - ENDIF -ENDIF -! -! -CALL ICE4_SLOW(KSIZE, ODSOFT, PCOMPUTE, PRHODREF, ZT, & - &PSSI, PLVFACT, PLSFACT, & - &ZRVT, ZRCT, ZRIT, ZRST, ZRGT, & - &ZLBDAS, ZLBDAG, & - &ZAI, ZCJ, PHLI_HCF, PHLI_HRI, & - &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & - &PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG) -! -!------------------------------------------------------------------------------- -! -! -!* 3. COMPUTES THE SLOW WARM PROCESS SOURCES -! -------------------------------------- -! -! -IF(OWARM) THEN ! Check if the formation of the raindrops by the slow - ! warm processes is allowed - CALL ICE4_WARM(KSIZE, ODSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & - &PRHODREF, PLVFACT, ZT, PPRES, ZTHT,& - &ZLBDAR, ZLBDAR_RF, ZKA, ZDV, ZCJ, & - &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, & - &PCF, ZRF, & - &ZRVT, ZRCT, ZRRT, & - &PRCAUTR, PRCACCR, PRREVAV, & - &PA_TH, PA_RV, PA_RC, PA_RR) -ELSE - PRCAUTR(:)=0. - PRCACCR(:)=0. - PRREVAV(:)=0. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 4. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s -! ---------------------------------------------- -! -CALL ICE4_FAST_RS(KSIZE, KSIZE, ODSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, & - &ZLBDAR, ZLBDAS, & - &ZT, ZRVT, ZRCT, ZRRT, ZRST, & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & - &PRS_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RS, PA_RG) -! -!------------------------------------------------------------------------------- -! -! -!* 5. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g -! ------------------------------------------------------ -! -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) -ENDDO -CALL ICE4_FAST_RG(KSIZE, KSIZE, ODSOFT, PCOMPUTE, KRR, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, PCIT, & - &ZLBDAR, ZLBDAS, ZLBDAG, & - &ZT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - &ZRGSI, ZRGSI_MR(:), & - &ZWETG, & - &PRICFRRG, PRRCFRIG, PRICFRR, PRCWETG, PRIWETG, PRRWETG, PRSWETG, & - &PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, PRWETGH, PRWETGH_MR, PRGMLTR, & - &PRG_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH, PB_RG, PB_RH) -! -!------------------------------------------------------------------------------- -! -! -!* 6. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_h -! ---------------------------------------------- -! -IF (KRR==7) THEN - CALL ICE4_FAST_RH(KSIZE, KSIZE, ODSOFT, PCOMPUTE, ZWETG, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &ZDV, ZKA, ZCJ, & - &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & - &ZT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, PRHT, & - &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & - &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, & - &PRH_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH) -ELSE - PRCWETH(:)=0. - PRIWETH(:)=0. - PRSWETH(:)=0. - PRGWETH(:)=0. - PRRWETH(:)=0. - PRCDRYH(:)=0. - PRIDRYH(:)=0. - PRSDRYH(:)=0. - PRRDRYH(:)=0. - PRGDRYH(:)=0. - PRDRYHG(:)=0. - PRHMLTR(:)=0. -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 7. COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES -! ------------------------------------------------------------- -! -CALL ICE4_FAST_RI(KSIZE, ODSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, & - &ZAI, ZCJ, PCIT, & - &PSSI, & - &ZRCT, ZRIT, & - &PRCBERI, PA_TH, PA_RC, PA_RI) -! -! -END SUBROUTINE ICE4_TENDENCIES diff --git a/src/mesonh/micro/rain_ice_red.f90 b/src/mesonh/micro/rain_ice_red.f90 index 718410e3c1481b8f7f1525b4befa79e30a7ae372..5a2bca895b0eee03a5494f79d38cefa5332338be 100644 --- a/src/mesonh/micro/rain_ice_red.f90 +++ b/src/mesonh/micro/rain_ice_red.f90 @@ -269,23 +269,33 @@ use modd_budget, only: lbu_enable, lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, & NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, & tbudgets -USE MODD_CST, ONLY: XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT -USE MODD_PARAMETERS, ONLY: JPVEXT,XUNDEF -USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER, & - NMAXITER,XMRSTEP,XTSTEP_TS,XVDEPOSC +USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW +USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF +USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & + & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN USE MODD_VAR_ll, ONLY: IP - +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 mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end USE MODE_ll USE MODE_MSG use mode_tools, only: Countjv -USE MODE_ICE4_NUCLEATION_WRAPPER USE MODE_ICE4_RAINFR_VERT USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM +USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER +USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -369,7 +379,7 @@ INTEGER :: IMICRO ! Case r_x>0 locations INTEGER, DIMENSION(KSIZE) :: I1,I2,I3 ! Used to replace the COUNT INTEGER :: JL ! and PACK intrinsics ! -!Arrays for nucleation call outisde of LDMICRO points +!Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature REAL, DIMENSION(KIT, KJT, KKT) :: & @@ -389,7 +399,6 @@ REAL, DIMENSION(KIT, KJT, KKT) :: & & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content - REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! !Packed variables @@ -484,9 +493,22 @@ REAL, DIMENSION(KSIZE) :: Z0RVT, & ! Water vapor m.r. at the beginig of th & Z0RIT, & ! Pristine ice m.r. at the beginig of the current loop & Z0RST, & ! Snow/aggregate m.r. at the beginig of the current loop & Z0RGT, & ! Graupel m.r. at the beginig of the current loop - & Z0RHT, & ! Hail m.r. at the beginig of the current loop - & ZA_TH, ZA_RV, ZA_RC, ZA_RR, ZA_RI, ZA_RS, ZA_RG, ZA_RH, & - & ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH + & Z0RHT ! Hail m.r. at the beginig of the current loop + + + + + +!en attendant phasage on utilise KSIZE à la place de KPROMA +REAL, DIMENSION(KSIZE,0:7) :: & + & ZVART, & !Packed variables + & ZA, ZB + + + + + + ! !To take into acount external tendencies inside the splitting REAL, DIMENSION(KSIZE) :: ZEXT_RV, & ! External tendencie for rv @@ -629,7 +651,7 @@ IF(.NOT. LSEDIM_AFTER) THEN &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF @@ -849,15 +871,27 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !*** 4.1 Tendecies computation ! ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise - CALL ICE4_TENDENCIES(IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & + + + +!KPROMA=IMICRO: temporary merging step +ZVART(:, ITH)=ZTHT(:) +ZVART(:, IRV)=ZRVT(:) +ZVART(:, IRC)=ZRCT(:) +ZVART(:, IRR)=ZRRT(:) +ZVART(:, IRI)=ZRIT(:) +ZVART(:, IRS)=ZRST(:) +ZVART(:, IRG)=ZRGT(:) +IF(KRR==7) ZVART(:, IRH)=ZRHT(:) + + CALL ICE4_TENDENCIES(IMICRO, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & &KRR, LSOFT, ZCOMPUTE, & &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & - &ZPRES, ZCF, ZSIGMA_RC,& + &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & - &ZZT, ZTHT, & - &ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT, & + &ZZT, ZVART, & &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, & &ZRCAUTR, ZRCACCR, ZRREVAV, & @@ -868,21 +902,28 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies &ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, ZRDRYHG, ZRHMLTR, & &ZRCBERI, & &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & - &ZA_TH, ZA_RV, ZA_RC, ZA_RR, ZA_RI, ZA_RS, ZA_RG, ZA_RH, & - &ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH, & + &ZA, ZB, & &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, PRAINFR) +ZTHT(:)=ZVART(:, ITH) +ZRVT(:)=ZVART(:, IRV) +ZRCT(:)=ZVART(:, IRC) +ZRRT(:)=ZVART(:, IRR) +ZRIT(:)=ZVART(:, IRI) +ZRST(:)=ZVART(:, IRS) +ZRGT(:)=ZVART(:, IRG) +IF(KRR==7) ZRHT(:)=ZVART(:, IRH) ! External tendencies IF(GEXT_TEND) THEN DO JL=1, IMICRO - ZA_TH(JL) = ZA_TH(JL) + ZEXT_TH(JL) - ZA_RV(JL) = ZA_RV(JL) + ZEXT_RV(JL) - ZA_RC(JL) = ZA_RC(JL) + ZEXT_RC(JL) - ZA_RR(JL) = ZA_RR(JL) + ZEXT_RR(JL) - ZA_RI(JL) = ZA_RI(JL) + ZEXT_RI(JL) - ZA_RS(JL) = ZA_RS(JL) + ZEXT_RS(JL) - ZA_RG(JL) = ZA_RG(JL) + ZEXT_RG(JL) - ZA_RH(JL) = ZA_RH(JL) + ZEXT_RH(JL) + ZA(JL, ITH) = ZA(JL, ITH) + ZEXT_TH(JL) + ZA(JL, IRV) = ZA(JL, IRV) + ZEXT_RV(JL) + ZA(JL, IRC) = ZA(JL, IRC) + ZEXT_RC(JL) + ZA(JL, IRR) = ZA(JL, IRR) + ZEXT_RR(JL) + ZA(JL, IRI) = ZA(JL, IRI) + ZEXT_RI(JL) + ZA(JL, IRS) = ZA(JL, IRS) + ZEXT_RS(JL) + ZA(JL, IRG) = ZA(JL, IRG) + ZEXT_RG(JL) + ZA(JL, IRH) = ZA(JL, IRH) + ZEXT_RH(JL) ENDDO ENDIF ! @@ -894,15 +935,15 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !We need to adjust tendencies when temperature reaches 0 IF(LFEEDBACKT) THEN DO JL=1, IMICRO - !Is ZB_TH enough to change temperature sign? - ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB_TH(JL) - XTT/ZEXN(JL)) + !Is ZB(:, ITH) enough to change temperature sign? + ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB(JL, ITH) - XTT/ZEXN(JL)) ZMAXTIME(JL)=ZMAXTIME(JL)*MAX(0., SIGN(1., ZW1D(JL))) - !Can ZA_TH make temperature change of sign? - ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA_TH(JL)))) ! WHERE(ABS(ZA_TH(:))>1.E-20) + !Can ZA(:, ITH) make temperature change of sign? + ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA(JL, ITH)))) ! WHERE(ABS(ZA(:, ITH))>1.E-20) ZTIME_THRESHOLD(JL)=(1. - ZW1D(JL))*(-1.) + & ZW1D(JL) * & - (XTT/ZEXN(JL) - ZB_TH(JL) - ZTHT(JL))/ & - SIGN(MAX(ABS(ZA_TH(JL)), 1.E-20), ZA_TH(JL)) + (XTT/ZEXN(JL) - ZB(JL, ITH) - ZTHT(JL))/ & + SIGN(MAX(ABS(ZA(JL, ITH)), 1.E-20), ZA(JL, ITH)) ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ZTIME_THRESHOLD(JL))) ! WHERE(ZTIME_THRESHOLD(:)>1.E-20) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) @@ -912,43 +953,43 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !We need to adjust tendencies when a specy disappears !When a species is missing, only the external tendencies can be negative (and we must keep track of it) DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RV(JL)+1.E-20)) * & ! WHERE(ZA_RV(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRV)+1.E-20)) * & ! WHERE(ZA(:, IRV)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(1)-ZRVT(JL))) ! WHERE(ZRVT(:)>XRTMIN(1)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RV(JL)+ZRVT(JL))/MIN(ZA_RV(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRV)+ZRVT(JL))/MIN(ZA(JL, IRV), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RC(JL)+1.E-20)) * & ! WHERE(ZA_RC(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRC)+1.E-20)) * & ! WHERE(ZA(:, IRC)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(2)-ZRCT(JL))) ! WHERE(ZRCT(:)>XRTMIN(2)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RC(JL)+ZRCT(JL))/MIN(ZA_RC(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRC)+ZRCT(JL))/MIN(ZA(JL, IRC), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RR(JL)+1.E-20)) * & ! WHERE(ZA_RR(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRR)+1.E-20)) * & ! WHERE(ZA(:, IRR)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(3)-ZRRT(JL))) ! WHERE(ZRRT(:)>XRTMIN(3)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RR(JL)+ZRRT(JL))/MIN(ZA_RR(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRR)+ZRRT(JL))/MIN(ZA(JL, IRR), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RI(JL)+1.E-20)) * & ! WHERE(ZI_RV(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRI)+1.E-20)) * & ! WHERE(ZA(:, IRI)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(4)-ZRIT(JL))) ! WHERE(ZRIT(:)>XRTMIN(4)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RI(JL)+ZRIT(JL))/MIN(ZA_RI(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRI)+ZRIT(JL))/MIN(ZA(JL, IRI), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RS(JL)+1.E-20)) * & ! WHERE(ZA_RS(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRS)+1.E-20)) * & ! WHERE(ZA(:, IRS)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(5)-ZRST(JL))) ! WHERE(ZRST(:)>XRTMIN(5)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RS(JL)+ZRST(JL))/MIN(ZA_RS(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRS)+ZRST(JL))/MIN(ZA(JL, IRS), -1.E-20)) - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RG(JL)+1.E-20)) * & ! WHERE(ZA_RG(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRG)+1.E-20)) * & ! WHERE(ZA(:, IRG)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) ! WHERE(ZRGT(:)>XRTMIN(6)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RG(JL)+ZRGT(JL))/MIN(ZA_RG(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRG)+ZRGT(JL))/MIN(ZA(JL, IRG), -1.E-20)) ENDDO IF(KRR==7) THEN DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA_RH(JL)+1.E-20)) * & ! WHERE(ZA_RH(:)<-1.E-20) + ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRH)+1.E-20)) * & ! WHERE(ZA(:, IRH)<-1.E-20) &MAX(0., -SIGN(1., XRTMIN(7)-ZRHT(JL))) ! WHERE(ZRHT(:)>XRTMIN(7)) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RH(JL)+ZRHT(JL))/MIN(ZA_RH(JL), -1.E-20)) + &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRH)+ZRHT(JL))/MIN(ZA(JL, IRH), -1.E-20)) ENDDO ENDIF @@ -972,79 +1013,79 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies IF(XMRSTEP/=0.) THEN DO JL=1, IMICRO ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RV(JL)))) ! WHERE(ABS(ZA_RV(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRV)))) ! WHERE(ABS(ZA(:, IRV))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RV(JL))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB_RV(JL))/ & - &SIGN(MAX(ABS(ZA_RV(JL)), 1.E-20), ZA_RV(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRV))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB(JL, IRV))/ & + &SIGN(MAX(ABS(ZA(JL, IRV)), 1.E-20), ZA(JL, IRV)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRVT(JL))) + & !WHERE(ZRVT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RV(JL)))) !WHERE(ZA_RV(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRV)))) !WHERE(ZA(:, IRV)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RC(JL)))) ! WHERE(ABS(ZA_RC(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRC)))) ! WHERE(ABS(ZA(:, IRC))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RC(JL))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB_RC(JL))/ & - &SIGN(MAX(ABS(ZA_RC(JL)), 1.E-20), ZA_RC(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRC))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB(JL, IRC))/ & + &SIGN(MAX(ABS(ZA(JL, IRC)), 1.E-20), ZA(JL, IRC)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRCT(JL))) + & !WHERE(ZRCT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RC(JL)))) !WHERE(ZA_RC(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRC)))) !WHERE(ZA(:, IRC)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RR(JL)))) ! WHERE(ABS(ZA_RR(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRR)))) ! WHERE(ABS(ZA(:, IRR))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RR(JL))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB_RR(JL))/ & - &SIGN(MAX(ABS(ZA_RR(JL)), 1.E-20), ZA_RR(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRR))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB(JL, IRR))/ & + &SIGN(MAX(ABS(ZA(JL, IRR)), 1.E-20), ZA(JL, IRR)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRRT(JL))) + & !WHERE(ZRRT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RR(JL)))) !WHERE(ZA_RR(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRR)))) !WHERE(ZA(:, IRR)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RI(JL)))) ! WHERE(ABS(ZA_RI(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRI)))) ! WHERE(ABS(ZA(:, IRI))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RI(JL))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB_RI(JL))/ & - &SIGN(MAX(ABS(ZA_RI(JL)), 1.E-20), ZA_RI(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRI))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB(JL, IRI))/ & + &SIGN(MAX(ABS(ZA(JL, IRI)), 1.E-20), ZA(JL, IRI)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRIT(JL))) + & !WHERE(ZRIT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RI(JL)))) !WHERE(ZA_RI(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRI)))) !WHERE(ZA(:, IRI)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RS(JL)))) ! WHERE(ABS(ZA_RS(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRS)))) ! WHERE(ABS(ZA(:, IRS))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RS(JL))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB_RS(JL))/ & - &SIGN(MAX(ABS(ZA_RS(JL)), 1.E-20), ZA_RS(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRS))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB(JL, IRS))/ & + &SIGN(MAX(ABS(ZA(JL, IRS)), 1.E-20), ZA(JL, IRS)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRST(JL))) + & !WHERE(ZRST(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RS(JL)))) !WHERE(ZA_RS(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRS)))) !WHERE(ZA(:, IRS)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RG(JL)))) ! WHERE(ABS(ZA_RG(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRG)))) ! WHERE(ABS(ZA(:, IRG))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RG(JL))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB_RG(JL))/ & - &SIGN(MAX(ABS(ZA_RG(JL)), 1.E-20), ZA_RG(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRG))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB(JL, IRG))/ & + &SIGN(MAX(ABS(ZA(JL, IRG)), 1.E-20), ZA(JL, IRG)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) + & !WHERE(ZRGT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RG(JL)))) !WHERE(ZA_RG(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRG)))) !WHERE(ZA(:, IRG)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) @@ -1053,14 +1094,14 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies IF(KRR==7) THEN DO JL=1, IMICRO ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RH(JL)))) ! WHERE(ABS(ZA_RH(:))>1.E-20) + &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRH)))) ! WHERE(ABS(ZA(:, IRH))>1.E-20) ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RH(JL))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB_RH(JL))/ & - &SIGN(MAX(ABS(ZA_RH(JL)), 1.E-20), ZA_RH(JL)) + &ZW1D(JL)*(SIGN(1., ZA(JL, IRH))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB(JL, IRH))/ & + &SIGN(MAX(ABS(ZA(JL, IRH)), 1.E-20), ZA(JL, IRH)) ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRHT(JL))) + & !WHERE(ZRHT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RH(JL)))) !WHERE(ZA_RH(:)>0.) + &MAX(0., -SIGN(1., -ZA(JL, IRH)))) !WHERE(ZA(:, IRH)>0.) ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) @@ -1068,8 +1109,13 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ENDIF DO JL=1, IMICRO - ZW1D(JL)=MAX(ABS(ZB_RV(JL)), ABS(ZB_RC(JL)), ABS(ZB_RR(JL)), ABS(ZB_RI(JL)), & - &ABS(ZB_RS(JL)), ABS(ZB_RG(JL)), ABS(ZB_RH(JL))) + IF(KRR==7) THEN + ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & + &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG)), ABS(ZB(JL, IRH))) + ELSE + ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & + &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG))) + ENDIF ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & !WHERE(IITER(:)<INB_ITER_MAX) &MAX(0., -SIGN(1., XMRSTEP-ZW1D(JL))) !WHERE(ZW1D(:)>XMRSTEP) ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL) @@ -1080,16 +1126,16 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !*** 4.3 New values of variables for next iteration ! DO JL=1, IMICRO - ZTHT(JL)=ZTHT(JL)+ZA_TH(JL)*ZMAXTIME(JL)+ZB_TH(JL) - ZRVT(JL)=ZRVT(JL)+ZA_RV(JL)*ZMAXTIME(JL)+ZB_RV(JL) - ZRCT(JL)=ZRCT(JL)+ZA_RC(JL)*ZMAXTIME(JL)+ZB_RC(JL) - ZRRT(JL)=ZRRT(JL)+ZA_RR(JL)*ZMAXTIME(JL)+ZB_RR(JL) - ZRIT(JL)=ZRIT(JL)+ZA_RI(JL)*ZMAXTIME(JL)+ZB_RI(JL) - ZRST(JL)=ZRST(JL)+ZA_RS(JL)*ZMAXTIME(JL)+ZB_RS(JL) - ZRGT(JL)=ZRGT(JL)+ZA_RG(JL)*ZMAXTIME(JL)+ZB_RG(JL) + ZTHT(JL)=ZTHT(JL)+ZA(JL, ITH)*ZMAXTIME(JL)+ZB(JL, ITH) + ZRVT(JL)=ZRVT(JL)+ZA(JL, IRV)*ZMAXTIME(JL)+ZB(JL, IRV) + ZRCT(JL)=ZRCT(JL)+ZA(JL, IRC)*ZMAXTIME(JL)+ZB(JL, IRC) + ZRRT(JL)=ZRRT(JL)+ZA(JL, IRR)*ZMAXTIME(JL)+ZB(JL, IRR) + ZRIT(JL)=ZRIT(JL)+ZA(JL, IRI)*ZMAXTIME(JL)+ZB(JL, IRI) + ZRST(JL)=ZRST(JL)+ZA(JL, IRS)*ZMAXTIME(JL)+ZB(JL, IRS) + ZRGT(JL)=ZRGT(JL)+ZA(JL, IRG)*ZMAXTIME(JL)+ZB(JL, IRG) ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0. ENDDO - IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA_RH(:)*ZMAXTIME(:)+ZB_RH(:) + IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA(:, IRH)*ZMAXTIME(:)+ZB(:, IRH) ! !*** 4.4 Mixing ratio change due to each process ! @@ -1679,20 +1725,22 @@ IF(LSEDIM_AFTER) THEN !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ, & + &PTSTEP, KRR, OSEDIC, & + &PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=PRHS*PTSTEP, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ,& + &PTSTEP, KRR, OSEDIC, & + &PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF @@ -1702,18 +1750,20 @@ IF(LSEDIM_AFTER) THEN !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ, & + &PTSTEP, KRR, OSEDIC, & + &PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ, & + &PTSTEP, KRR, OSEDIC, & + &PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF