diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index 5b344b8f45db1a6b5b95061f8afa655e740ed401..cca761ab08eebf3dd23dba956f58c7c0949c92dd 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -26,3 +26,11 @@ phyex/micro/ice4_rsrimcg_old.F90 phyex/micro/modi_ice4_rsrimcg_old.F90 phyex/micro/ice4_warm.F90 phyex/micro/modi_ice4_warm.F90 +phyex/micro/ice4_fast_rg.F90 +phyex/micro/ice4_fast_rh.F90 +phyex/micro/ice4_fast_rs.F90 +phyex/micro/ice4_slow.F90 +phyex/micro/modi_ice4_fast_rg.F90 +phyex/micro/modi_ice4_fast_rh.F90 +phyex/micro/modi_ice4_fast_rs.F90 +phyex/micro/modi_ice4_slow.F90 diff --git a/src/arome/micro/ice4_fast_rg.F90 b/src/arome/micro/ice4_fast_rg.F90 deleted file mode 100644 index e6f47e1ad7887845987ca60bc5b86cba1241846b..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_fast_rg.F90 +++ /dev/null @@ -1,496 +0,0 @@ -SUBROUTINE ICE4_FAST_RG(KSIZE, LDSOFT, PCOMPUTE, KRR, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, PCIT, & - &PLBDAR, PLBDAS, PLBDAG, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - &PRGSI, PRGSI_MR, & - &PWETG, & - &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) -!! -!!** PURPOSE -!! ------- -!! Computes the fast rg processes -!! -!! 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 : LEVLIMIT, LNULLWETG, LWETGPOST, LCRFLIMIT -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -INTEGER, INTENT(IN) :: KRR ! Number of moist variable -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCIT ! Pristine ice conc. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI ! Graupel tendency by other processes -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI_MR ! Graupel mr change by other processes -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH ! Conversion of graupel into hail -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH_MR ! Conversion of graupel into hail, mr change -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR ! Melting of the graupel -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RH -! -!* 0.2 declaration of local variables -! -LOGICAL, DIMENSION(KSIZE) :: GDRY -REAL, DIMENSION(KSIZE) :: ZDRY, ZDRYG, ZMASK -INTEGER :: IGDRY -REAL, DIMENSION(KSIZE) :: ZVEC1, ZVEC2, ZVEC3 -INTEGER, DIMENSION(KSIZE) :: IVEC1, IVEC2 -REAL, DIMENSION(KSIZE) :: ZZW, & - ZRDRYG_INIT, & !Initial dry growth rate of the graupeln - ZRWETG_INIT !Initial wet growth rate of the graupeln -INTEGER :: JJ, JL -INTEGER :: IRCDRYG, IRIDRYG, IRIWETG, IRSDRYG, IRSWETG, IRRDRYG, & - & IFREEZ1, IFREEZ2 -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 0, ZHOOK_HANDLE) -! -IRCDRYG=1 -IRIDRYG=2 -IRIWETG=3 -IRSDRYG=4 -IRSWETG=5 -IRRDRYG=6 -IFREEZ1=7 -IFREEZ2=8 -! -!------------------------------------------------------------------------------- -! -!* 6.1 rain contact freezing -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4)) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRICFRRG(JL)=ZMASK(JL) * PRICFRRG(JL) - PRRCFRIG(JL)=ZMASK(JL) * PRRCFRIG(JL) - PRICFRR(JL)=ZMASK(JL) * PRICFRR(JL) - ENDDO -ELSE - PRICFRRG(:)=0. - PRRCFRIG(:)=0. - WHERE(ZMASK(:)==1.) - PRICFRRG(:) = XICFRR*PRIT(:) & ! RICFRRG - *PLBDAR(:)**XEXICFRR & - *PRHODREF(:)**(-XCEXVT) - PRRCFRIG(:) = XRCFRI*PCIT(:) & ! RRCFRIG - * PLBDAR(:)**XEXRCFRI & - * PRHODREF(:)**(-XCEXVT-1.) - END WHERE - - IF(LCRFLIMIT) THEN - DO JL=1, KSIZE - !Comparison between heat to be released (to freeze rain) and heat sink (rain and ice temperature change) - !ZZW is the proportion of process that can take place - ZZW(JL)=(1.-ZMASK(JL)) + & ! 1. outside of mask - ZMASK(JL) * MAX(0., MIN(1., (PRICFRRG(JL)*XCI+PRRCFRIG(JL)*XCL)*(XTT-PT(JL)) / & - MAX(1.E-20, XLVTT*PRRCFRIG(JL)))) - ENDDO - ELSE - ZZW(:)=1. - ENDIF - DO JL=1, KSIZE - PRRCFRIG(JL) = ZZW(JL) * PRRCFRIG(JL) !Part of rain that can be freezed - PRICFRR(JL) = (1.-ZZW(JL)) * PRICFRRG(JL) !Part of collected pristine ice converted to rain - PRICFRRG(JL) = ZZW(JL) * PRICFRRG(JL) !Part of collected pristine ice that lead to graupel - ENDDO -ENDIF -DO JL=1, KSIZE - PA_RI(JL) = PA_RI(JL) - PRICFRRG(JL) - PRICFRR(JL) - PA_RR(JL) = PA_RR(JL) - PRRCFRIG(JL) + PRICFRR(JL) - PA_RG(JL) = PA_RG(JL) + PRICFRRG(JL) + PRRCFRIG(JL) - PA_TH(JL) = PA_TH(JL) + (PRRCFRIG(JL) - PRICFRR(JL))*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -! -!* 6.3 compute the graupel growth -! -! Wet and dry collection of rc and ri on graupel -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRG_TEND(JL, IRCDRYG)=ZMASK(JL)*PRG_TEND(JL, IRCDRYG) - ENDDO -ELSE - ZZW(:)=0. - WHERE(ZMASK(:)==1.) - ZZW(:)=PLBDAG(:)**(XCXG-XDG-2.) * PRHODREF(:)**(-XCEXVT) - END WHERE - DO JL=1, KSIZE - PRG_TEND(JL, IRCDRYG)=ZMASK(JL)*XFCDRYG * PRCT(JL) * ZZW(JL) - ENDDO -ENDIF - -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRG_TEND(JL, IRIDRYG)=ZMASK(JL) * PRG_TEND(JL, IRIDRYG) - PRG_TEND(JL, IRIWETG)=ZMASK(JL) * PRG_TEND(JL, IRIWETG) - ENDDO -ELSE - PRG_TEND(:, IRIDRYG)=0. - PRG_TEND(:, IRIWETG)=0. - WHERE(ZMASK(:)==1.) - ZZW(:)=PLBDAG(:)**(XCXG-XDG-2.) * PRHODREF(:)**(-XCEXVT) - PRG_TEND(:, IRIDRYG)=XFIDRYG*EXP(XCOLEXIG*(PT(:)-XTT))*PRIT(:)*ZZW(:) - PRG_TEND(:, IRIWETG)=PRG_TEND(:, IRIDRYG) / (XCOLIG*EXP(XCOLEXIG*(PT(:)-XTT))) - END WHERE -ENDIF - -! Wet and dry collection of rs on graupel (6.2.1) -DO JL=1, KSIZE - ZDRY(JL)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5)) - &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRG_TEND(JL, IRSDRYG)=ZDRY(JL) * PRG_TEND(JL, IRSDRYG) - PRG_TEND(JL, IRSWETG)=ZDRY(JL) * PRG_TEND(JL, IRSWETG) - ENDDO -ELSE - PRG_TEND(:, IRSDRYG)=0. - PRG_TEND(:, IRSWETG)=0. - GDRY(:)=ZDRY(:)==1. - IGDRY=COUNT(GDRY(:)) - IF(IGDRY>0)THEN - ! - !* 6.2.3 select the (PLBDAG,PLBDAS) couplet - ! - ZVEC1(1:IGDRY)=PACK(PLBDAG(:), MASK=GDRY(:)) - ZVEC2(1:IGDRY)=PACK(PLBDAS(:), MASK=GDRY(:)) - ! - !* 6.2.4 find the next lower indice for the PLBDAG and for the PLBDAS - ! in the geometrical set of (Lbda_g,Lbda_s) couplet use to - ! tabulate the SDRYG-kernel - ! - ZVEC1(1:IGDRY)=MAX(1.00001, MIN(FLOAT(NDRYLBDAG)-0.00001, & - XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+XDRYINTP2G)) - IVEC1(1:IGDRY)=INT(ZVEC1(1:IGDRY) ) - ZVEC1(1:IGDRY)=ZVEC1(1:IGDRY)-FLOAT(IVEC1(1:IGDRY)) - ! - ZVEC2(1:IGDRY)=MAX(1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001, & - XDRYINTP1S*LOG(ZVEC2(1:IGDRY))+XDRYINTP2S)) - IVEC2(1:IGDRY)=INT(ZVEC2(1:IGDRY)) - ZVEC2(1:IGDRY)=ZVEC2(1:IGDRY)-FLOAT(IVEC2(1:IGDRY)) - ! - !* 6.2.5 perform the bilinear interpolation of the normalized - ! SDRYG-kernel - ! - DO JJ=1, IGDRY - ZVEC3(JJ) = ( XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - *(ZVEC1(JJ) - 1.0) - END DO - ZZW(:)=UNPACK(VECTOR=ZVEC3(1:IGDRY), MASK=GDRY(:), FIELD=0.0) - ! - WHERE(GDRY(:)) - PRG_TEND(:, IRSWETG)=XFSDRYG*ZZW(:) & ! RSDRYG - / XCOLSG & - *(PLBDAS(:)**(XCXS-XBS))*( PLBDAG(:)**XCXG ) & - *(PRHODREF(:)**(-XCEXVT-1.)) & - *( XLBSDRYG1/( PLBDAG(:)**2 ) + & - XLBSDRYG2/( PLBDAG(:) * PLBDAS(:) ) + & - XLBSDRYG3/( PLBDAS(:)**2)) - PRG_TEND(:, IRSDRYG)=PRG_TEND(:, IRSWETG)*XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) - END WHERE - ENDIF -ENDIF -! -!* 6.2.6 accretion of raindrops on the graupeln -! -DO JL=1, KSIZE - ZDRY(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3)) - &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRG_TEND(JL, IRRDRYG)=ZDRY(JL) * PRG_TEND(JL, IRRDRYG) - ENDDO -ELSE - GDRY(:)=ZDRY(:)==1. - PRG_TEND(:, IRRDRYG)=0. - IGDRY=COUNT(GDRY(:)) - ! - IF(IGDRY>0) THEN - ! - !* 6.2.8 select the (PLBDAG,PLBDAR) couplet - ! - ZVEC1(1:IGDRY)=PACK(PLBDAG(:), MASK=GDRY(:)) - ZVEC2(1:IGDRY)=PACK(PLBDAR(:), MASK=GDRY(:)) - ! - !* 6.2.9 find the next lower indice for the PLBDAG and for the PLBDAR - ! in the geometrical set of (Lbda_g,Lbda_r) couplet use to - ! tabulate the RDRYG-kernel - ! - ZVEC1(1:IGDRY)=MAX(1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001, & - XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+XDRYINTP2G)) - IVEC1(1:IGDRY)=INT(ZVEC1(1:IGDRY)) - ZVEC1(1:IGDRY)=ZVEC1(1:IGDRY)-FLOAT(IVEC1(1:IGDRY)) - ! - ZVEC2(1:IGDRY)=MAX(1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001, & - XDRYINTP1R*LOG(ZVEC2(1:IGDRY))+XDRYINTP2R)) - IVEC2(1:IGDRY)=INT(ZVEC2(1:IGDRY)) - ZVEC2(1:IGDRY)=ZVEC2(1:IGDRY)-FLOAT(IVEC2(1:IGDRY)) - ! - !* 6.2.10 perform the bilinear interpolation of the normalized - ! RDRYG-kernel - ! - DO JJ=1, IGDRY - ZVEC3(JJ)= ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - *(ZVEC1(JJ) - 1.0) - END DO - ZZW(:)=UNPACK(VECTOR=ZVEC3(1:IGDRY), MASK=GDRY, FIELD=0.) - ! - WHERE(GDRY(:)) - PRG_TEND(:, IRRDRYG) = XFRDRYG*ZZW(:) & ! RRDRYG - *( PLBDAR(:)**(-4) )*( PLBDAG(:)**XCXG ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRDRYG1/( PLBDAG(:)**2 ) + & - XLBRDRYG2/( PLBDAG(:) * PLBDAR(:) ) + & - XLBRDRYG3/( PLBDAR(:)**2) ) - END WHERE - ENDIF -ENDIF - -DO JL=1, KSIZE - ZRDRYG_INIT(JL)=PRG_TEND(JL, IRCDRYG)+PRG_TEND(JL, IRIDRYG)+ & - &PRG_TEND(JL, IRSDRYG)+PRG_TEND(JL, IRRDRYG) -ENDDO - -!Freezing rate -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRG_TEND(JL, IFREEZ1)=ZMASK(JL) * PRG_TEND(JL, IFREEZ1) - PRG_TEND(JL, IFREEZ2)=ZMASK(JL) * PRG_TEND(JL, IFREEZ2) - ENDDO -ELSE - DO JL=1, KSIZE - PRG_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZMASK(:)==1.) - PRG_TEND(:, IFREEZ1)=MIN(PRG_TEND(:, IFREEZ1), EXP(XALPI-XBETAI/PT(:)-XGAMI*ALOG(PT(:)))) ! min(ev, es_i(T)) - END WHERE - ENDIF - PRG_TEND(:, IFREEZ2)=0. - WHERE(ZMASK(:)==1.) - PRG_TEND(:, IFREEZ1)=PKA(:)*(XTT-PT(:)) + & - (PDV(:)*(XLVTT+(XCPV-XCL)*(PT(:)-XTT)) & - *(XESTT-PRG_TEND(:, IFREEZ1))/(XRV*PT(:)) ) - PRG_TEND(:, IFREEZ1)=PRG_TEND(:, IFREEZ1)* ( X0DEPG* PLBDAG(:)**XEX0DEPG + & - X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG )/ & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - PRG_TEND(:, IFREEZ2)=(PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) / & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - END WHERE -ENDIF -DO JL=1, KSIZE - !We must agregate, at least, the cold species - ZRWETG_INIT(JL)=ZMASK(JL) * MAX(PRG_TEND(JL, IRIWETG)+PRG_TEND(JL, IRSWETG), & - &MAX(0., PRG_TEND(JL, IFREEZ1) + & - &PRG_TEND(JL, IFREEZ2) * ( & - &PRG_TEND(JL, IRIWETG)+PRG_TEND(JL, IRSWETG) ))) -ENDDO - -!Growth mode -DO JL=1, KSIZE - PWETG(JL) = ZMASK(JL) * & ! - & MAX(0., SIGN(1., MAX(0., ZRDRYG_INIT(JL)-PRG_TEND(JL, IRIDRYG)-PRG_TEND(JL, IRSDRYG)) - & - &MAX(0., ZRWETG_INIT(JL)-PRG_TEND(JL, IRIWETG)-PRG_TEND(JL, IRSWETG)))) -ENDDO -IF(LNULLWETG) THEN - DO JL=1, KSIZE - PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., -ZRDRYG_INIT(JL))) - ENDDO -ELSE - DO JL=1, KSIZE - PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., -ZRWETG_INIT(JL))) - ENDDO -ENDIF -IF(.NOT. LWETGPOST) THEN - DO JL=1, KSIZE - PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., PT(JL)-XTT)) - ENDDO -ENDIF -DO JL=1, KSIZE - ZDRYG(JL) = ZMASK(JL) * & ! - & MAX(0., -SIGN(1., PT(JL)-XTT)) * & ! WHERE(PT(:)<XTT) - & MAX(0., -SIGN(1., -ZRDRYG_INIT(JL))) * & ! WHERE(ZRDRYG_INIT(:)>0.) - & MAX(0., -SIGN(1., MAX(0., ZRDRYG_INIT(JL)-PRG_TEND(JL, IRIDRYG)-PRG_TEND(JL, IRSDRYG)) - & - &MAX(0., ZRWETG_INIT(JL)-PRG_TEND(JL, IRIWETG)-PRG_TEND(JL, IRSWETG)))) -ENDDO - -! Part of ZRWETG to be converted into hail -! Graupel can be produced by other processes instantaneously (inducing a mixing ratio change, PRGSI_MR) or -! as a tendency (PRWETGH) -PRWETGH(:)=0. -PRWETGH_MR(:)=0. -IF(KRR==7) THEN - WHERE(PWETG(:)==1.) - !assume a linear percent of conversion of produced graupel into hail - PRWETGH(:)=(MAX(0., PRGSI(:)+PRICFRRG(:)+PRRCFRIG(:))+ZRWETG_INIT(:))*ZRDRYG_INIT(:)/(ZRWETG_INIT(:)+ZRDRYG_INIT(:)) - PRWETGH_MR(:)=MAX(0., PRGSI_MR(:))*ZRDRYG_INIT(:)/(ZRWETG_INIT(:)+ZRDRYG_INIT(:)) - END WHERE -ENDIF - -DO JL=1, KSIZE - !Aggregated minus collected - PRRWETG(JL)=-PWETG(JL) * (PRG_TEND(JL, IRIWETG)+PRG_TEND(JL, IRSWETG)+& - &PRG_TEND(JL, IRCDRYG)-ZRWETG_INIT(JL)) - PRCWETG(JL)=PWETG(JL) * PRG_TEND(JL, IRCDRYG) - PRIWETG(JL)=PWETG(JL) * PRG_TEND(JL, IRIWETG) - PRSWETG(JL)=PWETG(JL) * PRG_TEND(JL, IRSWETG) - - PRCDRYG(JL)=ZDRYG(JL) * PRG_TEND(JL, IRCDRYG) - PRRDRYG(JL)=ZDRYG(JL) * PRG_TEND(JL, IRRDRYG) - PRIDRYG(JL)=ZDRYG(JL) * PRG_TEND(JL, IRIDRYG) - PRSDRYG(JL)=ZDRYG(JL) * PRG_TEND(JL, IRSDRYG) - - PA_RC(JL) = PA_RC(JL) - PRCWETG(JL) - PA_RI(JL) = PA_RI(JL) - PRIWETG(JL) - PA_RS(JL) = PA_RS(JL) - PRSWETG(JL) - PA_RG(JL) = PA_RG(JL) + PRCWETG(JL) + PRIWETG(JL) + PRSWETG(JL) + PRRWETG(JL) - PA_RR(JL) = PA_RR(JL) - PRRWETG(JL) - PA_TH(JL) = PA_TH(JL) + (PRCWETG(JL) + PRRWETG(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA_RG(JL) = PA_RG(JL) - PRWETGH(JL) - PA_RH(JL) = PA_RH(JL) + PRWETGH(JL) - PB_RG(JL) = PB_RG(JL) - PRWETGH_MR(JL) - PB_RH(JL) = PB_RH(JL) + PRWETGH_MR(JL) - PA_RC(JL) = PA_RC(JL) - PRCDRYG(JL) - PA_RI(JL) = PA_RI(JL) - PRIDRYG(JL) - PA_RS(JL) = PA_RS(JL) - PRSDRYG(JL) - PA_RR(JL) = PA_RR(JL) - PRRDRYG(JL) - PA_RG(JL) = PA_RG(JL) + PRCDRYG(JL) + PRIDRYG(JL) + PRSDRYG(JL) + PRRDRYG(JL) - PA_TH(JL) = PA_TH(JL) + (PRCDRYG(JL)+PRRDRYG(JL))*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -!* 6.5 Melting of the graupeln -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRGMLTR(JL)=ZMASK(JL) * PRGMLTR(JL) - ENDDO -ELSE - DO JL=1, KSIZE - PRGMLTR(JL)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZMASK(:)==1.) - PRGMLTR(:)=MIN(PRGMLTR(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T)) - END WHERE - ENDIF - DO JL=1, KSIZE - PRGMLTR(JL)=ZMASK(JL) * (PKA(JL)*(XTT-PT(JL)) + & - ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) & - *(XESTT-PRGMLTR(JL))/(XRV*PT(JL)) )) - ENDDO - WHERE(ZMASK(:)==1.) - ! - ! compute RGMLTR - ! - PRGMLTR(:) = MAX( 0.0,( -PRGMLTR(:) * & - ( X0DEPG* PLBDAG(:)**XEX0DEPG + & - X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) - & - ( PRG_TEND(:, IRCDRYG)+PRG_TEND(:, IRRDRYG) ) * & - ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & - ( PRHODREF(:)*XLMTT ) ) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RR(JL) = PA_RR(JL) + PRGMLTR(JL) - PA_RG(JL) = PA_RG(JL) - PRGMLTR(JL) - PA_TH(JL) = PA_TH(JL) - PRGMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO - -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_FAST_RG diff --git a/src/arome/micro/ice4_fast_rh.F90 b/src/arome/micro/ice4_fast_rh.F90 deleted file mode 100644 index 86ac7d99740058dc81e7cfad6910e008a00878c0..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_fast_rh.F90 +++ /dev/null @@ -1,502 +0,0 @@ -SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, PWETG, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAS, PLBDAG, PLBDAR, PLBDAH, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, 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) -!! -!!** PURPOSE -!! ------- -!! Computes the fast rh process -!! -!! 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 : LEVLIMIT, LNULLWETH, LWETHPOST, LCONVHG -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the rain distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAH ! Slope parameter of the hail distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRDRYHG ! Conversion of hailstone into graupel -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR ! Melting of the hailstones -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -! -!* 0.2 declaration of local variables -! -LOGICAL, DIMENSION(KSIZE) :: GWET -REAL, DIMENSION(KSIZE) :: ZHAIL, ZWET, ZMASK, ZWETH, ZDRYH -INTEGER :: IHAIL, IGWET -REAL, DIMENSION(KSIZE) :: ZVEC1, ZVEC2, ZVEC3 -INTEGER, DIMENSION(KSIZE) :: IVEC1, IVEC2 -REAL, DIMENSION(KSIZE) :: ZZW, & - ZRDRYH_INIT, ZRWETH_INIT, & - ZRDRYHG -INTEGER :: JJ, JL -INTEGER :: IRCWETH, IRRWETH, IRIDRYH, IRIWETH, IRSDRYH, IRSWETH, IRGDRYH, IRGWETH, & - & IFREEZ1, IFREEZ2 -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH',0,ZHOOK_HANDLE) -! -IRCWETH=1 -IRRWETH=2 -IRIDRYH=3 -IRIWETH=4 -IRSDRYH=5 -IRSWETH=6 -IRGDRYH=7 -IRGWETH=8 -IFREEZ1=9 -IFREEZ2=10 -! -! -! -!* 7.2 compute the Wet and Dry growth of hail -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IRCWETH)=ZMASK(JL) * PRH_TEND(JL, IRCWETH) - ENDDO -ELSE - PRH_TEND(:, IRCWETH)=0. - WHERE(ZMASK(:)==1.) - ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT) - PRH_TEND(:, IRCWETH)=XFWETH * PRCT(:) * ZZW(:) ! RCWETH - END WHERE -ENDIF -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IRIWETH)=ZMASK(JL) * PRH_TEND(JL, IRIWETH) - PRH_TEND(JL, IRIDRYH)=ZMASK(JL) * PRH_TEND(JL, IRIDRYH) - ENDDO -ELSE - PRH_TEND(:, IRIWETH)=0. - PRH_TEND(:, IRIDRYH)=0. - WHERE(ZMASK(:)==1.) - ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT) - PRH_TEND(:, IRIWETH)=XFWETH * PRIT(:) * ZZW(:) ! RIWETH - PRH_TEND(:, IRIDRYH)=PRH_TEND(:, IRIWETH)*(XCOLIH*EXP(XCOLEXIH*(PT(:)-XTT))) ! RIDRYH - END WHERE -ENDIF - -! -!* 7.2.1 accretion of aggregates on the hailstones -! -DO JL=1, KSIZE - ZWET(JL) = MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IRSWETH)=ZWET(JL) * PRH_TEND(JL, IRSWETH) - PRH_TEND(JL, IRSDRYH)=ZWET(JL) * PRH_TEND(JL, IRSDRYH) - ENDDO -ELSE - PRH_TEND(:, IRSWETH)=0. - PRH_TEND(:, IRSDRYH)=0. - GWET(:)=ZWET(:)==1. - IGWET=COUNT(GWET(:)) - IF(IGWET>0)THEN - ! - !* 7.2.3 select the (PLBDAH,PLBDAS) couplet - ! - ZVEC1(1:IGWET) = PACK( PLBDAH(:),MASK=GWET(:) ) - ZVEC2(1:IGWET) = PACK( PLBDAS(:),MASK=GWET(:) ) - ! - !* 7.2.4 find the next lower indice for the PLBDAG and for the PLBDAS - ! in the geometrical set of (Lbda_h,Lbda_s) couplet use to - ! tabulate the SWETH-kernel - ! - ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001, & - XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) - IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) - ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) ) - ! - ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001, & - XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) ) - IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) - ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) ) - ! - !* 7.2.5 perform the bilinear interpolation of the normalized - ! SWETH-kernel - ! - DO JJ = 1,IGWET - ZVEC3(JJ) = ( XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGWET),MASK=GWET,FIELD=0.0 ) - ! - WHERE(GWET(:)) - PRH_TEND(:, IRSWETH)=XFSWETH*ZZW(:) & ! RSWETH - *( PLBDAS(:)**(XCXS-XBS) )*( PLBDAH(:)**XCXH ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSWETH1/( PLBDAH(:)**2 ) + & - XLBSWETH2/( PLBDAH(:) * PLBDAS(:) ) + & - XLBSWETH3/( PLBDAS(:)**2) ) - PRH_TEND(:, IRSDRYH)=PRH_TEND(:, IRSWETH)*(XCOLSH*EXP(XCOLEXSH*(PT(:)-XTT))) - END WHERE - ENDIF -ENDIF -! -!* 7.2.6 accretion of graupeln on the hailstones -! -DO JL=1, KSIZE - ZWET(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IRGWETH)=ZWET(JL) * PRH_TEND(JL, IRGWETH) - PRH_TEND(JL, IRGDRYH)=ZWET(JL) * PRH_TEND(JL, IRGDRYH) - ENDDO -ELSE - PRH_TEND(:, IRGWETH)=0. - PRH_TEND(:, IRGDRYH)=0. - GWET(:)=ZWET(:)==1. - IGWET=COUNT(GWET(:)) - IF(IGWET>0)THEN - ! - !* 7.2.8 select the (PLBDAH,PLBDAG) couplet - ! - ZVEC1(1:IGWET) = PACK( PLBDAH(:),MASK=GWET(:) ) - ZVEC2(1:IGWET) = PACK( PLBDAG(:),MASK=GWET(:) ) - ! - !* 7.2.9 find the next lower indice for the PLBDAH and for the PLBDAG - ! in the geometrical set of (Lbda_h,Lbda_g) couplet use to - ! tabulate the GWETH-kernel - ! - ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001, & - XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) - IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) - ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) ) - ! - ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001, & - XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) ) - IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) - ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) ) - ! - !* 7.2.10 perform the bilinear interpolation of the normalized - ! GWETH-kernel - ! - DO JJ = 1,IGWET - ZVEC3(JJ) = ( XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGWET),MASK=GWET,FIELD=0.0 ) - ! - WHERE(GWET(:)) - PRH_TEND(:, IRGWETH)=XFGWETH*ZZW(:) & ! RGWETH - *( PLBDAG(:)**(XCXG-XBG) )*( PLBDAH(:)**XCXH ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBGWETH1/( PLBDAH(:)**2 ) + & - XLBGWETH2/( PLBDAH(:) * PLBDAG(:) ) + & - XLBGWETH3/( PLBDAG(:)**2) ) - PRH_TEND(:, IRGDRYH)=PRH_TEND(:, IRGWETH) - END WHERE - !When graupel grows in wet mode, graupel is wet (!) and collection efficiency must remain the same - WHERE(GWET(:) .AND. .NOT. PWETG(:)==1.) - PRH_TEND(:, IRGDRYH)=PRH_TEND(:, IRGDRYH)*(XCOLGH*EXP(XCOLEXGH*(PT(:)-XTT))) - END WHERE - END IF -ENDIF -! -!* 7.2.11 accretion of raindrops on the hailstones -! -DO JL=1, KSIZE - ZWET(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IRRWETH)=ZWET(JL) * PRH_TEND(JL, IRRWETH) - ENDDO -ELSE - PRH_TEND(:, IRRWETH)=0. - GWET(:)=ZWET(:)==1. - IGWET=COUNT(GWET(:)) - IF(IGWET>0)THEN - ! - !* 7.2.12 select the (PLBDAH,PLBDAR) couplet - ! - ZVEC1(1:IGWET)=PACK(PLBDAH(:), MASK=GWET(:)) - ZVEC2(1:IGWET)=PACK(PLBDAR(:), MASK=GWET(:)) - ! - !* 7.2.13 find the next lower indice for the PLBDAH and for the PLBDAR - ! in the geometrical set of (Lbda_h,Lbda_r) couplet use to - ! tabulate the RWETH-kernel - ! - ZVEC1(1:IGWET)=MAX(1.00001, MIN( FLOAT(NWETLBDAH)-0.00001, & - XWETINTP1H*LOG(ZVEC1(1:IGWET))+XWETINTP2H)) - IVEC1(1:IGWET)=INT(ZVEC1(1:IGWET)) - ZVEC1(1:IGWET)=ZVEC1(1:IGWET)-FLOAT(IVEC1(1:IGWET)) - ! - ZVEC2(1:IGWET)=MAX(1.00001, MIN( FLOAT(NWETLBDAR)-0.00001, & - XWETINTP1R*LOG(ZVEC2(1:IGWET))+XWETINTP2R)) - IVEC2(1:IGWET)=INT(ZVEC2(1:IGWET)) - ZVEC2(1:IGWET)=ZVEC2(1:IGWET)-FLOAT(IVEC2(1:IGWET)) - ! - !* 7.2.14 perform the bilinear interpolation of the normalized - ! RWETH-kernel - ! - DO JJ=1, IGWET - ZVEC3(JJ)= ( XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - *(ZVEC1(JJ) - 1.0) - END DO - ZZW(:)=UNPACK(VECTOR=ZVEC3(1:IGWET), MASK=GWET, FIELD=0.) - ! - WHERE(GWET(:)) - PRH_TEND(:, IRRWETH) = XFRWETH*ZZW(:) & ! RRWETH - *( PLBDAR(:)**(-4) )*( PLBDAH(:)**XCXH ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRWETH1/( PLBDAH(:)**2 ) + & - XLBRWETH2/( PLBDAH(:) * PLBDAR(:) ) + & - XLBRWETH3/( PLBDAR(:)**2) ) - END WHERE - ENDIF -ENDIF -! -DO JL=1, KSIZE - ZRDRYH_INIT(JL)=PRH_TEND(JL, IRCWETH)+PRH_TEND(JL, IRIDRYH)+ & - &PRH_TEND(JL, IRSDRYH)+PRH_TEND(JL, IRRWETH)+PRH_TEND(JL, IRGDRYH) -ENDDO -! -!* 7.3 compute the Wet growth of hail -! -DO JL=1, KSIZE - ZHAIL(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRH_TEND(JL, IFREEZ1)=ZHAIL(JL) * PRH_TEND(JL, IFREEZ1) - PRH_TEND(JL, IFREEZ2)=ZHAIL(JL) * PRH_TEND(JL, IFREEZ2) - ENDDO -ELSE - DO JL=1, KSIZE - PRH_TEND(JL, IFREEZ1)=PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZHAIL(:)==1.) - PRH_TEND(:, IFREEZ1)=MIN(PRH_TEND(:, IFREEZ1), EXP(XALPI-XBETAI/PT(:)-XGAMI*ALOG(PT(:)))) ! min(ev, es_i(T)) - END WHERE - ENDIF - PRH_TEND(:, IFREEZ2)=0. - WHERE(ZHAIL(:)==1.) - PRH_TEND(:, IFREEZ1)=PKA(:)*(XTT-PT(:)) + & - (PDV(:)*(XLVTT+(XCPV-XCL)*(PT(:)-XTT)) & - *(XESTT-PRH_TEND(:, IFREEZ1))/(XRV*PT(:)) ) - PRH_TEND(:, IFREEZ1)=PRH_TEND(:, IFREEZ1)* ( X0DEPH* PLBDAH(:)**XEX0DEPH + & - X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH )/ & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - PRH_TEND(:, IFREEZ2)=(PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) / & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - END WHERE -ENDIF -DO JL=1, KSIZE - !We must agregate, at least, the cold species - ZRWETH_INIT(JL)=ZHAIL(JL) * MAX(PRH_TEND(JL, IRIWETH)+PRH_TEND(JL, IRSWETH)+PRH_TEND(JL, IRGWETH), & - &MAX(0., PRH_TEND(JL, IFREEZ1) + & - &PRH_TEND(JL, IFREEZ2) * ( & - &PRH_TEND(JL, IRIWETH)+PRH_TEND(JL, IRSWETH)+PRH_TEND(JL, IRGWETH) ))) -ENDDO -! -!* 7.4 Select Wet or Dry case -! -!Wet case -DO JL=1, KSIZE - ZWETH(JL) = ZHAIL(JL) * & - & MAX(0., SIGN(1., MAX(0., ZRDRYH_INIT(JL)-PRH_TEND(JL, IRIDRYH)-PRH_TEND(JL, IRSDRYH)-PRH_TEND(JL, IRGDRYH)) - & - &MAX(0., ZRWETH_INIT(JL)-PRH_TEND(JL, IRIWETH)-PRH_TEND(JL, IRSWETH)-PRH_TEND(JL, IRGWETH)))) -ENDDO -IF(LNULLWETH) THEN - DO JL=1, KSIZE - ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRDRYH_INIT(JL))) ! WHERE(ZRDRYH_INIT(:)>0.) - ENDDO -ELSE - DO JL=1, KSIZE - ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRWETH_INIT(JL))) ! WHERE(ZRWETH_INIT(:)>0.) - ENDDO -ENDIF -IF(.NOT. LWETHPOST) THEN - DO JL=1, KSIZE - ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT) - ENDDO -ENDIF -DO JL=1, KSIZE - ZDRYH(JL) = ZHAIL(JL) * & - & MAX(0., -SIGN(1., PT(JL)-XTT)) * & ! WHERE(PT(:)<XTT) - & MAX(0., -SIGN(1., -ZRDRYH_INIT(JL))) * & !WHERE(ZRDRYH_INIT(:)>0.) - & MAX(0., -SIGN(1., MAX(0., ZRDRYH_INIT(JL)-PRH_TEND(JL, IRIDRYH)-PRH_TEND(JL, IRSDRYH)) - & - &MAX(0., ZRWETH_INIT(JL)-PRH_TEND(JL, IRIWETH)-PRH_TEND(JL, IRSWETH)))) -ENDDO -! -ZRDRYHG(:)=0. -IF(LCONVHG)THEN - WHERE(ZDRYH(:)==1.) - ZRDRYHG(:)=ZRDRYH_INIT(:)*ZRWETH_INIT(:)/(ZRDRYH_INIT(:)+ZRWETH_INIT(:)) - END WHERE -ENDIF -DO JL=1, KSIZE - PRCWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRCWETH) - PRIWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRIWETH) - PRSWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRSWETH) - PRGWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRGWETH) - !Collected minus aggregated - PRRWETH(JL) = ZWETH(JL) * (ZRWETH_INIT(JL) - PRH_TEND(JL, IRIWETH) - & - PRH_TEND(JL, IRSWETH) - PRH_TEND(JL, IRGWETH) - & - PRH_TEND(JL, IRCWETH)) - - PRCDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRCWETH) - PRIDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRIDRYH) - PRSDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRSDRYH) - PRRDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRRWETH) - PRGDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRGDRYH) - PRDRYHG(JL) = ZDRYH(JL) * ZRDRYHG(JL) - - PA_RC(JL) = PA_RC(JL) - PRCWETH(JL) - PA_RI(JL) = PA_RI(JL) - PRIWETH(JL) - PA_RS(JL) = PA_RS(JL) - PRSWETH(JL) - PA_RG(JL) = PA_RG(JL) - PRGWETH(JL) - PA_RH(JL) = PA_RH(JL) + PRCWETH(JL)+PRIWETH(JL)+PRSWETH(JL)+PRGWETH(JL)+PRRWETH(JL) - PA_RR(JL) = PA_RR(JL) - PRRWETH(JL) - PA_TH(JL) = PA_TH(JL) + (PRRWETH(JL)+PRCWETH(JL))*(PLSFACT(JL)-PLVFACT(JL)) - PA_RC(JL) = PA_RC(JL) - PRCDRYH(JL) - PA_RI(JL) = PA_RI(JL) - PRIDRYH(JL) - PA_RS(JL) = PA_RS(JL) - PRSDRYH(JL) - PA_RR(JL) = PA_RR(JL) - PRRDRYH(JL) - PA_RG(JL) = PA_RG(JL) - PRGDRYH(JL) + PRDRYHG(JL) - PA_RH(JL) = PA_RH(JL) + PRCDRYH(JL)+PRIDRYH(JL)+PRSDRYH(JL)+& - &PRRDRYH(JL)+PRGDRYH(JL) - PRDRYHG(JL) - PA_TH(JL) = PA_TH(JL) + (PRCDRYH(JL)+PRRDRYH(JL))*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -!* 7.5 Melting of the hailstones -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7)) - &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRHMLTR(JL)=ZMASK(JL)*PRHMLTR(JL) - ENDDO -ELSE - DO JL=1, KSIZE - PRHMLTR(JL) = ZMASK(JL)* PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZMASK(:)==1.) - PRHMLTR(:)=MIN(PRHMLTR(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T)) - END WHERE - ENDIF - DO JL=1, KSIZE - PRHMLTR(JL) = ZMASK(JL)* (PKA(JL)*(XTT-PT(JL)) + & - ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) & - *(XESTT-PRHMLTR(JL))/(XRV*PT(JL)) )) - ENDDO - WHERE(ZMASK(:)==1.) - ! - ! compute RHMLTR - ! - PRHMLTR(:) = MAX( 0.0,( -PRHMLTR(:) * & - ( X0DEPH* PLBDAH(:)**XEX0DEPH + & - X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) - & - ( PRH_TEND(:, IRCWETH)+PRH_TEND(:, IRRWETH) )* & - ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & - ( PRHODREF(:)*XLMTT ) ) - END WHERE -END IF -DO JL=1, KSIZE - PA_RR(JL) = PA_RR(JL) + PRHMLTR(JL) - PA_RH(JL) = PA_RH(JL) - PRHMLTR(JL) - PA_TH(JL) = PA_TH(JL) - PRHMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_FAST_RH diff --git a/src/arome/micro/ice4_fast_rs.F90 b/src/arome/micro/ice4_fast_rs.F90 deleted file mode 100644 index 90159d294eea80aaa496006634c8b5b7fc95c547..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_fast_rs.F90 +++ /dev/null @@ -1,440 +0,0 @@ -SUBROUTINE ICE4_FAST_RS(KSIZE, LDSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAR, PLBDAS, & - &PT, PRVT, PRCT, PRRT, PRST, & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & - &PRS_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RS, PA_RG) -!! -!!** PURPOSE -!! ------- -!! Computes the fast rs processes -!! -!! 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 : LEVLIMIT, CSNOWRIMING -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIAGGS ! r_i aggregation on r_s -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSS ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSS ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSACCRG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG ! Conversion-Melting of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR ! Cloud droplet collection onto aggregates by positive temperature -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZRIM, ZACC, ZMASK -LOGICAL, DIMENSION(KSIZE) :: GRIM, GACC -INTEGER :: IGRIM, IGACC -REAL, DIMENSION(KSIZE) :: ZVEC1, ZVEC2, ZVEC3 -INTEGER, DIMENSION(KSIZE) :: IVEC1, IVEC2 -REAL, DIMENSION(KSIZE) :: ZZW, ZZW2, ZZW6, ZFREEZ_RATE -INTEGER :: JJ, JL -INTEGER :: IRCRIMS, IRCRIMSS, IRSRIMCG, IRRACCS, IRRACCSS, IRSACCRG, & - IFREEZ1, IFREEZ2 -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 0, ZHOOK_HANDLE) -! -IRCRIMS=1 -IRCRIMSS=2 -IRSRIMCG=3 -IRRACCS=4 -IRRACCSS=5 -IRSACCRG=6 -IFREEZ1=7 -IFREEZ2=8 -! -!------------------------------------------------------------------------------- -! -! -!* 5.0 maximum freezing rate -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRS_TEND(JL, IFREEZ1)=ZMASK(JL) * PRS_TEND(JL, IFREEZ1) - PRS_TEND(JL, IFREEZ2)=ZMASK(JL) * PRS_TEND(JL, IFREEZ2) - ENDDO -ELSE - DO JL=1, KSIZE - PRS_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZMASK(:)==1.) - PRS_TEND(:, IFREEZ1)=MIN(PRS_TEND(:, IFREEZ1), EXP(XALPI-XBETAI/PT(:)-XGAMI*ALOG(PT(:)))) ! min(ev, es_i(T)) - END WHERE - ENDIF - PRS_TEND(:, IFREEZ2)=0. - WHERE(ZMASK(:)==1.) - PRS_TEND(:, IFREEZ1)=PKA(:)*(XTT-PT(:)) + & - (PDV(:)*(XLVTT+(XCPV-XCL)*(PT(:)-XTT)) & - *(XESTT-PRS_TEND(:, IFREEZ1))/(XRV*PT(:)) ) - PRS_TEND(:, IFREEZ1)=PRS_TEND(:, IFREEZ1)* ( X0DEPS* PLBDAS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )/ & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - PRS_TEND(:, IFREEZ2)=(PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) / & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) - END WHERE -ENDIF -DO JL=1, KSIZE - !We must agregate, at least, the cold species - !And we are only interested by the freezing rate of liquid species - ZFREEZ_RATE(JL)=ZMASK(JL) * MAX(0., MAX(0., PRS_TEND(JL, IFREEZ1) + & - &PRS_TEND(JL, IFREEZ2) * PRIAGGS(JL)) - & - PRIAGGS(JL)) -ENDDO -! -!* 5.1 cloud droplet riming of the aggregates -! -DO JL=1, KSIZE - ZRIM(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & !WHERE(PRCT(:)>XRTMIN(2)) - &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & !WHERE(PRST(:)>XRTMIN(5)) - &PCOMPUTE(JL) -ENDDO -! -! Collection of cloud droplets by snow: this rate is used for riming (T<0) and for conversion/melting (T>0) -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRS_TEND(JL, IRCRIMS)=ZRIM(JL) * PRS_TEND(JL, IRCRIMS) - PRS_TEND(JL, IRCRIMSS)=ZRIM(JL) * PRS_TEND(JL, IRCRIMSS) - PRS_TEND(JL, IRSRIMCG)=ZRIM(JL) * PRS_TEND(JL, IRSRIMCG) - ENDDO -ELSE - PRS_TEND(:, IRCRIMS)=0. - PRS_TEND(:, IRCRIMSS)=0. - PRS_TEND(:, IRSRIMCG)=0. - GRIM(:)=ZRIM(:)==1. - IGRIM = COUNT(GRIM(:)) - ! - IF(IGRIM>0) THEN - ! - ! 5.1.1 select the PLBDAS - ! - ZVEC1(1:IGRIM) = PACK( PLBDAS(:),MASK=GRIM(:) ) - ! - ! 5.1.2 find the next lower indice for the PLBDAS in the geometrical - ! set of Lbda_s used to tabulate some moments of the incomplete - ! gamma function - ! - ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, & - XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) ) - IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) - ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) ) - ! - ! 5.1.3 perform the linear interpolation of the normalized - ! "2+XDS"-moment of the incomplete gamma function - ! - ZVEC1(1:IGRIM) = XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_RIM1( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZW(:) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0 ) - ! - ! 5.1.4 riming of the small sized aggregates - ! - WHERE (GRIM(:)) - PRS_TEND(:, IRCRIMSS) = XCRIMSS * ZZW(:) * PRCT(:) & ! RCRIMSS - * PLBDAS(:)**XEXCRIMSS & - * PRHODREF(:)**(-XCEXVT) - END WHERE - ! - ! 5.1.5 perform the linear interpolation of the normalized - ! "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2) and - ! "XBG"-moment of the incomplete gamma function (XGAMINC_RIM4) - ! - ZVEC1(1:IGRIM) = XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_RIM2( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZW(:) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0 ) - - ZVEC1(1:IGRIM) = XGAMINC_RIM4( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_RIM4( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZW2(:) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0) - ! - ! 5.1.6 riming-conversion of the large sized aggregates into graupeln - ! - ! - WHERE(GRIM(:)) - PRS_TEND(:, IRCRIMS)=XCRIMSG * PRCT(:) & ! RCRIMS - * PLBDAS(:)**XEXCRIMSG & - * PRHODREF(:)**(-XCEXVT) - ZZW6(:) = PRS_TEND(:, IRCRIMS) - PRS_TEND(:, IRCRIMSS) ! RCRIMSG - END WHERE - - IF(CSNOWRIMING=='M90 ')THEN - !Murakami 1990 - WHERE(GRIM(:)) - PRS_TEND(:, IRSRIMCG)=XSRIMCG * PLBDAS(:)**XEXSRIMCG*(1.0-ZZW(:)) - PRS_TEND(:, IRSRIMCG)=ZZW6(:)*PRS_TEND(:, IRSRIMCG)/ & - MAX(1.E-20, & - XSRIMCG3*XSRIMCG2*PLBDAS(:)**XEXSRIMCG2*(1.-ZZW2(:)) - & - XSRIMCG3*PRS_TEND(:, IRSRIMCG)) - END WHERE - ELSE - PRS_TEND(:, IRSRIMCG)=0. - END IF - ENDIF -ENDIF -! -DO JL=1, KSIZE - ! More restrictive RIM mask to be used for riming by negative temperature only - ZRIM(JL)=ZRIM(JL) * & - &MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT) - PRCRIMSS(JL)=ZRIM(JL)*MIN(ZFREEZ_RATE(JL), PRS_TEND(JL, IRCRIMSS)) - ZFREEZ_RATE(JL)=MAX(0., ZFREEZ_RATE(JL)-PRCRIMSS(JL)) - ZZW(JL) = MIN(1., ZFREEZ_RATE(JL) / MAX(1.E-20, PRS_TEND(JL, IRCRIMS) - PRCRIMSS(JL))) ! proportion we are able to freeze - PRCRIMSG(JL) = ZRIM(JL) * ZZW(JL) * MAX(0., PRS_TEND(JL, IRCRIMS) - PRCRIMSS(JL)) ! RCRIMSG - ZFREEZ_RATE(JL)=MAX(0., ZFREEZ_RATE(JL)-PRCRIMSG(JL)) - PRSRIMCG(JL) = ZRIM(JL) * ZZW(JL) * PRS_TEND(JL, IRSRIMCG) - - PRSRIMCG(JL) = PRSRIMCG(JL) * MAX(0., -SIGN(1., -PRCRIMSG(JL))) - PRCRIMSG(JL)=MAX(0., PRCRIMSG(JL)) - - PA_RC(JL) = PA_RC(JL) - PRCRIMSS(JL) - PA_RS(JL) = PA_RS(JL) + PRCRIMSS(JL) - PA_TH(JL) = PA_TH(JL) + PRCRIMSS(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA_RC(JL) = PA_RC(JL) - PRCRIMSG(JL) - PA_RS(JL) = PA_RS(JL) - PRSRIMCG(JL) - PA_RG(JL) = PA_RG(JL) + PRCRIMSG(JL)+PRSRIMCG(JL) - PA_TH(JL) = PA_TH(JL) + PRCRIMSG(JL)*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -!* 5.2 rain accretion onto the aggregates -! -DO JL=1, KSIZE - ZACC(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & !WHERE(PRRT(:)>XRTMIN(3)) - &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & !WHERE(PRST(:)>XRTMIN(5)) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRS_TEND(JL, IRRACCS)=ZACC(JL) * PRS_TEND(JL, IRRACCS) - PRS_TEND(JL, IRRACCSS)=ZACC(JL) * PRS_TEND(JL, IRRACCSS) - PRS_TEND(JL, IRSACCRG)=ZACC(JL) * PRS_TEND(JL, IRSACCRG) - ENDDO -ELSE - PRS_TEND(:, IRRACCS)=0. - PRS_TEND(:, IRRACCSS)=0. - PRS_TEND(:, IRSACCRG)=0. - GACC(:)=ZACC(:)==1. - IGACC = COUNT(GACC(:)) - IF(IGACC>0)THEN - ! - ! - ! 5.2.1 select the (PLBDAS,PLBDAR) couplet - ! - ZVEC1(1:IGACC) = PACK( PLBDAS(:),MASK=GACC(:) ) - ZVEC2(1:IGACC) = PACK( PLBDAR(:),MASK=GACC(:) ) - ! - ! 5.2.2 find the next lower indice for the PLBDAS and for the PLBDAR - ! in the geometrical set of (Lbda_s,Lbda_r) couplet use to - ! tabulate the RACCSS-kernel - ! - ZVEC1(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001, & - XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) ) - IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) ) - ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - FLOAT( IVEC1(1:IGACC) ) - ! - ZVEC2(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001, & - XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) ) - IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) ) - ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - FLOAT( IVEC2(1:IGACC) ) - ! - ! 5.2.3 perform the bilinear interpolation of the normalized - ! RACCSS-kernel - ! - DO JJ = 1, IGACC - ZVEC3(JJ) = ( XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGACC),MASK=GACC,FIELD=0.0 ) - ! - ! 5.2.4 raindrop accretion on the small sized aggregates - ! - WHERE(GACC(:)) - ZZW6(:) = & !! coef of RRACCS - XFRACCSS*( PLBDAS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRACCS1/((PLBDAS(:)**2) ) + & - XLBRACCS2/( PLBDAS(:) * PLBDAR(:) ) + & - XLBRACCS3/( (PLBDAR(:)**2)) )/PLBDAR(:)**4 - PRS_TEND(:, IRRACCSS) =ZZW(:)*ZZW6(:) - END WHERE - ! - ! 5.2.4b perform the bilinear interpolation of the normalized - ! RACCS-kernel - ! - DO JJ = 1, IGACC - ZVEC3(JJ) = ( XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGACC),MASK=GACC(:),FIELD=0.0 ) - WHERE(GACC(:)) - PRS_TEND(:, IRRACCS) = ZZW(:)*ZZW6(:) - END WHERE - ! 5.2.5 perform the bilinear interpolation of the normalized - ! SACCRG-kernel - ! - DO JJ = 1, IGACC - ZVEC3(JJ) = ( XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ) & - - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & - * ZVEC2(JJ) & - - ( XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ)+1)* ZVEC1(JJ) & - - XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & - * (ZVEC2(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGACC),MASK=GACC,FIELD=0.0 ) - ! - ! 5.2.6 raindrop accretion-conversion of the large sized aggregates - ! into graupeln - ! - WHERE(GACC(:)) - PRS_TEND(:, IRSACCRG) = XFSACCRG*ZZW(:)* & ! RSACCRG - ( PLBDAS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSACCR1/((PLBDAR(:)**2) ) + & - XLBSACCR2/( PLBDAR(:) * PLBDAS(:) ) + & - XLBSACCR3/( (PLBDAS(:)**2)) )/PLBDAR(:) - END WHERE - ENDIF -ENDIF -! -DO JL=1, KSIZE - ! More restrictive ACC mask to be used for accretion by negative temperature only - ZACC(JL) = ZACC(JL) * & - &MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT) - PRRACCSS(JL)=ZACC(JL)*MIN(ZFREEZ_RATE(JL), PRS_TEND(JL, IRRACCSS)) - ZFREEZ_RATE(JL)=MAX(0., ZFREEZ_RATE(JL)-PRRACCSS(JL)) - ZZW(JL) = MIN(1., ZFREEZ_RATE(JL) / MAX(1.E-20, PRS_TEND(JL, IRRACCS)-PRRACCSS(JL))) ! proportion we are able to freeze - PRRACCSG(JL)=ZACC(JL)*ZZW(JL) * MAX(0., PRS_TEND(JL, IRRACCS)-PRRACCSS(JL)) - ZFREEZ_RATE(JL) = MAX(0., ZFREEZ_RATE(JL)-PRRACCSG(JL)) - PRSACCRG(JL)=ZACC(JL)*ZZW(JL) * PRS_TEND(JL, IRSACCRG) - - PRSACCRG(JL) = PRSACCRG(JL) * MAX(0., -SIGN(1., -PRRACCSG(JL))) - PRRACCSG(JL)=MAX(0., PRRACCSG(JL)) - - PA_RR(JL) = PA_RR(JL) - PRRACCSS(JL) - PA_RS(JL) = PA_RS(JL) + PRRACCSS(JL) - PA_TH(JL) = PA_TH(JL) + PRRACCSS(JL)*(PLSFACT(JL)-PLVFACT(JL)) - PA_RR(JL) = PA_RR(JL) - PRRACCSG(JL) - PA_RS(JL) = PA_RS(JL) - PRSACCRG(JL) - PA_RG(JL) = PA_RG(JL) + PRRACCSG(JL)+PRSACCRG(JL) - PA_TH(JL) = PA_TH(JL) + PRRACCSG(JL)*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -! -!* 5.3 Conversion-Melting of the aggregates -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5)) - &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRSMLTG(JL)=ZMASK(JL)*PRSMLTG(JL) - PRCMLTSR(JL)=ZMASK(JL)*PRCMLTSR(JL) - ENDDO -ELSE - DO JL=1, KSIZE - PRSMLTG(JL)=ZMASK(JL)*PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure - ENDDO - IF(LEVLIMIT) THEN - WHERE(ZMASK(:)==1.) - PRSMLTG(:)=MIN(PRSMLTG(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T)) - END WHERE - ENDIF - DO JL=1, KSIZE - PRSMLTG(JL)=ZMASK(JL)*( & - & PKA(JL)*(XTT-PT(JL)) + & - & ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) & - & *(XESTT-PRSMLTG(JL))/(XRV*PT(JL)) ) & - &) - ENDDO - PRCMLTSR(:) = 0. - WHERE(ZMASK(:)==1.) - ! - ! compute RSMLT - ! - PRSMLTG(:) = XFSCVMG*MAX( 0.0,( -PRSMLTG(:) * & - ( X0DEPS* PLBDAS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) - & - ( PRS_TEND(:, IRCRIMS) + PRS_TEND(:, IRRACCS) ) * & - ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & - ( PRHODREF(:)*XLMTT ) ) - ! When T < XTT, rc is collected by snow (riming) to produce snow and graupel - ! When T > XTT, if riming was still enabled, rc would produce snow and graupel with snow becomming graupel (conversion/melting) and graupel becomming rain (melting) - ! To insure consistency when crossing T=XTT, rc collected with T>XTT must be transformed in rain. - ! rc cannot produce iced species with a positive temperature but is still collected with a good efficiency by snow - PRCMLTSR(:) = PRS_TEND(:, IRCRIMS) ! both species are liquid, no heat is exchanged - END WHERE -ENDIF -DO JL=1, KSIZE - ! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT) - ! because the graupeln produced by this process are still icy!!! - PA_RS(JL) = PA_RS(JL) - PRSMLTG(JL) - PA_RG(JL) = PA_RG(JL) + PRSMLTG(JL) - PA_RC(JL) = PA_RC(JL) - PRCMLTSR(JL) - PA_RR(JL) = PA_RR(JL) + PRCMLTSR(JL) -ENDDO - -IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_FAST_RS diff --git a/src/arome/micro/ice4_tendencies.F90 b/src/arome/micro/ice4_tendencies.F90 index 3030684fe4c79584175a2e47988f608176369013..e0dde9c5840c0edccaa0dc6b1894a9457658f773 100644 --- a/src/arome/micro/ice4_tendencies.F90 +++ b/src/arome/micro/ice4_tendencies.F90 @@ -47,11 +47,11 @@ USE MODI_ICE4_RIMLTC USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD USE MODI_ICE4_COMPUTE_PDF USE MODI_ICE4_RAINFR_VERT -USE MODI_ICE4_SLOW +USE MODE_ICE4_SLOW, ONLY: ICE4_SLOW USE MODE_ICE4_WARM, ONLY: ICE4_WARM -USE MODI_ICE4_FAST_RS -USE MODI_ICE4_FAST_RG -USE MODI_ICE4_FAST_RH +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 @@ -380,7 +380,7 @@ END IF !* 4. COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s ! ---------------------------------------------- ! -CALL ICE4_FAST_RS(KSIZE, LDSOFT, PCOMPUTE, & +CALL ICE4_FAST_RS(KSIZE, KSIZE, LDSOFT, PCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAR, ZLBDAS, & @@ -403,7 +403,7 @@ DO JL=1, KSIZE & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL) ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL) ENDDO -CALL ICE4_FAST_RG(KSIZE, LDSOFT, PCOMPUTE, KRR, & +CALL ICE4_FAST_RG(KSIZE, KSIZE, LDSOFT, PCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, PCIT, & &ZLBDAR, ZLBDAS, ZLBDAG, & @@ -422,7 +422,7 @@ CALL ICE4_FAST_RG(KSIZE, LDSOFT, PCOMPUTE, KRR, & ! ---------------------------------------------- ! IF (KRR==7) THEN - CALL ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, ZWETG, & + CALL ICE4_FAST_RH(KSIZE, KSIZE, LDSOFT, PCOMPUTE, ZWETG, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &ZDV, ZKA, ZCJ, & &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, & diff --git a/src/arome/micro/modi_ice4_fast_rg.F90 b/src/arome/micro/modi_ice4_fast_rg.F90 deleted file mode 100644 index 801d8c2d1bb8afcaaa8c064c7d93720b5f5ccbd7..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_ice4_fast_rg.F90 +++ /dev/null @@ -1,66 +0,0 @@ -MODULE MODI_ICE4_FAST_RG -INTERFACE -SUBROUTINE ICE4_FAST_RG(KSIZE, LDSOFT, PCOMPUTE, KRR, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, PCIT, & - &PLBDAR, PLBDAS, PLBDAG, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - &PRGSI, PRGSI_MR, & - &PWETG, & - &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) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -INTEGER, INTENT(IN) :: KRR ! Number of moist variable -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCIT ! Pristine ice conc. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI ! Graupel tendency by other processes -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI_MR ! Graupel mr change by other processes -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH ! Conversion of graupel into hail -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH_MR ! Conversion of graupel into hail, mr change -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR ! Melting of the graupel -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRG_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RH -END SUBROUTINE ICE4_FAST_RG -END INTERFACE -END MODULE MODI_ICE4_FAST_RG diff --git a/src/arome/micro/modi_ice4_fast_rh.F90 b/src/arome/micro/modi_ice4_fast_rh.F90 deleted file mode 100644 index 5cd5bc4ded74b0f9851930f69cd80e272bf1987b..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_ice4_fast_rh.F90 +++ /dev/null @@ -1,58 +0,0 @@ -MODULE MODI_ICE4_FAST_RH -INTERFACE -SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, PWETG, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAS, PLBDAG, PLBDAR, PLBDAH, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, 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) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the rain distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAH ! Slope parameter of the hail distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRDRYHG ! Conversion of hailstone into graupel -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR ! Melting of the hailstones -REAL, DIMENSION(KSIZE, 10), INTENT(INOUT) :: PRH_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -END SUBROUTINE ICE4_FAST_RH -END INTERFACE -END MODULE MODI_ICE4_FAST_RH diff --git a/src/arome/micro/modi_ice4_fast_rs.F90 b/src/arome/micro/modi_ice4_fast_rs.F90 deleted file mode 100644 index f27c670521e618f2df3b5e3208b8bd3694190c81..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_ice4_fast_rs.F90 +++ /dev/null @@ -1,49 +0,0 @@ -MODULE MODI_ICE4_FAST_RS -INTERFACE -SUBROUTINE ICE4_FAST_RS(KSIZE, LDSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAR, PLBDAS, & - &PT, PRVT, PRCT, PRRT, PRST, & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & - &PRS_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RS, PA_RG) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIAGGS ! r_i aggregation on r_s -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSS ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSS ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSACCRG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG ! Conversion-Melting of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR ! Cloud droplet collection onto aggregates by positive temperature -REAL, DIMENSION(KSIZE, 8), INTENT(INOUT) :: PRS_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -END SUBROUTINE ICE4_FAST_RS -END INTERFACE -END MODULE MODI_ICE4_FAST_RS diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rg.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rg.F90 deleted file mode 100644 index 98fd4c7484036e911ee74001ffde5d78970fcd52..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rg.F90 +++ /dev/null @@ -1,66 +0,0 @@ -MODULE MODI_ICE4_FAST_RG -INTERFACE -SUBROUTINE ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, PCIT, & - &PLBDAR, PLBDAS, PLBDAG, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - &PRGSI, PRGSI_MR, & - &PWETG, & - &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) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KPROMA,KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -INTEGER, INTENT(IN) :: KRR ! Number of moist variable -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCIT ! Pristine ice conc. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI ! Graupel tendency by other processes -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGSI_MR ! Graupel mr change by other processes -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRRG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRCFRIG ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRICFRR ! Rain contact freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETG ! Graupel wet growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYG ! Graupel dry growth -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH ! Conversion of graupel into hail -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRWETGH_MR ! Conversion of graupel into hail, mr change -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGMLTR ! Melting of the graupel -REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRG_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RH -END SUBROUTINE ICE4_FAST_RG -END INTERFACE -END MODULE MODI_ICE4_FAST_RG diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rh.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rh.F90 deleted file mode 100644 index a0d8e04b16271f2cb9f745ffe87badfa2d5bd18c..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rh.F90 +++ /dev/null @@ -1,58 +0,0 @@ -MODULE MODI_ICE4_FAST_RH -INTERFACE -SUBROUTINE ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAS, PLBDAG, PLBDAR, PLBDAH, & - &PT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, 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) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KPROMA,KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PWETG ! 1. where graupel grows in wet mode, 0. elsewhere -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAG ! Slope parameter of the graupel distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the rain distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAH ! Slope parameter of the hail distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRGT ! Graupel m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRWETH ! Dry growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRGDRYH ! Wet growth of hailstone -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRDRYHG ! Conversion of hailstone into graupel -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRHMLTR ! Melting of the hailstones -REAL, DIMENSION(KPROMA, 10), INTENT(INOUT) :: PRH_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RH -END SUBROUTINE ICE4_FAST_RH -END INTERFACE -END MODULE MODI_ICE4_FAST_RH diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rs.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rs.F90 deleted file mode 100644 index 4f16b6e1e6083d2807bc7ecd40d5703ee8ed18b0..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_fast_rs.F90 +++ /dev/null @@ -1,49 +0,0 @@ -MODULE MODI_ICE4_FAST_RS -INTERFACE -SUBROUTINE ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, & - &PRHODREF, PLVFACT, PLSFACT, PPRES, & - &PDV, PKA, PCJ, & - &PLBDAR, PLBDAS, & - &PT, PRVT, PRCT, PRRT, PRST, & - &PRIAGGS, & - &PRCRIMSS, PRCRIMSG, PRSRIMCG, & - &PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, & - &PRCMLTSR, & - &PRS_TEND, & - &PA_TH, PA_RC, PA_RR, PA_RS, PA_RG) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KPROMA,KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PPRES ! absolute pressure at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PKA ! Thermal conductivity of the air -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAR ! Slope parameter of the raindrop distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLBDAS ! Slope parameter of the aggregate distribution -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIAGGS ! r_i aggregation on r_s -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSS ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCRIMSG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSRIMCG ! Cloud droplet riming of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSS ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRACCSG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSACCRG ! Rain accretion onto the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRSMLTG ! Conversion-Melting of the aggregates -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCMLTSR ! Cloud droplet collection onto aggregates by positive temperature -REAL, DIMENSION(KPROMA, 8), INTENT(INOUT) :: PRS_TEND ! Individual tendencies -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -END SUBROUTINE ICE4_FAST_RS -END INTERFACE -END MODULE MODI_ICE4_FAST_RS diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rg.F90 b/src/common/micro/mode_ice4_fast_rg.F90 similarity index 98% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rg.F90 rename to src/common/micro/mode_ice4_fast_rg.F90 index efe09f5c70b66796b0e4a10f606ae25f480237f8..101a10ca2da2fec4f485449842b2cb8e61d8e916 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rg.F90 +++ b/src/common/micro/mode_ice4_fast_rg.F90 @@ -1,3 +1,10 @@ +!MNH_LIC Copyright 1994-2020 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_FAST_RG +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &PDV, PKA, PCJ, PCIT, & @@ -496,3 +503,4 @@ ENDDO IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 1, ZHOOK_HANDLE) END SUBROUTINE ICE4_FAST_RG +END MODULE MODE_ICE4_FAST_RG diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rh.F90 b/src/common/micro/mode_ice4_fast_rh.F90 similarity index 98% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rh.F90 rename to src/common/micro/mode_ice4_fast_rh.F90 index 5bcc5de79ebd88284e880f85aa96f0000975fc3e..b45cd8fe1af7f1946384d9cd8ad558ca422e5b72 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rh.F90 +++ b/src/common/micro/mode_ice4_fast_rh.F90 @@ -1,3 +1,10 @@ +!MNH_LIC Copyright 1994-2020 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_FAST_RH +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &PDV, PKA, PCJ, & @@ -501,3 +508,4 @@ ENDDO IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_FAST_RH +END MODULE MODE_ICE4_FAST_RH diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rs.F90 b/src/common/micro/mode_ice4_fast_rs.F90 similarity index 98% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rs.F90 rename to src/common/micro/mode_ice4_fast_rs.F90 index bf90be02a2da8983eaf4a543acdd3abe4d5d78ed..712d5d7924748fc9e9d45385db72ffbc973bab2c 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_fast_rs.F90 +++ b/src/common/micro/mode_ice4_fast_rs.F90 @@ -1,3 +1,10 @@ +!MNH_LIC Copyright 1994-2020 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_FAST_RS +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & &PDV, PKA, PCJ, & @@ -441,3 +448,4 @@ ENDDO IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_FAST_RS +END MODULE MODE_ICE4_FAST_RS diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_slow.F90 b/src/common/micro/mode_ice4_slow.F90 similarity index 95% rename from src/arome/modset_Ryad/mpa/micro/internals/ice4_slow.F90 rename to src/common/micro/mode_ice4_slow.F90 index 054e9d9ed4fcbe2ff9a89489f157729792baba0c..dad2039b2e7c2ea1c6265d9dd7e4b5fe1245aaa9 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_slow.F90 +++ b/src/common/micro/mode_ice4_slow.F90 @@ -1,3 +1,10 @@ +!MNH_LIC Copyright 1994-2020 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_SLOW +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, & &PSSI, PLVFACT, PLSFACT, & &PRVT, PRCT, PRIT, PRST, PRGT, & @@ -207,3 +214,4 @@ ENDDO IF (LHOOK) CALL DR_HOOK('ICE4_SLOW', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_SLOW +END MODULE MODE_ICE4_SLOW