diff --git a/src/arome/micro/lima_ccn_hom_freezing.F90 b/src/arome/micro/lima_ccn_hom_freezing.F90 deleted file mode 100644 index a7da41311666b48be8c8eca8f0b36c7660f91853..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_ccn_hom_freezing.F90 +++ /dev/null @@ -1,398 +0,0 @@ -! ################################# - MODULE MODI_LIMA_CCN_HOM_FREEZING -! ################################# -! -INTERFACE - SUBROUTINE LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, PW_NU, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, PNFT, PNHT ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for - ! the nucleation param. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRT ! Rain water C. source -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Ice crystal C. source -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! Free CCN conc. -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHT ! haze homogeneous freezing -! -END SUBROUTINE LIMA_CCN_HOM_FREEZING -END INTERFACE -END MODULE MODI_LIMA_CCN_HOM_FREEZING -! -! ###################################################################### - SUBROUTINE LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, PW_NU, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, PNFT, PNHT ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT -USE MODD_CST, ONLY : XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI, & - XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI, & - XG -USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC -USE MODD_PARAM_LIMA_COLD, ONLY : XRCOEF_HONH, XCEXP_DIFVAP_HONH, XCOEF_DIFVAP_HONH,& - XCRITSAT1_HONH, XCRITSAT2_HONH, XTMAX_HONH, & - XTMIN_HONH, XC1_HONH, XC2_HONH, XC3_HONH, & - XDLNJODT1_HONH, XDLNJODT2_HONH, XRHOI_HONH, & - XC_HONC, XTEXP1_HONC, XTEXP2_HONC, XTEXP3_HONC, & - XTEXP4_HONC, XTEXP5_HONC -USE MODD_PARAM_LIMA_WARM, ONLY : XLBC -USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV -! -USE MODD_NSV -USE MODD_BUDGET -USE MODE_BUDGET, ONLY: BUDGET_DDH -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for - ! the nucleation param. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRT ! Rain water C. source -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Ice crystal C. source -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! Free CCN conc. -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHT ! haze homogeneous freezing -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRRT ! Rain water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRIT ! Pristine ice m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRGT ! Graupel/hail m.r. at t -! -REAL, DIMENSION(:), ALLOCATABLE :: ZTHT ! Theta source -! -REAL, DIMENSION(:), ALLOCATABLE :: ZCCT ! Cloud water conc. source -REAL, DIMENSION(:), ALLOCATABLE :: ZCRT ! Rain water conc. source -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFT ! available nucleus conc. source -REAL, DIMENSION(:), ALLOCATABLE :: ZCIT ! Pristine ice conc. source -REAL, DIMENSION(:), ALLOCATABLE :: ZZNHT ! Nucleated Ice nuclei conc. source - !by Homogeneous freezing -! -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZNHT ! Nucleated Ice nuclei conc. source - ! by Homogeneous freezing of haze -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZW, ZT ! work arrays -! -REAL, DIMENSION(:), ALLOCATABLE & - :: ZRHODREF, & ! RHO Dry REFerence - ZRHODJ, & ! RHO times Jacobian - ZZT, & ! Temperature - ZPRES, & ! Pressure - ZEXNREF, & ! EXNer Pressure REFerence - ZZW, & ! Work array - ZZX, & ! Work array - ZZY, & ! Work array - ZLSFACT, & ! L_s/(Pi_ref*C_ph) - ZLVFACT, & ! L_v/(Pi_ref*C_ph) - ZLBDAC, & ! Slope parameter of the cloud droplet distr. - ZSI, & ! Saturation over ice - ZTCELSIUS,& - ZLS, & - ZPSI1, & - ZPSI2, & - ZTAU, & - ZBFACT, & - ZW_NU, & - ZFREECCN, & - ZCCNFROZEN -! -INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain -INTEGER :: JL, JMOD_CCN, JMOD_IMM ! Loop index -! -INTEGER :: INEGT ! Case number of hom. nucleation -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: GNEGT ! Test where to compute the hom. nucleation -INTEGER , DIMENSION(SIZE(GNEGT)) :: I1,I2,I3 ! Used to replace the COUNT -! -REAL :: ZEPS ! molar mass ratio -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -! Physical domain -IIB=1+JPHEXT -IIE=SIZE(PTHT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PTHT,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PTHT,3) - JPVEXT -! -! Temperature -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) -! -ZNHT(:,:,:) = PNHT(:,:,:) -! -! Computations only where the temperature is below -35°C -! PACK variables -! -GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-35.0 -INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) -! -IF (INEGT.GT.0) THEN - - ALLOCATE(ZRVT(INEGT)) - ALLOCATE(ZRCT(INEGT)) - ALLOCATE(ZRRT(INEGT)) - ALLOCATE(ZRIT(INEGT)) - ALLOCATE(ZRST(INEGT)) - ALLOCATE(ZRGT(INEGT)) - ! - ALLOCATE(ZTHT(INEGT)) - ! - ALLOCATE(ZCCT(INEGT)) - ALLOCATE(ZCRT(INEGT)) - ALLOCATE(ZCIT(INEGT)) - ! - ALLOCATE(ZNFT(INEGT,NMOD_CCN)) - ALLOCATE(ZZNHT(INEGT)) - ! - ALLOCATE(ZRHODREF(INEGT)) - ALLOCATE(ZZT(INEGT)) - ALLOCATE(ZPRES(INEGT)) - ALLOCATE(ZEXNREF(INEGT)) - ! - DO JL=1,INEGT - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL)) - ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL)) - ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL)) - ! - ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL)) - ! - ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL)) - ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL)) - ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) - ! - DO JMOD_CCN = 1, NMOD_CCN - ZNFT(JL,JMOD_CCN) = PNFT(I1(JL),I2(JL),I3(JL),JMOD_CCN) - ENDDO - ZZNHT(JL) = ZNHT(I1(JL),I2(JL),I3(JL)) - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - ENDDO -! -! PACK : done -! Prepare computations -! - ALLOCATE( ZLSFACT (INEGT) ) - ALLOCATE( ZLVFACT (INEGT) ) - ALLOCATE( ZSI (INEGT) ) - ALLOCATE( ZTCELSIUS (INEGT) ) - ALLOCATE( ZLBDAC (INEGT) ) -! - ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0 - ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0 - ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0 -! - ZTCELSIUS(:) = ZZT(:)-XTT ! T [°C] - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) -! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i - ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) ! Saturation over ice -! -! -!------------------------------------------------------------------------------- -! -! -!* 2. Haze homogeneous freezing -! ------------------------ -! -! -! Compute the haze homogeneous nucleation source: RHHONI -! - IF( NMOD_CCN.GT.0 ) THEN - -! Sum of the available CCN - ALLOCATE( ZFREECCN(INEGT) ) - ALLOCATE( ZCCNFROZEN(INEGT) ) - ZFREECCN(:)=0. - ZCCNFROZEN(:)=0. - DO JMOD_CCN = 1, NMOD_CCN - ZFREECCN(:) = ZFREECCN(:) + ZNFT(:,JMOD_CCN) - END DO -! - ALLOCATE(ZW_NU(INEGT)) - DO JL=1,INEGT - ZW_NU(JL) = PW_NU(I1(JL),I2(JL),I3(JL)) - END DO -! - ZZW(:) = 0.0 - ZZX(:) = 0.0 - ZEPS = XMV / XMD - ZZY(:) = XCRITSAT1_HONH - & ! Critical Sat. - (MIN( XTMAX_HONH,MAX( XTMIN_HONH,ZZT(:) ) )/XCRITSAT2_HONH) -! - ALLOCATE(ZLS(INEGT)) - ALLOCATE(ZPSI1(INEGT)) - ALLOCATE(ZPSI2(INEGT)) - ALLOCATE(ZTAU(INEGT)) - ALLOCATE(ZBFACT(INEGT)) -! - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZSI(:)>ZZY(:)) ) - ZLS(:) = XLSTT+(XCPV-XCI)*ZTCELSIUS(:) ! Ls -! - ZPSI1(:) = ZZY(:) * (XG/(XRD*ZZT(:)))*(ZEPS*ZLS(:)/(XCPD*ZZT(:))-1.) -! ! Psi1 (a1*Scr in KL01) -! BV correction PSI2 enlever 1/ZEPS ? -! ZPSI2(:) = ZSI(:) * (1.0/ZEPS+1.0/ZRVT(:)) + & - ZPSI2(:) = ZSI(:) * (1.0/ZRVT(:)) + & - ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(XCPD*XRV) -! ! Psi2 (a2+a3*Scr in KL01) - ZTAU(:) = 1.0 / ( MAX( XC1_HONH,XC1_HONH*(XC2_HONH-XC3_HONH*ZZT(:)) ) *& - ABS( (XDLNJODT1_HONH - XDLNJODT2_HONH*ZZT(:)) * & - ((ZPRES(:)/XP00)**(XRD/XCPD))*ZTHT(:) ) ) -! - ZBFACT(:) = (XRHOI_HONH/ZRHODREF(:)) * (ZSI(:)/(ZZY(:)-1.0)) & -! BV correction ZBFACT enlever 1/ZEPS ? -! * (1.0/ZRVT(:)+1.0/ZEPS) & - * (1.0/ZRVT(:)) & - / (XCOEF_DIFVAP_HONH*(ZZT(:)**XCEXP_DIFVAP_HONH /ZPRES(:))) -! -! BV correction ZZX rho_i{-1} ? -! ZZX(:) = MAX( MIN( XRHOI_HONH*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:)) & - ZZX(:) = MAX( MIN( (1/XRHOI_HONH)*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:)) & - * (ZW_NU(:)/SQRT(ZTAU(:))) , ZFREECCN(:) ) , 0.) -! - ZZW(:) = MIN( XRCOEF_HONH*ZZX(:)*(ZTAU(:)/ZBFACT(:))**1.5 , ZRVT(:) ) - END WHERE -! -! Apply the changes - DO JMOD_CCN = 1, NMOD_CCN - WHERE(ZFREECCN(:)>1.) - ZCCNFROZEN(:) = ZZX(:) * ZNFT(:,JMOD_CCN)/ZFREECCN(:) - END WHERE - PNFT(:,:,:,JMOD_CCN) = PNFT(:,:,:,JMOD_CCN) - UNPACK( ZCCNFROZEN(:), MASK=GNEGT(:,:,:),FIELD=0.) - END DO -! - PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:),FIELD=0.) - PRVT(:,:,:) = PRVT(:,:,:) - UNPACK( ZZW(:), MASK=GNEGT(:,:,:),FIELD=0.) - PRIT(:,:,:) = PRIT(:,:,:) + UNPACK( ZZW(:), MASK=GNEGT(:,:,:),FIELD=0.) - PCIT(:,:,:) = PCIT(:,:,:) + UNPACK( ZZX(:), MASK=GNEGT(:,:,:),FIELD=0.) - PNHT(:,:,:) = PNHT(:,:,:) + UNPACK( ZZX(:), MASK=GNEGT(:,:,:),FIELD=0.) - - DEALLOCATE(ZFREECCN) - DEALLOCATE(ZCCNFROZEN) - DEALLOCATE(ZLS) - DEALLOCATE(ZPSI1) - DEALLOCATE(ZPSI2) - DEALLOCATE(ZTAU) - DEALLOCATE(ZBFACT) - DEALLOCATE(ZW_NU) -! - END IF -! -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRRT) - DEALLOCATE(ZRIT) - DEALLOCATE(ZRST) - DEALLOCATE(ZRGT) -! - DEALLOCATE(ZTHT) -! - DEALLOCATE(ZCCT) - DEALLOCATE(ZCRT) - DEALLOCATE(ZCIT) -! - DEALLOCATE(ZNFT) - DEALLOCATE(ZZNHT) -! - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) -! - DEALLOCATE(ZLSFACT) - DEALLOCATE(ZLVFACT) - DEALLOCATE(ZSI) - DEALLOCATE(ZTCELSIUS) - DEALLOCATE(ZLBDAC) -! - DEALLOCATE(ZZW) - DEALLOCATE(ZZX) - DEALLOCATE(ZZY) -! -! -END IF ! INEGT>0 -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_CCN_HOM_FREEZING diff --git a/src/arome/micro/lima_conversion_melting_snow.F90 b/src/arome/micro/lima_conversion_melting_snow.F90 deleted file mode 100644 index 37c3b450127735ff97d6384ef0cc9f25c301dad8..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_conversion_melting_snow.F90 +++ /dev/null @@ -1,142 +0,0 @@ -! ################################# - MODULE MODI_LIMA_CONVERSION_MELTING_SNOW -! ################################# -! -INTERFACE - SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPRES, PT, PKA, PDV, PCJ, & - PRVT, PRST, PLBDS, & - P_RS_CMEL, & - PA_RS, PA_RG ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPRES ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PKA ! -REAL, DIMENSION(:), INTENT(IN) :: PDV ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_CMEL -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW -END INTERFACE -END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW -! -! ###################################################################### - SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPRES, PT, PKA, PDV, PCJ, & - PRVT, PRST, PLBDS, & - P_RS_CMEL, & - PA_RS, PA_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT, XMV, XMD, XLVTT, XCPV, XCL, XESTT, XRV -USE MODD_PARAM_LIMA, ONLY : XRTMIN -USE MODD_PARAM_LIMA_MIXED, ONLY : XFSCVMG -USE MODD_PARAM_LIMA_COLD, ONLY : X0DEPS, XEX0DEPS, X1DEPS, XEX1DEPS -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPRES ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PKA ! -REAL, DIMENSION(:), INTENT(IN) :: PDV ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_CMEL -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRST)) :: ZW ! work arrays -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -P_RS_CMEL(:)=0. -! -ZW(:) = 0.0 -WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) ) - ZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure - ZW(:) = PKA(:)*(XTT-PT(:)) + & - ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) & - *(XESTT-ZW(:))/(XRV*PT(:)) ) -! -! compute RSMLT -! - ZW(:) = XFSCVMG*MAX( 0.0,( -ZW(:) * & - ( X0DEPS* PLBDS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) ))!- & -!!! BVIE -!!! ZZW1(1) et ZZW1(4) sont nuls là où PT>XTT !!!!!!!!!!!!!! -!!! On ne tient pas compte de la collection de pluie et gouttelettes par la neige si T>0 !!!! -! ( ZZW1(:,1)+ZZW1(:,4) ) * & -! ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & -! ( ZRHODREF(:)*XLMTT ) ) -! -! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT) -! because the graupeln produced by this process are still icy!!! -! - P_RS_CMEL(:) = - ZW(:) -! -END WHERE -! -PA_RS(:) = PA_RS(:) + P_RS_CMEL(:) -PA_RG(:) = PA_RG(:) - P_RS_CMEL(:) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW diff --git a/src/arome/micro/lima_droplets_accretion.F90 b/src/arome/micro/lima_droplets_accretion.F90 deleted file mode 100644 index 6ee2a57ec5574a8b05cc349a24e68c07b1f3d045..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_droplets_accretion.F90 +++ /dev/null @@ -1,172 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPLETS_ACCRETION -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, PRRT, PCCT, PCRT, & - PLBDC, PLBDC3, PLBDR, PLBDR3, & - P_RC_ACCR, P_CC_ACCR, & - PA_RC, PA_CC, PA_RR ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDC3 ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_ACCR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -! -END SUBROUTINE LIMA_DROPLETS_ACCRETION -END INTERFACE -END MODULE MODI_LIMA_DROPLETS_ACCRETION -! -! ###################################################################### - SUBROUTINE LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, PRRT, PCCT, PCRT, & - PLBDC, PLBDC3, PLBDR, PLBDR3, & - P_RC_ACCR, P_CC_ACCR, & - PA_RC, PA_CC, PA_RR ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, & - XACCR4, XACCR5, XACCR3, XACCR2, XACCR1, & - XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, & - XACCR_CSMALL1, XACCR_CSMALL2, XACCR_RSMALL1, XACCR_RSMALL2 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDC3 ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_ACCR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRCT)) :: ZW1, ZW2, ZW3, ZW4 ! work arrays -LOGICAL, DIMENSION(SIZE(PRCT)) :: GACCR -! -!------------------------------------------------------------------------------- -! -! -! -!* 3. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) -! ---------------------------------------------------------------------- -! -P_RC_ACCR(:) = 0.0 -P_CC_ACCR(:) = 0.0 -! -ZW1(:) = 0.0 -ZW2(:) = 0.0 -ZW3(:) = 0.0 -ZW4(:) = 0.0 -! -WHERE( PRCT(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) ) - ZW2(:) = MAX( 0.0,XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L - ZW4(:) = XACCR1/PLBDR(:) -END WHERE -! -GACCR(:) = LDCOMPUTE(:) .AND. & - PRRT(:)>XRTMIN(3) .AND. & - PCRT(:)>XCTMIN(3) .AND. & - PRCT(:)>XRTMIN(2) .AND. & - (PRRT(:)>1.2*ZW2(:)/PRHODREF(:) .OR. & - ZW4(:)>=MAX(XACCR2,XACCR3/(XACCR4/PLBDC(:)-XACCR5)) ) -! -! Accretion for D>100 10-6 m -WHERE( GACCR(:).AND.(ZW4(:)>1.E-4) ) - ZW3(:) = PLBDC3(:) / PLBDR3(:) - ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:) - ZW2(:) = ZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZW3(:)) -! - P_CC_ACCR(:) = - ZW2(:) -! - ZW1(:) = ( ZW1(:) / PLBDC3(:) ) - ZW2(:) = ZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZW3(:)) -! - P_RC_ACCR(:) = - ZW2(:) -END WHERE -! -! Accretion for D<100 10-6 m -WHERE( GACCR(:).AND.(ZW4(:)<=1.E-4) ) - ZW3(:) = PLBDC3(:) / PLBDR3(:) - ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:)**2 )*PRHODREF(:) - ZW3(:) = ZW3(:)**2 - ZW2(:) = ZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZW3(:)) -! - P_CC_ACCR(:) = - ZW2(:) -! - ZW1(:) = ZW1(:) / PLBDC3(:) - ZW2(:) = ZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZW3(:)) -! - P_RC_ACCR(:) = - ZW2(:) -END WHERE -! -PA_RC(:) = PA_RC(:) + P_RC_ACCR(:) -PA_CC(:) = PA_CC(:) + P_CC_ACCR(:) -PA_RR(:) = PA_RR(:) - P_RC_ACCR(:) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPLETS_ACCRETION diff --git a/src/arome/micro/lima_droplets_autoconversion.F90 b/src/arome/micro/lima_droplets_autoconversion.F90 deleted file mode 100644 index 9dbce4f64513bc02f6689c62e6f0112c9d0ff83e..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_droplets_autoconversion.F90 +++ /dev/null @@ -1,143 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, PLBDC, PLBDR, & - P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,& - PA_RC, PA_CC, PA_RR, PA_CR ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_AUTO -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -! -END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION -END INTERFACE -END MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION -! -! ###################################################################### - SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, PLBDC, PLBDR, & - P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,& - PA_RC, PA_CC, PA_RR, PA_CR ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XRTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, & - XITAUTR, XAUTO2, XITAUTR_THRESHOLD, & - XACCR4, XACCR5, XACCR3, XACCR1, XAC -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_AUTO -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRCT)) :: ZW1, ZW2, ZW3 ! work arrays -! -!------------------------------------------------------------------------------- -! -! -! -!* 3. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) -! ---------------------------------------------------------------------- -! -! -! -P_RC_AUTO(:) = 0.0 -P_CC_AUTO(:) = 0.0 -P_CR_AUTO(:) = 0.0 -! -ZW3(:) = 0.0 -ZW2(:) = 0.0 -ZW1(:) = 0.0 -WHERE( PRCT(:)>XRTMIN(2) .AND. LDCOMPUTE(:) ) - ZW2(:) = MAX( 0.0, & - XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L -! - ZW3(:) = MAX( 0.0, & - XITAUTR*ZW2(:)*PRCT(:)*(XAUTO2/PLBDC(:)-XITAUTR_THRESHOLD) ) ! L/tau -! - P_RC_AUTO(:) = - ZW3(:) -! - ZW1(:) = MIN( MIN( 1.2E4, & - (XACCR4/PLBDC(:)-XACCR5)/XACCR3 ), & - PLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for - ! switching the autoconversion regimes - ! min (80 microns, D_h, D_r) - ZW3(:) = ZW3(:) * MAX( 0.0,ZW1(:) )**3 / XAC -! - P_CC_AUTO(:) = 0. - P_CR_AUTO(:) = ZW3(:) -! - PA_RC(:) = PA_RC(:) + P_RC_AUTO(:) - PA_CC(:) = PA_CC(:) - PA_RR(:) = PA_RR(:) - P_RC_AUTO(:) - PA_CR(:) = PA_CR(:) + P_CR_AUTO(:) -END WHERE -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION diff --git a/src/arome/micro/lima_droplets_hom_freezing.F90 b/src/arome/micro/lima_droplets_hom_freezing.F90 deleted file mode 100644 index c5afd129791fc060bc3961184f3df81b64091c5c..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_droplets_hom_freezing.F90 +++ /dev/null @@ -1,160 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPLETS_HOM_FREEZING -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PT, PLVFACT, PLSFACT, & - PRCT, PCCT, PLBDC, & - P_TH_HONC, P_RC_HONC, P_CC_HONC, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! Cloud water lambda -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_HONC -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -! -END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING -END INTERFACE -END MODULE MODI_LIMA_DROPLETS_HOM_FREEZING -! -! ###################################################################### - SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PT, PLVFACT, PLSFACT, & - PRCT, PCCT, PLBDC, & - P_TH_HONC, P_RC_HONC, P_CC_HONC, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XNUC -USE MODD_PARAM_LIMA_COLD, ONLY : XC_HONC, XTEXP1_HONC, XTEXP2_HONC, XTEXP3_HONC, & - XTEXP4_HONC, XTEXP5_HONC -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! Cloud water lambda -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_HONC -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PT)) :: ZZW, ZZX, ZZY, ZTCELSIUS -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -P_TH_HONC(:) = 0. -P_RC_HONC(:) = 0. -P_CC_HONC(:) = 0. -! -WHERE ( (PT(:)<XTT-35.0) .AND. (PCCT(:)>XCTMIN(2)) .AND. (PRCT(:)>XRTMIN(2)) ) - ZTCELSIUS(:) = PT(:)-XTT ! T [°C] -! -! -! -!------------------------------------------------------------------------------- -! -! -!* 3. Cloud droplets homogeneous freezing -! ----------------------------------- -! -! -! Compute the droplet homogeneous nucleation source: RCHONI -! -> Pruppacher(1995) -! - ZZW(:) = 0.0 - ZZX(:) = 0.0 - ZZY(:) = 0.0 - - ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/PLBDC(:))*PTSTEP* & - EXP( XTEXP1_HONC + ZTCELSIUS(:)*( & - XTEXP2_HONC + ZTCELSIUS(:)*( & - XTEXP3_HONC + ZTCELSIUS(:)*( & - XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC -! - ZZW(:) = PCCT(:) * (1.0 - ZZX(:)) ! CCHONI - ZZY(:) = PRCT(:) * (1.0 - ZZX(:)) ! RCHONI -! - P_RC_HONC(:) = - ZZY(:)/PTSTEP - P_CC_HONC(:) = - ZZW(:)/PTSTEP - P_TH_HONC(:) = P_RC_HONC(:) * (PLSFACT(:)-PLVFACT(:)) -! - PA_TH(:) = PA_TH(:) + P_TH_HONC(:) - PA_RC(:) = PA_RC(:) + P_RC_HONC(:) - PA_CC(:) = PA_CC(:) + P_CC_HONC(:) - PA_RI(:) = PA_RI(:) - P_RC_HONC(:) - PA_CI(:) = PA_CI(:) - P_CC_HONC(:) -! -END WHERE -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING diff --git a/src/arome/micro/lima_droplets_riming_snow.F90 b/src/arome/micro/lima_droplets_riming_snow.F90 deleted file mode 100644 index 0f8a3c60ecb459479dae635b866d78d8fed500f0..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_droplets_riming_snow.F90 +++ /dev/null @@ -1,252 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPLETS_RIMING_SNOW -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, & - PRCT, PCCT, PRST, PLBDC, PLBDS, PLVFACT, PLSFACT, & - P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, & - P_RI_HMS, P_CI_HMS, P_RS_HMS, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_RIM -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_HMS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW -END INTERFACE -END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW -! -! ###################################################################### - SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, & - PRCT, PCCT, PRST, PLBDC, PLBDS, PLVFACT, PLSFACT, & - P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, & - P_RI_HMS, P_CI_HMS, P_RS_HMS, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT -USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XRIMINTP1, XRIMINTP2, XGAMINC_RIM1, XGAMINC_RIM2, & - XCRIMSS, XEXCRIMSS, XSRIMCG, XEXSRIMCG, & - XHMLINTP1, XHMLINTP2, XGAMINC_HMC, XHM_FACTS, XHMTMIN, XHMTMAX -USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_RIM -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_HMS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -!* 0.2 Declarations of local variables : -! -LOGICAL, DIMENSION(SIZE(PRCT)) :: GRIM -! -REAL, DIMENSION(SIZE(PRCT)) :: ZZW1, ZZW2, ZZW3, ZZW4 -! -INTEGER, DIMENSION(SIZE(PRCT)) :: IVEC1,IVEC2 ! Vectors of indices -REAL, DIMENSION(SIZE(PRCT)) :: ZVEC1,ZVEC2 ! Work vectors -! -!------------------------------------------------------------------------------- -! -! -P_TH_RIM(:) = 0. -P_RC_RIM(:) = 0. -P_CC_RIM(:) = 0. -P_RS_RIM(:) = 0. -P_RG_RIM(:) = 0. -! -P_RI_HMS(:) = 0. -P_CI_HMS(:) = 0. -P_RS_HMS(:) = 0. -! -ZZW1(:) = 0. -ZZW2(:) = 0. -ZZW3(:) = 0. -ZZW4(:) = 0. -! -!* Cloud droplet riming of the aggregates -! ------------------------------------------- -! -! -GRIM(:) = .False. -GRIM(:) = (PRCT(:)>XRTMIN(2)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:) -! -WHERE( GRIM ) -! - ZVEC1(:) = PLBDS(:) -! -! 1. find the next lower indice for the ZLBDAS in the geometrical -! set of Lbda_s used to tabulate some moments of the incomplete -! gamma function -! - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, & - XRIMINTP1 * LOG( ZVEC1(:) ) + XRIMINTP2 ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) -! -! 2. perform the linear interpolation of the normalized -! "2+XDS"-moment of the incomplete gamma function -! - ZVEC1(:) = XGAMINC_RIM1( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_RIM1( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW1(:) = ZVEC1(:) -! -! 3. perform the linear interpolation of the normalized -! "XBS"-moment of the incomplete gamma function -! - ZVEC1(:) = XGAMINC_RIM2( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_RIM2( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW2(:) = ZVEC1(:) -! -! 4. riming -! - ! Cloud droplets collected - P_RC_RIM(:) = - XCRIMSS * PRCT(:) * PLBDS(:)**XEXCRIMSS * PRHODREF(:)**(-XCEXVT) - P_CC_RIM(:) = P_RC_RIM(:) *(PCCT(:)/PRCT(:)) ! Lambda_c**3 - ! - ! Cloud droplets collected on small aggregates add to snow - P_RS_RIM(:) = - P_RC_RIM(:) * ZZW1(:) - ! - ! Cloud droplets collected on large aggregates add to graupel - P_RG_RIM(:) = P_RC_RIM(:) - P_RS_RIM(:) - ! - ! Large aggregates collecting droplets add to graupel (instant process ???) - ZZW3(:) = XSRIMCG * PLBDS(:)**XEXSRIMCG * (1.0 - ZZW2(:))/(PTSTEP*PRHODREF(:)) - P_RS_RIM(:) = P_RS_RIM(:) - ZZW3(:) - P_RG_RIM(:) = P_RG_RIM(:) + ZZW3(:) - ! - P_TH_RIM(:) = - P_RC_RIM(:)*(PLSFACT(:)-PLVFACT(:)) -END WHERE -! -! -!* Hallett-Mossop ice production (HMS) -! ------------------------------------------- -! -! -GRIM(:) = .False. -GRIM(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. & - (PRST(:)>XRTMIN(5)) .AND. (PRCT(:)>XRTMIN(2)) .AND. & - LDCOMPUTE(:) -! -WHERE ( GRIM ) -! - ZVEC1(:) = PLBDC(:) - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, & - XHMLINTP1 * LOG( ZVEC1(:) ) + XHMLINTP2 ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) - ZVEC1(:) = XGAMINC_HMC( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_HMC( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW4(:) = ZVEC1(:) ! Large droplets -! - WHERE ( ZZW4(:)<0.99 ) - P_CI_HMS(:) = - P_RC_RIM(:) * (PCCT(:)/PRCT(:)) * (1.0-ZZW4(:)) * XHM_FACTS * & - MAX( 0.0, MIN( (PT(:)-XHMTMIN)/3.0,(XHMTMAX-PT(:))/2.0 ) ) ! CCHMSI -! - P_RI_HMS(:) = P_CI_HMS(:) * XMNU0 ! RCHMSI - P_RS_HMS(:) = - P_RI_HMS(:) - END WHERE - -END WHERE -! -! -PA_RC(:) = PA_RC(:) + P_RC_RIM(:) -PA_CC(:) = PA_CC(:) + P_CC_RIM(:) -PA_RI(:) = PA_RI(:) + P_RI_HMS(:) -PA_CI(:) = PA_CI(:) + P_CI_HMS(:) -PA_RS(:) = PA_RS(:) + P_RS_RIM(:) + P_RS_HMS(:) -PA_RG(:) = PA_RG(:) + P_RG_RIM(:) -PA_TH(:) = PA_TH(:) + P_TH_RIM(:) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW diff --git a/src/arome/micro/lima_droplets_self_collection.F90 b/src/arome/micro/lima_droplets_self_collection.F90 deleted file mode 100644 index 5e0c994e08655820da833585f32019e8567aa9b6..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_droplets_self_collection.F90 +++ /dev/null @@ -1,103 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCCT, PLBDC3, & - P_CC_SELF, & - PA_CC ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_SELF -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -! -END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION -END INTERFACE -END MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION -! -! ###################################################################### - SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCCT, PLBDC3, & - P_CC_SELF, & - PA_CC ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XCTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XSELFC -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDC3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_SELF -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PCCT)) :: ZW ! work arrays -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -P_CC_SELF(:)=0. -! -WHERE( PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:) ) - ZW(:) = XSELFC*(PCCT(:)/PLBDC3(:))**2 * PRHODREF(:) ! analytical integration - P_CC_SELF(:) = - ZW(:) - PA_CC(:) = PA_CC(:) + P_CC_SELF(:) -END WHERE -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION diff --git a/src/arome/micro/lima_drops_break_up.F90 b/src/arome/micro/lima_drops_break_up.F90 deleted file mode 100644 index fccda7a5b0cb71f8e0ad53f49276b2e148b1763e..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_drops_break_up.F90 +++ /dev/null @@ -1,129 +0,0 @@ -! ############################### - MODULE MODI_LIMA_DROPS_BREAK_UP -! ############################### -! -INTERFACE - SUBROUTINE LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PCRT, PRRT, & - P_CR_BRKU, & - PB_CR ) - -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:), INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_BRKU ! Concentration change (#/kg) -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CR ! Cumulated concentration change (#/kg) -! -END SUBROUTINE LIMA_DROPS_BREAK_UP -END INTERFACE -END MODULE MODI_LIMA_DROPS_BREAK_UP -! ##################################################################### - SUBROUTINE LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PCRT, PRRT, & - P_CR_BRKU, & - PB_CR ) - -! ##################################################################### -! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the warm microphysical -!! sources: nucleation, sedimentation, autoconversion, accretion, -!! self-collection and vaporisation which are parameterized according -!! to Cohard and Pinty, QJRMS, 2000 -!! -!! -!!** METHOD -!! ------ -!! The activation of CCN is checked for quasi-saturated air parcels -!! to update the cloud droplet number concentration. Then assuming a -!! generalized gamma distribution law for the cloud droplets and the -!! raindrops, the zeroth and third order moments tendencies are evaluated -!! for all the coalescence terms by integrating the Stochastic Collection -!! Equation. As autoconversion is a process that cannot be resolved -!! analytically, the Berry-Reinhardt parameterisation is employed with -!! modifications to initiate the raindrop spectrum mode. The integration -!! of the raindrop evaporation below clouds is straightforward. -!! -!! The sedimentation rates are computed with a time spliting technique: -!! an upstream scheme, written as a difference of non-advective fluxes. -!! This source term is added to the next coming time step (split-implicit -!! process). -!! -!! REFERENCE -!! --------- -!! -!! Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm -!! microphysical bulk scheme. -!! Part I: Description and tests -!! Part II: 2D experiments with a non-hydrostatic model -!! Accepted for publication in Quart. J. Roy. Meteor. Soc. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy * jan. 2014 add budgets -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XCTMIN, XRTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XACCR1, XLBEXR, XLBR, XSPONBUD1, XSPONBUD3, XSPONCOEF2 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:), INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_BRKU ! Concentration change (#/kg) -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CR ! Cumulated concentration change (#/kg) -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PCRT)) :: ZWLBDR,ZWLBDR3 -INTEGER :: JL -! -!------------------------------------------------------------------------------- -! -! SPONTANEOUS BREAK-UP (NUMERICAL FILTER) -! -------------------- -! -P_CR_BRKU(:)=0. -! -ZWLBDR3(:) = 1.E30 -ZWLBDR(:) = 1.E10 -WHERE ( PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) ) - ZWLBDR3(:) = XLBR * PCRT(:) / PRRT(:) - ZWLBDR(:) = ZWLBDR3(:)**XLBEXR -END WHERE -WHERE (ZWLBDR(:)<(XACCR1/XSPONBUD1) .AND. LDCOMPUTE(:)) - P_CR_BRKU(:) = PCRT(:)*( MAX((1.+XSPONCOEF2*(XACCR1/ZWLBDR(:)-XSPONBUD1)**2),& - (XACCR1/ZWLBDR(:)/XSPONBUD3)**3) -1. ) -END WHERE -! -PB_CR(:) = PB_CR(:) + P_CR_BRKU(:) -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPS_BREAK_UP diff --git a/src/arome/micro/lima_drops_hom_freezing.F90 b/src/arome/micro/lima_drops_hom_freezing.F90 deleted file mode 100644 index 90010219b5360ad0dcd04dca53dc40666ba6cf86..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_drops_hom_freezing.F90 +++ /dev/null @@ -1,152 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPS_HOM_FREEZING -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCRT, & - P_TH_HONR, P_RR_HONR, P_CR_HONR, & - PB_TH, PB_RR, PB_CR, PB_RG ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:), INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water C. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RG -! -END SUBROUTINE LIMA_DROPS_HOM_FREEZING -END INTERFACE -END MODULE MODI_LIMA_DROPS_HOM_FREEZING -! -! ###################################################################### - SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCRT, & - P_TH_HONR, P_RR_HONR, P_CR_HONR, & - PB_TH, PB_RR, PB_CR, PB_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XP00, XRD, XCPD, XCPV, XCL, XCI, XTT, XLSTT, XLVTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:), INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water C. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_HONR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RG -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PTHT)) :: & - ZW, & - ZT, & - ZLSFACT, & - ZLVFACT, & - ZTCELSIUS -! -! -! -! -!------------------------------------------------------------------------------- -! -P_TH_HONR(:) = 0. -P_RR_HONR(:) = 0. -P_CR_HONR(:) = 0. -! -! Temperature -ZT(:) = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD) -ZTCELSIUS(:) = ZT(:)-XTT ! T [°C] -! -ZW(:) = PEXNREF(:)*( XCPD+XCPV*PRVT(:)+XCL*(PRCT(:)+PRRT(:)) & - +XCI*(PRIT(:)+PRST(:)+PRGT(:)) ) -ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZW(:) ! L_s/(Pi_ref*C_ph) -ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZW(:) ! L_v/(Pi_ref*C_ph) -! -ZW(:) = 0.0 - -WHERE( (ZT(:)<XTT-35.0) .AND. (PRRT(:)>XRTMIN(3)) .AND. LDCOMPUTE(:) ) - P_TH_HONR(:) = PRRT(:)*(ZLSFACT(:)-ZLVFACT(:)) - P_RR_HONR(:) = - PRRT(:) - P_CR_HONR(:) = - PCRT(:) - PB_TH(:) = PB_TH(:) + P_TH_HONR(:) - PB_RR(:) = PB_RR(:) - PRRT(:) - PB_CR(:) = PB_CR(:) - PCRT(:) - PB_RG(:) = PB_RG(:) + PRRT(:) -ENDWHERE -! -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPS_HOM_FREEZING diff --git a/src/arome/micro/lima_drops_self_collection.F90 b/src/arome/micro/lima_drops_self_collection.F90 deleted file mode 100644 index adfa0adff737a653b4162183da102ede499ce06a..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_drops_self_collection.F90 +++ /dev/null @@ -1,131 +0,0 @@ -! ################################# - MODULE MODI_LIMA_DROPS_SELF_COLLECTION -! ################################# -! -INTERFACE - SUBROUTINE LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCRT, PLBDR, PLBDR3, & - P_CR_SCBU, & - PA_CR ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -! -END SUBROUTINE LIMA_DROPS_SELF_COLLECTION -END INTERFACE -END MODULE MODI_LIMA_DROPS_SELF_COLLECTION -! -! ###################################################################### - SUBROUTINE LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCRT, PLBDR, PLBDR3, & - P_CR_SCBU, & - PA_CR ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XCTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : XACCR1, XSCBUEXP1, XSCBU_EFF1, XSCBU_EFF2, & - XSCBU2, XSCBU3 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR3 ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PCRT)) :: & - ZW1, & ! work arrays - ZW2, & - ZW3, & - ZW4, & - ZSCBU -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -P_CR_SCBU(:)=0. -! -WHERE( PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) ) - ZW4(:) = XACCR1 / PLBDR(:) ! Mean diameter -END WHERE -ZSCBU(:)=0. -WHERE (ZW4(:)>=XSCBU_EFF1 .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:)) & - ZSCBU(:) = EXP(XSCBUEXP1*(ZW4(:)-XSCBU_EFF1)) ! coalescence efficiency -WHERE (ZW4(:)>=XSCBU_EFF2 .AND. LDCOMPUTE(:)) ZSCBU(:) = 0.0 ! Break-up -! -ZW1(:) = 0.0 -ZW2(:) = 0.0 -ZW3(:) = 0.0 -! -WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)>1.E-4) .AND. LDCOMPUTE(:)) ! analytical integration - ZW1(:) = XSCBU2 * PCRT(:)**2 / PLBDR3(:) ! D>100 10-6 m - ZW3(:) = ZW1(:)*ZSCBU(:) -END WHERE -! -WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)<=1.E-4) .AND. LDCOMPUTE(:)) - ZW2(:) = XSCBU3 *(PCRT(:) / PLBDR3(:))**2 ! D<100 10-6 m - ZW3(:) = ZW2(:) -END WHERE -! -P_CR_SCBU(:) = - ZW3(:) * PRHODREF(:) -! -PA_CR(:) = PA_CR(:) + P_CR_SCBU(:) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_DROPS_SELF_COLLECTION diff --git a/src/arome/micro/lima_graupel.F90 b/src/arome/micro/lima_graupel.F90 deleted file mode 100644 index 4cd28def544eaf47f33e0ebb179bedaa1aec3d01..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_graupel.F90 +++ /dev/null @@ -1,565 +0,0 @@ -! ################################# - MODULE MODI_LIMA_GRAUPEL -! ################################# -! -INTERFACE - SUBROUTINE LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPRES, PT, PKA, PDV, PCJ, & - PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PLBDC, PLBDR, PLBDS, PLBDG, & - PLVFACT, PLSFACT, & - P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & - P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & - P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & - P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG, & - P_RI_HMG, P_CI_HMG, P_RG_HMG, & - P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, & - PA_TH, PA_RC, PA_CC, PA_RR, PA_CR, & - PA_RI, PA_CI, PA_RS, PA_RG, PA_RH ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PPRES ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PKA ! -REAL, DIMENSION(:), INTENT(IN) :: PDV ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RH_WETG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DRYG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_HMG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_GMLT -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RH -! -END SUBROUTINE LIMA_GRAUPEL -END INTERFACE -END MODULE MODI_LIMA_GRAUPEL -! -! ###################################################################### - SUBROUTINE LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPRES, PT, PKA, PDV, PCJ, & - PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PLBDC, PLBDR, PLBDS, PLBDG, & - PLVFACT, PLSFACT, & - P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & - P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & - P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & - P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG, & - P_RI_HMG, P_CI_HMG, P_RG_HMG, & - P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, & - PA_TH, PA_RC, PA_CC, PA_RR, PA_CR, & - PA_RI, PA_CI, PA_RS, PA_RG, PA_RH ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT, LHAIL_LIMA -USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC, & - XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG, & - XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG, & - XFRDRYG, XLBRDRYG1, XLBRDRYG2, XLBRDRYG3, XKER_RDRYG, & - XHMTMIN, XHMTMAX, XHMLINTP1, XHMLINTP2, XHM_FACTG, XGAMINC_HMC, & - XEX0DEPG, XEX1DEPG, & - XDRYINTP1R, XDRYINTP1S, XDRYINTP1G, & - XDRYINTP2R, XDRYINTP2S, XDRYINTP2G, & - NDRYLBDAR, NDRYLBDAS, NDRYLBDAG -USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0, XCXS, XBS -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PPRES ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PKA ! -REAL, DIMENSION(:), INTENT(IN) :: PDV ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDC ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RH_WETG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DRYG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_HMG -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_GMLT -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RH -! -!* 0.2 Declarations of local variables : -! -LOGICAL, DIMENSION(SIZE(PRCT)) :: GDRY -INTEGER :: IGDRY -INTEGER :: JJ -! -REAL, DIMENSION(SIZE(PRCT)) :: Z1, Z2, Z3, Z4 -REAL, DIMENSION(SIZE(PRCT)) :: ZZX, ZZW, ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, ZZW7 -REAL, DIMENSION(SIZE(PRCT)) :: ZRDRYG, ZRWETG -! -INTEGER, DIMENSION(SIZE(PRCT)) :: IVEC1,IVEC2 ! Vectors of indices -REAL, DIMENSION(SIZE(PRCT)) :: ZVEC1,ZVEC2, ZVEC3 ! Work vectors -! -INTEGER :: NHAIL -! -!------------------------------------------------------------------------------- -! -! -P_RC_WETG(:) = 0. -P_CC_WETG(:) = 0. -P_RR_WETG(:) = 0. -P_CR_WETG(:) = 0. -P_RI_WETG(:) = 0. -P_CI_WETG(:) = 0. -P_RS_WETG(:) = 0. -P_RG_WETG(:) = 0. -P_RH_WETG(:) = 0. -! -P_RC_DRYG(:) = 0. -P_CC_DRYG(:) = 0. -P_RR_DRYG(:) = 0. -P_CR_DRYG(:) = 0. -P_RI_DRYG(:) = 0. -P_CI_DRYG(:) = 0. -P_RS_DRYG(:) = 0. -P_RG_DRYG(:) = 0. -! -P_RI_HMG(:) = 0. -P_CI_HMG(:) = 0. -P_RG_HMG(:) = 0. -! -P_RR_GMLT(:) = 0. -P_CR_GMLT(:) = 0. -! -ZZW1(:) = 0. ! RCDRYG -ZZW2(:) = 0. ! RIDRYG -ZZW3(:) = 0. ! RSDRYG -ZZW4(:) = 0. ! RRDRYG -ZZW5(:) = 0. ! RIWETG -ZZW6(:) = 0. ! RSWETG -ZZW7(:) = 0. ! -! -ZRDRYG(:) = 0. -ZRWETG(:) = 0. -! -! -!* 1. Graupel growth by collection (dry or wet case) -! -------------------------------------------------- -! -! 1.a Collection of rc and ri in the dry mode -! -------------------------------------------- -! -WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) ) - ZZW(:) = PLBDG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT) - ZZW1(:) = XFCDRYG * PRCT(:) * ZZW(:) ! RCDRYG - rc collected by graupel in dry mode - ZZW2(:) = XFIDRYG * EXP( XCOLEXIG*(PT(:)-XTT) ) * PRIT(:) * ZZW(:) ! RIDRYG - ri collected by graupel in dry mode -END WHERE -! -!* 1.b Collection of rs in the dry mode -! ------------------------------------ -! -GDRY(:) = (PRST(:)>XRTMIN(5)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) -! -WHERE( GDRY ) -! -!* Select the (ZLBDAG,ZLBDAS) couplet -! - ZVEC1(:) = PLBDG(:) - ZVEC2(:) = PLBDS(:) -! -!* find the next lower indice for the ZLBDAG and for the ZLBDAS -! in the geometrical set of (Lbda_g,Lbda_s) couplet use to -! tabulate the SDRYG-kernel -! - ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001, & - XDRYINTP1G * LOG( ZVEC1(:) ) + XDRYINTP2G ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) -! - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001, & - XDRYINTP1S * LOG( ZVEC2(:) ) + XDRYINTP2S ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) -! -!* perform the bilinear interpolation of the normalized -! SDRYG-kernel - ! - Z1(:) = GET_XKER_SDRYG(IVEC1(:)+1,IVEC2(:)+1) - Z2(:) = GET_XKER_SDRYG(IVEC1(:)+1,IVEC2(:) ) - Z3(:) = GET_XKER_SDRYG(IVEC1(:) ,IVEC2(:)+1) - Z4(:) = GET_XKER_SDRYG(IVEC1(:) ,IVEC2(:) ) - ZVEC3(:) = ( Z1(:)* ZVEC2(:) & - - Z2(:)*(ZVEC2(:) - 1.0) ) & - * ZVEC1(:) & - - ( Z3(:)* ZVEC2(:) & - - Z4(:)*(ZVEC2(:) - 1.0) ) & - * (ZVEC1(:) - 1.0) - ZZW(:) = ZVEC3(:) -! - ZZW3(:) = XFSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) ) & ! RSDRYG - rs collected by graupel in dry mode - *( PLBDS(:)**(XCXS-XBS) )*( PLBDG(:)**XCXG ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSDRYG1/( PLBDG(:)**2 ) + & - XLBSDRYG2/( PLBDG(:) * PLBDS(:) ) + & - XLBSDRYG3/( PLBDS(:)**2) ) -END WHERE -! -!* 1.c Collection of rr in the dry mode -! ------------------------------------- -! -GDRY(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) -! -WHERE( GDRY ) -! -!* Select the (ZLBDAG,ZLBDAR) couplet -! - ZVEC1(:) = PLBDG(:) - ZVEC2(:) = PLBDR(:) -! -!* Find the next lower indice for the ZLBDAG and for the ZLBDAR -! in the geometrical set of (Lbda_g,Lbda_r) couplet use to -! tabulate the RDRYG-kernel -! - ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001, & - XDRYINTP1G * LOG( ZVEC1(:) ) + XDRYINTP2G ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) -! - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001, & - XDRYINTP1R * LOG( ZVEC2(:) ) + XDRYINTP2R ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) -! -!* Perform the bilinear interpolation of the normalized -! RDRYG-kernel -! - Z1(:) = GET_XKER_RDRYG(IVEC1(:)+1,IVEC2(:)+1) - Z2(:) = GET_XKER_RDRYG(IVEC1(:)+1,IVEC2(:) ) - Z3(:) = GET_XKER_RDRYG(IVEC1(:) ,IVEC2(:)+1) - Z4(:) = GET_XKER_RDRYG(IVEC1(:) ,IVEC2(:) ) - ZVEC3(:) = ( Z1(:)* ZVEC2(:) & - - Z2(:)*(ZVEC2(:) - 1.0) ) & - * ZVEC1(:) & - - ( Z3(:)* ZVEC2(:) & - - Z4(:)*(ZVEC2(:) - 1.0) ) & - * (ZVEC1(:) - 1.0) - ZZW(:) = ZVEC3(:) -! -! BVIE manque PCRT ??????????????????????????????????? -! ZZW4(:) = XFRDRYG * ZZW(:) & ! RRDRYG - ZZW4(:) = XFRDRYG * ZZW(:) * PCRT(:) & ! RRDRYG - *( PLBDG(:)**XCXG ) * ( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRDRYG1/( PLBDG(:)**2 ) + & - XLBRDRYG2/( PLBDG(:) * PLBDR(:) ) + & - XLBRDRYG3/( PLBDR(:)**2) ) / PLBDR(:)**3 -END WHERE -! -! 1.d Total collection in the dry mode -! ------------------------------------ -! -ZRDRYG(:) = ZZW1(:) + ZZW2(:) + ZZW3(:) + ZZW4(:) -! -! 1.e Collection in the wet mode -! ------------------------------ -! -ZZW(:) = 0.0 -WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) ) - ZZW5(:) = ZZW2(:) / (XCOLIG*EXP(XCOLEXIG*(PT(:)-XTT)) ) ! RIWETG - ZZW6(:) = ZZW3(:) / (XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) ) ! RSWETG -! - ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure - ZZW(:) = PKA(:)*(XTT-PT(:)) + & - ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*PT(:)) ) -! -! Total mass gained by graupel in wet mode - ZRWETG(:) = MAX( 0.0, & - ( ZZW(:) * ( X0DEPG* PLBDG(:)**XEX0DEPG + & - X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) + & - ( ZZW5(:)+ZZW6(:) ) * & - ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) ) / & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) ) -END WHERE -! -! 1.f Wet mode and partial conversion to hail -! ------------------------------------------- -! -ZZW(:) = 0.0 -NHAIL = 0. -IF (LHAIL_LIMA) NHAIL = 1. -WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT & - .AND. ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) -! -! Mass of rain and cloud droplets frozen by graupel in wet mode : RCWETG + RRWETG = RWETG - RIWETG - RSWETG - ZZW7(:) = ZRWETG(:) - ZZW5(:) - ZZW6(:) -! -! assume a linear percent of conversion of graupel into hail -! ZZW = percentage of graupel transformed -! - ZZW(:) = ZRDRYG(:)*NHAIL/(ZRWETG(:)+ZRDRYG(:)) -! - P_RC_WETG(:) = - ZZW1(:) - P_CC_WETG(:) = P_RC_WETG(:) * PCCT(:)/MAX(PRCT(:),XRTMIN(2)) - P_RR_WETG(:) = - ZZW7(:) + ZZW1(:) - P_CR_WETG(:) = P_RR_WETG(:) * PCRT(:)/MAX(PRRT(:),XRTMIN(3)) - P_RI_WETG(:) = - ZZW5(:) - P_CI_WETG(:) = P_RI_WETG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4)) - P_RS_WETG(:) = - ZZW6(:) - P_RG_WETG(:) = - PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) * (1.-ZZW(:)) - P_RH_WETG(:) = PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) * ZZW(:) - ! - P_TH_WETG(:) = ZZW7(:) * (PLSFACT(:)-PLVFACT(:)) -END WHERE -! -! 1.g Dry mode -! ------------ -! -WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT & - .AND. ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) - ! - P_RC_DRYG(:) = - ZZW1(:) - P_CC_DRYG(:) = P_RC_DRYG(:) * PCCT(:)/MAX(PRCT(:),XRTMIN(2)) - P_RR_DRYG(:) = - ZZW4(:) - P_CR_DRYG(:) = P_RR_DRYG(:) * PCRT(:)/MAX(PRRT(:),XRTMIN(3)) - P_RI_DRYG(:) = - ZZW2(:) - P_CI_DRYG(:) = P_RI_DRYG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4)) - P_RS_DRYG(:) = - ZZW3(:) - P_RG_DRYG(:) = ZRDRYG(:) - ! - P_TH_DRYG(:) = (ZZW1(:) + ZZW4(:)) * (PLSFACT(:)-PLVFACT(:)) -END WHERE -! -! -!* 2. Hallett-Mossop process (HMG) -! -------------------------------- -! -! BVIE test ZRDRYG<ZZW ????????????????????????? -!GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. (ZRDRYG(:)<ZZW(:))& -GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. (ZRDRYG(:)<ZRWETG(:))& - .AND. (PRGT(:)>XRTMIN(6)) .AND. (PRCT(:)>XRTMIN(2)) .AND. LDCOMPUTE(:) - -WHERE( GDRY ) -! - ZVEC1(:) = PLBDC(:) - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001, & - XHMLINTP1 * LOG( ZVEC1(:) ) + XHMLINTP2 ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) - ZVEC1(:) = XGAMINC_HMC( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_HMC( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZX(:) = ZVEC1(:) ! Large droplets -! - WHERE ( ZZX(:)<0.99 ) ! Dry case - P_CI_HMG(:) = ZZW1(:)*(PCCT(:)/PRCT(:))*(1.0-ZZX(:))*XHM_FACTG* & - MAX( 0.0, MIN( (PT(:)-XHMTMIN)/3.0,(XHMTMAX-PT(:))/2.0 ) ) - P_RI_HMG(:) = P_CI_HMG(:) * XMNU0 - P_RG_HMG(:) = - P_RI_HMG(:) - END WHERE -END WHERE -! -! -!* 3. Graupel Melting -! ------------------- -! -ZZX(:) = 0.0 -WHERE( (PRGT(:)>XRTMIN(6)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) ) - ZZX(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure - ZZX(:) = PKA(:)*(XTT-PT(:)) + & - ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) & - *(XESTT-ZZX(:))/(XRV*PT(:)) ) -! -! compute RGMLTR -! - ZZX(:) = MAX( 0.0,( -ZZX(:) * & - ( X0DEPG* PLBDG(:)**XEX0DEPG + & - X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) - & - ( ZZW1(:)+ZZW4(:) ) * & - ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & - ( PRHODREF(:)*XLMTT ) ) - P_RR_GMLT(:) = ZZX(:) - P_CR_GMLT(:) = ZZX(:) * 5.0E6 ! obtained after averaging, Dshed=1mm and 500 microns - ! - P_TH_GMLT(:) = - P_RR_GMLT(:) * (PLSFACT(:)-PLVFACT(:)) -END WHERE -! -! -! -! -PA_RC(:) = PA_RC(:) + P_RC_WETG(:) + P_RC_DRYG(:) -PA_CC(:) = PA_CC(:) + P_CC_WETG(:) + P_CC_DRYG(:) -PA_RR(:) = PA_RR(:) + P_RR_WETG(:) + P_RR_DRYG(:) + P_RR_GMLT(:) -PA_CR(:) = PA_CR(:) + P_CR_WETG(:) + P_CR_DRYG(:) + P_CR_GMLT(:) -PA_RI(:) = PA_RI(:) + P_RI_WETG(:) + P_RI_DRYG(:) + P_RI_HMG(:) -PA_CI(:) = PA_CI(:) + P_CI_WETG(:) + P_CI_DRYG(:) + P_CI_HMG(:) -PA_RS(:) = PA_RS(:) + P_RS_WETG(:) + P_RS_DRYG(:) -PA_RG(:) = PA_RG(:) + P_RG_WETG(:) + P_RG_DRYG(:) + P_RG_HMG(:) - P_RR_GMLT(:) -PA_RH(:) = PA_RH(:) + P_RH_WETG(:) -PA_TH(:) = PA_TH(:) + P_TH_WETG(:) + P_TH_DRYG(:) + P_TH_GMLT(:) -! -!------------------------------------------------------------------------------- -! -CONTAINS - FUNCTION GET_XKER_SDRYG(GRAUPEL,SNOW) RESULT(RET) - INTEGER, DIMENSION(:) :: GRAUPEL - INTEGER, DIMENSION(:) :: SNOW - REAL, DIMENSION(SIZE(SNOW)) :: RET - ! - INTEGER I - ! - DO I=1,SIZE(GRAUPEL) - RET(I) = XKER_SDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_SDRYG,1)),1),MAX(MIN(SNOW(I),SIZE(XKER_SDRYG,2)),1)) - END DO - END FUNCTION GET_XKER_SDRYG -! -!------------------------------------------------------------------------------- -! - FUNCTION GET_XKER_RDRYG(GRAUPEL,RAIN) RESULT(RET) - INTEGER, DIMENSION(:) :: GRAUPEL - INTEGER, DIMENSION(:) :: RAIN - REAL, DIMENSION(SIZE(RAIN)) :: RET - ! - INTEGER I - ! - DO I=1,SIZE(GRAUPEL) - RET(I) = XKER_RDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_RDRYG,1)),1),MAX(MIN(RAIN(I),SIZE(XKER_RDRYG,2)),1)) - END DO - END FUNCTION GET_XKER_RDRYG -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_GRAUPEL diff --git a/src/arome/micro/lima_graupel_deposition.F90 b/src/arome/micro/lima_graupel_deposition.F90 deleted file mode 100644 index c7b61b1c851f08848e3e01061d83af3f4c0c269c..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_graupel_deposition.F90 +++ /dev/null @@ -1,115 +0,0 @@ -! ################################# - MODULE MODI_LIMA_GRAUPEL_DEPOSITION -! ################################# -! -INTERFACE - SUBROUTINE LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, & - P_TH_DEPG, P_RG_DEPG, & - PA_TH, PA_RV, PA_RG ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -REAL, DIMENSION(:), INTENT(IN) :: PAI ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -!! -END SUBROUTINE LIMA_GRAUPEL_DEPOSITION -END INTERFACE -END MODULE MODI_LIMA_GRAUPEL_DEPOSITION -! -! ###################################################################### - SUBROUTINE LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, & - P_TH_DEPG, P_RG_DEPG, & - PA_TH, PA_RV, PA_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XRTMIN -USE MODD_PARAM_LIMA_MIXED, ONLY : X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDG ! -REAL, DIMENSION(:), INTENT(IN) :: PAI ! -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -!* 0.2 Declarations of local variables : -! -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -P_TH_DEPG(:) = 0.0 -P_RG_DEPG(:) = 0.0 -WHERE ( (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) ) - !Correction BVIE RHODREF - ! ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - P_RG_DEPG(:) = ( PSSI(:)/(PAI(:)) ) * & - ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) - P_TH_DEPG(:) = P_RG_DEPG(:)*PLSFACT(:) -END WHERE -! -PA_RV(:) = PA_RV(:) - P_RG_DEPG(:) -PA_RG(:) = PA_RG(:) + P_RG_DEPG(:) -PA_TH(:) = PA_TH(:) + P_TH_DEPG(:) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_GRAUPEL_DEPOSITION diff --git a/src/arome/micro/lima_ice_aggregation_snow.F90 b/src/arome/micro/lima_ice_aggregation_snow.F90 deleted file mode 100644 index e35ddfa09c6e27ff19153287d5bb61033bce9b6c..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_ice_aggregation_snow.F90 +++ /dev/null @@ -1,144 +0,0 @@ -! ################################# - MODULE MODI_LIMA_ICE_AGGREGATION_SNOW -! ################################# -! -INTERFACE - SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_AGGS, P_CI_AGGS, & - PA_RI, PA_CI, PA_RS ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PT -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT -REAL, DIMENSION(:), INTENT(IN) :: PRST -REAL, DIMENSION(:), INTENT(IN) :: PCIT -REAL, DIMENSION(:), INTENT(IN) :: PLBDI -REAL, DIMENSION(:), INTENT(IN) :: PLBDS -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_AGGS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_AGGS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW -END INTERFACE -END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW -! -! ###################################################################### - SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_AGGS, P_CI_AGGS, & - PA_RI, PA_CI, PA_RS ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN -USE MODD_PARAM_LIMA_COLD, ONLY : XBI, XCCS, XCXS, XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PT -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT -REAL, DIMENSION(:), INTENT(IN) :: PRST -REAL, DIMENSION(:), INTENT(IN) :: PCIT -REAL, DIMENSION(:), INTENT(IN) :: PLBDI -REAL, DIMENSION(:), INTENT(IN) :: PLBDS -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_AGGS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_AGGS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRIT)) :: ZZW1, ZZW2, ZZW3 ! work arrays -! -!------------------------------------------------------------------------------- -! -! -!* 2.4 Aggregation of r_i on r_s: CIAGGS and RIAGGS -! --------------------------------------------------- -! -ZZW1(:) = 0. -ZZW2(:) = 0. -ZZW3(:) = 0. -! -P_RI_AGGS(:) = 0. -P_CI_AGGS(:) = 0. -! -!!$print *, "aggregation of i on s" -!!$print *, "ri", PRIT(156,2,22) -!!$print *, "Ni", PCIT(156,2,22) -!!$print *, "rs", PRST(156,2,22) -!!$print *, "lambda i", PLBDI(156,2,22) -!!$print *, "lambda s", PLBDS(156,2,22) -!!$print *, "T", PT(156,2,22) -!!$print *, "C1", XAGGS_CLARGE1 -!!$print *, "C2", XAGGS_CLARGE2 -!!$print *, "R1", XAGGS_RLARGE1 -!!$print *, "R2", XAGGS_RLARGE2 -! -WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) - ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 - ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)*EXP( XCOLEXIS*(PT(:)-XTT) )) & - / (PLBDI(:)**3) - ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:)) -! - P_CI_AGGS(:) = - ZZW3(:) -! - ZZW2(:) = ZZW2(:) / PLBDI(:)**XBI - ZZW2(:) = ZZW2(:)*(XAGGS_RLARGE1+XAGGS_RLARGE2*ZZW1(:)) -! - P_RI_AGGS(:) = - ZZW2(:) -END WHERE -! -!!$print *, "tendance ci", P_CI_AGGS(156,2,22) -!!$print *, "tendance ri", P_RI_AGGS(156,2,22) -! -PA_RI(:) = PA_RI(:) + P_RI_AGGS(:) -PA_CI(:) = PA_CI(:) + P_CI_AGGS(:) -PA_RS(:) = PA_RS(:) - P_RI_AGGS(:) -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW diff --git a/src/arome/micro/lima_ice_melting.F90 b/src/arome/micro/lima_ice_melting.F90 deleted file mode 100644 index 88ea17f0ede09beb2c4d801224c49e0d0a532aba..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_ice_melting.F90 +++ /dev/null @@ -1,169 +0,0 @@ -! ################################# - MODULE MODI_LIMA_ICE_MELTING -! ################################# -! -INTERFACE - SUBROUTINE LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCIT, PINT, & - P_TH_IMLT, P_RC_IMLT, P_CC_IMLT, & - PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Rain water C. at t -REAL, DIMENSION(:,:), INTENT(IN) :: PINT ! Nucleated IFN C. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CI -REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN -! -END SUBROUTINE LIMA_ICE_MELTING -END INTERFACE -END MODULE MODI_LIMA_ICE_MELTING -! -! ###################################################################### - SUBROUTINE LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCIT, PINT, & - P_TH_IMLT, P_RC_IMLT, P_CC_IMLT, & - PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XP00, XRD, XCPD, XCPV, XCL, XCI, XTT, XLSTT, XLVTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, NMOD_IFN -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Rain water C. at t -REAL, DIMENSION(:,:), INTENT(IN) :: PINT ! Nucleated IFN C. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_IMLT -REAL, DIMENSION(:), INTENT(INOUT) :: PB_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PB_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PB_CI -REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PTHT)) :: & - ZW, & - ZT, & - ZTCELSIUS,& - ZLSFACT, & - ZLVFACT, & - ZMASK -! -INTEGER :: JMOD_IFN -! -! -! -!------------------------------------------------------------------------------- -! -P_TH_IMLT(:) = 0. -P_RC_IMLT(:) = 0. -P_CC_IMLT(:) = 0. -! -! Temperature -ZT(:) = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD) -ZTCELSIUS(:) = ZT(:)-XTT -! -ZW(:) = PEXNREF(:)*( XCPD+XCPV*PRVT(:)+XCL*(PRCT(:)+PRRT(:)) & - +XCI*(PRIT(:)+PRST(:)+PRGT(:)) ) -ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZW(:) ! L_s/(Pi_ref*C_ph) -ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZW(:) ! L_v/(Pi_ref*C_ph) -! -ZW(:) = 0.0 -! -ZMASK(:) = 0. -! -WHERE( (ZT(:)<XTT-35.0) .AND. (PRIT(:)>XRTMIN(3)) .AND. LDCOMPUTE(:) ) - P_TH_IMLT(:) = - PRIT(:)*(ZLSFACT(:)-ZLVFACT(:)) - P_RC_IMLT(:) = PRIT(:) - P_CC_IMLT(:) = PCIT(:) - PB_TH(:) = PB_TH(:) + P_TH_IMLT(:) - PB_RC(:) = PB_RC(:) + PRIT(:) - PB_CC(:) = PB_CC(:) + PCIT(:) - PB_RI(:) = PB_RI(:) - PRIT(:) - PB_CI(:) = PB_CI(:) - PCIT(:) - ZMASK(:) = 1. -ENDWHERE -! -DO JMOD_IFN = 1,NMOD_IFN -! Correction BVIE aerosols not released but in droplets -! ZIFS(:,JMOD_IFN) = ZIFS(:,JMOD_IFN) + ZINS(:,JMOD_IFN)*(1.-ZMASK(:)) - PB_IFNN(:,JMOD_IFN) = PB_IFNN(:,JMOD_IFN) - PINT(:,JMOD_IFN)* ZMASK(:) -ENDDO -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_ICE_MELTING diff --git a/src/arome/micro/lima_ice_snow_deposition.F90 b/src/arome/micro/lima_ice_snow_deposition.F90 deleted file mode 100644 index 8768b9e6cdfcfd1a971127d8926bbe131cfd18b0..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_ice_snow_deposition.F90 +++ /dev/null @@ -1,242 +0,0 @@ -! ##################### - MODULE MODI_LIMA_ICE_SNOW_DEPOSITION -! ##################### -! -INTERFACE - SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - PA_TH, PA_RV, PA_RI, PA_CI, PA_RS ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Ice crystal C. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDI ! Graupel m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION -END INTERFACE -END MODULE MODI_LIMA_ICE_SNOW_DEPOSITION -! -! ###################################################################### -SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - PA_TH, PA_RV, PA_RI, PA_CI, PA_RS ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the microphysical sources -!! for slow cold processes : -!! - conversion of snow to ice -!! - deposition of vapor on snow -!! - conversion of ice to snow (Harrington 1995) -!! -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy * jan. 2014 add budgets -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI -USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & - XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & - XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & - XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & - XDICNVS_LIM, XLBDAICNVS_LIM, & - XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS, & - XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 - -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Ice crystal C. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDI ! Graupel m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -!* 0.2 Declarations of local variables : -! -LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array -! -! -!------------------------------------------------------------------------------- -! -P_RI_CNVI(:) = 0. -P_CI_CNVI(:) = 0. -P_TH_DEPS(:) = 0. -P_RS_DEPS(:) = 0. -P_RI_CNVS(:) = 0. -P_CI_CNVS(:) = 0. -! -! Physical limitations -! -! -! Looking for regions where computations are necessary -! -GMICRO(:) = .FALSE. -GMICRO(:) = LDCOMPUTE(:) .AND. & - (PRIT(:)>XRTMIN(4) .OR. & - PRST(:)>XRTMIN(5)) -! -! -WHERE( GMICRO ) -! -!* 2.1 Conversion of snow to r_i: RSCNVI -! ---------------------------------------- -! -! - ZZW2(:) = 0.0 - ZZW(:) = 0.0 - WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) & - .AND. (PSSI(:)<0.0) ) - ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUI) * EXP(-ZZW(:)) -! -! Correction BVIE RHODREF -! ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:)/ZRHODREF(:),ZRSS(:) ) - ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) -! - ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) ) - END WHERE -! - P_RI_CNVI(:) = ZZW(:) - P_CI_CNVI(:) = ZZW2(:) -! - PA_RI(:) = PA_RI(:) + P_RI_CNVI(:) - PA_CI(:) = PA_CI(:) + P_CI_CNVI(:) - PA_RS(:) = PA_RS(:) - P_RI_CNVI(:) -! -! -!* 2.2 Deposition of water vapor on r_s: RVDEPS -! ----------------------------------------------- -! -! - ZZW(:) = 0.0 - WHERE ( (PRST(:)>XRTMIN(5)) ) -!Correction BVIE rhodref -! ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - ZZW(:) = ( PSSI(:)/(PAI(:)) ) * & - ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) - ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) - END WHERE -! - P_RS_DEPS(:) = ZZW(:) - P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:) -! - PA_TH(:) = PA_TH(:) + P_TH_DEPS(:) - PA_RV(:) = PA_RV(:) - P_RS_DEPS(:) - PA_RS(:) = PA_RS(:) + P_RS_DEPS(:) -! -! -!* 2.3 Conversion of pristine ice to r_s: RICNVS -! ------------------------------------------------ -! -! - ZZW(:) = 0.0 - ZZW2(:) = 0.0 - WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) & - .AND. (PSSI(:)>0.0) ) - ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI) - ZZX(:) = ( PSSI(:)/PAI(:) )*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:)) -! -! Correction BVIE -! ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:)/ZRHODREF(:) & - ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:) -! - ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) - END WHERE -! -P_RI_CNVS(:) = - ZZW(:) -P_CI_CNVS(:) = - ZZW2(:) -! -PA_RI(:) = PA_RI(:) + P_RI_CNVS(:) -PA_CI(:) = PA_CI(:) + P_CI_CNVS(:) -PA_RS(:) = PA_RS(:) - P_RI_CNVS(:) -! -! -END WHERE -! - -! -END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION diff --git a/src/arome/micro/lima_inst_procs.F90 b/src/arome/micro/lima_inst_procs.F90 deleted file mode 100644 index afad8c32497150caa08e6521388b03ac351a1266..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_inst_procs.F90 +++ /dev/null @@ -1,164 +0,0 @@ -! ############################### - MODULE MODI_LIMA_INST_PROCS -! ############################### -! -INTERFACE - SUBROUTINE LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PINT, & - P_CR_BRKU, & ! spontaneous break up of drops (BRKU) : Nr - P_TH_HONR, P_RR_HONR, P_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th - P_TH_IMLT, P_RC_IMLT, P_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA - PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG, & - PB_CC, PB_CR, PB_CI, & - PB_IFNN) -! -REAL, INTENT(IN) :: PTSTEP ! Double Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Rain water m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Prinstine ice conc. at t -! -REAL, DIMENSION(:,:), INTENT(IN) :: PINT ! IFN C. activated at t -! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CR_BRKU ! Concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_TH_HONR ! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_RR_HONR ! mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CR_HONR ! Concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_TH_IMLT ! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_RC_IMLT ! mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CC_IMLT ! Concentration change (#/kg) -! -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_TH ! Cumulated theta change -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RV ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RC ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RR ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RI ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RG ! Cumulated mr change (kg/kg) -! -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CC ! Cumulated concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CR ! Cumulated concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CI ! Cumulated concentration change (#/kg) -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN ! Cumulated concentration change (#/kg) -! - END SUBROUTINE LIMA_INST_PROCS -END INTERFACE -END MODULE MODI_LIMA_INST_PROCS -! ############################################################################# -SUBROUTINE LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PINT, & - P_CR_BRKU, & ! spontaneous break up of drops (BRKU) : Nr - P_TH_HONR, P_RR_HONR, P_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th - P_TH_IMLT, P_RC_IMLT, P_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA - PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG, & - PB_CC, PB_CR, PB_CI, & - PB_IFNN) -! ############################################################################# -! -USE MODD_PARAM_LIMA, ONLY : LCOLD_LIMA, LNUCL_LIMA, LMEYERS_LIMA, LSNOW_LIMA, LWARM_LIMA, LACTI_LIMA, LRAIN_LIMA, LHHONI_LIMA, NMOD_CCN, NMOD_IFN -! -USE MODI_LIMA_DROPS_BREAK_UP -USE MODI_LIMA_DROPS_HOM_FREEZING -USE MODI_LIMA_ICE_MELTING - -IMPLICIT NONE - - - -REAL, INTENT(IN) :: PTSTEP ! Double Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Theta at t -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! Rain water m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Prinstine ice conc. at t -! -REAL, DIMENSION(:,:), INTENT(IN) :: PINT ! IFN C. activated at t -! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CR_BRKU ! Concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_TH_HONR ! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_RR_HONR ! mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CR_HONR ! Concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_TH_IMLT ! -REAL, DIMENSION(:) , INTENT(INOUT) :: P_RC_IMLT ! mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: P_CC_IMLT ! Concentration change (#/kg) -! -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_TH ! Cumulated theta change -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RV ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RC ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RR ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RI ! Cumulated mr change (kg/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_RG ! Cumulated mr change (kg/kg) -! -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CC ! Cumulated concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CR ! Cumulated concentration change (#/kg) -REAL, DIMENSION(:) , INTENT(INOUT) :: PB_CI ! Cumulated concentration change (#/kg) -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN ! Cumulated concentration change (#/kg) -! -!------------------------------------------------------------------------------- -! -IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PCRT, PRRT, & - P_CR_BRKU, & - PB_CR ) -END IF -! -!------------------------------------------------------------------------------- -! -IF (LCOLD_LIMA .AND. LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCRT, & - P_TH_HONR, P_RR_HONR, P_CR_HONR, & - PB_TH, PB_RR, PB_CR, PB_RG ) -END IF -! -!------------------------------------------------------------------------------- -! -IF (LCOLD_LIMA .AND. LWARM_LIMA) THEN - CALL LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCIT, PINT, & - P_TH_IMLT, P_RC_IMLT, P_CC_IMLT, & - PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN) -END IF -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_INST_PROCS diff --git a/src/arome/micro/lima_meyers_nucleation.F90 b/src/arome/micro/lima_meyers_nucleation.F90 deleted file mode 100644 index 2b90ca08c6b59dc50f8de755ce8a782755b420f6..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_meyers_nucleation.F90 +++ /dev/null @@ -1,370 +0,0 @@ -! ################################## - MODULE MODI_LIMA_MEYERS_NUCLEATION -! ################################## -! -INTERFACE - SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCIT, PINT, & - P_TH_HIND, P_RI_HIND, P_CI_HIND, & - P_RC_HINC, P_CC_HINC ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Ice crystal C. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! Activated ice nuclei C. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_TH_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RC_HINC -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CC_HINC -! -END SUBROUTINE LIMA_MEYERS_NUCLEATION -END INTERFACE -END MODULE MODI_LIMA_MEYERS_NUCLEATION -! -! ###################################################################### - SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCIT, PINT, & - P_TH_HIND, P_RI_HIND, P_CI_HIND, & - P_RC_HINC, P_CC_HINC ) -! ###################################################################### -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the heterogeneous nucleation -!! following Phillips (2008). -!! -!! -!!** METHOD -!! ------ -!! The parameterization of Phillips (2008) is based on observed nucleation -!! in the CFDC for a range of T and Si values. Phillips therefore defines a -!! reference activity spectrum, that is, for given T and Si values, the -!! reference concentration of primary ice crystals. -!! -!! The activation of IFN is closely related to their total surface. Thus, -!! the activable fraction of each IFN specie is determined by an integration -!! over the particle size distributions. -!! -!! Subroutine organisation : -!! -!! 1- Preliminary computations -!! 2- Check where computations are necessary, and pack variables -!! 3- Compute the saturation over water and ice -!! 4- Compute the reference activity spectrum -!! -> CALL LIMA_PHILLIPS_REF_SPECTRUM -!! Integrate over the size distributions to compute the IFN activable fraction -!! -> CALL LIMA_PHILLIPS_INTEG -!! 5- Heterogeneous nucleation of insoluble IFN -!! 6- Heterogeneous nucleation of coated IFN -!! 7- Unpack variables & deallocations -!! -!! -!! REFERENCE -!! --------- -!! -!! Phillips et al., 2008: An empirical parameterization of heterogeneous -!! ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy * jan. 2014 add budgets -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -USE MODD_CST -USE MODD_PARAM_LIMA -USE MODD_PARAM_LIMA_COLD -USE MODD_BUDGET -USE MODE_BUDGET, ONLY: BUDGET_DDH -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI -! -USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water C. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Ice crystal C. source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! Activated ice nuclei C. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_TH_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RC_HINC -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CC_HINC -! -! -!* 0.2 Declarations of local variables : -! -! -INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain -INTEGER :: JL ! Loop index -INTEGER :: INEGT ! Case number of nucleation -! -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: GNEGT ! Test where to compute the nucleation -! -INTEGER, DIMENSION(SIZE(PRHODREF)) :: I1,I2,I3 ! Indexes for PACK replacement -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRRT ! Rain water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRIT ! Pristine ice m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRGT ! Graupel/hail m.r. at t -! -REAL, DIMENSION(:), ALLOCATABLE :: ZCCT ! Cloud water conc. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZCIT ! Pristine ice conc. source -! -REAL, DIMENSION(:), ALLOCATABLE :: ZTHT ! Theta source -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZINT ! Nucleated Ice nuclei conc. source - ! by Deposition/Contact -! -REAL, DIMENSION(:), ALLOCATABLE & - :: ZRHODREF, & ! RHO Dry REFerence - ZZT, & ! Temperature - ZPRES, & ! Pressure - ZEXNREF, & ! EXNer Pressure REFerence - ZZW, & ! Work array - ZZX, & ! Work array - ZZY, & ! Work array - ZLSFACT, & ! L_s/(Pi_ref*C_ph) - ZLVFACT, & ! L_v/(Pi_ref*C_ph) - ZSSI -! -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZW, ZT ! work arrays -! -REAL, DIMENSION(:), ALLOCATABLE :: ZTCELSIUS -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -P_TH_HIND(:,:,:) = 0. -P_RI_HIND(:,:,:) = 0. -P_CI_HIND(:,:,:) = 0. -P_RC_HINC(:,:,:) = 0. -P_CC_HINC(:,:,:) = 0. -! -! Physical domain -! -IIB=1+JPHEXT -IIE=SIZE(PTHT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PTHT,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PTHT,3) - JPVEXT -! -! Temperature -! -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) -! -! Saturation over ice -! -ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) -ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) -! -! -!------------------------------------------------------------------------------- -! -! optimization by looking for locations where -! the temperature is negative only !!! -! -GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT .AND. & - ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.8 -INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) -IF( INEGT >= 1 ) THEN - ALLOCATE(ZRVT(INEGT)) - ALLOCATE(ZRCT(INEGT)) - ALLOCATE(ZRRT(INEGT)) - ALLOCATE(ZRIT(INEGT)) - ALLOCATE(ZRST(INEGT)) - ALLOCATE(ZRGT(INEGT)) -! - ALLOCATE(ZTHT(INEGT)) -! - ALLOCATE(ZCCT(INEGT)) - ALLOCATE(ZINT(INEGT,1)) - ALLOCATE(ZCIT(INEGT)) -! - ALLOCATE(ZRHODREF(INEGT)) - ALLOCATE(ZZT(INEGT)) - ALLOCATE(ZPRES(INEGT)) - ALLOCATE(ZEXNREF(INEGT)) - DO JL=1,INEGT - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL)) - ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL)) - ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL)) -! - ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL)) -! - ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL)) -! - ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL)) - ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) -! - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - ENDDO - ALLOCATE(ZZW(INEGT)) - ALLOCATE(ZZX(INEGT)) - ALLOCATE(ZZY(INEGT)) - ALLOCATE(ZLSFACT(INEGT)) - ALLOCATE(ZLVFACT(INEGT)) - ALLOCATE(ZSSI(INEGT)) - ALLOCATE(ZTCELSIUS(INEGT)) -! - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZTCELSIUS(:) = MAX( ZZT(:)-XTT,-50.0 ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) -! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:)) ) ! es_i - ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) - 1.0 - ! Supersaturation over ice -! -!--------------------------------------------------------------------------- -! -!* compute the heterogeneous nucleation by deposition: RVHNDI -! - DO JL=1,INEGT - ZINT(JL,1) = PINT(I1(JL),I2(JL),I3(JL),1) - END DO - ZZW(:) = 0.0 - ZZX(:) = 0.0 - ZZY(:) = 0.0 -! - WHERE( ZZT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 ) - ZZY(:) = XNUC_DEP*EXP( XEXSI_DEP*100.*MIN(1.,ZSSI(:))+XEX_DEP)/ZRHODREF(:) - ZZX(:) = MAX( ZZY(:)-ZINT(:,1) , 0.0 ) ! number of ice crystals formed at this time step #/kg - ZZW(:) = MIN( XMNU0*ZZX(:) , ZRVT(:) ) ! mass of ice formed at this time step (kg/kg) - END WHERE - ! - P_CI_HIND(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. ) - P_RI_HIND(:,:,:) = UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. ) - P_TH_HIND(:,:,:) = UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:), FIELD=0. ) - PTHT(:,:,:) = PTHT(:,:,:) + P_TH_HIND(:,:,:) - PRVT(:,:,:) = PRVT(:,:,:) - P_RI_HIND(:,:,:) - PRIT(:,:,:) = PRIT(:,:,:) + P_RI_HIND(:,:,:) - PCIT(:,:,:) = PCIT(:,:,:) + P_CI_HIND(:,:,:) - PINT(:,:,:,1) = PINT(:,:,:,1) + P_CI_HIND(:,:,:) -! -!--------------------------------------------------------------------------- -! -!* compute the heterogeneous nucleation by contact: RVHNCI -! -! - DO JL=1,INEGT - ZINT(JL,1) = PINT(I1(JL),I2(JL),I3(JL),1) - END DO - ZZW(:) = 0.0 - ZZX(:) = 0.0 - ZZY(:) = 0.0 -! - WHERE( ZZT(:)<XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) ) - ZZY(:) = MIN( XNUC_CON * EXP( XEXTT_CON*ZTCELSIUS(:)+XEX_CON ) & - /ZRHODREF(:) , ZCCT(:) ) - ZZX(:) = MAX( ZZY(:)-ZINT(:,1),0.0 ) - ZZW(:) = MIN( (ZRCT(:)/ZCCT(:))*ZZX(:),ZRCT(:) ) - END WHERE -! - P_RC_HINC(:,:,:) = - UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. ) - P_CC_HINC(:,:,:) = - UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. ) - PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:), FIELD=0. ) - PRCT(:,:,:) = PRCT(:,:,:) + P_RC_HINC(:,:,:) - PRIT(:,:,:) = PRIT(:,:,:) - P_RC_HINC(:,:,:) - PCCT(:,:,:) = PCCT(:,:,:) + P_CC_HINC(:,:,:) - PCIT(:,:,:) = PCIT(:,:,:) - P_CC_HINC(:,:,:) - PINT(:,:,:,1) = PINT(:,:,:,1) - P_CC_HINC(:,:,:) -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRRT) - DEALLOCATE(ZRIT) - DEALLOCATE(ZRST) - DEALLOCATE(ZRGT) -! - DEALLOCATE(ZTHT) -! - DEALLOCATE(ZCCT) - DEALLOCATE(ZINT) - DEALLOCATE(ZCIT) -! - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZTCELSIUS) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) - DEALLOCATE(ZSSI) - DEALLOCATE(ZZW) - DEALLOCATE(ZZX) - DEALLOCATE(ZZY) - DEALLOCATE(ZLSFACT) - DEALLOCATE(ZLVFACT) -! -END IF -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_MEYERS_NUCLEATION diff --git a/src/arome/micro/lima_phillips_ifn_nucleation.F90 b/src/arome/micro/lima_phillips_ifn_nucleation.F90 deleted file mode 100644 index 068d15cfc3be0c89f61b485641cf7720f87848b6..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_phillips_ifn_nucleation.F90 +++ /dev/null @@ -1,500 +0,0 @@ -! ######################################## - MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION -! ######################################## -! -INTERFACE - SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCIT, PNAT, PIFT, PINT, PNIT, & - P_TH_HIND, P_RI_HIND, P_CI_HIND, & - P_RC_HINC, P_CC_HINC ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Cloud water conc. at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN conc. used for immersion nucl. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT ! Free IFN conc. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! Nucleated IFN conc. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT ! Nucleated (by immersion) CCN conc. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_TH_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RC_HINC -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CC_HINC -! -END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION -END INTERFACE -END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION -! -! ###################################################################### - SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCIT, PNAT, PIFT, PINT, PNIT, & - P_TH_HIND, P_RI_HIND, P_CI_HIND, & - P_RC_HINC, P_CC_HINC ) -! ###################################################################### -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the heterogeneous nucleation -!! following Phillips (2008). -!! -!! -!!** METHOD -!! ------ -!! The parameterization of Phillips (2008) is based on observed nucleation -!! in the CFDC for a range of T and Si values. Phillips therefore defines a -!! reference activity spectrum, that is, for given T and Si values, the -!! reference concentration of primary ice crystals. -!! -!! The activation of IFN is closely related to their total surface. Thus, -!! the activable fraction of each IFN specie is determined by an integration -!! over the particle size distributions. -!! -!! Subroutine organisation : -!! -!! 1- Preliminary computations -!! 2- Check where computations are necessary, and pack variables -!! 3- Compute the saturation over water and ice -!! 4- Compute the reference activity spectrum -!! -> CALL LIMA_PHILLIPS_REF_SPECTRUM -!! Integrate over the size distributions to compute the IFN activable fraction -!! -> CALL LIMA_PHILLIPS_INTEG -!! 5- Heterogeneous nucleation of insoluble IFN -!! 6- Heterogeneous nucleation of coated IFN -!! 7- Unpack variables & deallocations -!! -!! -!! REFERENCE -!! --------- -!! -!! Phillips et al., 2008: An empirical parameterization of heterogeneous -!! ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy * jan. 2014 add budgets -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT -USE MODD_CST, ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI, & - XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI, & - XALPW, XBETAW, XGAMW, XPI -USE MODD_PARAM_LIMA, ONLY : NMOD_IFN, NSPECIE, XFRAC, & - NMOD_CCN, NMOD_IMM, NIND_SPECIE, NINDICE_CCN_IMM, & - XDSI0, XRTMIN, XCTMIN, NPHILLIPS -USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0 -! -USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV -USE MODI_LIMA_PHILLIPS_REF_SPECTRUM -USE MODI_LIMA_PHILLIPS_INTEG -! -USE MODD_BUDGET -USE MODE_BUDGET, ONLY: BUDGET_DDH -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE -! -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Cloud water conc. at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN conc. used for immersion nucl. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT ! Free IFN conc. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! Nucleated IFN conc. -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT ! Nucleated (by immersion) CCN conc. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_TH_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CI_HIND -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_RC_HINC -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: P_CC_HINC -! -! -!* 0.2 Declarations of local variables : -! -! -INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain -INTEGER :: JL, JMOD_CCN, JMOD_IFN, JSPECIE, JMOD_IMM ! Loop index -INTEGER :: INEGT ! Case number of sedimentation, nucleation, -! -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: GNEGT ! Test where to compute the nucleation -! -INTEGER, DIMENSION(SIZE(PRHODREF)) :: I1,I2,I3 ! Indexes for PACK replacement -! -REAL, DIMENSION(:), ALLOCATABLE :: ZRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRRT ! Rain water m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRIT ! Pristine ice m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), ALLOCATABLE :: ZRGT ! Graupel/hail m.r. at t -! -REAL, DIMENSION(:), ALLOCATABLE :: ZCCT ! Cloud water conc. at t -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNAT ! Cloud Cond. nuclei conc. source -REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFT ! Free Ice nuclei conc. source -REAL, DIMENSION(:,:), ALLOCATABLE :: ZINT ! Nucleated Ice nuclei conc. source - !by Deposition/Contact -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNIT ! Nucleated Ice nuclei conc. source - !by Immersion -! -REAL, DIMENSION(:), ALLOCATABLE & - :: ZRHODREF, & ! RHO Dry REFerence - ZRHODJ, & ! RHO times Jacobian - ZZT, & ! Temperature - ZPRES, & ! Pressure - ZEXNREF, & ! EXNer Pressure REFerence - ZZW, & ! Work array - ZZX, & ! Work array - ZZY, & ! Work array - ZLSFACT, & ! L_s/(Pi_ref*C_ph) - ZLVFACT, & ! L_v/(Pi_ref*C_ph) - ZLBDAC, & ! Slope parameter of the cloud droplet distr. - ZSI, & - ZSW, & - ZSI_W -! -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZW, ZT ! work arrays -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZSI0, & ! Si threshold in H_X for X={DM,BC,O} - Z_FRAC_ACT ! Activable frac. of each AP species -REAL, DIMENSION(:), ALLOCATABLE :: ZTCELSIUS, ZZT_SI0_BC -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -P_TH_HIND(:,:,:) = 0. -P_RI_HIND(:,:,:) = 0. -P_CI_HIND(:,:,:) = 0. -P_RC_HINC(:,:,:) = 0. -P_CC_HINC(:,:,:) = 0. -! -! Physical domain -! -IIB=1+JPHEXT -IIE=SIZE(PTHT,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PTHT,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PTHT,3) - JPVEXT -! -! Temperature -! -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) -! -! Saturation over ice -! -ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) -ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) -! -! -!------------------------------------------------------------------------------- -! -! -!* 2. COMPUTATIONS ONLY WHERE NECESSARY : PACK -! ---------------------------------------- -! -! -GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. & - ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95 -! -INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) -! -IF (INEGT > 0) THEN -! - ALLOCATE(ZRVT(INEGT)) - ALLOCATE(ZRCT(INEGT)) - ALLOCATE(ZRRT(INEGT)) - ALLOCATE(ZRIT(INEGT)) - ALLOCATE(ZRST(INEGT)) - ALLOCATE(ZRGT(INEGT)) -! - ALLOCATE(ZCCT(INEGT)) -! - ALLOCATE(ZNAT(INEGT,NMOD_CCN)) - ALLOCATE(ZIFT(INEGT,NMOD_IFN)) - ALLOCATE(ZINT(INEGT,NMOD_IFN)) - ALLOCATE(ZNIT(INEGT,NMOD_IMM)) -! - ALLOCATE(ZRHODREF(INEGT)) - ALLOCATE(ZZT(INEGT)) - ALLOCATE(ZPRES(INEGT)) - ALLOCATE(ZEXNREF(INEGT)) -! - DO JL=1,INEGT - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL)) - ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL)) - ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL)) -! - ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL)) -! - DO JMOD_CCN = 1, NMOD_CCN - ZNAT(JL,JMOD_CCN) = PNAT(I1(JL),I2(JL),I3(JL),JMOD_CCN) - ENDDO - DO JMOD_IFN = 1, NMOD_IFN - ZIFT(JL,JMOD_IFN) = PIFT(I1(JL),I2(JL),I3(JL),JMOD_IFN) - ZINT(JL,JMOD_IFN) = PINT(I1(JL),I2(JL),I3(JL),JMOD_IFN) - ENDDO - DO JMOD_IMM = 1, NMOD_IMM - ZNIT(JL,JMOD_IMM) = PNIT(I1(JL),I2(JL),I3(JL),JMOD_IMM) - ENDDO - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - ENDDO -! -! PACK : done -! Prepare computations -! - ALLOCATE( ZLSFACT (INEGT) ) - ALLOCATE( ZLVFACT (INEGT) ) - ALLOCATE( ZSI (INEGT) ) - ALLOCATE( ZTCELSIUS (INEGT) ) - ALLOCATE( ZZT_SI0_BC (INEGT) ) - ALLOCATE( ZLBDAC (INEGT) ) - ALLOCATE( ZSI0 (INEGT,NSPECIE) ) - ALLOCATE( Z_FRAC_ACT (INEGT,NSPECIE) ) ; Z_FRAC_ACT(:,:) = 0.0 - ALLOCATE( ZSW (INEGT) ) - ALLOCATE( ZSI_W (INEGT) ) -! - ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0 - ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0 - ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0 -! -! -!------------------------------------------------------------------------------- -! -! -!* 3. COMPUTE THE SATURATION OVER WATER AND ICE -! ----------------------------------------- -! -! - ZTCELSIUS(:) = ZZT(:)-XTT ! T [°C] - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) -! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i - ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) ! Saturation over ice -! - ZZY(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w - ZSW(:) = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:)) ! Saturation over water -! - ZSI_W(:)= ZZY(:)/ZZW(:) ! Saturation over ice at water saturation: es_w/es_i -! -! Saturation parameters for H_X, with X={Dust/Metallic (2 modes), Black Carbon, Organic} -! - ZSI0(:,1) = 1.0 + 10.0**( -1.0261 + 3.1656E-3* ZTCELSIUS(:) & - + 5.3938E-4*(ZTCELSIUS(:)**2) & - + 8.2584E-6*(ZTCELSIUS(:)**3) ) ! with T [°C] - ZSI0(:,2) = ZSI0(:,1) ! DM2 = DM1 - ZSI0(:,3) = 0.0 ! BC - ZZT_SI0_BC(:) = MAX( 198.0, MIN( 239.0,ZZT(:) ) ) - ZSI0(:,3) = (-3.118E-5*ZZT_SI0_BC(:)+1.085E-2)*ZZT_SI0_BC(:)+0.5652 - XDSI0(3) - IF (NPHILLIPS == 8) THEN - ZSI0(:,4) = ZSI0(:,3) ! O = BC - ELSE IF (NPHILLIPS == 13) THEN - ZSI0(:,4) = 1.15 ! BIO - END IF -! -! -!------------------------------------------------------------------------------- -! -! -!* 4. COMPUTE THE ACTIVABLE FRACTION OF EACH IFN SPECIE -! ------------------------------------------------- -! -! -! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} ) -! - CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY) -! -! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated -! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated -! - CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) -! -! -!------------------------------------------------------------------------------- -! -! -!* 5. COMPUTE THE HETEROGENEOUS NUCLEATION OF INSOLUBLE IFN -! ----------------------------------------------------- -! -! -! - DO JMOD_IFN = 1,NMOD_IFN ! IFN modes - ZZX(:)=0. - DO JSPECIE = 1, NSPECIE ! Each IFN mode is mixed with DM1, DM2, BC, O - ZZX(:)=ZZX(:)+XFRAC(JSPECIE,JMOD_IFN)*(ZIFT(:,JMOD_IFN)+ZINT(:,JMOD_IFN))* & - Z_FRAC_ACT(:,JSPECIE) - END DO -! Now : ZZX(:) = number conc. of activable AP. -! Activated AP at this time step = activable AP - already activated AP - ZZX(:) = MIN( ZIFT(:,JMOD_IFN), MAX( (ZZX(:)-ZINT(:,JMOD_IFN)),0.0 )) - ZZW(:) = MIN( XMNU0*ZZX(:), ZRVT(:) ) -! Now : ZZX(:) = number conc. of AP activated at this time step (#/kg) from IFN mode JMOD_IFN -! Now : ZZW(:) = mmr of ice nucleated at this time step (kg/kg) from IFN mode JMOD_IFN -! -! Update the concentrations and MMR -! - ZW(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. ) - PIFT(:,:,:,JMOD_IFN) = PIFT(:,:,:,JMOD_IFN) - ZW(:,:,:) - PINT(:,:,:,JMOD_IFN) = PINT(:,:,:,JMOD_IFN) + ZW(:,:,:) -! - P_CI_HIND(:,:,:) = P_CI_HIND(:,:,:) + ZW(:,:,:) - PCIT(:,:,:) = PCIT(:,:,:) + ZW(:,:,:) -! - ZW(:,:,:) = UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. ) - P_RI_HIND(:,:,:) = P_RI_HIND(:,:,:) + ZW(:,:,:) - PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:) - PRIT(:,:,:) = PRIT(:,:,:) + ZW(:,:,:) -! - P_TH_HIND(:,:,:) = UNPACK( ZZW(:)*ZLSFACT(:), MASK=GNEGT(:,:,:), FIELD=0. ) - PTHT(:,:,:) = PTHT(:,:,:) + P_TH_HIND(:,:,:) - END DO -! -! -!------------------------------------------------------------------------------- -! -! -!* 6. COMPUTE THE HETEROGENEOUS NUCLEATION OF COATED IFN -! -------------------------------------------------- -! -! -! Heterogeneous nucleation by immersion of the activated CCN -! Currently, we represent coated IFN as a pure aerosol type (NIND_SPECIE) -! -! - DO JMOD_IMM = 1,NMOD_IMM ! Coated IFN modes - JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode - IF (JMOD_CCN .GT. 0) THEN -! -! OLD LIMA : Compute the appropriate mean diameter and sigma -! XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. ) -! XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) ) -! - ZZW(:) = MIN( ZCCT(:) , ZNAT(:,JMOD_CCN) ) - ZZX(:)= ( ZZW(:)+ZNIT(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE) -! Now : ZZX(:) = number of activable AP. -! Activated AP at this time step = activable AP - already activated AP - ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIT(:,JMOD_IMM)),0.0 ) ) - ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVT(:) ) -! -! Update the concentrations and MMR -! - ZW(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. ) - PNIT(:,:,:,JMOD_IMM) = PNIT(:,:,:,JMOD_IMM) + ZW(:,:,:) - PNAT(:,:,:,JMOD_CCN) = PNAT(:,:,:,JMOD_CCN) - ZW(:,:,:) -! - P_CC_HINC(:,:,:) = P_CC_HINC(:,:,:) - ZW(:,:,:) - PCCT(:,:,:) = PCCT(:,:,:) - ZW(:,:,:) - PCIT(:,:,:) = PCIT(:,:,:) + ZW(:,:,:) -! - ZW(:,:,:) = UNPACK( ZZY(:), MASK=GNEGT(:,:,:), FIELD=0. ) - P_RC_HINC(:,:,:) = P_RC_HINC(:,:,:) - ZW(:,:,:) - PRCT(:,:,:) = PRCT(:,:,:) - ZW(:,:,:) - PRIT(:,:,:) = PRIT(:,:,:) + ZW(:,:,:) - PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZY(:)*ZLSFACT(:), MASK=GNEGT(:,:,:), FIELD=0. ) - END IF - END DO -! -!------------------------------------------------------------------------------- -! -! -!* 7. CLEAN -! ----- -! -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRRT) - DEALLOCATE(ZRIT) - DEALLOCATE(ZRST) - DEALLOCATE(ZRGT) - DEALLOCATE(ZCCT) - DEALLOCATE(ZNAT) - DEALLOCATE(ZIFT) - DEALLOCATE(ZINT) - DEALLOCATE(ZNIT) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) - DEALLOCATE(ZLSFACT) - DEALLOCATE(ZLVFACT) - DEALLOCATE(ZSI) - DEALLOCATE(ZTCELSIUS) - DEALLOCATE(ZZT_SI0_BC) - DEALLOCATE(ZLBDAC) - DEALLOCATE(ZSI0) - DEALLOCATE(Z_FRAC_ACT) - DEALLOCATE(ZSW) - DEALLOCATE(ZZW) - DEALLOCATE(ZZX) - DEALLOCATE(ZZY) - DEALLOCATE(ZSI_W) -! -END IF ! INEGT > 0 -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION diff --git a/src/arome/micro/lima_phillips_integ.F90 b/src/arome/micro/lima_phillips_integ.F90 deleted file mode 100644 index 3af3048c6be9e97c9e7f21db12995e446ec2c802..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_phillips_integ.F90 +++ /dev/null @@ -1,163 +0,0 @@ -! ############################### - MODULE MODI_LIMA_PHILLIPS_INTEG -! ############################### -! -INTERFACE - SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) -! -REAL, DIMENSION(:), INTENT(IN) :: ZZT -REAL, DIMENSION(:), INTENT(IN) :: ZSI -REAL, DIMENSION(:,:), INTENT(IN) :: ZSI0 -REAL, DIMENSION(:), INTENT(IN) :: ZSW -REAL, DIMENSION(:), INTENT(IN) :: ZZY -REAL, DIMENSION(:,:), INTENT(INOUT) :: Z_FRAC_ACT -! -END SUBROUTINE LIMA_PHILLIPS_INTEG -END INTERFACE -END MODULE MODI_LIMA_PHILLIPS_INTEG -! -! ###################################################################### - SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) -! ###################################################################### -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the fraction of each aerosol -!! species (DM1, DM2, BC, O) that may be activated, following Phillips (2008) -!! -!! -!! REFERENCE -!! --------- -!! -!! Phillips et al., 2008: An empirical parameterization of heterogeneous -!! ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT, XPI -USE MODD_PARAM_LIMA, ONLY : XMDIAM_IFN, XSIGMA_IFN, NSPECIE, XFRAC_REF, & - XH, XAREA1, XGAMMA, XABSCISS, XWEIGHT, NDIAM, & - XT0, XDT0, XDSI0, XSW0, XTX1, XTX2 -USE MODI_LIMA_FUNCTIONS, ONLY : DELTA, DELTA_VEC -USE MODI_GAMMA_INC -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, DIMENSION(:), INTENT(IN) :: ZZT -REAL, DIMENSION(:), INTENT(IN) :: ZSI -REAL, DIMENSION(:,:), INTENT(IN) :: ZSI0 -REAL, DIMENSION(:), INTENT(IN) :: ZSW -REAL, DIMENSION(:), INTENT(IN) :: ZZY -REAL, DIMENSION(:,:), INTENT(INOUT) :: Z_FRAC_ACT -! -!* 0.2 Declarations of local variables : -! -INTEGER :: JSPECIE, JL, JL2 -REAL :: XB -! -REAL, DIMENSION(:), ALLOCATABLE :: ZZX, & ! Work array - ZFACTOR, & - ZSUBSAT, & - ZEMBRYO -! -LOGICAL, DIMENSION(:), ALLOCATABLE :: GINTEG ! Mask to integrate over the - ! AP size spectrum -! -! -!------------------------------------------------------------------------------- -! -! -DO JSPECIE = 1, NSPECIE ! = 4 = {DM1, DM2, BC, O} respectively -! - ALLOCATE(ZZX (SIZE(ZZT)) ) ; ZZX(:) = 0.0 - ALLOCATE(ZFACTOR (SIZE(ZZT)) ) - ALLOCATE(ZSUBSAT (SIZE(ZZT)) ) - ALLOCATE(ZEMBRYO (SIZE(ZZT)) ) - ALLOCATE(GINTEG (SIZE(ZZT)) ) - -! Compute log in advance for efficiency - XB = LOG(0.1E-6/XMDIAM_IFN(JSPECIE))/(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))) -! ZFACTOR = f_c - ZFACTOR(:) = DELTA(1.,XH(JSPECIE),ZZT(:),XT0(JSPECIE),XT0(JSPECIE)+XDT0(JSPECIE)) & - * DELTA_VEC(0.,1.,ZSI(:),ZSI0(:,JSPECIE),ZSI0(:,JSPECIE)+XDSI0(JSPECIE)) / XGAMMA -! ZSUBSAT = H_X - ZSUBSAT(:) = MIN(ZFACTOR(:)+(1.0-ZFACTOR(:))*DELTA(0.,1.,ZSW(:),XSW0,1.) , 1.0) -! ZEMBRYO = µ_X/(pi*(D_X)**2) = A - ZEMBRYO(:) = ZSUBSAT(:)*DELTA(1.,0.,ZZT(:),XTX1(JSPECIE),XTX2(JSPECIE)) & - * XFRAC_REF(JSPECIE)*ZZY(:)/XAREA1(JSPECIE) -! -! For T warmer than -35°C, the integration is approximated with µ_X << 1 -! Error function : GAMMA_INC(1/2, x**2) = ERF(x) !!! for x>=0 !!! -! -! WHERE (ZZT(:)>(XTT-35.) .AND. ZEMBRYO(:)>1.0E-8) -! ZZX(:) = ZZX(:) + ZEMBRYO(:) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & -! * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2) & -! * (1.0+GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) -! END WHERE - - DO JL = 1, SIZE(ZZT) - IF (ZZT(JL)>(XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN - ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & - * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2) & - * (1.0+SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) - END IF - ENDDO - -! -! For other T, integration between 0 and infinity is made with a Gauss-Hermite -! quadrature method and integration between 0 and 0.1 uses e(x) ~ 1+x+O(x**2) -! Beware : here, weights are normalized : XWEIGHT = wi/sqrt(pi) -! - GINTEG(:) = ZZT(:)<=(XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8 -! - DO JL = 1, NDIAM - DO JL2 = 1, SIZE(GINTEG) - IF (GINTEG(JL2)) THEN - ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*XPI*(XMDIAM_IFN(JSPECIE))**2 & - * EXP(2.0*SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE)) * XABSCISS(JL)) ) - END IF - ENDDO - ENDDO -! -! DO JL2 = 1, SIZE(GINTEG) -! IF (GINTEG(JL2)) THEN -! ZZX(JL2) = ZZX(JL2) + 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 & -! * (1.0-( 1.0-GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) & -! * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2) ) -! END IF -! ENDDO - DO JL2 = 1, SIZE(GINTEG) - IF (GINTEG(JL2)) THEN - ZZX(JL2) = 1 + ZZX(JL2) & - - ( 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2) & - * ( 1.0-SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) ) - END IF - ENDDO -! - Z_FRAC_ACT(:,JSPECIE)=ZZX(:) -! - DEALLOCATE(ZZX) - DEALLOCATE(ZFACTOR) - DEALLOCATE(ZSUBSAT) - DEALLOCATE(ZEMBRYO) - DEALLOCATE(GINTEG) -! -ENDDO -! -END SUBROUTINE LIMA_PHILLIPS_INTEG diff --git a/src/arome/micro/lima_phillips_ref_spectrum.F90 b/src/arome/micro/lima_phillips_ref_spectrum.F90 deleted file mode 100644 index a49a998bd0cacca500e97c68598e35b8af3b9c8e..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_phillips_ref_spectrum.F90 +++ /dev/null @@ -1,138 +0,0 @@ -! ###################################### - MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM -! ###################################### -! -INTERFACE - SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY) -! -REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: ZSI ! Saturation over ice -REAL, DIMENSION(:), INTENT(IN) :: ZSI_W ! Saturation over ice at water sat. -REAL, DIMENSION(:), INTENT(INOUT) :: ZZY ! Reference activity spectrum -! -END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM -END INTERFACE -END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM -! -! ###################################################################### - SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY) -! ###################################################################### -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the reference activation spectrum -!! described by Phillips (2008) -!! -!! -!! REFERENCE -!! --------- -!! -!! Phillips et al., 2008: An empirical parameterization of heterogeneous -!! ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XGAMMA, XRHO_CFDC -USE MODI_LIMA_FUNCTIONS, ONLY : RECT, DELTA -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: ZSI ! Saturation over ice -REAL, DIMENSION(:), INTENT(IN) :: ZSI_W ! Saturation over ice at water sat. -REAL, DIMENSION(:), INTENT(INOUT) :: ZZY ! Reference activity spectrum -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(:), ALLOCATABLE :: ZMAX, & - ZMOY, & - ZZY1, & - ZZY2, & - Z1, & - Z2, & - ZSI2 -! -REAL :: XPSI -! -!------------------------------------------------------------------------------- -! -ALLOCATE(ZMAX(SIZE(ZZT))) ; ZMAX(:)= 0.0 -ALLOCATE(ZMOY(SIZE(ZZT))) ; ZMOY(:)= 0.0 -ALLOCATE(ZZY1(SIZE(ZZT))) ; ZZY1(:)= 0.0 -ALLOCATE(ZZY2(SIZE(ZZT))) ; ZZY2(:)= 0.0 -ALLOCATE(Z1(SIZE(ZZT))) ; Z1(:) = 0.0 -ALLOCATE(Z2(SIZE(ZZT))) ; Z2(:) = 0.0 -ALLOCATE(ZSI2(SIZE(ZZT))) ; ZSI2(:)= 0.0 -! -ZZY(:) = 0.0 -! -XPSI = 0.058707*XGAMMA/XRHO_CFDC -! -ZSI2(:)=min(ZSI(:),ZSI_W(:)) -! -WHERE( ZSI(:)>1.0 ) -! -!* T <= -35 C -! - ZZY(:) =1000.*XGAMMA/XRHO_CFDC & - * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3 & - * RECT(1.,0.,ZZT(:),(XTT-80.),(XTT-35.)) -! -!* -35 C < T <= -25 C (in Appendix A) -! - ZZY1(:) =1000.*XGAMMA/XRHO_CFDC & - * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3 - ZZY2(:) =1000.*XPSI & - * EXP(12.96*(MIN(ZSI2(:),7.)-1.0)-0.639) -! -!* -35 C < T <= -30 C -! - ZMAX(:) =1000.*XGAMMA/XRHO_CFDC & - * ( EXP(12.96*(ZSI_W(:)-1.1)) )**0.3 & - * RECT(1.,0.,ZZT(:),(XTT-35.),(XTT-30.)) -! -!* -30 C < T <= -25 C -! - ZMAX(:) = ZMAX(:) +1000.*XPSI & - * EXP( 12.96*(ZSI_W(:)-1.0)-0.639 ) & - * RECT(1.,0.,ZZT(:),(XTT-30.),(XTT-25.)) - Z1(:) = MIN(ZZY1(:), ZMAX(:)) - Z2(:) = MIN(ZZY2(:), ZMAX(:)) -! -!* T > -25 C -! - ZZY(:) = ZZY(:) + 1000.*XPSI & - * EXP( 12.96*(MIN(ZSI2(:),7.)-1.0)-0.639 ) & - * RECT(1.,0.,ZZT(:),(XTT-25.),(XTT-2.)) -END WHERE -! -WHERE (Z2(:)>0.0 .AND. Z1(:)>0.0) - ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(XTT-35.),(XTT-25.)) - ZZY(:) = ZZY(:) + MIN(ZMOY(:),ZMAX(:)) ! N_{IN,1,*} -END WHERE -! -DEALLOCATE(ZMAX) -DEALLOCATE(ZMOY) -DEALLOCATE(ZZY1) -DEALLOCATE(ZZY2) -DEALLOCATE(Z1) -DEALLOCATE(Z2) -! -END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM diff --git a/src/arome/micro/lima_rain_accr_snow.F90 b/src/arome/micro/lima_rain_accr_snow.F90 deleted file mode 100644 index b6c2db3d750c8bbe2ba57de7b344572e3027e8aa..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_rain_accr_snow.F90 +++ /dev/null @@ -1,315 +0,0 @@ -! ################################# - MODULE MODI_LIMA_RAIN_ACCR_SNOW -! ################################# -! -INTERFACE - SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, & - PRRT, PCRT, PRST, PLBDR, PLBDS, PLVFACT, PLSFACT, & - P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & - PA_TH, PA_RR, PA_CR, PA_RS, PA_RG ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_ACC -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -END SUBROUTINE LIMA_RAIN_ACCR_SNOW -END INTERFACE -END MODULE MODI_LIMA_RAIN_ACCR_SNOW -! -! ###################################################################### - SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, & - PRRT, PCRT, PRST, PLBDR, PLBDS, PLVFACT, PLSFACT, & - P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & - PA_TH, PA_RR, PA_CR, PA_RS, PA_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT -USE MODD_PARAM_LIMA_COLD, ONLY : XBS, XCXS -USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S, & - NACCLBDAR, XACCINTP1R, XACCINTP2R, & - XKER_RACCSS, XKER_RACCS, XKER_SACCRG, & - XFRACCSS, XLBRACCS1, XLBRACCS2, XLBRACCS3, & - XFSACCRG, XLBSACCR1, XLBSACCR2, XLBSACCR3 -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Cloud water C. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_ACC -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -!* 0.2 Declarations of local variables : -! -LOGICAL, DIMENSION(SIZE(PRRT)) :: GACC -! -REAL, DIMENSION(SIZE(PRRT)) :: Z1, Z2, Z3, Z4 -REAL, DIMENSION(SIZE(PRRT)) :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5 -! -INTEGER, DIMENSION(SIZE(PRRT)) :: IVEC1,IVEC2 ! Vectors of indices -REAL, DIMENSION(SIZE(PRRT)) :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors -! -!------------------------------------------------------------------------------- -! -! -P_TH_ACC(:) = 0. -P_RR_ACC(:) = 0. -P_CR_ACC(:) = 0. -P_RS_ACC(:) = 0. -P_RG_ACC(:) = 0. -! -ZZW1(:) = 0. -ZZW2(:) = 0. -ZZW3(:) = 0. -ZZW4(:) = 0. -ZZW5(:) = 0. -! -IVEC1(:) = 0 -IVEC2(:) = 0 -ZVEC1(:) = 0. -ZVEC2(:) = 0. -ZVEC3(:) = 0. -! -!* Cloud droplet riming of the aggregates -! ------------------------------------------- -! -! -GACC(:) = .False. -GACC(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:) -! -WHERE( GACC ) -! -! 1.3.1 select the (ZLBDAS,ZLBDAR) couplet -! - ZVEC1(:) = PLBDS(:) - ZVEC2(:) = PLBDR(:) -! -! 1.3.2 find the next lower indice for the ZLBDAS and for the ZLBDAR -! in the geometrical set of (Lbda_s,Lbda_r) couplet use to -! tabulate the RACCSS-kernel -! - ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001, & - XACCINTP1S * LOG( ZVEC1(:) ) + XACCINTP2S ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) -! - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001, & - XACCINTP1R * LOG( ZVEC2(:) ) + XACCINTP2R ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) ) -! -! 1.3.3 perform the bilinear interpolation of the normalized -! RACCSS-kernel : for small rain drops transformed into snow - ! - Z1(:) = GET_XKER_RACCSS(IVEC1(:)+1,IVEC2(:)+1) - Z2(:) = GET_XKER_RACCSS(IVEC1(:)+1,IVEC2(:) ) - Z3(:) = GET_XKER_RACCSS(IVEC1(:) ,IVEC2(:)+1) - Z4(:) = GET_XKER_RACCSS(IVEC1(:) ,IVEC2(:) ) - ZVEC3(:) = ( Z1(:)* ZVEC2(:) & - - Z2(:)*(ZVEC2(:) - 1.0) ) & - * ZVEC1(:) & - - ( Z3(:)* ZVEC2(:) & - - Z4(:)*(ZVEC2(:) - 1.0) ) & - * (ZVEC1(:) - 1.0) - ZZW1(:) = ZVEC3(:) -! -! 1.3.4b perform the bilinear interpolation of the normalized -! RACCS-kernel : total frozen rain drops -! - Z1(:) = GET_XKER_RACCS(IVEC2(:)+1,IVEC1(:)+1) - Z2(:) = GET_XKER_RACCS(IVEC2(:)+1,IVEC1(:) ) - Z3(:) = GET_XKER_RACCS(IVEC2(:) ,IVEC1(:)+1) - Z4(:) = GET_XKER_RACCS(IVEC2(:) ,IVEC1(:) ) - ZVEC3(:) = ( Z1(:)* ZVEC1(:) & - - Z2(:)*(ZVEC1(:) - 1.0) ) & - * ZVEC2(:) & - - ( Z3(:)* ZVEC1(:) & - - Z4(:)*(ZVEC1(:) - 1.0) ) & - * (ZVEC2(:) - 1.0) - ZZW2(:) = ZVEC3(:) -! -! 1.3.5 perform the bilinear interpolation of the normalized -! SACCRG-kernel : snow transformed into graupel -! - Z1(:) = GET_XKER_SACCRG(IVEC2(:)+1,IVEC1(:)+1) - Z2(:) = GET_XKER_SACCRG(IVEC2(:)+1,IVEC1(:) ) - Z3(:) = GET_XKER_SACCRG(IVEC2(:) ,IVEC1(:)+1) - Z4(:) = GET_XKER_SACCRG(IVEC2(:) ,IVEC1(:) ) - ZVEC3(:) = ( Z1(:)* ZVEC1(:) & - - Z2(:)*(ZVEC1(:) - 1.0) ) & - * ZVEC2(:) & - - ( Z3(:)* ZVEC1(:) & - - Z4(:)*(ZVEC1(:) - 1.0) ) & - * (ZVEC2(:) - 1.0) - ZZW3(:) = ZVEC3(:) -! -! 1.3.4 raindrop accretion on the small sized aggregates -! -! BVIE manque PCRT ??????????????????????????????????? -! ZZW4(:) = & !! coef of RRACCS and RRACCS - ZZW4(:) = PCRT(:) & !! coef of RRACCS and RRACCS - * XFRACCSS *( PLBDS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRACCS1/( PLBDS(:)**2 ) + & - XLBRACCS2/( PLBDS(:) * PLBDR(:) ) + & - XLBRACCS3/( PLBDR(:)**2 ) ) / PLBDR(:)**3 - -! ZRRS(:) = ZRRS(:) - ZZW1(:,4) -! ZRSS(:) = ZRSS(:) + ZZW1(:,4) -! ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS)) -! -! ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 -! -! 1.3.6 raindrop accretion-conversion of the large sized aggregates -! into graupeln -! - ZZW5(:) = XFSACCRG*ZZW3(:) * & ! RSACCRG - ( PLBDS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSACCR1/((PLBDR(:)**2) ) + & - XLBSACCR2/( PLBDR(:) * PLBDS(:) ) + & - XLBSACCR3/( (PLBDS(:)**2)) ) - ! -! P_RR_ACC(:) = - ZZW4(:) * ZZW1(:) ! RRACCSS -! P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:) ! Lambda_r**3 -! P_RS_ACC(:) = - P_RR_ACC(:) - ! -! P_RR_ACC(:) = P_RR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) ) -! P_CR_ACC(:) = P_CR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) ) * PCRT(:)/PRRT(:) ! Lambda_r**3 -! P_RS_ACC(:) = P_RS_ACC(:) - ZZW5(:) -! P_RG_ACC(:) = ( ZZW2(:)-P_RS_ACC(:) ) + ZZW5(:) - ! - P_RR_ACC(:) = - ZZW4(:) * ZZW2(:) - P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:) - P_RS_ACC(:) = ZZW4(:) * ZZW1(:) - ZZW5(:) - P_RG_ACC(:) = ZZW4(:) * ( ZZW2(:) - ZZW1(:) ) + ZZW5(:) - P_TH_ACC(:) = - P_RR_ACC(:) * (PLSFACT(:)-PLVFACT(:)) - ! -END WHERE -! -! -PA_RR(:) = PA_RR(:) + P_RR_ACC(:) -PA_CR(:) = PA_CR(:) + P_CR_ACC(:) -PA_RS(:) = PA_RS(:) + P_RS_ACC(:) -PA_RG(:) = PA_RG(:) + P_RG_ACC(:) -PA_TH(:) = PA_TH(:) + P_TH_ACC(:) -! -!------------------------------------------------------------------------------- -! -CONTAINS - FUNCTION GET_XKER_RACCSS(I1,I2) RESULT(RET) - INTEGER, DIMENSION(:) :: I1 - INTEGER, DIMENSION(:) :: I2 - REAL, DIMENSION(SIZE(I1)) :: RET - ! - INTEGER I - ! - DO I=1,SIZE(I1) - RET(I) = XKER_RACCSS(MAX(MIN(I1(I),SIZE(XKER_RACCSS,1)),1),MAX(MIN(I2(I),SIZE(XKER_RACCSS,2)),1)) - END DO - END FUNCTION GET_XKER_RACCSS -! -!------------------------------------------------------------------------------- -! - FUNCTION GET_XKER_RACCS(I1,I2) RESULT(RET) - INTEGER, DIMENSION(:) :: I1 - INTEGER, DIMENSION(:) :: I2 - REAL, DIMENSION(SIZE(I1)) :: RET - ! - INTEGER I - ! - DO I=1,SIZE(I1) - RET(I) = XKER_RACCS(MAX(MIN(I1(I),SIZE(XKER_RACCS,1)),1),MAX(MIN(I2(I),SIZE(XKER_RACCS,2)),1)) - END DO - END FUNCTION GET_XKER_RACCS -! -!------------------------------------------------------------------------------- -! - FUNCTION GET_XKER_SACCRG(I1,I2) RESULT(RET) - INTEGER, DIMENSION(:) :: I1 - INTEGER, DIMENSION(:) :: I2 - REAL, DIMENSION(SIZE(I1)) :: RET - ! - INTEGER I - ! - DO I=1,SIZE(I1) - RET(I) = XKER_SACCRG(MAX(MIN(I1(I),SIZE(XKER_SACCRG,1)),1),MAX(MIN(I2(I),SIZE(XKER_SACCRG,2)),1)) - END DO - END FUNCTION GET_XKER_SACCRG -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_RAIN_ACCR_SNOW diff --git a/src/arome/micro/lima_rain_evaporation.F90 b/src/arome/micro/lima_rain_evaporation.F90 deleted file mode 100644 index 8ba146e256d9544bd6b8d9b11d04d2efb9e7a9d8..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_rain_evaporation.F90 +++ /dev/null @@ -1,161 +0,0 @@ -! ########################## - MODULE MODI_LIMA_RAIN_EVAPORATION -! ########################## -! -INTERFACE - SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, & - PRVT, PRCT, PRRT, PLBDR, & - P_TH_EVAP, P_RR_EVAP, & - PA_RV, PA_RR, PA_TH, & - PEVAP3D ) -! -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: PLV ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PEVSAT ! -REAL, DIMENSION(:), INTENT(IN) :: PRVSAT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! Lambda(rain) -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -! -REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D ! Rain evap profile -! -END SUBROUTINE LIMA_RAIN_EVAPORATION -END INTERFACE -END MODULE MODI_LIMA_RAIN_EVAPORATION -! ############################################################################# - SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, & - PRVT, PRCT, PRRT, PLBDR, & - P_TH_EVAP, P_RR_EVAP, & - PA_RV, PA_RR, PA_TH, & - PEVAP3D ) -! ############################################################################# -! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the raindrop evaporation -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XRHOLW, XRV -USE MODD_PARAM_LIMA, ONLY : XRTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : X0EVAR, XEX0EVAR, X1EVAR, XEX2EVAR, XEX1EVAR, XTHCO, XDIVA -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: PLV ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PEVSAT ! -REAL, DIMENSION(:), INTENT(IN) :: PRVSAT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! Lambda(rain) -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -! -REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D ! Rain evap profile -! -!* 0.1 Declarations of local variables : -! -! -LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GEVAP -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW1, ZZW2 -! -!------------------------------------------------------------------------------- -! -! -!* 1. PREPARE COMPUTATIONS - PACK -! --------------------------- -! -P_TH_EVAP(:) = 0. -P_RR_EVAP(:) = 0. -! -GEVAP(:) = .FALSE. -GEVAP(:) = LDCOMPUTE(:) .AND. & - PRRT(:)>XRTMIN(3) .AND. & - PRVT(:)<PRVSAT(:) -! -WHERE ( GEVAP ) -! -!------------------------------------------------------------------------------- -! -! -!* 2. compute the evaporation of rain drops -! ---------------------------------------- -! -! - ZZW1(:) = MAX((1.0 - PRVT(:)/PRVSAT(:)),0.0) ! Subsaturation -! -! Compute the function G(T) -! - ZZW2(:) = 1. / ( XRHOLW*((((PLV(:)/PT(:))**2)/(XTHCO*XRV)) + & ! G - (XRV*PT(:))/(XDIVA*PEVSAT(:)))) -! -! Compute the evaporation tendency -! - ZZW2(:) = ZZW2(:) * ZZW1(:) * PRRT(:) * & - (X0EVAR * PLBDR(:)**XEX0EVAR + X1EVAR * PRHODREF(:)**XEX2EVAR * PLBDR(:)**XEX1EVAR) - ZZW2(:) = MAX(ZZW2(:),0.0) -! - P_RR_EVAP(:) = - ZZW2(:) - P_TH_EVAP(:) = P_RR_EVAP(:) * PLVFACT(:) - PEVAP3D(:) = - P_RR_EVAP(:) -! -PA_TH(:) = PA_TH(:) + P_TH_EVAP(:) -PA_RV(:) = PA_RV(:) - P_RR_EVAP(:) -PA_RR(:) = PA_RR(:) + P_RR_EVAP(:) -END WHERE -! -!----------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_RAIN_EVAPORATION diff --git a/src/arome/micro/lima_rain_freezing.F90 b/src/arome/micro/lima_rain_freezing.F90 deleted file mode 100644 index c0e1bd384199fe79f966c45dc58ea22481c3e54b..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_rain_freezing.F90 +++ /dev/null @@ -1,162 +0,0 @@ -! ################################# - MODULE MODI_LIMA_RAIN_FREEZING -! ################################# -! -INTERFACE - SUBROUTINE LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, PLVFACT, PLSFACT, & - PRRT, PCRT, PRIT, PCIT, PLBDR, & - P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & - PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG ) -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -END SUBROUTINE LIMA_RAIN_FREEZING -END INTERFACE -END MODULE MODI_LIMA_RAIN_FREEZING -! -! ###################################################################### - SUBROUTINE LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PT, PLVFACT, PLSFACT, & - PRRT, PCRT, PRIT, PCIT, PLBDR, & - P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & - PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the cold-phase homogeneous -!! freezing of CCN, droplets and drops (T<-35°C) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! C. Barthe * LACy* jan. 2014 add budgets -!! B.Vie 10/2016 Bug zero division -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT -USE MODD_PARAM_LIMA_MIXED, ONLY : XICFRR, XEXICFRR, XRCFRI, XEXRCFRI -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! Reference Exner function -REAL, DIMENSION(:), INTENT(IN) :: PT ! -REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! -! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRRT)) :: ZW1, ZW2 ! work arrays -! -!------------------------------------------------------------------------------- -! -! -!* 1. PRELIMINARY COMPUTATIONS -! ------------------------ -! -! -P_TH_CFRZ(:)=0. -P_RR_CFRZ(:)=0. -P_CR_CFRZ(:)=0. -P_RI_CFRZ(:)=0. -P_CI_CFRZ(:)=0. -! -ZW1(:)=0. -ZW2(:)=0. -! -WHERE( (PRIT(:)>XRTMIN(4)) .AND. (PRRT(:)>XRTMIN(3)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) ) -! - ZW1(:) = XICFRR * PRIT(:) * PCRT(:) & ! RICFRRG - * PLBDR(:)**XEXICFRR & - * PRHODREF(:)**(-XCEXVT-1.0) -! - ZW2(:) = XRCFRI * PCIT(:) * PCRT(:) & ! RRCFRIG - * PLBDR(:)**XEXRCFRI & -!!! BVIE correction RHODREF -! * PRHODREF(:)**(-XCEXVT-2.0) - * PRHODREF(:)**(-XCEXVT-1.0) -! - P_RR_CFRZ(:) = - ZW2(:) - P_CR_CFRZ(:) = - ZW2(:) * (PCRT(:)/PRRT(:)) - P_RI_CFRZ(:) = - ZW1(:) - P_CI_CFRZ(:) = - ZW1(:) * (PCIT(:)/PRIT(:)) - P_TH_CFRZ(:) = - P_RR_CFRZ(:) * (PLSFACT(:)-PLVFACT(:)) -! -END WHERE -! -PA_TH(:) = PA_TH(:) + P_TH_CFRZ(:) -PA_RR(:) = PA_RR(:) + P_RR_CFRZ(:) -PA_CR(:) = PA_CR(:) + P_CR_CFRZ(:) -PA_RI(:) = PA_RI(:) + P_RI_CFRZ(:) -PA_CI(:) = PA_CI(:) + P_CI_CFRZ(:) -PA_RG(:) = PA_RG(:) - P_RR_CFRZ(:) - P_RI_CFRZ(:) -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_RAIN_FREEZING diff --git a/src/arome/micro/lima_tendencies.F90 b/src/arome/micro/lima_tendencies.F90 deleted file mode 100644 index 50b68870b0c2841a0abe1de787f21110b094a67b..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_tendencies.F90 +++ /dev/null @@ -1,634 +0,0 @@ -!############################### -MODULE MODI_LIMA_TENDENCIES -!############################### - INTERFACE - SUBROUTINE LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PRHODREF, PPABST, PTHT, & - PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & - PCCT, PCRT, PCIT, & - P_TH_HONC, P_RC_HONC, P_CC_HONC, & - P_CC_SELF, & - P_RC_AUTO, P_CC_AUTO, P_CR_AUTO, & - P_RC_ACCR, P_CC_ACCR, & - P_CR_SCBU, & - P_TH_EVAP, P_RR_EVAP, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - P_RI_AGGS, P_CI_AGGS, & - P_TH_DEPG, P_RG_DEPG, & - P_TH_BERFI, P_RC_BERFI, & - P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, & - P_RI_HMS, P_CI_HMS, P_RS_HMS, & - P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & - P_RS_CMEL, & - P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & - P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & - P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & - P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & - P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG, & - P_RI_HMG, P_CI_HMG, P_RG_HMG, & - P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, & -!!! Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RG_COHG, & ! conversion of hail into graupel (COHG) : rg, rh -!!! Z_RR_HMLT, Z_CR_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, th - PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR, & - PA_RI, PA_CI, PA_RS, PA_RG, PA_RH, & - PEVAP3D ) -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! Pressure -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Potential temperature -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -REAL, DIMENSION(:), INTENT(IN) :: PRHT ! Mixing ratios (kg/kg) -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Number concentrations (/kg) -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_HONC ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_SELF ! self collection of droplets (SELF) : Nc -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_AUTO ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_ACCR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_AGGS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_AGGS ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI ! Bergeron (BERFI) : rc, ri=-rc, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_RIM ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_HMS ! hallett mossop snow (HMS) : ri, Ni, rs -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_ACC ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_CMEL ! conversion-melting (CMEL) : rs, rg=-rs -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DRYG ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_HMG ! hallett mossop graupel (HMG) : ri, Ni, rg -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_GMLT ! graupel melting (GMLT) : rr, Nr, rg=-rr, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RH -! -REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D -! - END SUBROUTINE LIMA_TENDENCIES - END INTERFACE -END MODULE MODI_LIMA_TENDENCIES -!##################################################################### -! -!##################################################################### -SUBROUTINE LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PEXNREF, PRHODREF, PPABST, PTHT, & - PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & - PCCT, PCRT, PCIT, & - P_TH_HONC, P_RC_HONC, P_CC_HONC, & - P_CC_SELF, & - P_RC_AUTO, P_CC_AUTO, P_CR_AUTO, & - P_RC_ACCR, P_CC_ACCR, & - P_CR_SCBU, & - P_TH_EVAP, P_RR_EVAP, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - P_RI_AGGS, P_CI_AGGS, & - P_TH_DEPG, P_RG_DEPG, & - P_TH_BERFI, P_RC_BERFI, & - P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, & - P_RI_HMS, P_CI_HMS, P_RS_HMS, & - P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & - P_RS_CMEL, & - P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & - P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & - P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & - P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & - P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG, & - P_RI_HMG, P_CI_HMG, P_RG_HMG, & - P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, & -!!! Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RG_COHG, & ! conversion of hail into graupel (COHG) : rg, rh -!!! Z_RR_HMLT, Z_CR_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, th - PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR, & - PA_RI, PA_CI, PA_RS, PA_RG, PA_RH, & - PEVAP3D ) -! ###################################################################### -!! -!! PURPOSE -!! ------- -!! AUTHOR -!! ------ -!! MODIFICATIONS -!! ------------- -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY : XP00, XRD, XRV, XMD, XMV, XCPD, XCPV, XCL, XCI, XLVTT, XLSTT, XTT, & - XALPW, XBETAW, XGAMW, XALPI, XBETAI, XGAMI -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, & - LCOLD_LIMA, LNUCL_LIMA, LSNOW_LIMA, LHAIL_LIMA, LWARM_LIMA, LACTI_LIMA, LRAIN_LIMA -USE MODD_PARAM_LIMA_WARM, ONLY : XLBC, XLBEXC, XLBR, XLBEXR -USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH -USE MODD_PARAM_LIMA_COLD, ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS -! -USE MODI_LIMA_DROPLETS_HOM_FREEZING -USE MODI_LIMA_DROPLETS_SELF_COLLECTION -USE MODI_LIMA_DROPLETS_AUTOCONVERSION -USE MODI_LIMA_DROPLETS_ACCRETION -USE MODI_LIMA_DROPS_SELF_COLLECTION -USE MODI_LIMA_RAIN_EVAPORATION -USE MODI_LIMA_ICE_SNOW_DEPOSITION -USE MODI_LIMA_ICE_AGGREGATION_SNOW -USE MODI_LIMA_GRAUPEL_DEPOSITION -USE MODI_LIMA_BERGERON -USE MODI_LIMA_DROPLETS_RIMING_SNOW -USE MODI_LIMA_RAIN_ACCR_SNOW -USE MODI_LIMA_CONVERSION_MELTING_SNOW -USE MODI_LIMA_RAIN_FREEZING -USE MODI_LIMA_GRAUPEL -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE -LOGICAL, INTENT(IN) :: OCLOSE_OUT -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PEXNREF ! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! -REAL, DIMENSION(:), INTENT(IN) :: PPABST ! Pressure -REAL, DIMENSION(:), INTENT(IN) :: PTHT ! Potential temperature -! -REAL, DIMENSION(:), INTENT(IN) :: PRVT ! -REAL, DIMENSION(:), INTENT(IN) :: PRCT ! -REAL, DIMENSION(:), INTENT(IN) :: PRRT ! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! -REAL, DIMENSION(:), INTENT(IN) :: PRST ! -REAL, DIMENSION(:), INTENT(IN) :: PRGT ! -REAL, DIMENSION(:), INTENT(IN) :: PRHT ! Mixing ratios (kg/kg) -! -REAL, DIMENSION(:), INTENT(IN) :: PCCT ! -REAL, DIMENSION(:), INTENT(IN) :: PCRT ! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Number concentrations (/kg) -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_HONC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_HONC ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_SELF ! self collection of droplets (SELF) : Nc -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_AUTO -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_AUTO ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_ACCR -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_AGGS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_AGGS ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DEPG ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI ! Bergeron (BERFI) : rc, ri=-rc, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_RIM -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_RIM ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_HMS ! hallett mossop snow (HMS) : ri, Ni, rs -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_ACC -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_ACC ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_CMEL ! conversion-melting (CMEL) : rs, rg=-rs -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_WETG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DRYG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_DRYG ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_HMG -REAL, DIMENSION(:), INTENT(INOUT) :: P_RG_HMG ! hallett mossop graupel (HMG) : ri, Ni, rg -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_GMLT -REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_GMLT ! graupel melting (GMLT) : rr, Nr, rg=-rr, th -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CR -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RG -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RH -! -REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D -! -!* 0.2 Declarations of local variables : -! -REAL, DIMENSION(SIZE(PRCT)) :: ZT - -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDC -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDC3 -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDR -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDR3 -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDI -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDS -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDG -REAL, DIMENSION(SIZE(PRCT)) :: ZLBDH - -REAL, DIMENSION(SIZE(PRCT)) :: ZAI -REAL, DIMENSION(SIZE(PRCT)) :: ZKA -REAL, DIMENSION(SIZE(PRCT)) :: ZDV -REAL, DIMENSION(SIZE(PRCT)) :: ZCJ - -REAL, DIMENSION(SIZE(PRCT)) :: ZEPS -REAL, DIMENSION(SIZE(PRCT)) :: ZEVSAT -REAL, DIMENSION(SIZE(PRCT)) :: ZEISAT -REAL, DIMENSION(SIZE(PRCT)) :: ZRVSAT -REAL, DIMENSION(SIZE(PRCT)) :: ZRISAT -! -REAL, DIMENSION(SIZE(PRCT)) :: ZSSI -REAL, DIMENSION(SIZE(PRCT)) :: ZSSIW - -REAL, DIMENSION(SIZE(PRCT)) :: ZLV -REAL, DIMENSION(SIZE(PRCT)) :: ZLS -REAL, DIMENSION(SIZE(PRCT)) :: ZLVFACT -REAL, DIMENSION(SIZE(PRCT)) :: ZLSFACT -! -REAL, DIMENSION(SIZE(PRCT)) :: ZW -! -!------------------------------------------------------------------------------- -! Pre-compute quantities -! -WHERE (LDCOMPUTE(:)) - ZT(:) = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD) -! - ZW(:) = PEXNREF(:)*( XCPD & - +XCPV*PRVT(:) & - +XCL*(PRCT(:)+PRRT(:)) & - +XCI*(PRIT(:)+PRST(:)+PRGT(:)+PRHT(:)) ) -! - ZLV(:) = XLVTT + (XCPV-XCL)*(ZT(:)-XTT) - ZLVFACT(:) = ZLV(:)/ZW(:) ! L_v/(Pi_ref*C_ph) - ZLS(:) = XLSTT + (XCPV-XCI)*(ZT(:)-XTT) - ZLSFACT(:) = ZLS(:)/ZW(:) ! L_s/(Pi_ref*C_ph) -! - ZEVSAT(:) = EXP( XALPW - XBETAW/ZT(:) - XGAMW*ALOG(ZT(:) ) ) - ZEISAT(:) = EXP( XALPI - XBETAI/ZT(:) - XGAMI*ALOG(ZT(:) ) ) - ! - ZEPS= XMV / XMD - ZRVSAT(:) = ZEPS * ZEVSAT(:) / (PPABST(:) - ZEVSAT(:)) - ZRISAT(:) = ZEPS * ZEISAT(:) / (PPABST(:) - ZEISAT(:)) - ! - ZSSI(:) = PRVT(:)/ZRISAT(:) - 1.0 ! Si = rv/rsi - 1 - ZSSIW(:) = ZRVSAT(:)/ZRISAT(:) - 1.0 ! Siw = rsw/rsi - 1 -! - ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZT(:) - XTT ) -! - ZDV(:) = 0.211E-4 * (ZT(:)/XTT)**1.94 * (XP00/PPABST(:)) -! - ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZT(:)**2) & - + ( XRV*ZT(:) ) / (ZDV(:)*ZEISAT(:)) -! - ZCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZT(:)-XTT) ) -! -END WHERE -! -! -ZLBDC(:) = 1.E10 -ZLBDC3(:) = 1.E30 -WHERE (PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:)) - ZLBDC3(:) = XLBC*PCCT(:) / PRCT(:) - ZLBDC(:) = ZLBDC3(:)**XLBEXC -END WHERE -ZLBDR(:) = 1.E10 -ZLBDR3(:) = 1.E30 -WHERE (PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:)) - ZLBDR3(:) = XLBR*PCRT(:) / PRRT(:) - ZLBDR(:) = ZLBDR3(:)**XLBEXR -END WHERE -ZLBDI(:) = 1.E10 -WHERE (PRIT(:)>XRTMIN(4) .AND. PCIT(:)>XCTMIN(4) .AND. LDCOMPUTE(:)) - ZLBDI(:) = ( XLBI*PCIT(:) / PRIT(:) )**XLBEXI -END WHERE -ZLBDS(:) = 1.E10 -WHERE (PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) ) - ZLBDS(:) = XLBS*( PRHODREF(:)*PRST(:) )**XLBEXS -END WHERE -ZLBDG(:) = 1.E10 -WHERE (PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) ) - ZLBDG(:) = XLBG*( PRHODREF(:)*PRGT(:) )**XLBEXG -END WHERE -ZLBDH(:) = 1.E10 -WHERE (PRHT(:)>XRTMIN(7) .AND. LDCOMPUTE(:) ) - ZLBDH(:) = XLBH*( PRHODREF(:)*PRHT(:) )**XLBEXH -END WHERE -! -!------------------------------------------------------------------------------- -! Call microphysical processes -! -IF (LCOLD_LIMA .AND. LWARM_LIMA) THEN - CALL LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - ZT, ZLVFACT, ZLSFACT, & - PRCT, PCCT, ZLBDC, & - P_TH_HONC, P_RC_HONC, P_CC_HONC, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI ) -END IF -! -IF (LWARM_LIMA) THEN - CALL LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCCT, ZLBDC3, & - P_CC_SELF, & - PA_CC ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, ZLBDC, ZLBDR, & - P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,& - PA_RC, PA_CC, PA_RR, PA_CR ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PRCT, PRRT, PCCT, PCRT, & - ZLBDC, ZLBDC3, ZLBDR, ZLBDR3, & - P_RC_ACCR, P_CC_ACCR, & - PA_RC, PA_CC, PA_RR ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, & - PCRT, ZLBDR, ZLBDR3, & - P_CR_SCBU, & - PA_CR ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN - CALL LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT, & - PRVT, PRCT, PRRT, ZLBDR, & - P_TH_EVAP, P_RR_EVAP, & - PA_RV, PA_RR, PA_TH, & - PEVAP3D ) -END IF -! -IF (LCOLD_LIMA .AND. LSNOW_LIMA) THEN - ! - ! Includes vapour deposition on snow, ice -> snow and snow -> ice exchanges - ! - CALL LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT, & - PRIT, PRST, PCIT, ZLBDI, ZLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - PA_TH, PA_RV, PA_RI, PA_CI, PA_RS ) -END IF -! -IF (LCOLD_LIMA .AND. LSNOW_LIMA) THEN - CALL LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - ZT, & - PRIT, PRST, PCIT, ZLBDI, ZLBDS, & - P_RI_AGGS, P_CI_AGGS, & - PA_RI, PA_CI, PA_RS ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN - CALL LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRGT, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, & - P_TH_DEPG, P_RG_DEPG, & - PA_TH, PA_RV, PA_RG ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN - CALL LIMA_BERGERON (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRCT, PRIT, PCIT, ZLBDI, & - ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN - ! - ! Graupel production as tendency (or should be tendency + instant to stick to the previous version ?) - ! Includes the Hallett Mossop process for riming of droplets by snow (HMS) - ! - CALL LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, ZT, & - PRCT, PCCT, PRST, ZLBDC, ZLBDS, ZLVFACT, ZLSFACT, & - P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, & - P_RI_HMS, P_CI_HMS, P_RS_HMS, & - PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN - CALL LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, ZT, & - PRRT, PCRT, PRST, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT, & - P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & - PA_TH, PA_RR, PA_CR, PA_RS, PA_RG ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN - ! - ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! - ! Some thermodynamical computations inside, to externalize ? - ! - CALL LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ, & - PRVT, PRST, ZLBDS, & - P_RS_CMEL, & - PA_RS, PA_RG ) -END IF -! -IF (LWARM_LIMA .AND. LRAIN_LIMA .AND. LCOLD_LIMA ) THEN - CALL LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, ZT, ZLVFACT, ZLSFACT, & - PRRT, PCRT, PRIT, PCIT, ZLBDR, & - P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & - PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN - ! - ! Melting of graupel should account for collected droplets and drops where T>0C, but does not ! - ! Collection and water shedding should also happen where T>0C, but do not ! - ! Hail production as tendency (should be instant to stick to the previous version ?) - ! Includes Hallett-Mossop process for riming of droplets by graupel (HMG) - ! Some thermodynamical computations inside, to externalize ? - ! - CALL LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, & - PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ, & - PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - ZLBDC, ZLBDR, ZLBDS, ZLBDG, & - ZLVFACT, ZLSFACT, & - P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & - P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & - P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & - P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG, & - P_RI_HMG, P_CI_HMG, P_RG_HMG, & - P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, & - PA_TH, PA_RC, PA_CC, PA_RR, PA_CR, & - PA_RI, PA_CI, PA_RS, PA_RG, PA_RH ) -END IF -! -IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LHAIL_LIMA) THEN -! CALL LIMA_HAIL_GROWTH - -! CALL LIMA_HAIL_CONVERSION - -! CALL LIMA_HAIL_MELTING -END IF - ! -END SUBROUTINE LIMA_TENDENCIES diff --git a/src/arome/micro/modd_param_lima.F90 b/src/arome/micro/modd_param_lima.F90 deleted file mode 100644 index bc29ea02e4bbe22e67b231f9afc9ae197b75cbb7..0000000000000000000000000000000000000000 --- a/src/arome/micro/modd_param_lima.F90 +++ /dev/null @@ -1,185 +0,0 @@ -! ###################### - MODULE MODD_PARAM_LIMA -! ###################### -! -!!**** *MODD_PARAM_LIMA* - declaration of the control parameters -!! for use in the LIMA scheme. -!! -!! PURPOSE -!! ------- -!! The purpose of this declarative module is to declare the microphysical -!! constants. This includes the descriptive parameters for the raindrop -!! and the parameters relevant of the dimensional distributions. -!! -!! -!! -!!** IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -USE MODD_PARAMETERS, ONLY : JPLIMACCNMAX, JPLIMAIFNMAX -! -IMPLICIT NONE -! -LOGICAL, SAVE :: LLIMA_DIAG ! Compute diagnostics for concentration /m3 -LOGICAL, SAVE :: LPTSPLIT ! time-splitting technique by S. Riette -! -!* 1. COLD SCHEME -! ----------- -! -! 1.1 Cold scheme configuration -! -LOGICAL, SAVE :: LCOLD_LIMA ! TRUE to enable the cold scheme -LOGICAL, SAVE :: LNUCL_LIMA ! TRUE to enable ice nucleation -LOGICAL, SAVE :: LSEDI_LIMA ! TRUE to enable pristine ice sedimentation -LOGICAL, SAVE :: LHHONI_LIMA ! TRUE to enable freezing of haze particules -LOGICAL, SAVE :: LSNOW_LIMA ! TRUE to enable snow and graupel -LOGICAL, SAVE :: LHAIL_LIMA ! TRUE to enable hail -LOGICAL, SAVE :: LMEYERS_LIMA ! TRUE to use Meyers nucleation -! -! 1.2 IFN initialisation -! -INTEGER, SAVE :: NMOD_IFN ! Number of IFN modes -REAL, DIMENSION(JPLIMAIFNMAX), SAVE :: XIFN_CONC ! Ref. concentration of IFN(#/L) -LOGICAL, SAVE :: LIFN_HOM ! True for z-homogeneous IFN concentrations -CHARACTER(LEN=8), SAVE :: CIFN_SPECIES ! Internal mixing species definitions -CHARACTER(LEN=8), SAVE :: CINT_MIXING ! Internal mixing type selection (pure DM1 ...) -INTEGER, SAVE :: NMOD_IMM ! Number of CCN modes acting by immersion -INTEGER, SAVE :: NIND_SPECIE ! CCN acting by immersion are considered pure - ! IFN of either DM = 1, BC = 2 or O = 3 -INTEGER, DIMENSION(:), SAVE, ALLOCATABLE :: NIMM ! Link between CCN and IMM modes -INTEGER, DIMENSION(:), SAVE, ALLOCATABLE :: NINDICE_CCN_IMM ! ?????????? -INTEGER, SAVE :: NSPECIE ! Internal mixing number of species -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XMDIAM_IFN ! Mean diameter of IFN modes -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XSIGMA_IFN ! Sigma of IFN modes -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XRHO_IFN ! Density of IFN modes -REAL, DIMENSION(:,:), SAVE, ALLOCATABLE :: XFRAC ! Composition of each IFN mode -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XFRAC_REF ! AP compostion in Phillips 08 -! -! 1.3 Ice characteristics -! -CHARACTER(LEN=4), SAVE :: CPRISTINE_ICE_LIMA ! Pristine type PLAT, COLU or BURO -CHARACTER(LEN=4), SAVE :: CHEVRIMED_ICE_LIMA ! Heavily rimed type GRAU or HAIL -REAL,SAVE :: XALPHAI,XNUI ! Pristine ice distribution parameters -REAL,SAVE :: XALPHAS,XNUS ! Snow/aggregate distribution parameters -REAL,SAVE :: XALPHAG,XNUG ! Graupel distribution parameters -! -! 1.4 Phillips (2013) nucleation parameterization -! -INTEGER, SAVE :: NPHILLIPS ! =8 for Phillips08, =13 for Phillips13 -! -REAL, DIMENSION(4), SAVE :: XT0 ! Threshold of T in H_X for X={DM1,DM2,BC,O} [K] -REAL, DIMENSION(4), SAVE :: XDT0 ! Range in T for transition of H_X near XT0 [K] -REAL, DIMENSION(4), SAVE :: XDSI0 ! Range in Si for transition of H_X near XSI0 -REAL, SAVE :: XSW0 ! Threshold of Sw in H_X -REAL, SAVE :: XRHO_CFDC ! Air density at which CFDC data were reported [kg m**3] -REAL, DIMENSION(4), SAVE :: XH ! Fraction<<1 of aerosol for X={DM,BC,O} -REAL, DIMENSION(4), SAVE :: XAREA1 ! Total surface of all aerosols in group X with - ! diameters between 0.1 and 1 µm, for X={DM1,DM2,BC,O} [m**2 kg**-1] -REAL, SAVE :: XGAMMA ! Factor boosting IN concentration due to - ! bulk-liquid modes -! -REAL, DIMENSION(4), SAVE :: XTX1 ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K] -REAL, DIMENSION(4), SAVE :: XTX2 ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K] -! -REAL,DIMENSION(:), SAVE, ALLOCATABLE :: XABSCISS, XWEIGHT ! Gauss quadrature method -INTEGER, SAVE :: NDIAM ! Gauss quadrature accuracy -! -! 1.5 Meyers (1992) nucleation parameterization -! -REAL,SAVE :: XFACTNUC_DEP,XFACTNUC_CON ! Amplification factor for IN conc. - ! DEP refers to DEPosition mode - ! CON refers to CONtact mode -! -!------------------------------------------------------------------------------- -! -! -!* 2. WARM SCHEME -! ----------- -! -! 2.1 Warm scheme configuration -! -LOGICAL, SAVE :: LWARM_LIMA ! TRUE to enable the warm scheme -LOGICAL, SAVE :: LACTI_LIMA ! TRUE to enable CCN activation -LOGICAL, SAVE :: LRAIN_LIMA ! TRUE to enable the formation of rain -LOGICAL, SAVE :: LSEDC_LIMA ! TRUE to enable the droplet sedimentation -LOGICAL, SAVE :: LACTIT_LIMA ! TRUE to enable the usage of dT/dt in CCN activation -! -! 2.2 CCN initialisation -! -INTEGER, SAVE :: NMOD_CCN ! Number of CCN modes -REAL, DIMENSION(JPLIMACCNMAX), SAVE :: XCCN_CONC ! CCN conc. (#/cm3) -LOGICAL, SAVE :: LCCN_HOM ! True for z-homogeneous CCN concentrations -CHARACTER(LEN=8),SAVE :: CCCN_MODES ! CCN modes characteristics (Jungfraujoch ...) -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XR_MEAN_CCN ! Mean radius of CCN modes -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XLOGSIG_CCN ! Log of geometric dispersion of the CCN modes -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XRHO_CCN ! Density of the CCN modes -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XKHEN_MULTI ! Parameters defining the CCN activation -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XMUHEN_MULTI ! spectra for a multimodal aerosol distribution -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XBETAHEN_MULTI ! spectra for a multimodal aerosol distribution -REAL, DIMENSION(:,:,:) ,SAVE, ALLOCATABLE :: XCONC_CCN_TOT !* Total aerosol number concentration -REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XLIMIT_FACTOR !* compute CHEN ???????????? -! -! 2.3 Water particles characteristics -! -REAL,SAVE :: XALPHAR,XNUR ! Raindrop distribution parameters -REAL,SAVE :: XALPHAC,XNUC ! Cloud droplet distribution parameters -! -! 2.4 CCN activation -! -CHARACTER(LEN=3),SAVE :: HPARAM_CCN = 'CPB' ! Parameterization of the CCN activation -CHARACTER(LEN=3),SAVE :: HINI_CCN ! Initialization type of CCN activation -CHARACTER(LEN=1), DIMENSION (JPLIMACCNMAX),SAVE :: HTYPE_CCN ! 'M' or 'C' CCN type -REAL,SAVE :: XFSOLUB_CCN ! Fractionnal solubility of the CCN -REAL,SAVE :: XACTEMP_CCN ! Expected temperature of CCN activation -REAL,SAVE ::XAERDIFF, XAERHEIGHT ! For the vertical gradient of aerosol distribution -! -!------------------------------------------------------------------------------- -! -! -!* 3. BELOW CLOUD SCAVENGING -! ---------------------- -! -LOGICAL, SAVE :: LSCAV ! TRUE for aerosol scavenging by precipitations -LOGICAL, SAVE :: LAERO_MASS ! TRUE to compute the total aerosol mass scavenging rate -! -INTEGER :: NDIAMR = 20 ! Max Number of droplet for quadrature method -INTEGER :: NDIAMP = 20 ! Max Number of aerosol particle for quadrature method -! -REAL, SAVE :: XT0SCAV = 293.15 ! [K] -REAL, SAVE :: XTREF = 273.15 ! [K] -REAL, SAVE :: XNDO = 8.*1.0E6 ! [/m**4] -! -!------------------------------------------------------------------------------- -! -! -!* 4. ATMOSPHERIC & OTHER PARAMETERS -! ------------------------------ -! -REAL, SAVE :: XMUA0 = 1.711E-05 ![Pa.s] Air Viscosity at T=273.15K -REAL, SAVE :: XT_SUTH_A = 110.4 ![K] Sutherland Temperature for Air -REAL, SAVE :: XMFPA0 = 6.6E-08 ![m] Mean Free Path of Air under standard conditions -! -REAL, SAVE :: XVISCW = 1.0E-3 ![Pa.s] water viscosity at 20°C -! Correction -!REAL, SAVE :: XRHO00 = 1.292 !rho on the floor [Kg/m**3] -REAL, SAVE :: XRHO00 = 1.2041 !rho at P=1013.25 and T=20°C -! -REAL,SAVE :: XCEXVT ! air density fall speed correction -! -REAL,DIMENSION(:),SAVE,ALLOCATABLE :: XRTMIN ! Min values of the mixing ratios -REAL,DIMENSION(:),SAVE,ALLOCATABLE :: XCTMIN ! Min values of the drop concentrations -! -END MODULE MODD_PARAM_LIMA diff --git a/src/arome/micro/modd_param_lima_cold.F90 b/src/arome/micro/modd_param_lima_cold.F90 deleted file mode 100644 index 2df3032ba305cac20467c695bd73119ccb42ad43..0000000000000000000000000000000000000000 --- a/src/arome/micro/modd_param_lima_cold.F90 +++ /dev/null @@ -1,122 +0,0 @@ -! ########################### - MODULE MODD_PARAM_LIMA_COLD -! ########################### -! -!!**** *MODD_PARAM_LIMA_COLD* - declaration of some descriptive parameters and -!! microphysical factors extensively used in -!! the LIMA cold scheme. -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -IMPLICIT NONE -! -!* 1. DESCRIPTIVE PARAMETERS -! ---------------------- -! -! Declaration of microphysical constants, including the descriptive -! parameters for the raindrop and the ice crystal habits, and the -! parameters relevant of the dimensional distributions. -! -! m(D) = XAx * D**XBx : Mass-MaxDim relationship -! v(D) = XCx * D**XDx : Fallspeed-MaxDim relationship -! N(Lbda) = XCCx * Lbda**XCXx : NumberConc-Slopeparam relationship -! XF0x, XF1x, XF2x : Ventilation factors -! XC1x : Shape parameter for deposition -! -! and -! -! XALPHAx, XNUx : Generalized GAMMA law -! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the -! distribution law -! -REAL,SAVE :: XLBEXI,XLBI ! Prist. ice distribution parameters -REAL,SAVE :: XLBEXS,XLBS ! Snow/agg. distribution parameters -! -REAL,SAVE :: XAI,XBI,XC_I,XDI ,XF0I,XF2I,XC1I ! Cloud ice charact. -REAL,SAVE :: XF0IS,XF1IS ! (large Di vent. coef.) -REAL,SAVE :: XAS,XBS,XCS,XDS,XCCS,XCXS,XF0S,XF1S,XC1S ! Snow/agg. charact. -! -REAL,SAVE :: XLBDAS_MAX ! Max values allowed for the shape - ! parameter of snow -! -CHARACTER(LEN=8),DIMENSION(5),PARAMETER & - :: CLIMA_COLD_NAMES=(/'CICE ','CIFNFREE','CIFNNUCL', & - 'CCNINIMM','CCCNNUCL'/) - ! basenames of the SV articles stored - ! in the binary files - !with IF:Ice-nuclei Free (nonactivated IFN by Dep/Cond) - ! IN:Ice-nuclei Nucleated (activated IFN by Dep/Cond) - ! NI:Nuclei Immersed (activated IFN by Imm) - ! HF:Homogeneous Freezing -CHARACTER(LEN=3),DIMENSION(5),PARAMETER & - :: CLIMA_COLD_CONC=(/'NI ','NIF','NIN','NNI','NNH'/)!for DIAG -! -!------------------------------------------------------------------------------- -! -!* 2. MICROPHYSICAL FACTORS -! --------------------- -! -REAL,SAVE :: XFSEDRI,XFSEDCI, & ! Constants for sedimentation - XFSEDS, XEXSEDS ! fluxes of ice and snow -! -REAL,SAVE :: XNUC_DEP,XEXSI_DEP,XEX_DEP, & ! Constants for heterogeneous - XNUC_CON,XEXTT_CON,XEX_CON, & ! ice nucleation : DEP et CON - XMNU0 ! mass of nucleated ice crystal -! -REAL,SAVE :: XRHOI_HONH,XCEXP_DIFVAP_HONH, & ! Constants for homogeneous - XCOEF_DIFVAP_HONH,XRCOEF_HONH, & ! haze freezing : HHONI - XCRITSAT1_HONH,XCRITSAT2_HONH, & - XTMIN_HONH,XTMAX_HONH, & - XDLNJODT1_HONH,XDLNJODT2_HONH, & - XC1_HONH,XC2_HONH,XC3_HONH -! -REAL,SAVE :: XC_HONC,XR_HONC, & ! Constants for homogeneous - XTEXP1_HONC,XTEXP2_HONC, & ! droplet freezing : CHONI - XTEXP3_HONC,XTEXP4_HONC, & - XTEXP5_HONC -! -REAL,SAVE :: XCSCNVI_MAX, XLBDASCNVI_MAX, & - XRHORSMIN, & - XDSCNVI_LIM, XLBDASCNVI_LIM, & ! Constants for snow - XC0DEPSI,XC1DEPSI, & ! sublimation conversion to - XR0DEPSI,XR1DEPSI ! pristine ice : SCNVI -! -REAL,SAVE :: XSCFAC, & ! Constants for the Bergeron - X0DEPI,X2DEPI, & ! Findeisen process and - X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS ! deposition -! -REAL,SAVE :: XDICNVS_LIM, XLBDAICNVS_LIM, & ! Constants for pristine ice - XC0DEPIS,XC1DEPIS, & ! deposition conversion to - XR0DEPIS,XR1DEPIS ! snow : ICNVS -! -REAL,SAVE :: XCOLEXIS, & ! Constants for snow - XAGGS_CLARGE1,XAGGS_CLARGE2, & ! aggregation : AGG - XAGGS_RLARGE1,XAGGS_RLARGE2 -! -!?????????????????? -REAL,SAVE :: XKER_ZRNIC_A1,XKER_ZRNIC_A2 ! Long-Zrnic Kernels (ini_ice_coma) -! -REAL,SAVE :: XSELFI,XCOLEXII ! Constants for pristine ice - ! self-collection (ini_ice_coma) -! -REAL,SAVE :: XAUTO3, XAUTO4, & ! Constants for pristine ice - XLAUTS, XLAUTS_THRESHOLD, & ! autoconversion : AUT - XITAUTS, XITAUTS_THRESHOLD, & ! (ini_ice_com) - XTEXAUTI -! -REAL,SAVE :: XCONCI_MAX ! Limitation of the pristine - ! ice concentration (init and grid-nesting) -REAL,SAVE :: XFREFFI ! Factor to compute the cloud ice effective radius -! -!------------------------------------------------------------------------------- -! -END MODULE MODD_PARAM_LIMA_COLD diff --git a/src/arome/micro/modd_param_lima_mixed.F90 b/src/arome/micro/modd_param_lima_mixed.F90 deleted file mode 100644 index f13accfc669e88fca83566c2eb72f5c2cc6f4945..0000000000000000000000000000000000000000 --- a/src/arome/micro/modd_param_lima_mixed.F90 +++ /dev/null @@ -1,169 +0,0 @@ -! ############################ - MODULE MODD_PARAM_LIMA_MIXED -! ###########################{ -! -!!**** *MODD_PARAM_LIMA_MIXED* - declaration of some descriptive parameters and -!! microphysical factors extensively used in -!! the LIMA mixed scheme. -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -IMPLICIT NONE -! -!* 1. DESCRIPTIVE PARAMETERS -! ---------------------- -! -! Declaration of microphysical constants, including the descriptive -! parameters for the raindrop and the ice crystal habits, and the -! parameters relevant of the dimensional distributions. -! -! m(D) = XAx * D**XBx : Mass-MaxDim relationship -! v(D) = XCx * D**XDx : Fallspeed-MaxDim relationship -! N(Lbda) = XCCx * Lbda**XCXx : NumberConc-Slopeparam relationship -! XF0x, XF1x, XF2x : Ventilation factors -! XC1x : Shape parameter for deposition -! -! and -! -! XALPHAx, XNUx : Generalized GAMMA law -! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the -! distribution law -! -REAL,SAVE :: XAG,XBG,XCG,XDG,XCCG,XCXG,XF0G,XF1G,XC1G ! Graupel charact. -REAL,SAVE :: XLBEXG,XLBG ! Graupel distribution parameters -REAL,SAVE :: XLBDAG_MAX ! Max values allowed for the shape - ! parameter of graupeln -! -REAL,SAVE :: XAH,XBH,XCH,XDH,XCCH,XCXH,XF0H,XF1H,XC1H ! Hail charact. -REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters -! -!------------------------------------------------------------------------------- -! -!* 2. MICROPHYSICAL FACTORS - Graupel -! ------------------------------- -! -REAL,SAVE :: XFSEDG, XEXSEDG ! Sedimentation fluxes of Graupel -! -REAL,SAVE :: X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG ! Deposition on graupel -! -REAL,SAVE :: XHMTMIN,XHMTMAX,XHM1,XHM2, & ! Constants for the - XHM_YIELD,XHM_COLLCS,XHM_FACTS, & ! revised - XHM_COLLCG,XHM_FACTG, & ! Hallett-Mossop process - XGAMINC_HMC_BOUND_MIN, & ! Min val. of Lbda_c for HMC - XGAMINC_HMC_BOUND_MAX, & ! Max val. of Lbda_c for HMC - XHMSINTP1,XHMSINTP2, & ! (this is no more used !) - XHMLINTP1,XHMLINTP2 -! -REAL,SAVE :: XDCSLIM,XCOLCS, & ! Constants for the riming of - XEXCRIMSS,XCRIMSS, & ! the aggregates : RIM - XEXCRIMSG,XCRIMSG, & ! - XEXSRIMCG,XSRIMCG, & ! - XGAMINC_BOUND_MIN, & ! Min val. of Lbda_s for RIM - XGAMINC_BOUND_MAX, & ! Max val. of Lbda_s for RIM - XRIMINTP1,XRIMINTP2 ! Csts for lin. interpol. of - ! the tab. incomplete Gamma law -INTEGER,SAVE :: NGAMINC ! Number of tab. Lbda_s -REAL, DIMENSION(:), SAVE, ALLOCATABLE & - :: XGAMINC_RIM1, & ! Tab. incomplete Gamma funct. - XGAMINC_RIM2, & ! for XDS+2 and for XBS - XGAMINC_HMC ! and for the HM process -! -REAL,SAVE :: XFRACCSS, & ! Constants for the accretion - XLBRACCS1,XLBRACCS2,XLBRACCS3, & ! raindrops onto the aggregates - XFSACCRG, & ! ACC (processes RACCSS and - XLBSACCR1,XLBSACCR2,XLBSACCR3, & ! SACCRG) - XACCLBDAS_MIN, & ! Min val. of Lbda_s for ACC - XACCLBDAS_MAX, & ! Max val. of Lbda_s for ACC - XACCLBDAR_MIN, & ! Min val. of Lbda_r for ACC - XACCLBDAR_MAX, & ! Max val. of Lbda_r for ACC - XACCINTP1S,XACCINTP2S, & ! Csts for bilin. interpol. of - XACCINTP1R,XACCINTP2R ! Lbda_s and Lbda_r in the - ! XKER_RACCSS and XKER_SACCRG - ! tables -INTEGER,SAVE :: NACCLBDAS, & ! Number of Lbda_s values and - NACCLBDAR ! of Lbda_r values in the - ! XKER_RACCSS and XKER_SACCRG - ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & - :: XKER_RACCSS, & ! Normalized kernel for RACCSS - XKER_RACCS, & ! Normalized kernel for RACCS - XKER_SACCRG ! Normalized kernel for SACCRG -REAL,SAVE :: XFSCVMG ! Melting-conversion factor of - ! the aggregates -! -REAL,SAVE :: XCOLIR, & ! Constants for rain contact - XEXRCFRI,XRCFRI, & ! freezing : CFR - XEXICFRR,XICFRR ! -! -REAL,SAVE :: XFCDRYG, & ! Constants for the dry growth - XCOLCG, & ! of the graupeln : - XCOLIG,XCOLEXIG,XFIDRYG, & ! - XCOLSG,XCOLEXSG,XFSDRYG, & ! RCDRYG - XLBSDRYG1,XLBSDRYG2,XLBSDRYG3, & ! RIDRYG - XFRDRYG, & ! RSDRYG - XLBRDRYG1,XLBRDRYG2,XLBRDRYG3, & ! RRDRYG - XDRYLBDAR_MIN, & ! Min val. of Lbda_r for DRY - XDRYLBDAR_MAX, & ! Max val. of Lbda_r for DRY - XDRYLBDAS_MIN, & ! Min val. of Lbda_s for DRY - XDRYLBDAS_MAX, & ! Max val. of Lbda_s for DRY - XDRYLBDAG_MIN, & ! Min val. of Lbda_g for DRY - XDRYLBDAG_MAX, & ! Max val. of Lbda_g for DRY - XDRYINTP1R,XDRYINTP2R, & ! Csts for bilin. interpol. of - XDRYINTP1S,XDRYINTP2S, & ! Lbda_r, Lbda_s and Lbda_g in - XDRYINTP1G,XDRYINTP2G ! the XKER_SDRYG and XKER_RDRYG - ! tables -INTEGER,SAVE :: NDRYLBDAR, & ! Number of Lbda_r, - NDRYLBDAS, & ! of Lbda_s and - NDRYLBDAG ! of Lbda_g values in - ! the XKER_SDRYG and XKER_RDRYG - ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & - :: XKER_SDRYG, & ! Normalized kernel for SDRYG - XKER_RDRYG ! Normalized kernel for RDRYG -! -!------------------------------------------------------------------------------- -! -!* 2. MICROPHYSICAL FACTORS - Hail -! ---------------------------- -! -REAL,SAVE :: XFSEDH,XEXSEDH ! Constants for sedimentation -! -! -REAL,SAVE :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH ! Constants for deposition -! -REAL,SAVE :: XFWETH,XFSWETH, & ! Constants for the wet growth - XLBSWETH1,XLBSWETH2,XLBSWETH3, & ! of the hailstones : WET - XFGWETH, & ! processes RSWETH - XLBGWETH1,XLBGWETH2,XLBGWETH3, & ! RGWETH - XWETLBDAS_MIN, & ! Min val. of Lbda_s for WET - XWETLBDAS_MAX, & ! Max val. of Lbda_s for WET - XWETLBDAG_MIN, & ! Min val. of Lbda_g for WET - XWETLBDAG_MAX, & ! Max val. of Lbda_g for WET - XWETLBDAH_MIN, & ! Min val. of Lbda_h for WET - XWETLBDAH_MAX, & ! Max val. of Lbda_h for WET - XWETINTP1S,XWETINTP2S, & ! Csts for bilin. interpol. of - XWETINTP1G,XWETINTP2G, & ! Lbda_r, Lbda_s and Lbda_g in - XWETINTP1H,XWETINTP2H ! the XKER_SWETH and XKER_GWETH - ! tables -INTEGER,SAVE :: NWETLBDAS, & ! Number of Lbda_s, - NWETLBDAG, & ! of Lbda_g and - NWETLBDAH ! of Lbda_h values in - ! the XKER_SWETH and XKER_GWETH - ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & - :: XKER_SWETH, & ! Normalized kernel for SWETH - XKER_GWETH ! Normalized kernel for GWETH - -! -!------------------------------------------------------------------------------- -! -END MODULE MODD_PARAM_LIMA_MIXED diff --git a/src/arome/micro/modd_param_lima_warm.F90 b/src/arome/micro/modd_param_lima_warm.F90 deleted file mode 100644 index d0688aa72acecbfa45b0810043a36b5386ffe2cb..0000000000000000000000000000000000000000 --- a/src/arome/micro/modd_param_lima_warm.F90 +++ /dev/null @@ -1,119 +0,0 @@ -! ########################### - MODULE MODD_PARAM_LIMA_WARM -! ########################### -! -!!**** *MODD_PARAM_LIMA_WARM* - declaration of some descriptive parameters and -!! microphysical factors extensively used in -!! the LIMA warm scheme. -!! AUTHOR -!! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -IMPLICIT NONE -! -!* 1. DESCRIPTIVE PARAMETERS -! ---------------------- -! -REAL,SAVE :: XLBC, XLBEXC, & ! shape parameters of the cloud droplets - XLBR, XLBEXR ! shape parameters of the raindrops -! -REAL,SAVE :: XAR,XBR,XCR,XDR,XF0R,XF1R, & ! Raindrop charact. - XCCR, & !For diagnostics - XAC,XBC,XCC,XDC,XF0C,XF2C,XC1C ! Cloud droplet charact. -! -! -CHARACTER(LEN=8),DIMENSION(4),PARAMETER & - :: CLIMA_WARM_NAMES=(/'CCLOUD ','CRAIN ','CCCNFREE','CCCNACTI'/) - ! basenames of the SV articles stored - ! in the binary files -CHARACTER(LEN=5),DIMENSION(4),PARAMETER & - :: CLIMA_WARM_CONC=(/'NC ','NR ','NFREE','NCCN '/) -! ! basenames of the SV articles stored -! ! in the binary files for DIAG -! -!* Special issue for Below-Cloud SCAVenging of Aerosol particles -CHARACTER(LEN=6),DIMENSION(2) :: CAERO_MASS =(/'MASSAP', 'MAP '/) -! -!------------------------------------------------------------------------------- -! -!* 2. MICROPHYSICAL FACTORS -! --------------------- -! -REAL,SAVE :: XFSEDRR,XFSEDCR, & ! Constants for sedimentation - XFSEDRC,XFSEDCC ! fluxes of R, C -! -! -REAL,SAVE :: XDIVA, & ! Diffusivity of water vapor - XTHCO ! Thermal conductivity -REAL,SAVE :: XWMIN ! Min value of updraft velocity - ! to enable nucleation process -REAL,SAVE :: XTMIN ! Min value of - ! temperature evolution - ! to enable nucleation process -REAL,SAVE :: XCSTHEN,XCSTDCRIT ! Cst for HEN precalculations -INTEGER, SAVE :: NHYP ! Number of value of the HYP - ! functions -REAL,SAVE :: XHYPINTP1, XHYPINTP2 ! Factors defining the - ! supersaturation log scale -REAL, DIMENSION(:,:), SAVE, ALLOCATABLE & ! Tabulated HYPgeometric - :: XHYPF12, XHYPF32 ! functions used in HEN -INTEGER, SAVE :: NAHEN ! Number of value of the AHEN - ! functions -REAL,SAVE :: XAHENINTP1, XAHENINTP2 ! Factors defining the - ! temperatures in lin scale -REAL, DIMENSION(:), SAVE, ALLOCATABLE & ! - :: XAHENG,XPSI1, XPSI3, & ! Twomey-CPB98 and - XAHENF,XAHENY ! Feingold-Heymsfield - ! parameterization to compute Smax -REAL,SAVE :: XWCOEF_F1, XWCOEF_F2, XWCOEF_F3, & ! COEF_F of the polynomial temp. - XWCOEF_Y1, XWCOEF_Y2, XWCOEF_Y3 ! COEF_Y of the polynomial temp. - ! function powering W -! -! -REAL,SAVE :: XKERA1, XKERA2 ! Constants to define the lin - ! and parabolic kernel param. -REAL,SAVE :: XSELFC ! Constants for cloud droplet - ! selfcollection : SELF -! -REAL,SAVE :: XAUTO1, XAUTO2, XCAUTR, & ! Constants for cloud droplet - XLAUTR, XLAUTR_THRESHOLD, & ! autoconversion : AUT - XITAUTR, XITAUTR_THRESHOLD -! -REAL,SAVE :: XACCR1, XACCR2, XACCR3, & ! Constants for the accretion - XACCR4, XACCR5, XACCR6, & ! process - XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, & - XACCR_CSMALL1, XACCR_CSMALL2, XACCR_RSMALL1, XACCR_RSMALL2 -! -REAL,SAVE :: XSCBU2, XSCBU3, & ! Constants for the raindrop - XSCBU_EFF1, XSCBU_EFF2, XSCBUEXP1 ! breakup-selfcollection: SCBU -! -REAL,SAVE :: XSPONBUD1,XSPONBUD2,XSPONBUD3, & ! Spontaneous Break-up - XSPONCOEF2 ! (drop size limiter) -! -REAL,SAVE :: X0EVAR, X1EVAR, & ! Constants for raindrop - XEX0EVAR, XEX1EVAR, XEX2EVAR ! evaporation: EVA -! -REAL,DIMENSION(:,:,:,:), SAVE, ALLOCATABLE :: XCONCC_INI -REAL,SAVE :: XCONCR_PARAM_INI - ! Used to initialize the - ! concentrations from mixing ratios - ! (init and grid-nesting from Kessler) -! -REAL,SAVE :: X0CNDC, X2CNDC ! Constants for cloud droplet - ! condensation/evaporation -REAL,SAVE :: XFREFFC ! Factor to compute the cloud droplet effective radius -REAL,SAVE :: XFREFFR ! Factor to compute the rain drop effective radius -REAL,SAVE :: XCREC, XCRER - ! Factors to compute reff when cloud and rain are present -! -!------------------------------------------------------------------------------- -! -END MODULE MODD_PARAM_LIMA_WARM diff --git a/src/common/micro/lima.F90 b/src/common/micro/lima.F90 index 0ed11fe4885abca003bda12c21d85a861f293d43..797bc823cf2139d9f5c96d07d4c53750277c2e7e 100644 --- a/src/common/micro/lima.F90 +++ b/src/common/micro/lima.F90 @@ -123,10 +123,9 @@ USE MODD_NSV, ONLY: NSV_LIMA_BEG, NSV_LIMA_NI, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH, & NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI, & +USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI, & LACTIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS, & LSEDC, LSEDI, XRTMIN, XCTMIN, LDEPOC, XVDEPOC, & - LHAIL, LSNOW, & NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_COLD, ONLY: XAI, XBI USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XAC, XBC, XAR, XBR @@ -575,32 +574,32 @@ ELSE ZCCT(:,:,:) = 300.E6 / PRHODREF(:,:,:) ZCCS(:,:,:) = ZCCT(:,:,:) / PTSTEP END IF -IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP -IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) -IF ( LCOLD .AND. NMOM_I.GE.2) ZCIT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP -IF ( LCOLD .AND. NMOM_I.GE.2) ZCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) -IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCST(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) * PTSTEP -IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) -IF ( LCOLD .AND. NMOM_G.GE.2) ZCGT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) * PTSTEP -IF ( LCOLD .AND. NMOM_G.GE.2) ZCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) -IF ( LCOLD .AND. NMOM_H.GE.2) ZCHT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) * PTSTEP -IF ( LCOLD .AND. NMOM_H.GE.2) ZCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) -! -IF ( NMOD_CCN .GE. 1 ) ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP -IF ( NMOD_CCN .GE. 1 ) ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP -IF ( NMOD_CCN .GE. 1 ) ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) -IF ( NMOD_CCN .GE. 1 ) ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) -! -IF ( NMOD_IFN .GE. 1 ) ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP -IF ( NMOD_IFN .GE. 1 ) ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP -IF ( NMOD_IFN .GE. 1 ) ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) -IF ( NMOD_IFN .GE. 1 ) ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) -! -IF ( NMOD_IMM .GE. 1 ) ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP -IF ( NMOD_IMM .GE. 1 ) ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) -! -IF ( LCOLD .AND. LHHONI ) ZHOMFT(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP -IF ( LCOLD .AND. LHHONI ) ZHOMFS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) +IF ( NMOM_R.GE.2) ZCRT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP +IF ( NMOM_R.GE.2) ZCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) +IF ( NMOM_I.GE.2) ZCIT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP +IF ( NMOM_I.GE.2) ZCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( NMOM_S.GE.2) ZCST(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) * PTSTEP +IF ( NMOM_S.GE.2) ZCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) +IF ( NMOM_G.GE.2) ZCGT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) * PTSTEP +IF ( NMOM_G.GE.2) ZCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) +IF ( NMOM_H.GE.2) ZCHT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) * PTSTEP +IF ( NMOM_H.GE.2) ZCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) +! +IF ( NMOD_CCN .GE. 1 ) ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP +IF ( NMOD_CCN .GE. 1 ) ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP +IF ( NMOD_CCN .GE. 1 ) ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) +IF ( NMOD_CCN .GE. 1 ) ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) +! +IF ( NMOD_IFN .GE. 1 ) ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP +IF ( NMOD_IFN .GE. 1 ) ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP +IF ( NMOD_IFN .GE. 1 ) ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) +IF ( NMOD_IFN .GE. 1 ) ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) +! +IF ( NMOD_IMM .GE. 1 ) ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP +IF ( NMOD_IMM .GE. 1 ) ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) +! +IF ( LHHONI ) ZHOMFT(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP +IF ( LHHONI ) ZHOMFS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) ! ZINV_TSTEP = 1./PTSTEP ZEXN(:,:,:) = (PPABST(:,:,:)/XP00)**(XRD/XCPD) @@ -624,7 +623,7 @@ ZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) ! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) ) ! end if ! end if -!!$IF (LWARM .AND. LRAIN) THEN +!!$IF (NMOM_R.GE.2) THEN !!$ WHERE( ZRCT>XRTMIN(2) .AND. ZCCT>XCTMIN(2) .AND. ZRCT>XAC*ZCCT*(100.E-6)**XBC ) !!$ ZRRT=ZRRT+ZRCT !!$ ZRRS=ZRRS+ZRCS @@ -637,7 +636,7 @@ ZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) !!$ END WHERE !!$END IF !!$! -!!$IF (LWARM .AND. LRAIN) THEN +!!$IF (NMOM_R.GE.2) THEN !!$ WHERE( ZRRT>XRTMIN(3) .AND. ZCRT>XCTMIN(3) .AND. ZRRT<XAR*ZCRT*(60.E-6)**XBR ) !!$ ZRCT=ZRCT+ZRRT !!$ ZRCS=ZRCS+ZRRS @@ -650,7 +649,7 @@ ZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) !!$ END WHERE !!$END IF !!$! -!!$IF (LCOLD .AND. LSNOW) THEN +!!$IF (NMOM_S.GE.2) THEN !!$ WHERE( ZRIT>XRTMIN(4) .AND. ZCIT>XCTMIN(4) .AND. ZRIT>XAI*ZCIT*(250.E-6)**XBI ) !!$ ZRST=ZRST+ZRIT !!$ ZRSS=ZRSS+ZRIS @@ -690,45 +689,51 @@ PINPRG=0. PINPRH=0. if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc .and. lwarm .and. lsedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri .and. lcold .and. lsedi ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh .and. lcold .and. lhail ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rr .and. nomm_r.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rs .and. nmom_s.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rg .and. nmom_g.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rh .and. nmom_h.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. lsedc .and. nmom_c.ge.2) & + if ( lsedc .and. nmom_c.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) - if ( lwarm .and. lrain .and. nmom_r.ge.2) & + if ( nmom_r.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) - if ( lcold .and. lsedi .and. nmom_i.ge.2) & + if ( lsedi .and. nmom_i.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) + if ( nmom_s.ge.2) & + call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) + if ( nmom_g.ge.2) & + call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) + if ( nmom_h.ge.2) & + call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) end if end if ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LWARM .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LWARM .AND. LRAIN) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LCOLD .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (LCOLD .AND. LHAIL) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & 'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH) ! ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP @@ -737,26 +742,32 @@ ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP ! if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc .and. lwarm .and. lsedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri .and. lcold .and. lsedi ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh .and. lcold .and. lhail ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rr .and. nmom_r.ge.2 ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rs .and. nmom_s.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rg .and. nmom_g.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rh .and. nmom_h.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. lsedc .and. nmom_c.ge.2) & + if ( lsedc .and. nmom_c.ge.2 ) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) - if ( lwarm .and. lrain .and. nmom_r.ge.2) & + if ( nmom_r.ge.2 ) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) - if ( lcold .and. lsedi .and. nmom_i.ge.2) & + if ( lsedi .and. nmom_i.ge.2 ) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) + if ( nmom_s.ge.2 ) & + call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) + if ( nmom_g.ge.2 ) & + call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) + if ( nmom_h.ge.2 ) & + call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) end if end if ! ! 1.bis Deposition at 1st level above ground ! -IF (LWARM .AND. LDEPOC) THEN - if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) +IF (NMOM_C.GE.1 .AND. LDEPOC) THEN + if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv .and. nmom_c.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) @@ -770,13 +781,15 @@ IF (LWARM .AND. LDEPOC) THEN PINDEP(:,:) = XVDEPOC * ZRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW END WHERE - if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv .and. nmom_c.ge.2) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) END IF ! ! -!!$IF (LWARM .AND. LRAIN) THEN +!!$Z_RR_CVRC(:,:,:) = 0. +!!$Z_CR_CVRC(:,:,:) = 0. +!!$IF (NMOM_R.GE.2) THEN !!$ if( lbu_enable ) then !!$ if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'R2C1', zrcs(:, :, :) * prhodj(:, :, :) ) !!$ if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'R2C1', zrrs(:, :, :) * prhodj(:, :, :) ) @@ -816,12 +829,12 @@ IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP ! -IF ( LWARM .AND. NMOM_C.GE.2 ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP -IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP -IF ( LCOLD .AND. NMOM_I.GE.2 ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP -IF ( LCOLD .AND. NMOM_S.GE.2 ) ZCST(:,:,:) = ZCSS(:,:,:) * PTSTEP -IF ( LCOLD .AND. NMOM_G.GE.2 ) ZCGT(:,:,:) = ZCGS(:,:,:) * PTSTEP -IF ( LCOLD .AND. NMOM_H.GE.2 ) ZCHT(:,:,:) = ZCHS(:,:,:) * PTSTEP +IF ( NMOM_C.GE.2 ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP +IF ( NMOM_R.GE.2 ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP +IF ( NMOM_I.GE.2 ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP +IF ( NMOM_S.GE.2 ) ZCST(:,:,:) = ZCSS(:,:,:) * PTSTEP +IF ( NMOM_G.GE.2 ) ZCGT(:,:,:) = ZCGS(:,:,:) * PTSTEP +IF ( NMOM_H.GE.2 ) ZCHT(:,:,:) = ZCHS(:,:,:) * PTSTEP ! !------------------------------------------------------------------------------- ! @@ -1803,19 +1816,19 @@ IF ( KRR .GE. 5 ) PRS(:,:,:,5) = ZRST(:,:,:) *ZINV_TSTEP IF ( KRR .GE. 6 ) PRS(:,:,:,6) = ZRGT(:,:,:) *ZINV_TSTEP IF ( KRR .GE. 7 ) PRS(:,:,:,7) = ZRHT(:,:,:) *ZINV_TSTEP ! -IF ( LWARM .AND. NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP -IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP -IF ( LCOLD .AND. NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP -IF ( LCOLD .AND. NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = ZCST(:,:,:) *ZINV_TSTEP -IF ( LCOLD .AND. NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = ZCGT(:,:,:) *ZINV_TSTEP -IF ( LCOLD .AND. NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = ZCHT(:,:,:) *ZINV_TSTEP +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP +IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP +IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP +IF ( NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = ZCST(:,:,:) *ZINV_TSTEP +IF ( NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = ZCGT(:,:,:) *ZINV_TSTEP +IF ( NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = ZCHT(:,:,:) *ZINV_TSTEP ! IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZCCNFT(:,:,:,:) *ZINV_TSTEP IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZCCNAT(:,:,:,:) *ZINV_TSTEP IF ( NMOD_IFN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = ZIFNFT(:,:,:,:) *ZINV_TSTEP IF ( NMOD_IFN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = ZIFNNT(:,:,:,:) *ZINV_TSTEP IF ( NMOD_IMM .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = ZIMMNT(:,:,:,:) *ZINV_TSTEP -IF ( LCOLD .AND. LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TSTEP +IF ( LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TSTEP ! ! ! diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90 index d0b3425d8f83bec8cf9010ace6fe2dfab4e71acd..0f8aeef7151532a7011356dc4e960f92bf3a0c73 100644 --- a/src/common/micro/lima_adjust_split.F90 +++ b/src/common/micro/lima_adjust_split.F90 @@ -381,15 +381,15 @@ PCIT(:,:,:) = 0. PCCS(:,:,:) = 0. ! PCIS(:,:,:) = 0. ! -IF ( LWARM .AND. NMOM_C.GE.2 ) PCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)*PTSTEP -IF ( LCOLD .AND. NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)*PTSTEP +IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) ! -IF ( LWARM .AND. NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -! IF ( LCOLD .AND. NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +! IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) ! IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,NSV_LIMA_SCAVMASS) ! -IF ( LWARM .AND. NMOD_CCN.GE.1 ) THEN +IF ( NMOM_C.GE.1 .AND. NMOD_CCN.GE.1 ) THEN ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) ALLOCATE( PNFT(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) @@ -400,7 +400,7 @@ IF ( LWARM .AND. NMOD_CCN.GE.1 ) THEN PNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)*PTSTEP END IF ! -! IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN +! IF ( NMOM_I.GE.1 .AND. NMOD_IFN .GE. 1 ) THEN ! ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) ) ! ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) ) ! PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) @@ -420,11 +420,11 @@ if ( nbumod == kmi .and. lbu_enable ) then !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. nmom_c.ge.2) & + if ( nmom_c.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) - if ( lwarm ) then + if ( nmom_c.ge.1 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl call Budget_store_init( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) @@ -432,7 +432,7 @@ if ( nbumod == kmi .and. lbu_enable ) then call Budget_store_init( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if -! if ( lcold ) then +! if ( nmom_i.ge.2 ) then ! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) ! do jl = 1, nmod_ifn ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl @@ -652,7 +652,7 @@ IF (NMOM_C .GE. 2) THEN END IF ! ZW1(:,:,:) = 0. -IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) +IF (NMOM_C.GE.1 .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) ZW2(:,:,:) = 0. WHERE ( ZW(:,:,:) > 0. ) @@ -660,7 +660,7 @@ WHERE ( ZW(:,:,:) > 0. ) ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) ENDWHERE ! -IF (LWARM .AND. NMOD_CCN.GE.1) THEN +IF (NMOM_C.GE.1 .AND. NMOD_CCN.GE.1) THEN DO JMOD = 1, NMOD_CCN PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) @@ -710,22 +710,22 @@ IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:) ! ! Prepare 3D number concentrations ! -IF ( LWARM .AND. NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) -! IF ( LCOLD .AND. NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) +! IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) ! IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,NSV_LIMA_SCAVMASS) = PMAS(:,:,:) ! -IF ( LWARM .AND. NMOD_CCN .GE. 1 ) THEN +IF ( NMOM_C.GE.1 .AND. NMOD_CCN.GE.1 ) THEN PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:) PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:) END IF ! -! IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN +! IF ( NMOM_I.GE.1 .AND. NMOD_IFN .GE. 1 ) THEN ! PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:) ! PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:) ! END IF ! -! IF ( LCOLD .AND. NMOD_IMM .GE. 1 ) THEN +! IF ( NMOM_I.GE.1 .AND. NMOD_IMM .GE. 1 ) THEN ! PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:) ! END IF ! @@ -761,11 +761,11 @@ if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. nmom_c.ge.2) & + if ( nmom_c.ge.2) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) - if ( lwarm ) then + if ( nmom_c.ge.1 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl call Budget_store_end( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) @@ -773,7 +773,7 @@ if ( nbumod == kmi .and. lbu_enable ) then call Budget_store_end( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if -! if ( lcold ) then +! if ( nmom_i.ge.2 ) then ! call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) ! do jl = 1, nmod_ifn ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl diff --git a/src/common/micro/lima_droplets_autoconversion.F90 b/src/common/micro/lima_droplets_autoconversion.F90 index 3fa32e7a65c04cff7af42821ceaa37fcbf7b374e..6d48daab73d7a4f16fdb4c2fb055f2f27ce2ffe4 100644 --- a/src/common/micro/lima_droplets_autoconversion.F90 +++ b/src/common/micro/lima_droplets_autoconversion.F90 @@ -100,8 +100,8 @@ IF (NMOM_C.EQ.1 .AND. LKESSLERAC) THEN P_RC_AUTO(:) = - 1.E-3 * MAX ( PRCT(:) - 0.5E-3 / PRHODREF(:), 0. ) ELSE IF (LKHKO) THEN ! -! 1. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) -! ---------------------------------------------------------------------- +! 1. Autoconversion of cloud droplets +! ----------------------------------- ! WHERE ( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:) ) ! diff --git a/src/common/micro/lima_graupel.F90 b/src/common/micro/lima_graupel.F90 index 8c96d2e0957a34003e2c4ff6ff5bf10b7bebcda1..6e73522666ee21e10b06296efcd8681f5faeefe9 100644 --- a/src/common/micro/lima_graupel.F90 +++ b/src/common/micro/lima_graupel.F90 @@ -146,7 +146,7 @@ END MODULE MODI_LIMA_GRAUPEL ! ------------ ! USE MODD_CST, ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT, LHAIL +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT, NMOM_H USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC, & XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG, & XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG, & @@ -487,7 +487,7 @@ END WHERE ! ZZW(:) = 0.0 NHAIL = 0. -IF (LHAIL) NHAIL = 1. +IF (NMOM_H.GE.1) NHAIL = 1. WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. PT(:)<XTT .AND. & (ZRDRYG(:)-ZZW2(:)-ZZW3(:))>=(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRWETG(:)-ZZW5(:)-ZZW6(:)>0.0 ) ! diff --git a/src/common/micro/lima_hail.F90 b/src/common/micro/lima_hail.F90 index 8392316ae4106fd1e9ed2cbb4f22d287b084818e..66fe11b3ae5f50236e862dc58ebee8a78ba84487 100644 --- a/src/common/micro/lima_hail.F90 +++ b/src/common/micro/lima_hail.F90 @@ -133,7 +133,7 @@ END MODULE MODI_LIMA_HAIL ! ------------ ! USE MODD_CST, ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT, LHAIL +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT USE MODD_PARAM_LIMA_MIXED, ONLY : NWETLBDAG, XWETINTP1G, XWETINTP2G, & NWETLBDAH, X0DEPH, X1DEPH, XDH, XEX0DEPH, XEX1DEPH, & XFWETH, XWETINTP1H, XWETINTP2H, & diff --git a/src/common/micro/lima_ice_deposition.F90 b/src/common/micro/lima_ice_deposition.F90 index b9ca8ed7558349a6f1da6296770fd7a5e0a4c3d2..a0d51a533e82cb3b54e469f07c539392d73b5514 100644 --- a/src/common/micro/lima_ice_deposition.F90 +++ b/src/common/micro/lima_ice_deposition.F90 @@ -74,7 +74,7 @@ SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & ! ------------ ! USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS,& - LSNOW, NMOM_I + NMOM_I, NMOM_S USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & @@ -177,7 +177,7 @@ ELSE END WHERE END IF ! -IF (.NOT.LSNOW) THEN +IF (NMOM_S.EQ.0) THEN P_RI_CNVS(:) = 0. P_CI_CNVS(:) = 0. END IF diff --git a/src/common/micro/lima_inst_procs.F90 b/src/common/micro/lima_inst_procs.F90 index 6a5aa149ea7368975e06dead5a299fc9e96d8226..3de0152dbbc9e78a2548cbf4f47b2eaede217a8a 100644 --- a/src/common/micro/lima_inst_procs.F90 +++ b/src/common/micro/lima_inst_procs.F90 @@ -102,7 +102,7 @@ SUBROUTINE LIMA_INST_PROCS (PTSTEP, LDCOMPUTE, !------------------------------------------------------------------------------- ! ! -USE MODD_PARAM_LIMA, ONLY : LCOLD, LWARM, LRAIN, NMOM_R +USE MODD_PARAM_LIMA, ONLY : NMOM_C, NMOM_R, NMOM_I, NMOM_G ! USE MODI_LIMA_DROPS_BREAK_UP USE MODI_LIMA_DROPS_HOM_FREEZING @@ -159,7 +159,7 @@ REAL, DIMENSION(:) , INTENT(INOUT) :: PPF1D ! Precipitation fraction ! !------------------------------------------------------------------------------- ! -IF (LWARM .AND. LRAIN .AND. NMOM_R.GE.2) THEN +IF (NMOM_R.GE.2) THEN CALL LIMA_DROPS_BREAK_UP (LDCOMPUTE, & ! no dependance on CF, IF or PF PCRT, PRRT, & P_CR_BRKU, & @@ -168,7 +168,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LWARM .AND. LRAIN) THEN +IF (NMOM_G.GE.1 .AND. NMOM_R.GE.1) THEN CALL LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE, & ! no dependance on CF, IF or PF PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & @@ -179,7 +179,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LWARM) THEN +IF (NMOM_C.GE.1 .AND. NMOM_I.GE.1) THEN CALL LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE, & ! no dependance on CF, IF or PF PEXNREF, PPABST, & ! but ice fraction becomes cloud fraction PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & ! -> where ? diff --git a/src/common/micro/lima_nucleation_procs.F90 b/src/common/micro/lima_nucleation_procs.F90 index 07213550da89d9bb98882dbae62392b49d708ded..0bb1f934ac8b10a5a9ed3c61eea1a83bf5033e3a 100644 --- a/src/common/micro/lima_nucleation_procs.F90 +++ b/src/common/micro/lima_nucleation_procs.F90 @@ -90,7 +90,7 @@ USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE -USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, & +USE MODD_PARAM_LIMA, ONLY : LNUCL, LMEYERS, LACTI, LHHONI, & NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I, NMOM_C USE MODD_TURB_n, ONLY : LSUBG_COND @@ -152,7 +152,7 @@ INTEGER :: JL ! !------------------------------------------------------------------------------- ! -IF ( LWARM .AND. LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN +IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN IF (.NOT.LSUBG_COND .AND. .NOT.LSPRO) THEN @@ -197,7 +197,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF ( LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN +IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN if ( lbu_enable ) then if ( lbudget_sv ) then do jl = 1, nmod_ifn @@ -263,7 +263,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN +IF (LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN CALL LIMA_MEYERS_NUCLEATION (PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & @@ -301,7 +301,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LNUCL .AND. NMOM_I.EQ.1) THEN +IF (LNUCL .AND. NMOM_I.EQ.1) THEN WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. ! ZTHS=PTHT/PTSTEP @@ -351,7 +351,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF ( LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN +IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep ) diff --git a/src/common/micro/lima_phillips_ref_spectrum.F90 b/src/common/micro/lima_phillips_ref_spectrum.F90 index d549d7051fc8cb3c43ef7d755fe31da9060dd8b0..a49a998bd0cacca500e97c68598e35b8af3b9c8e 100644 --- a/src/common/micro/lima_phillips_ref_spectrum.F90 +++ b/src/common/micro/lima_phillips_ref_spectrum.F90 @@ -128,13 +128,11 @@ WHERE (Z2(:)>0.0 .AND. Z1(:)>0.0) ZZY(:) = ZZY(:) + MIN(ZMOY(:),ZMAX(:)) ! N_{IN,1,*} END WHERE ! -!++cb++ DEALLOCATE(ZMAX) DEALLOCATE(ZMOY) DEALLOCATE(ZZY1) DEALLOCATE(ZZY2) DEALLOCATE(Z1) DEALLOCATE(Z2) -!--cb-- ! END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM diff --git a/src/common/micro/lima_tendencies.F90 b/src/common/micro/lima_tendencies.F90 index d8c8d18d9c1ee8371d6c0ef6274f5af50d85ac3d..6ee01ff6f07750ec44c2d1c86852f0006facecf4 100644 --- a/src/common/micro/lima_tendencies.F90 +++ b/src/common/micro/lima_tendencies.F90 @@ -296,7 +296,7 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE, USE MODD_CST, ONLY : XP00, XRD, XRV, XMD, XMV, XCPD, XCPV, XCL, XCI, XLVTT, XLSTT, XTT, & XALPW, XBETAW, XGAMW, XALPI, XBETAI, XGAMI USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XNUS, LCIBU, LRDSF, & - LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN, LKHKO, LSNOW_T, & + LNUCL, LACTI, LKHKO, LSNOW_T, & NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_WARM, ONLY : XLBC, XLBEXC, XLBR, XLBEXR, XCCR, XCXR USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XCCG, XCXG, XLBH, XLBEXH, XCCH, XCXH, XLBDAG_MAX @@ -722,7 +722,7 @@ END IF !------------------------------------------------------------------------------- ! Call microphysical processes ! -IF (LCOLD .AND. LWARM) THEN +IF (NMOM_C.GE.1 .AND. NMOM_I.GE.1) THEN CALL LIMA_DROPLETS_HOM_FREEZING (PTSTEP, LDCOMPUTE, & ! independent from CF,IF,PF ZT, ZLVFACT, ZLSFACT, & ZRCT, PCCT, ZLBDC, & @@ -735,7 +735,7 @@ IF (LCOLD .AND. LWARM) THEN PA_TH(:) = PA_TH(:) + P_TH_HONC(:) END IF ! -IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN +IF ((.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN CALL LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE, & ! depends on CF PRHODREF, & PCCT/ZCF1D, ZLBDC3, & @@ -744,7 +744,7 @@ IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN PA_CC(:) = PA_CC(:) + P_CC_SELF(:) END IF ! -IF (LWARM .AND. LRAIN) THEN +IF (NMOM_C.GE.1 .AND. NMOM_R.GE.1) THEN CALL LIMA_DROPLETS_AUTOCONVERSION (LDCOMPUTE, & ! depends on CF PRHODREF, & ZRCT/ZCF1D, PCCT/ZCF1D, ZLBDC, ZLBDR, & @@ -759,7 +759,7 @@ IF (LWARM .AND. LRAIN) THEN IF (NMOM_R.GE.2) PA_CR(:) = PA_CR(:) + P_CR_AUTO(:) END IF ! -IF (LWARM .AND. LRAIN) THEN +IF (NMOM_C.GE.1 .AND. NMOM_R.GE.1) THEN CALL LIMA_DROPLETS_ACCRETION (LDCOMPUTE, & ! depends on CF, PF PRHODREF, & ZRCT/ZCF1D, ZRRT/ZPF1D, PCCT/ZCF1D, PCRT/ZPF1D,& @@ -774,7 +774,7 @@ IF (LWARM .AND. LRAIN) THEN PA_RR(:) = PA_RR(:) - P_RC_ACCR(:) END IF ! -IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN +IF ((.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN CALL LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE, & ! depends on PF PRHODREF, & PCRT/ZPF1D(:), ZLBDR, ZLBDR3, & @@ -785,7 +785,7 @@ IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN PA_CR(:) = PA_CR(:) + P_CR_SCBU(:) END IF ! -IF (LWARM .AND. LRAIN) THEN +IF (NMOM_R.GE.2) THEN CALL LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE, & ! depends on PF > CF PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT, & PRVT, ZRCT/ZPF1D, ZRRT/ZPF1D, PCRT/ZPF1D, ZLBDR, & @@ -802,7 +802,7 @@ IF (LWARM .AND. LRAIN) THEN IF (NMOM_R.GE.2) PA_CR(:) = PA_CR(:) + P_CR_EVAP(:) END IF ! -IF (LCOLD) THEN +IF (NMOM_I.GE.1) THEN ! ! Includes vapour deposition on ice, ice -> snow conversion ! @@ -826,7 +826,7 @@ IF (LCOLD) THEN END IF ! -IF (LCOLD .AND. LSNOW) THEN +IF (NMOM_S.GE.1) THEN ! ! Includes vapour deposition on snow, snow -> ice conversion ! @@ -850,7 +850,7 @@ IF (LCOLD .AND. LSNOW) THEN END IF ! -IF (LSNOW .AND. NMOM_S.GE.2) THEN +IF (NMOM_S.GE.2) THEN CALL LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE, & ! depends on PF PRHODREF, & ZRST(:)/ZPF1D(:), PCST/ZPF1D(:), ZLBDS, ZLBDS3, & @@ -867,7 +867,7 @@ END IF !ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:)) ! ! -IF (LCOLD .AND. LSNOW) THEN +IF (NMOM_I.GE.1 .AND. NMOM_S.GE.1) THEN CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE, & ! depends on IF, PF ZT, PRHODREF, & ZRIT/ZIF1D, ZRST/ZPF1D, PCIT/ZIF1D, PCST/ZPF1D, ZLBDI, ZLBDS, & @@ -880,7 +880,7 @@ IF (LCOLD .AND. LSNOW) THEN PA_RS(:) = PA_RS(:) - P_RI_AGGS(:) END IF ! -IF (LWARM .AND. LCOLD) THEN +IF (NMOM_G.GE.1) THEN CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF, & ! depends on PF ? ZRGT/ZPF1D, PCGT/ZPF1D, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, & P_TH_DEPG, P_RG_DEPG ) @@ -892,7 +892,7 @@ IF (LWARM .AND. LCOLD) THEN PA_TH(:) = PA_TH(:) + P_TH_DEPG(:) END IF ! -IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN +IF (NMOM_C.GE.1 .AND. NMOM_I.EQ.1) THEN CALL LIMA_BERGERON (LDCOMPUTE, & ! depends on CF, IF ZRCT/ZCF1D, ZRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, & ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & @@ -905,7 +905,7 @@ IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) END IF ! -IF (LWARM .AND. LCOLD .AND. LSNOW) THEN +IF (NMOM_C.GE.1 .AND. NMOM_S.GE.1) THEN ! ! Graupel production as tendency (or should be tendency + instant to stick to the previous version ?) ! Includes the Hallett Mossop process for riming of droplets by snow (HMS) @@ -937,7 +937,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN END IF ! -IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW) THEN +IF (NMOM_R.GE.1 .AND. NMOM_S.GE.1) THEN CALL LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE, & ! depends on PF PRHODREF, ZT, & ZRRT/ZPF1D, PCRT/ZPF1D, ZRST/ZPF1D, PCST/ZPF1D, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT, & @@ -959,7 +959,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW) THEN END IF ! -IF (LWARM .AND. LCOLD .AND. LSNOW) THEN +IF (NMOM_S.GE.1) THEN ! ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! ! Some thermodynamical computations inside, to externalize ? @@ -978,7 +978,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN END IF ! -IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN +IF (NMOM_R.GE.1) THEN CALL LIMA_RAIN_FREEZING (LDCOMPUTE, & ! depends on PF, IF PRHODREF, ZT, ZLVFACT, ZLSFACT, & ZRRT/ZPF1D, PCRT/ZPF1D, ZRIT/ZIF1D, PCIT/ZIF1D, ZLBDR, & @@ -999,7 +999,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN END IF ! -IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN +IF (NMOM_S.GE.1 .AND. NMOM_G.GE.1 .AND. LCIBU) THEN ! ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! ! Some thermodynamical computations inside, to externalize ? @@ -1018,7 +1018,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN END IF ! -IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW .AND. LRDSF) THEN +IF (NMOM_R.GE.1 .AND. NMOM_I.GE.1 .AND. LRDSF) THEN ! ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! ! Some thermodynamical computations inside, to externalize ? @@ -1037,7 +1037,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW .AND. LRDSF) THEN END IF ! -IF (LWARM .AND. LCOLD) THEN +IF (NMOM_G.GE.1) THEN ! ! Melting of graupel should account for collected droplets and drops where T>0C, but does not ! ! Collection and water shedding should also happen where T>0C, but do not ! @@ -1061,7 +1061,7 @@ IF (LWARM .AND. LCOLD) THEN PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH ) END IF ! -IF (LWARM .AND. LCOLD .AND. LHAIL) THEN +IF (NMOM_H.GE.1) THEN CALL LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF, & ! depends on PF ? ZRHT/ZPF1D, PCHT/ZPF1D, ZSSI, ZLBDH, ZAI, ZCJ, ZLSFACT, & P_TH_DEPH, P_RH_DEPH ) diff --git a/src/common/micro/modd_param_lima.F90 b/src/common/micro/modd_param_lima.F90 index d199c2a666f0e97b165dff5f3dd4e1cf5a40c815..00af77b8569018404060bee7c6672e849b02f504 100644 --- a/src/common/micro/modd_param_lima.F90 +++ b/src/common/micro/modd_param_lima.F90 @@ -52,12 +52,9 @@ REAL, SAVE :: XTSTEP_TS ! maximum time for the sub-time-step ! ! 1.1 Cold scheme configuration ! -LOGICAL, SAVE :: LCOLD ! TRUE to enable the cold scheme LOGICAL, SAVE :: LNUCL ! TRUE to enable ice nucleation LOGICAL, SAVE :: LSEDI ! TRUE to enable pristine ice sedimentation LOGICAL, SAVE :: LHHONI ! TRUE to enable freezing of haze particules -LOGICAL, SAVE :: LSNOW ! TRUE to enable snow and graupel -LOGICAL, SAVE :: LHAIL ! TRUE to enable hail LOGICAL, SAVE :: LMEYERS ! TRUE to use Meyers nucleation LOGICAL, SAVE :: LCIBU ! TRUE to use collisional ice breakup LOGICAL, SAVE :: LRDSF ! TRUE to use rain drop shattering by freezing @@ -135,9 +132,7 @@ REAL,SAVE :: XNDEBRIS_CIBU ! Number of ice crystal debris produced ! ! 2.1 Warm scheme configuration ! -LOGICAL, SAVE :: LWARM ! TRUE to enable the warm scheme LOGICAL, SAVE :: LACTI ! TRUE to enable CCN activation -LOGICAL, SAVE :: LRAIN ! TRUE to enable the formation of rain LOGICAL, SAVE :: LSEDC ! TRUE to enable the droplet sedimentation LOGICAL, SAVE :: LACTIT ! TRUE to enable the usage of dT/dt in CCN activation LOGICAL, SAVE :: LBOUND ! TRUE to enable the continuously replenishing diff --git a/src/mesonh/micro/lima_adjust.f90 b/src/mesonh/micro/lima_adjust.f90 index 54b749e8be0e1166ef23eda588f09ffb95cc164b..b0d00f58419fa74af0b256de6ab8f271fb5f95fb 100644 --- a/src/mesonh/micro/lima_adjust.f90 +++ b/src/mesonh/micro/lima_adjust.f90 @@ -357,22 +357,22 @@ PCIT(:,:,:) = 0. PCCS(:,:,:) = 0. PCIS(:,:,:) = 0. ! -IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) -IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) +IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) ! -IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) ! IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,NSV_LIMA_SCAVMASS) ! -IF ( LWARM .AND. NMOD_CCN.GE.1 ) THEN +IF ( NMOM_C.GE.2 .AND. NMOD_CCN.GE.1 ) THEN ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) END IF ! -IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN +IF ( NOMM_I.GE.2 .AND. NMOD_IFN.GE.1 ) THEN ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) ) ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) ) PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) @@ -390,13 +390,13 @@ if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. nmom_c.ge.2) & + if ( nmom_c.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) - if ( lcold .and. nmom_i.ge.2) & + if ( nmom_i.ge.2) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) - if ( lwarm ) then + if ( nmom_c.ge.2 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl call Budget_store_init( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) @@ -404,7 +404,7 @@ if ( nbumod == kmi .and. lbu_enable ) then call Budget_store_init( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if - if ( lcold ) then + if ( nmom_i.ge.2 ) then do jl = 1, nmod_ifn idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl call Budget_store_init( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) @@ -1096,7 +1096,7 @@ WHERE (PRIS(:,:,:) <= ZRTMIN(4) .OR. PCIS(:,:,:) <= ZCTMIN(4)) PCIS(:,:,:) = 0.0 END WHERE ! -IF (LCOLD .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN +IF (NMOM_I.GE.2 .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN ZW1(:,:,:) = 0. IF (NMOD_IFN .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PINS,DIM=4) IF (NMOD_IMM .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PNIS,DIM=4) @@ -1108,7 +1108,7 @@ IF (LCOLD .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN ENDWHERE END IF ! -IF (LCOLD .AND. NMOD_IFN.GE.1) THEN +IF (NMOM_I.GE.2 .AND. NMOD_IFN.GE.1) THEN DO JMOD_IFN = 1, NMOD_IFN PIFS(:,:,:,JMOD_IFN) = PIFS(:,:,:,JMOD_IFN) + & ZMASK(:,:,:) * PINS(:,:,:,JMOD_IFN) * ZW2(:,:,:) @@ -1118,7 +1118,7 @@ IF (LCOLD .AND. NMOD_IFN.GE.1) THEN ENDDO END IF ! -IF (LCOLD .AND. NMOD_IMM.GE.1) THEN +IF (NMOM_I.GE.2 .AND. NMOD_IMM.GE.1) THEN JMOD_IMM = 0 DO JMOD = 1, NMOD_CCN IF (NIMM(JMOD) == 1) THEN @@ -1145,7 +1145,7 @@ WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) END WHERE ! ZW1(:,:,:) = 0. -IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) +IF (NMOM_C.GE.2 .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) ZW2(:,:,:) = 0. WHERE ( ZW(:,:,:) > 0. ) @@ -1153,7 +1153,7 @@ WHERE ( ZW(:,:,:) > 0. ) ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) ENDWHERE ! -IF (LWARM .AND. NMOD_CCN.GE.1) THEN +IF (NMOM_C.GE.2 .AND. NMOD_CCN.GE.1) THEN DO JMOD = 1, NMOD_CCN PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) @@ -1230,22 +1230,22 @@ IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:) ! ! Prepare 3D number concentrations ! -IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) -IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) +IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) ! IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,NSV_LIMA_SCAVMASS) = PMAS(:,:,:) ! -IF ( LWARM .AND. NMOD_CCN .GE. 1 ) THEN +IF ( NMOM_C.GE.2 .AND. NMOD_CCN.GE.1 ) THEN PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:) PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:) END IF ! -IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN +IF ( NMOM_I.GE.2 .AND. NMOD_IFN.GE.1 ) THEN PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:) PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:) END IF ! -IF ( LCOLD .AND. NMOD_IMM .GE. 1 ) THEN +IF ( NMOM_I.GE.2 .AND. NMOD_IMM.GE.1 ) THEN PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:) END IF ! @@ -1281,13 +1281,13 @@ if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - if ( lwarm .and. nmom_c.ge.2) & + if ( nmom_c.ge.2) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) - if ( lcold .and. nmom_i.ge.2) & + if ( nmom_i.ge.2) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) - if ( lwarm ) then + if ( nmom_c.ge.2 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl call Budget_store_end( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) @@ -1295,7 +1295,7 @@ if ( nbumod == kmi .and. lbu_enable ) then call Budget_store_end( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if - if ( lcold ) then + if ( nmom_i.ge.2 ) then do jl = 1, nmod_ifn idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl call Budget_store_end( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) diff --git a/src/mesonh/micro/lima_cold.f90 b/src/mesonh/micro/lima_cold.f90 index 56ee422eb7a119cf64698742900da317719b4c39..1fda9a1dbf17ecc53562e3c64c694f62bd713e68 100644 --- a/src/mesonh/micro/lima_cold.f90 +++ b/src/mesonh/micro/lima_cold.f90 @@ -261,16 +261,16 @@ PCSS(:,:,:) = 0. PCGS(:,:,:) = 0. PCHS(:,:,:) = 0. ! -IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) -IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) +IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) IF ( NMOM_S.GE.2 ) PCST(:,:,:) = PSVT(:,:,:,NSV_LIMA_NS) IF ( NMOM_G.GE.2 ) PCGT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NG) IF ( NMOM_H.GE.2 ) PCHT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NH) ! -IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) -IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) +IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) IF ( NMOM_S.GE.2 ) PCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) IF ( NMOM_G.GE.2 ) PCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) IF ( NMOM_H.GE.2 ) PCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) @@ -375,7 +375,7 @@ IF (LNUCL) THEN PNAS, PIFS, PINS, PNIS ) END IF ! - IF (LWARM .OR. (LHHONI .AND. NMOD_CCN.GE.1)) THEN + IF (NMOM_C.GE.1 .OR. (LHHONI .AND. NMOD_CCN.GE.1)) THEN CALL LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI, & PZZ, PRHODJ, & PRHODREF, PEXNREF, PPABST, PW_NU, & @@ -393,7 +393,7 @@ END IF !* 4. SLOW PROCESSES: depositions, aggregation ! ---------------------------------------- ! -IF (LSNOW) THEN +IF (NMOM_S.GE.1) THEN ! IF(NMOM_S.GE.2) THEN CALL LIMA_COLD_SLOW_PROCESSES(PTSTEP, KMI, PZZ, PRHODJ, & @@ -449,9 +449,9 @@ IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:) ! ! Prepare 3D number concentrations ! -IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) -IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) -IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) +IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) +IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) IF ( NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = PCSS(:,:,:) IF ( NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = PCGS(:,:,:) IF ( NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = PCHS(:,:,:) diff --git a/src/mesonh/micro/lima_cold_hom_nucl.f90 b/src/mesonh/micro/lima_cold_hom_nucl.f90 index 407ae868d0a8dc3de26edbc0c024a60fe0c4ba79..cf9fbfe5898328b4b9f941a15c5a8b6fcefbb910 100644 --- a/src/mesonh/micro/lima_cold_hom_nucl.f90 +++ b/src/mesonh/micro/lima_cold_hom_nucl.f90 @@ -104,7 +104,7 @@ USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI, XG USE MODD_NSV USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC, LWARM, LRAIN +USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC, NMOM_C, NMOM_R USE MODD_PARAM_LIMA_COLD, ONLY: XRCOEF_HONH, XCEXP_DIFVAP_HONH, XCOEF_DIFVAP_HONH,& XCRITSAT1_HONH, XCRITSAT2_HONH, XTMAX_HONH, & XTMIN_HONH, XC1_HONH, XC2_HONH, XC3_HONH, & @@ -485,7 +485,7 @@ IF (INEGT.GT.0) THEN ! Compute the droplet homogeneous nucleation source: RCHONI ! -> Pruppacher(1995) ! -IF (LWARM) THEN +IF (NMOM_C.GE.2) THEN if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONC', & Unpack( zths(:), mask = gnegt(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) @@ -547,7 +547,7 @@ END IF ! ! Compute the drop homogeneous nucleation source: RRHONG ! -IF (LWARM .AND. LRAIN) THEN +IF (NMOM_R.GE.2) THEN if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONR', & Unpack( zths(:), mask = gnegt(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) diff --git a/src/mesonh/micro/lima_cold_slow_processes.f90 b/src/mesonh/micro/lima_cold_slow_processes.f90 index 0f74d6562a71c2d67b28f644df40dd449eb50bdd..64917a92a27c4bc1f32425e3d931f9919750fd89 100644 --- a/src/mesonh/micro/lima_cold_slow_processes.f90 +++ b/src/mesonh/micro/lima_cold_slow_processes.f90 @@ -98,7 +98,7 @@ USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, & XCL, XCI, XTT, XLSTT, XALPI, XBETAI, XGAMI USE MODD_NSV, ONLY: NSV_LIMA_NI, NSV_LIMA_NS USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: LSNOW, LSNOW_T, XRTMIN, XCTMIN, & +USE MODD_PARAM_LIMA, ONLY: LSNOW_T, XRTMIN, XCTMIN, & XALPHAI, XALPHAS, XNUI, XNUS, NMOM_S USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XNS, XBI, XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & diff --git a/src/mesonh/micro/lima_mixed.f90 b/src/mesonh/micro/lima_mixed.f90 index 400969656b513327addf6ebc070bff61d2e22fce..96fa6513876b27137b222d8b68de552fa8b65c9a 100644 --- a/src/mesonh/micro/lima_mixed.f90 +++ b/src/mesonh/micro/lima_mixed.f90 @@ -104,9 +104,9 @@ USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, & XALPI, XBETAI, XGAMI USE MODD_NSV USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: NMOD_IFN, XRTMIN, XCTMIN, LWARM, LCOLD, & - NMOD_CCN, NMOD_IMM, LRAIN, LSNOW, LHAIL, LSNOW_T, & - NMOM_S, NMOM_G, NMOM_H +USE MODD_PARAM_LIMA, ONLY: NMOD_IFN, XRTMIN, XCTMIN, & + NMOD_CCN, NMOD_IMM, LSNOW_T, & + NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XLBR, XLBEXR USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XSCFAC, & XLBDAS_MAX, XLBDAS_MIN, XTRANS_MP_GAMMAS, & @@ -316,16 +316,16 @@ PCSS(:,:,:) = 0. PCGS(:,:,:) = 0. PCHS(:,:,:) = 0. ! -IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) -IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) +IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI) IF ( NMOM_S.GE.2 ) PCST(:,:,:) = PSVT(:,:,:,NSV_LIMA_NS) IF ( NMOM_G.GE.2 ) PCGT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NG) IF ( NMOM_H.GE.2 ) PCHT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NH) ! -IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) -IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) +IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) IF ( NMOM_S.GE.2 ) PCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) IF ( NMOM_G.GE.2 ) PCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) IF ( NMOM_H.GE.2 ) PCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) @@ -608,7 +608,7 @@ IF( IMICRO >= 0 ) THEN ! 3. Compute the fast RS and RG processes ! ------------------------------------ ! -IF (LSNOW) THEN +IF (NMOM_S.GE.1) THEN CALL LIMA_MIXED_FAST_PROCESSES(ZRHODREF, ZZT, ZPRES, PTSTEP, & ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ, & ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & @@ -749,12 +749,12 @@ IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:) ! ! Prepare 3D number concentrations ! -PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) -IF ( LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) +IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) +IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) IF ( NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = PCSS(:,:,:) IF ( NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = PCGS(:,:,:) IF ( NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = PCHS(:,:,:) -PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:) ! IF ( NMOD_CCN .GE. 1 ) THEN PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:) diff --git a/src/mesonh/micro/lima_mixed_fast_processes.f90 b/src/mesonh/micro/lima_mixed_fast_processes.f90 index 6537474b4c65b126bd6e1052f844cd77d45c2e8b..fbd6f4262aeee15270085e26359d1cf0939daf31 100644 --- a/src/mesonh/micro/lima_mixed_fast_processes.f90 +++ b/src/mesonh/micro/lima_mixed_fast_processes.f90 @@ -309,13 +309,13 @@ LOGICAL :: M2_ICE !------------------------------------------------------------------------------- ! M2_ICE = NMOM_S.GE.2 .AND. NMOM_G.GE.2 -IF (LHAIL) M2_ICE = M2_ICE .AND. NMOM_H.GE.2 +IF (NMOM_H.GE.1) M2_ICE = M2_ICE .AND. NMOM_H.GE.2 ! ! ################# ! FAST RS PROCESSES ! ################# ! -SNOW: IF (LSNOW) THEN +SNOW: IF (NMOM_S.GE.1) THEN ! ! !* 1.1 Cloud droplet riming of the aggregates @@ -832,7 +832,7 @@ ZZW1(:,2:3) = 0.0 GACC(:) = (PRRT1D(:)>XRTMIN(3)) .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRRS1D(:)>XRTMIN(3)/PTSTEP) .AND. (PZT(:)<XTT) IGACC = COUNT( GACC(:) ) ! -IF( IGACC>0 .AND. LRAIN) THEN +IF( IGACC>0 .AND. NMOM_R.GE.2) THEN ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'ACC', & @@ -1269,7 +1269,7 @@ if ( nbumod == kmi .and. lbu_enable ) then Unpack( pcss1d(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'WETG', & Unpack( pcgs1d(:), mask = gmicro(:, :, :), field = pcgs(:, :, :) ) * prhodj(:, :, :) ) - if (LHAIL) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', & + if (NMOM_H.GE.2) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', & Unpack( pchs1d(:), mask = gmicro(:, :, :), field = pchs(:, :, :) ) * prhodj(:, :, :) ) end if end if @@ -1506,7 +1506,7 @@ END WHERE ! ZZW(:) = 0.0 NHAIL = 0. -IF (LHAIL) NHAIL = 1. +IF (NMOM_H.GE.1) NHAIL = 1. DO JJ=1, SIZE(PRGT1D) IF ( PRGT1D(JJ)>XRTMIN(6) .AND. PZT(JJ)<XTT .AND. & (ZRDRYG(JJ)-ZZW1(JJ,2)-ZZW1(JJ,3))>(ZRWETG(JJ)-ZZW1(JJ,5)-ZZW1(JJ,6)) .AND. (ZRWETG(JJ)-ZZW1(JJ,5)-ZZW1(JJ,6))>0.0 ) THEN @@ -1576,7 +1576,7 @@ if ( nbumod == kmi .and. lbu_enable ) then Unpack( pcss1d(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'WETG', & Unpack( pcgs1d(:), mask = gmicro(:, :, :), field = pcgs(:, :, :) ) * prhodj(:, :, :) ) - if (LHAIL) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', & + if (NMOM_H.GE.2) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', & Unpack( pchs1d(:), mask = gmicro(:, :, :), field = pchs(:, :, :) ) * prhodj(:, :, :) ) end if end if @@ -1767,7 +1767,7 @@ end if ! ################# ! ! -HAIL: IF (LHAIL) THEN +HAIL: IF (NMOM_H.GE.1) THEN ! GHAIL(:) = PRHT1D(:)>XRTMIN(7) IHAIL = COUNT(GHAIL(:)) diff --git a/src/mesonh/micro/lima_mixed_slow_processes.f90 b/src/mesonh/micro/lima_mixed_slow_processes.f90 index 1daf983b673fe3e601bdfe4ccd33a7a5f7f93304..609f54dd8d8f6d0a7ca7af505805ca7b9be8083f 100644 --- a/src/mesonh/micro/lima_mixed_slow_processes.f90 +++ b/src/mesonh/micro/lima_mixed_slow_processes.f90 @@ -132,7 +132,7 @@ use modd_budget, only: lbu_enable, nbumod, USE MODD_CST, ONLY : XTT, XALPI, XBETAI, XGAMI, & XALPW, XBETAW, XGAMW USE MODD_NSV -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, NMOD_IFN, LSNOW, LHAIL, NMOM_S, NMOM_G, NMOM_H +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, NMOD_IFN, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_COLD, ONLY : XDI, X0DEPI, X2DEPI, XSCFAC USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX, XCCG, XCXG, & X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG, & @@ -202,7 +202,7 @@ INTEGER :: JMOD_IFN ! --------------------------------------------- ! ! -IF (LSNOW) THEN +IF (NMOM_S.GE.1) THEN ZZW(:) = 0.0 WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) ) ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) * ZCGT(:) * & @@ -230,7 +230,7 @@ END IF ! --------------------------------------------- ! ! -IF (LHAIL .AND. NMOM_H.GE.2) THEN +IF (NMOM_H.GE.2) THEN ZZW(:) = 0.0 WHERE ( (ZRHT(:)>XRTMIN(7)) .AND. (ZRHS(:)>XRTMIN(7)/PTSTEP) ) ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) * ZCHT(:) * & diff --git a/src/mesonh/micro/lima_warm.f90 b/src/mesonh/micro/lima_warm.f90 index 97ff7edb8ce5000ddb47d67efbcde89932c74a91..4f954463b5071171871a778652241b6c1bc44738 100644 --- a/src/mesonh/micro/lima_warm.f90 +++ b/src/mesonh/micro/lima_warm.f90 @@ -262,11 +262,11 @@ PCRT(:,:,:) = 0. PCCS(:,:,:) = 0. PCRS(:,:,:) = 0. ! -IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) +IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR) ! -IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) +IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) ! IF ( NMOD_CCN .GE. 1 ) THEN ALLOCATE( ZNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) ) @@ -311,10 +311,10 @@ ZT(:,:,:) = PTHT(:,:,:) * (PPABST(:,:,:)/XP00)**(XRD/XCPD) ! ! if ( lbudget_rc .and. osedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_rr .and. orain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_rr .and. nmom_r.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then if ( osedc ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', pccs(:, :, :) * prhodj(:, :, :) ) - if ( orain ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) ) + if ( nmom_r.ge.2 ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) ) end if CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI, & @@ -326,10 +326,10 @@ CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI, & PINPRR3D ) if ( lbudget_rc .and. osedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_rr .and. orain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_rr .and. nmom_r.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then if ( osedc ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', pccs(:, :, :) * prhodj(:, :, :) ) - if ( orain ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) ) + if ( nmom_r.ge.2 ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) ) end if ! ! 2.bis Deposition at 1st level above ground @@ -411,7 +411,7 @@ END IF ! LACTI ! ------------------------ ! ! -IF (ORAIN) THEN +IF (NMOM_R.GE.2) THEN if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'REVA', pths(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'REVA', prvs(:, :, :) * prhodj(:, :, :) ) @@ -466,8 +466,8 @@ IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:) ! ! Prepare 3D number concentrations ! -IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) -IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) +IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:) +IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:) ! IF ( NMOD_CCN .GE. 1 ) THEN PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZNFS(:,:,:,:) diff --git a/src/mesonh/micro/lima_warm_coal.f90 b/src/mesonh/micro/lima_warm_coal.f90 index 1c264a8fd844abd9c9e484ab25f60fdd5cbc938f..01d0bd60c6ecccca42efa09722ba36e0fda446f0 100644 --- a/src/mesonh/micro/lima_warm_coal.f90 +++ b/src/mesonh/micro/lima_warm_coal.f90 @@ -244,7 +244,7 @@ IF( IMICRO >= 0 ) THEN ! !------------------------------------------------------------------------------- ! -IF (LRAIN) THEN +IF (NMOM_R.GE.2) THEN ! !* 2. Self-collection of cloud droplets ! ------------------------------------ @@ -445,7 +445,7 @@ IF (LRAIN) THEN if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SCBU', & Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) END IF -END IF ! LRAIN +END IF ! ! !------------------------------------------------------------------------------- diff --git a/src/mesonh/micro/modn_param_lima.f90 b/src/mesonh/micro/modn_param_lima.f90 index 44d46714532cecea5636b296e32983968ea57ab6..390ba1dc8853237ddf00550f04dbeb9465636c3d 100644 --- a/src/mesonh/micro/modn_param_lima.f90 +++ b/src/mesonh/micro/modn_param_lima.f90 @@ -17,7 +17,7 @@ USE MODD_PARAM_LIMA IMPLICIT NONE ! ! -NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,& +NAMELIST/NAM_PARAM_LIMA/LNUCL, LSEDI, LHHONI, LMEYERS, & NMOM_I, NMOM_S, NMOM_G, NMOM_H, & NMOD_IFN, XIFN_CONC, LIFN_HOM, & CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE, & @@ -25,7 +25,7 @@ NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,& XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG, & XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS, & LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI, & - LWARM, LACTI, LRAIN, LSEDC, LACTIT, LBOUND, LSPRO, & + LACTI, LSEDC, LACTIT, LBOUND, LSPRO, & LADJ, LKHKO, LKESSLERAC, NMOM_C, NMOM_R, & NMOD_CCN, XCCN_CONC, & LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN, & diff --git a/src/mesonh/micro/set_conc_lima.f90 b/src/mesonh/micro/set_conc_lima.f90 index 09e6bc1e51c5658584cd908ebddbd8803ee797db..fb2c50a54b52c463506882240c7911d86a2e2ffe 100644 --- a/src/mesonh/micro/set_conc_lima.f90 +++ b/src/mesonh/micro/set_conc_lima.f90 @@ -73,7 +73,7 @@ contains !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LCOLD, LWARM, LRAIN, NMOD_CCN, NMOD_IFN, & +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, NMOD_CCN, NMOD_IFN, & NMOM_C, NMOM_R, NMOM_I USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI, XAS, XBS USE MODD_PARAM_LIMA_MIXED,ONLY : XAG, XBG, XAH, XBH @@ -112,7 +112,7 @@ ILUOUT = TLUOUT%NLU !* 2. INITIALIZATION ! -------------- ! -IF (LWARM .AND. NRR.GE.2 .AND. NMOM_C.GE.2) THEN +IF (NRR.GE.2 .AND. NMOM_C.GE.2) THEN ! ! droplets ! @@ -140,7 +140,7 @@ IF (LWARM .AND. NRR.GE.2 .AND. NMOM_C.GE.2) THEN ! END IF END IF ! -IF (LWARM .AND. LRAIN .AND. NRR.GE.3 .AND. NMOM_R.GE.2) THEN +IF (NRR.GE.3 .AND. NMOM_R.GE.2) THEN ! ! drops ! @@ -163,7 +163,7 @@ IF (LWARM .AND. LRAIN .AND. NRR.GE.3 .AND. NMOM_R.GE.2) THEN END IF END IF ! -IF (LCOLD .AND. NRR.GE.4 .AND. NMOM_I.GE.2) THEN +IF NRR.GE.4 .AND. NMOM_I.GE.2) THEN ! ! ice crystals !