diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index cca761ab08eebf3dd23dba956f58c7c0949c92dd..c6c3c26b934fded65e85ad7abe1450c3ce6f0839 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -34,3 +34,11 @@ 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 +phyex/micro/ice4_tendencies.F90 +phyex/micro/modi_ice4_tendencies.F90 +phyex/micro/modi_ice4_rainfr_vert.F90 +phyex/micro/ice4_rainfr_vert.F90 +phyex/micro/ice4_rimltc.F90 +phyex/micro/modi_ice4_rimltc.F90 +phyex/micro/ice4_rrhong.F90 +phyex/micro/modi_ice4_rrhong.F90 diff --git a/src/arome/micro/ice4_compute_pdf.F90 b/src/arome/micro/ice4_compute_pdf.F90 deleted file mode 100644 index bcced304eb77e44cd59391426490116c6fc55679..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_compute_pdf.F90 +++ /dev/null @@ -1,242 +0,0 @@ -SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, & - PRHODREF, PRCT, PCF, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, PRF) -!! -!!** PURPOSE -!! ------- -!! Computes the pdf used to split cloud into high and low content parts -!! -!! AUTHOR -!! ------ -!! S. Riette from the plitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -! -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -USE MODD_RAIN_ICE_DESCR -USE MODD_RAIN_ICE_PARAM -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KSIZE -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV ! Kind of Subgrid autoconversion method -CHARACTER*80, INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC ! Standard deviation of rc at time t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid - ! note that PCF = PHLC_HCF + PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid - ! note that PRC = PHLC_HRC + PHLC_LRC -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF ! Rain fraction -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZRCRAUTC, & !RC value to begin rain formation =XCRIAUTC/RHODREF - ZHLC_RCMAX, & !HLCLOUDS : maximum value for RC in distribution - ZHLC_LRCLOCAL, & !HLCLOUDS : LWC that is Low LWC local in LCF - ZHLC_HRCLOCAL !HLCLOUDS : LWC that is High LWC local in HCF - ! note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL - ! = PHLC_HRC/HCF+ PHLC_LRC/LCF -REAL :: ZCOEFFRCM -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)! - -!Cloud water split between high and low content part is done according to autoconversion option -ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold -IF(HSUBG_AUCV=='NONE') THEN - !Cloud water is entirely in low or high part - WHERE(PRCT(:)>ZRCRAUTC(:)) - PHLC_HCF(:)=1. - PHLC_LCF(:)=0. - PHLC_HRC(:)=PRCT(:) - PHLC_LRC(:)=0. - PRF(:) =1. - ELSEWHERE(PRCT(:)>XRTMIN(2)) - PHLC_HCF(:)=0. - PHLC_LCF(:)=1. - PHLC_HRC(:)=0. - PHLC_LRC(:)=PRCT(:) - PRF(:) =0. - ELSEWHERE - PHLC_HCF(:)=0. - PHLC_LCF(:)=0. - PHLC_HRC(:)=0. - PHLC_LRC(:)=0. - PRF(:) =0. - END WHERE - -ELSEIF(HSUBG_AUCV=='CLFR') THEN - !Cloud water is only in the cloudy part and entirely in low or high part - WHERE(PCF(:)>0.) - WHERE(PRCT(:)/PCF(:)>ZRCRAUTC(:)) - PHLC_HCF(:)=PCF(:) - PHLC_LCF(:)=0. - PHLC_HRC(:)=PRCT(:) - PHLC_LRC(:)=0. - PRF(:) =PCF(:) - ELSEWHERE(PRCT(:)>XRTMIN(2)) - PHLC_HCF(:)=0. - PHLC_LCF(:)=PCF(:) - PHLC_HRC(:)=0.0 - PHLC_LRC(:)=PRCT(:) - PRF(:) =0. - ELSEWHERE - PHLC_HCF(:)=0. - PHLC_LCF(:)=0. - PHLC_HRC(:)=0. - PHLC_LRC(:)=0. - PRF(:) =0. - END WHERE - ELSEWHERE - PHLC_HCF(:)=0. - PHLC_LCF(:)=0. - PHLC_HRC(:)=0. - PHLC_LRC(:)=0. - PRF(:) =0. - END WHERE - -ELSEIF(HSUBG_AUCV=='PDF ') THEN - !Cloud water is split between high and low part according to a PDF - ! 'HLCRECTPDF' : rectangular PDF form - ! 'HLCTRIANGPDF' : triangular PDF form - ! 'HLCQUADRAPDF' : second order quadratic PDF form - ! 'HLCISOTRIPDF' : isocele triangular PDF - ! 'SIGM' : Redelsperger and Sommeria (1986) - IF(HSUBG_PR_PDF=='SIGM') THEN - ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012) - WHERE (PRCT(:)>ZRCRAUTC(:)+PSIGMA_RC(:)) - PHLC_HCF(:)=1. - PHLC_LCF(:)=0. - PHLC_HRC(:)=PRCT(:) - PHLC_LRC(:)=0. - PRF(:) =1. - ELSEWHERE(PRCT(:)> (ZRCRAUTC(:)-PSIGMA_RC(:)) .AND. & - & PRCT(:)<=(ZRCRAUTC(:)+PSIGMA_RC(:)) ) - PHLC_HCF(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))/ & - &(2.*PSIGMA_RC(:)) - PHLC_LCF(:)=MAX(0., PCF(:)-PHLC_HCF(:)) - PHLC_HRC(:)=(PRCT(:)+PSIGMA_RC(:)-ZRCRAUTC(:))* & - &(PRCT(:)+PSIGMA_RC(:)+ZRCRAUTC(:))/ & - &(4.*PSIGMA_RC(:)) - PHLC_LRC(:)=MAX(0., PRCT(:)-PHLC_HRC(:)) - PRF(:) =PHLC_HCF(:) - ELSEWHERE(PRCT(:)>XRTMIN(2) .AND. PCF(:)>0.) - PHLC_HCF(:)=0. - PHLC_LCF(:)=PCF(:) - PHLC_HRC(:)=0. - PHLC_LRC(:)=PRCT(:) - PRF(:) =0. - ELSEWHERE - PHLC_HCF(:)=0. - PHLC_LCF(:)=0. - PHLC_HRC(:)=0. - PHLC_LRC(:)=0. - PRF(:) =0. - END WHERE - ! Turner (2011, 2012) - ELSEIF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF' .OR. & - &HSUBG_PR_PDF=='HLCTRIANGPDF' .OR. HSUBG_PR_PDF=='HLCQUADRAPDF') THEN - ! Calculate maximum value r_cM from PDF forms - IF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF') THEN - ZCOEFFRCM=2. - ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN - ZCOEFFRCM=3. - ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN - ZCOEFFRCM=4. - END IF - WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0.) - ZHLC_RCMAX(:)=ZCOEFFRCM*PRCT(:)/PCF(:) - END WHERE - ! Split available water and cloud fraction in two parts - ! Calculate local mean values int he low and high parts for the 3 PDF forms: - IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN - WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:)) - ZHLC_LRCLOCAL(:)=0.5*ZRCRAUTC(:) - ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + ZRCRAUTC(:))/2.0 - END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCTRIANGPDF') THEN - WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:)) - ZHLC_LRCLOCAL(:)=( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) & - / (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:) ) ) - ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0 - END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN - WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:)) - ZHLC_LRCLOCAL(:)=(3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) & - + 6.0*ZRCRAUTC(:) *ZHLC_RCMAX(:)**2 ) & - / & - (4.0* ZRCRAUTC(:)**2 -12.0*ZRCRAUTC(:) *ZHLC_RCMAX(:) & - + 12.0 * ZHLC_RCMAX(:)**2 ) - ZHLC_HRCLOCAL(:)=(ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:))/4.0 - END WHERE - ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN - WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:)) - WHERE((PRCT(:) / PCF(:)).LE.ZRCRAUTC(:)) - ZHLC_LRCLOCAL(:)=( (ZHLC_RCMAX(:))**3 & - -(12.0 * (ZHLC_RCMAX(:))*(ZRCRAUTC(:))**2) & - +(8.0 * ZRCRAUTC(:)**3) ) & - /( (6.0 * (ZHLC_RCMAX(:))**2) & - -(24.0 * (ZHLC_RCMAX(:)) * ZRCRAUTC(:)) & - +(12.0 * ZRCRAUTC(:)**2) ) - ZHLC_HRCLOCAL(:)=( ZHLC_RCMAX(:) + 2.0 * ZRCRAUTC(:) )/3.0 - ELSEWHERE - ZHLC_LRCLOCAL(:)=(2.0/3.0) * ZRCRAUTC(:) - ZHLC_HRCLOCAL(:)=(3.0*ZHLC_RCMAX(:)**3 - 8.0*ZRCRAUTC(:)**3) & - / (6.0 * ZHLC_RCMAX(:)**2 - 12.0*ZRCRAUTC(:)**2) - END WHERE - END WHERE - END IF - ! Compare r_cM to r_cR to know if cloud water content is high enough to split in two parts or not - WHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:)) - ! Calculate final values for LCF and HCF: - PHLC_LCF(:)=PCF(:) & - *(ZHLC_HRCLOCAL- & - (PRCT(:) / PCF(:))) & - / (ZHLC_HRCLOCAL-ZHLC_LRCLOCAL) - PHLC_HCF(:)=MAX(0., PCF(:)-PHLC_LCF(:)) - ! - ! Calculate final values for LRC and HRC: - PHLC_LRC(:)=ZHLC_LRCLOCAL*PHLC_LCF(:) - PHLC_HRC(:)=MAX(0., PRCT(:)-PHLC_LRC(:)) - ELSEWHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:)) - ! Put all available cloud water and his fraction in the low part - PHLC_LCF(:)=PCF(:) - PHLC_HCF(:)=0. - PHLC_LRC(:)=PRCT(:) - PHLC_HRC(:)=0. - ELSEWHERE - PHLC_LCF(:)=0. - PHLC_HCF(:)=0. - PHLC_LRC(:)=0. - PHLC_HRC(:)=0. - END WHERE - PRF(:)=PHLC_HCF(:) !Precipitation fraction - ELSE - !wrong HSUBG_PR_PDF case - CALL ABORT - STOP 'wrong HSUBG_PR_PDF case' - ENDIF -ELSE - !wrong HSUBG_AUCV case - CALL ABORT - STOP 'wrong HSUBG_AUCV case' -ENDIF -! -IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE) -END SUBROUTINE ICE4_COMPUTE_PDF diff --git a/src/arome/micro/ice4_rainfr_vert.F90 b/src/arome/micro/ice4_rainfr_vert.F90 deleted file mode 100644 index 6d90d5ccc375cb2a8f35ffc8a1edb024747faef3..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_rainfr_vert.F90 +++ /dev/null @@ -1,58 +0,0 @@ -SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR) -!! -!!** PURPOSE -!! ------- -!! Computes the rain fraction -!! -!! AUTHOR -!! ------ -!! S. Riette from the plitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE PARKIND1, ONLY : JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PPRFR !Precipitation fraction -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRR !Rain field -! -!* 0.2 declaration of local variables -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: JI, JJ, JK -! -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('ICE4_RAINFR_VERT',0,ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -DO JI = KIB,KIE - DO JJ = KJB, KJE - PPRFR(JI,JJ,KKE)=0. - DO JK=KKE-KKL, KKB, -KKL - IF (PRR(JI,JJ,JK) .GT. XRTMIN(3)) THEN - PPRFR(JI,JJ,JK)=MAX(PPRFR(JI,JJ,JK),PPRFR(JI,JJ,JK+KKL)) - IF (PPRFR(JI,JJ,JK)==0) THEN - PPRFR(JI,JJ,JK)=1. - END IF - ELSE - PPRFR(JI,JJ,JK)=0. - END IF - END DO - END DO -END DO -! -IF (LHOOK) CALL DR_HOOK('ICE4_RAINFR_VERT',1,ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_RAINFR_VERT diff --git a/src/arome/micro/ice4_slow.F90 b/src/arome/micro/ice4_slow.F90 deleted file mode 100644 index 875971e4e2150233880ca86cab77e2d41444c080..0000000000000000000000000000000000000000 --- a/src/arome/micro/ice4_slow.F90 +++ /dev/null @@ -1,216 +0,0 @@ -SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, & - &PSSI, PLVFACT, PLSFACT, & - &PRVT, PRCT, PRIT, PRST, PRGT, & - &PLBDAS, PLBDAG, & - &PAI, PCJ, & - &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, & - &PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG) -!! -!!** PURPOSE -!! ------- -!! Computes the slow 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 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) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSSI ! Supersaturation over ice -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud 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/hail m.r. at t -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) :: PAI ! Thermodynamical function -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCJ ! Function to compute the ventilation coefficient -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRCHONI ! Homogeneous nucleation -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPS ! Deposition on r_s -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAGGS ! Aggregation on r_s -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIAUTS ! Autoconversion of r_i for r_s production -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRVDEPG ! Deposition on r_g -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PA_RG -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZCRIAUTI -REAL :: ZTIMAUTIC -REAL(KIND=JPRB) :: ZHOOK_HANDLE -REAL, DIMENSION(KSIZE) :: ZMASK -INTEGER :: JL -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('ICE4_SLOW', 0, ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -! -!* 3.2 compute the homogeneous nucleation source: RCHONI -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(XTT-35.0))) * & ! PT(:)<XTT-35.0 - &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRCHONI(JL) = PRCHONI(JL) * ZMASK(JL) - ENDDO -ELSE - PRCHONI(:) = 0. - WHERE(ZMASK(:)==1.) - PRCHONI(:) = XHON*PRHODREF(:)*PRCT(:) & - *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 ) - ENDWHERE -ENDIF -DO JL=1, KSIZE - PA_RI(JL) = PA_RI(JL) + PRCHONI(JL) - PA_RC(JL) = PA_RC(JL) - PRCHONI(JL) - PA_TH(JL) = PA_TH(JL) + PRCHONI(JL)*(PLSFACT(JL)-PLVFACT(JL)) -ENDDO -! -!* 3.4 compute the deposition, aggregation and autoconversion sources -! -! -!* 3.4.2 compute the riming-conversion of r_c for r_i production: RCAUTI -! -! ZZW(:) = 0.0 -! ZTIMAUTIC = SQRT( XTIMAUTI*XTIMAUTC ) -! WHERE ( (PRCT(:)>0.0) .AND. (PRIT(:)>0.0) .AND. (PRCS(:)>0.0) ) -! ZZW(:) = MIN( PRCS(:),ZTIMAUTIC * MAX( SQRT( PRIT(:)*PRCT(:) ),0.0 ) ) -! PRIS(:) = PRIS(:) + ZZW(:) -! PRCS(:) = PRCS(:) - ZZW(:) -! PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCAUTI)) -! END WHERE -! -!* 3.4.3 compute the deposition on r_s: RVDEPS -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(1)-PRVT(JL))) * & !PRVT(:)>XRTMIN(1) - &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & !PRST(:)>XRTMIN(5) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRVDEPS(JL)=PRVDEPS(JL)*ZMASK(JL) - ENDDO -ELSE - PRVDEPS(:) = 0. - WHERE(ZMASK(:)==1.) - PRVDEPS(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * & - ( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RS(JL) = PA_RS(JL) + PRVDEPS(JL) - PA_RV(JL) = PA_RV(JL) - PRVDEPS(JL) - PA_TH(JL) = PA_TH(JL) + PRVDEPS(JL)*PLSFACT(JL) -ENDDO -! -!* 3.4.4 compute the aggregation on r_s: RIAGGS -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! PRIT(:)>XRTMIN(4) - &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! PRST(:)>XRTMIN(5) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRIAGGS(JL)=PRIAGGS(JL) * ZMASK(JL) - ENDDO -ELSE - PRIAGGS(:) = 0. - WHERE(ZMASK(:)==1) - PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & - * PRIT(:) & - * PLBDAS(:)**XEXIAGGS & - * PRHODREF(:)**(-XCEXVT) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RS(JL) = PA_RS(JL) + PRIAGGS(JL) - PA_RI(JL) = PA_RI(JL) - PRIAGGS(JL) -ENDDO -! -!* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! PRIT(:)>XRTMIN(4) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRIAUTS(JL) = PRIAUTS(JL) * ZMASK(JL) - ENDDO -ELSE - PRIAUTS(:) = 0. - !ZCRIAUTI(:)=MIN(XCRIAUTI,10**(0.06*(PT(:)-XTT)-3.5)) - ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) - WHERE(ZMASK(:)==1.) - PRIAUTS(:) = XTIMAUTI * EXP( XTEXAUTI*(PT(:)-XTT) ) & - * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RS(JL) = PA_RS(JL) + PRIAUTS(JL) - PA_RI(JL) = PA_RI(JL) - PRIAUTS(JL) -ENDDO -! -!* 3.4.6 compute the deposition on r_g: RVDEPG -! -! -DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(1)-PRVT(JL))) * & ! PRVT(:)>XRTMIN(1) - &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! PRGT(:)>XRTMIN(6) - &PCOMPUTE(JL) -ENDDO -IF(LDSOFT) THEN - DO JL=1, KSIZE - PRVDEPG(JL) = PRVDEPG(JL) * ZMASK(JL) - ENDDO -ELSE - PRVDEPG(:) = 0. - WHERE(ZMASK(:)==1.) - PRVDEPG(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * & - ( X0DEPG*PLBDAG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) - END WHERE -ENDIF -DO JL=1, KSIZE - PA_RG(JL) = PA_RG(JL) + PRVDEPG(JL) - PA_RV(JL) = PA_RV(JL) - PRVDEPG(JL) - PA_TH(JL) = PA_TH(JL) + PRVDEPG(JL)*PLSFACT(JL) -ENDDO -! -IF (LHOOK) CALL DR_HOOK('ICE4_SLOW', 1, ZHOOK_HANDLE) -! -END SUBROUTINE ICE4_SLOW diff --git a/src/arome/micro/ice4_tendencies.F90 b/src/arome/micro/ice4_tendencies.F90 index aac00c1c76c1f7c2a583f459cf2fe69f8a307c1c..23d6bf57dfa01dc348f96f435fc8993ce74218b4 100644 --- a/src/arome/micro/ice4_tendencies.F90 +++ b/src/arome/micro/ice4_tendencies.F90 @@ -42,11 +42,11 @@ USE MODD_RAIN_ICE_DESCR USE MODD_PARAM_ICE, ONLY : CSNOWRIMING USE MODI_ICE4_NUCLEATION -USE MODI_ICE4_RRHONG -USE MODI_ICE4_RIMLTC +USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG +USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD -USE MODI_ICE4_COMPUTE_PDF -USE MODI_ICE4_RAINFR_VERT +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 @@ -174,8 +174,9 @@ REAL, DIMENSION(KSIZE) :: ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & & ZRF, & & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, & & ZRGSI, ZRGSI_MR -REAL, DIMENSION(KSIZE) :: PHLI_HCF -REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D +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 @@ -236,6 +237,11 @@ ELSE &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) @@ -249,7 +255,12 @@ ELSE &PEXN, PLVFACT, PLSFACT, & &ZT, & &ZTHT, ZRIT, & - &PRIMLTC_MR, PB_TH, PB_RC, PB_RI) + &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) @@ -295,14 +306,19 @@ IF(KSIZE>0) THEN ENDIF ! !Cloud water split between high and low content part is done here - CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_PR_PDF,& - PRHODREF, ZRCT, PCF, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, ZRF) + 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.) - CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), ZRRT3D(:,:,:)) + 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 diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_rimltc.F90 b/src/arome/modset_Ryad/mpa/micro/internals/ice4_rimltc.F90 deleted file mode 100644 index 4d9c39363da9d070bf37633317538b259cce8da9..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_rimltc.F90 +++ /dev/null @@ -1,4 +0,0 @@ -SUBROUTINE ICE4_RIMLTC -!! dead code - inlined in ice4_tendencies. -!! R. El Khatib 24-Aug-2021 -END SUBROUTINE ICE4_RIMLTC diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_rrhong.F90 b/src/arome/modset_Ryad/mpa/micro/internals/ice4_rrhong.F90 deleted file mode 100644 index 34778f274899ece0fcc41022e8568517b4e4cdfa..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_rrhong.F90 +++ /dev/null @@ -1,4 +0,0 @@ -SUBROUTINE ICE4_RRHONG -!! dead code - inlined in ice4_tendencies. -!! R. El Khatib 24-Aug-2021 -END SUBROUTINE ICE4_RRHONG diff --git a/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 b/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 index 74c5416ac341bd0b61284dcda842eff5c5104f3a..aeffaef19e9f3c71a520be3f5366f4d12a34a8f0 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 +++ b/src/arome/modset_Ryad/mpa/micro/internals/ice4_tendencies.F90 @@ -81,6 +81,7 @@ 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 @@ -90,6 +91,13 @@ 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 @@ -143,7 +151,21 @@ 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 @@ -309,6 +331,10 @@ 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' IF (LLRFR) THEN !Diagnostic of precipitation fraction diff --git a/src/mesonh/micro/ice4_compute_pdf.f90 b/src/common/micro/mode_ice4_compute_pdf.F90 similarity index 80% rename from src/mesonh/micro/ice4_compute_pdf.f90 rename to src/common/micro/mode_ice4_compute_pdf.F90 index bc465eb65ef522324dea8c19d986f578bdab5518..2058f4e5ad7e2e3118afaca7f6b6e4a4cc415ec3 100644 --- a/src/mesonh/micro/ice4_compute_pdf.f90 +++ b/src/common/micro/mode_ice4_compute_pdf.F90 @@ -3,37 +3,9 @@ !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_COMPUTE_PDF -INTERFACE -SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & - PRHODREF, PRCT, PRIT, PCF, PT, PSIGMA_RC,& - PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & - PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, PRF) +MODULE MODE_ICE4_COMPUTE_PDF IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Kind of Subgrid autoconversion method -CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Kind of Subgrid autoconversion method -CHARACTER(LEN=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Ice Crystal m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC ! Standard deviation of rc at time t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid - ! note that PCF = PHLC_HCF + PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid - ! note that PRC = PHLC_HRC + PHLC_LRC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HCF ! -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LCF -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HRI ! -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LRI ! -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRF ! Rain fraction -END SUBROUTINE ICE4_COMPUTE_PDF -END INTERFACE -END MODULE MODI_ICE4_COMPUTE_PDF +CONTAINS SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & PRHODREF, PRCT, PRIT, PCF, PT, PSIGMA_RC,& PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, & @@ -56,8 +28,10 @@ SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, & ! ------------ ! ! +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC,XBCRIAUTI,XACRIAUTI,XCRIAUTI +USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC, XBCRIAUTI, XACRIAUTI, XCRIAUTI USE MODD_CST, ONLY : XTT ! USE MODE_MSG @@ -68,7 +42,7 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KSIZE CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Kind of Subgrid autoconversion method for cloud water -CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Kind of Subgrid autoconversion method for cloud water +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Kind of Subgrid autoconversion method for cloud ice CHARACTER(LEN=80), INTENT(IN) :: HSUBG_PR_PDF ! pdf for subgrid precipitation REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(KSIZE), INTENT(IN) :: PRCT ! Cloud water m.r. at t @@ -76,11 +50,12 @@ REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Ice Crystal m.r. at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PCF ! Cloud fraction REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature REAL, DIMENSION(KSIZE), INTENT(IN) :: PSIGMA_RC ! Standard deviation of rc at time t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid +!Note for INTENT STATUS: in 'ADJU' case the PHL?_??? variables must be able to "cross" the subroutine untouched +REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid +REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_LCF ! HLCLOUDS : fraction of Low Cloud Fraction in grid ! note that PCF = PHLC_HCF + PHLC_LCF -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid +REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid +REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLC_LRC ! HLCLOUDS : LWC that is Low LWC in grid ! note that PRC = PHLC_HRC + PHLC_LRC REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_HCF REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PHLI_LCF @@ -97,10 +72,13 @@ REAL, DIMENSION(KSIZE) :: ZRCRAUTC, & !RC value to begin rain formation =XC ZHLC_HRCLOCAL, & !HLCLOUDS : LWC that is High LWC local in HCF ! note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL ! = PHLC_HRC/HCF+ PHLC_LRC/LCF - ZSUMRC, ZSUMRI + ZSUMRC, ZSUMRI REAL :: ZCOEFFRCM +REAL(KIND=JPRB) :: ZHOOK_HANDLE !------------------------------------------------------------------------------- ! +IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)! + !Cloud water split between high and low content part is done according to autoconversion option ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold IF(HSUBG_AUCV_RC=='NONE') THEN @@ -148,7 +126,7 @@ ELSEIF(HSUBG_AUCV_RC=='ADJU') THEN ELSEWHERE PHLC_LRC(:)=0. PHLC_HRC(:)=0. - ENDWHERE + ENDWHERE ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN !Cloud water is split between high and low part according to a PDF ! 'HLCRECTPDF' : rectangular PDF form @@ -321,4 +299,6 @@ ENDIF ! PRF=MAX(PHLC_HCF,PHLI_HCF) ! +IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE) END SUBROUTINE ICE4_COMPUTE_PDF +END MODULE MODE_ICE4_COMPUTE_PDF diff --git a/src/mesonh/micro/ice4_rainfr_vert.f90 b/src/common/micro/mode_ice4_rainfr_vert.F90 similarity index 78% rename from src/mesonh/micro/ice4_rainfr_vert.f90 rename to src/common/micro/mode_ice4_rainfr_vert.F90 index 6e817fe769601c4347a4e5fecc692bfe0ba17cc3..bc2e72b3a648b39c9bca613bd873e97427bc7495 100644 --- a/src/mesonh/micro/ice4_rainfr_vert.f90 +++ b/src/common/micro/mode_ice4_rainfr_vert.F90 @@ -3,19 +3,9 @@ !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_RAINFR_VERT -INTERFACE -SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR, PRS, PRG, PRH) +MODULE MODE_ICE4_RAINFR_VERT IMPLICIT NONE -INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PPRFR !Precipitation fraction -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRR !Rain field -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRS !Snow field -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRG !Graupel field -REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL,INTENT(IN) :: PRH !Hail field -END SUBROUTINE ICE4_RAINFR_VERT -END INTERFACE -END MODULE MODI_ICE4_RAINFR_VERT +CONTAINS SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR, PRS, PRG, PRH) !! !!** PURPOSE @@ -35,6 +25,8 @@ SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PP !* 0. DECLARATIONS ! ------------ ! +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN ! IMPLICIT NONE @@ -50,10 +42,12 @@ REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRH !Hail field ! !* 0.2 declaration of local variables ! +REAL(KIND=JPRB) :: ZHOOK_HANDLE INTEGER :: JI, JJ, JK LOGICAL :: MASK ! !------------------------------------------------------------------------------- +IF (LHOOK) CALL DR_HOOK('ICE4_RAINFR_VERT',0,ZHOOK_HANDLE) ! !------------------------------------------------------------------------------- DO JI = KIB,KIE @@ -79,5 +73,7 @@ DO JI = KIB,KIE END DO END DO ! +IF (LHOOK) CALL DR_HOOK('ICE4_RAINFR_VERT',1,ZHOOK_HANDLE) ! END SUBROUTINE ICE4_RAINFR_VERT +END MODULE MODE_ICE4_RAINFR_VERT diff --git a/src/arome/micro/ice4_rimltc.F90 b/src/common/micro/mode_ice4_rimltc.F90 similarity index 78% rename from src/arome/micro/ice4_rimltc.F90 rename to src/common/micro/mode_ice4_rimltc.F90 index 7ef2a89922ba345fd232807221a585bfdfe5da2d..9a6e7f0772642982a70c7b73a0fd0c0cbf75c5ac 100644 --- a/src/arome/micro/ice4_rimltc.F90 +++ b/src/common/micro/mode_ice4_rimltc.F90 @@ -1,8 +1,17 @@ +!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_RIMLTC +IMPLICIT NONE +CONTAINS + SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, PCOMPUTE, & &PEXN, PLVFACT, PLSFACT, & &PT, & &PTHT, PRIT, & - &PRIMLTC_MR, PB_TH, PB_RC, PB_RI) + &PRIMLTC_MR) !! !!** PURPOSE !! ------- @@ -20,10 +29,8 @@ SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, PCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LFEEDBACKT +USE MODD_CST, ONLY: XTT +USE MODD_PARAM_ICE, ONLY: LFEEDBACKT USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -40,10 +47,7 @@ REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Cloud ice at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI +REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting ! !* 0.2 declaration of local variables ! @@ -72,12 +76,8 @@ IF(.NOT. LDSOFT) THEN ENDDO ENDIF ENDIF -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 -! + IF (LHOOK) CALL DR_HOOK('ICE4_RIMLTC', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_RIMLTC +END MODULE MODE_ICE4_RIMLTC diff --git a/src/arome/micro/ice4_rrhong.F90 b/src/common/micro/mode_ice4_rrhong.F90 similarity index 77% rename from src/arome/micro/ice4_rrhong.F90 rename to src/common/micro/mode_ice4_rrhong.F90 index 35364711de0385604bdeec904ac9c1a67bd410f9..942e4e3281d1f530286705266be4b18b36a3124b 100644 --- a/src/arome/micro/ice4_rrhong.F90 +++ b/src/common/micro/mode_ice4_rrhong.F90 @@ -1,8 +1,16 @@ +!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_RRHONG +IMPLICIT NONE +CONTAINS SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, PCOMPUTE, & &PEXN, PLVFACT, PLSFACT, & &PT, PRRT, & &PTHT, & - &PRRHONG_MR, PB_TH, PB_RR, PB_RG) + &PRRHONG_MR) !! !!** PURPOSE !! ------- @@ -20,10 +28,9 @@ SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, PCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST -USE MODD_RAIN_ICE_PARAM -USE MODD_RAIN_ICE_DESCR -USE MODD_PARAM_ICE, ONLY : LFEEDBACKT +USE MODD_CST, ONLY: XTT +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN +USE MODD_PARAM_ICE, ONLY: LFEEDBACKT USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -40,10 +47,7 @@ REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG +REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing ! !* 0.2 declaration of local variables ! @@ -71,12 +75,8 @@ IF(.NOT. LDSOFT) THEN ENDDO ENDIF ENDIF -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 ! IF (LHOOK) CALL DR_HOOK('ICE4_RRHONG', 1, ZHOOK_HANDLE) ! END SUBROUTINE ICE4_RRHONG +END MODULE MODE_ICE4_RRHONG diff --git a/src/mesonh/micro/ice4_rimltc.f90 b/src/mesonh/micro/ice4_rimltc.f90 deleted file mode 100644 index fc4e129862254befe7e652f40780aedbee481759..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/ice4_rimltc.f90 +++ /dev/null @@ -1,105 +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_RIMLTC -INTERFACE -SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &PT, & - &PTHT, PRIT, & - &PRIMLTC_MR, PB_TH, PB_RC, PB_RI) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Cloud ice at t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI -END SUBROUTINE ICE4_RIMLTC -END INTERFACE -END MODULE MODI_ICE4_RIMLTC -SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &PT, & - &PTHT, PRIT, & - &PRIMLTC_MR, PB_TH, PB_RC, PB_RI) -!! -!!** PURPOSE -!! ------- -!! Computes the RIMLTC process -!! -!! AUTHOR -!! ------ -!! S. Riette from the splitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: XTT -USE MODD_PARAM_ICE, ONLY: LFEEDBACKT -! -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) :: PEXN ! Exner function -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRIT ! Cloud ice at t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRIMLTC_MR ! Mixing ratio change due to cloud ice melting -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RC -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RI -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZMASK -INTEGER :: JL -! -!------------------------------------------------------------------------------- -! -!* 7.1 cloud ice melting -! -PRIMLTC_MR(:)=0. -IF(.NOT. LDSOFT) THEN - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., -PRIT(JL))) * & ! PRIT(:)>0. - &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! PT(:)>XTT - &PCOMPUTE(JL) - PRIMLTC_MR(JL)=PRIT(JL) * ZMASK(JL) - ENDDO - - IF(LFEEDBACKT) THEN - !Limitation due to 0 crossing of temperature - DO JL=1, KSIZE - PRIMLTC_MR(JL)=MIN(PRIMLTC_MR(JL), MAX(0., (PTHT(JL)-XTT/PEXN(JL)) / (PLSFACT(JL)-PLVFACT(JL)))) - ENDDO - ENDIF -ENDIF -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 -! -! -END SUBROUTINE ICE4_RIMLTC diff --git a/src/mesonh/micro/ice4_rrhong.f90 b/src/mesonh/micro/ice4_rrhong.f90 deleted file mode 100644 index da26489475b841ca17b8fcd1d286bacc4aeafd38..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/ice4_rrhong.f90 +++ /dev/null @@ -1,105 +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_RRHONG -INTERFACE -SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &PT, PRRT, & - &PTHT, & - &PRRHONG_MR, PB_TH, PB_RR, PB_RG) -IMPLICIT NONE -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: LDSOFT -REAL, DIMENSION(KSIZE), INTENT(IN) :: PCOMPUTE -REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG -END SUBROUTINE ICE4_RRHONG -END INTERFACE -END MODULE MODI_ICE4_RRHONG -SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, PCOMPUTE, & - &PEXN, PLVFACT, PLSFACT, & - &PT, PRRT, & - &PTHT, & - &PRRHONG_MR, PB_TH, PB_RR, PB_RG) -!! -!!** PURPOSE -!! ------- -!! Computes the RRHONG process -!! -!! AUTHOR -!! ------ -!! S. Riette from the splitting of rain_ice source code (nov. 2014) -!! -!! MODIFICATIONS -!! ------------- -!! -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: XTT -USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_PARAM_ICE, ONLY: LFEEDBACKT -! -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) :: PEXN ! Exner function -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(KSIZE), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRRHONG_MR ! Mixing ratio change due to spontaneous freezing -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RR -REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PB_RG -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(KSIZE) :: ZMASK -INTEGER :: JL -! -!------------------------------------------------------------------------------- -! -!* 3.3 compute the spontaneous freezing source: RRHONG -! -PRRHONG_MR(:) = 0. -IF(.NOT. LDSOFT) THEN - DO JL=1, KSIZE - ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(XTT-35.0))) * & ! PT(:)<XTT-35.0 - &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) - &PCOMPUTE(JL) - PRRHONG_MR(JL)=PRRT(JL) * ZMASK(JL) - ENDDO - IF(LFEEDBACKT) THEN - !Limitation due to -35 crossing of temperature - DO JL=1, KSIZE - PRRHONG_MR(JL)=MIN(PRRHONG_MR(JL), MAX(0., ((XTT-35.)/PEXN(JL)-PTHT(JL))/(PLSFACT(JL)-PLVFACT(JL)))) - ENDDO - ENDIF -ENDIF -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 -! -! -END SUBROUTINE ICE4_RRHONG