From 498511e0261a0f44fdb685d680c88eaa5675e567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Vi=C3=A9?= <benoit.vie@meteo.fr> Date: Wed, 2 Feb 2022 14:19:52 +0100 Subject: [PATCH] Add namelist keyword NMOM_I + compatibility of ICE1M with SUBG_COND - 1st try --- src/MNH/default_desfmn.f90 | 3 +- src/MNH/lima_adjust_split.f90 | 261 +++++++++++++------------- src/MNH/lima_bergeron.f90 | 26 +-- src/MNH/lima_ice_aggregation_snow.f90 | 44 +++-- src/MNH/lima_ice_deposition.f90 | 90 +++++---- src/MNH/lima_nucleation_procs.f90 | 49 ++++- src/MNH/lima_snow_deposition.f90 | 80 ++++---- src/MNH/lima_tendencies.f90 | 33 ++-- src/MNH/modd_param_lima.f90 | 1 + src/MNH/modn_param_lima.f90 | 2 +- src/MNH/resolved_cloud.f90 | 2 +- 11 files changed, 300 insertions(+), 291 deletions(-) diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index c1be2c51e..8bf7523a2 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -274,7 +274,7 @@ USE MODD_ALLSTATION_n ! ! USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, & - NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & + NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & CINT_MIXING, NMOD_IMM, NIND_SPECIE, & CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & XFACTNUC_DEP, XFACTNUC_CON, & @@ -1030,6 +1030,7 @@ IF (KMI == 1) THEN CHEVRIMED_ICE_LIMA = 'GRAU' XFACTNUC_DEP = 1.0 XFACTNUC_CON = 1.0 + NMOM_I = 2 NMOD_IFN = 1 NIND_SPECIE = 1 LMEYERS = .FALSE. diff --git a/src/MNH/lima_adjust_split.f90 b/src/MNH/lima_adjust_split.f90 index 6d8bd3dae..0e3a9a9da 100644 --- a/src/MNH/lima_adjust_split.f90 +++ b/src/MNH/lima_adjust_split.f90 @@ -14,7 +14,7 @@ INTERFACE PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, & PPABST, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF ) ! USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, only: NSV_LIMA_BEG @@ -59,6 +59,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction ! END SUBROUTINE LIMA_ADJUST_SPLIT @@ -73,7 +74,7 @@ END MODULE MODI_LIMA_ADJUST_SPLIT PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, & PPABST, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF ) ! ########################################################################### ! !!**** *MIMA_ADJUST* - compute the fast microphysical sources @@ -218,6 +219,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction ! ! @@ -273,7 +275,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ZRV, ZRV2, & ZRC, ZRC2, & ZRI, & - ZSIGS, ZSRCS, & + Z_SIGS, Z_SRCS, & ZW_MF LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & :: GMICRO ! Test where to compute cond/dep proc. @@ -310,6 +312,8 @@ INTEGER :: JMOD, JMOD_IFN, JMOD_IMM ! INTEGER , DIMENSION(3) :: BV TYPE(TFIELDDATA) :: TZFIELD +LOGICAL :: G_SIGMAS, GUSERI +REAL :: Z_SIGQSAT ! !------------------------------------------------------------------------------- ! @@ -497,152 +501,147 @@ DO JITER =1,ITERMAX !* 3. FIRST ORDER SUBGRID CONDENSATION SCHEME ! --------------------------------------- ! - IF ( OSUBG_COND ) THEN - ! - ZRV=PRVS*PTSTEP - ZRC=PRCS*PTSTEP - ZRV2=PRVT - ZRC2=PRCT + ZRV=PRVS*PTSTEP + ZRC=PRCS*PTSTEP + ZRV2=PRVT + ZRC2=PRCT + IF (NMOM_I.EQ.1) THEN + ZRI=PRIS*PTSTEP + GUSERI=.TRUE. + ELSE ZRI=0. - ZSIGS=PSIGS - CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & - HCONDENS, HLAMBDA3, & - PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, & - ZSIGS, PMFCONV, PCLDFR, PSRCS, .FALSE., OSIGMAS, & - PSIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) - PCLDFR(:,:,:) = MIN(PCLDFR(:,:,:) + PCF_MF(:,:,:) , 1.) - ZRV(:,:,:) = ZRV(:,:,:) - MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) - ZRC(:,:,:) = ZRC(:,:,:) + MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) - ZW_MF=0. - CALL LIMA_CCN_ACTIVATION (TPFILE, & - PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, & - PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & - PCLDFR ) -! + GUSERI=.FALSE. + END IF + IF (OSUBG_COND) THEN + Z_SIGS=PSIGS + G_SIGMAS=OSIGMAS + Z_SIGQSAT=PSIGQSAT ELSE -! -!------------------------------------------------------------------------------- -! - ZRV=PRVS*PTSTEP - ZRC=PRCS*PTSTEP - ZRI=PRIS*PTSTEP - ZSIGS=0 - CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & - HCONDENS, HLAMBDA3, & - PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, & - ZSIGS, PMFCONV, PCLDFR, ZSRCS, .TRUE., OSIGMAS=.TRUE., & - PSIGQSAT=0., PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) + Z_SIGS=0. + G_SIGMAS=.TRUE. + Z_SIGQSAT=0. + END IF - ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ---------- - ! 2 Delta t + CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & + HCONDENS, HLAMBDA3, & + PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, & + Z_SIGS, PMFCONV, PCLDFR, Z_SRCS, GUSERI, G_SIGMAS, & + Z_SIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) - ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri + IF (OSUBG_COND) THEN + PSRCS=Z_SRCS + ZW_MF=0. + CALL LIMA_CCN_ACTIVATION (TPFILE, & + PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, & + PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & + PCLDFR ) + END IF + +END DO ! !* 5.1 compute the sources ! - WHERE( ZW1(:,:,:) < 0.0 ) - ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) - ELSEWHERE - ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) - END WHERE - PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + & - ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) -! - WHERE( ZW2(:,:,:) < 0.0 ) - ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) ) - ELSEWHERE - ZW2(:,:,:) = MIN ( ZW2(:,:,:), PRVS(:,:,:) ) - END WHERE - PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + & - ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) -! - END IF ! end of adjustment procedure (test on OSUBG_COND) + ! Rc - Rc* +ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ---------- + ! 2 Delta t +WHERE( ZW1(:,:,:) < 0.0 ) + ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) +ELSEWHERE + ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) +END WHERE +PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) +PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) +PTHS(:,:,:) = PTHS(:,:,:) + & + ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) ! -! Remove cloud droplets if there are few - - ZMASK(:,:,:) = 0.0 - ZW(:,:,:) = 0. - WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) - PRVS(:,:,:) = PRVS(:,:,:) + PRCS(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - PRCS(:,:,:)*ZLV(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:)) - PRCS(:,:,:) = 0.0 - ZW(:,:,:) = MAX(PCCS(:,:,:),0.) - PCCS(:,:,:) = 0.0 +IF (NMOM_I.EQ.1) THEN + ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri +! + WHERE( ZW2(:,:,:) < 0.0 ) + ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) ) + ELSEWHERE + ZW2(:,:,:) = MIN ( ZW2(:,:,:), PRVS(:,:,:) ) END WHERE + PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:) + PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) + & + ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) +END IF ! - ZW1(:,:,:) = 0. - IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) - ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) - ZW2(:,:,:) = 0. - WHERE ( ZW(:,:,:) > 0. ) - ZMASK(:,:,:) = 1.0 - ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) - ENDWHERE +!* 5.2 compute the cloud fraction PCLDFR ! - IF (LWARM .AND. NMOD_CCN.GE.1) THEN - DO JMOD = 1, NMOD_CCN - PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & - ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) - PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) - & - ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) - PNAS(:,:,:,JMOD) = MAX( 0.0 , PNAS(:,:,:,JMOD) ) - ENDDO +IF ( .NOT. OSUBG_COND ) THEN + WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / PTSTEP) + PCLDFR(:,:,:) = 1. + ELSEWHERE + PCLDFR(:,:,:) = 0. + ENDWHERE + IF ( SIZE(PSRCS,3) /= 0 ) THEN + WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT) + PSRCS(:,:,:) = 1. + ELSEWHERE + PSRCS(:,:,:) = 0. + ENDWHERE + END IF +ELSE +! We limit PRC_MF+PRI_MF to PRVS*PTSTEP to avoid negative humidity + ZW1(:,:,:)=PRC_MF(:,:,:)/PTSTEP + IF (NMOM_I.EQ.1) THEN + ZW2(:,:,:)=PRI_MF(:,:,:)/PTSTEP + ELSE + ZW2(:,:,:)=0. END IF + WHERE(ZW1(:,:,:)+ZW2(:,:,:)>PRVS(:,:,:)) + ZW1(:,:,:)=ZW1(:,:,:)*PRVS(:,:,:)/(ZW1(:,:,:)+ZW2(:,:,:)) + ZW2(:,:,:)=PRVS(:,:,:)-ZW1(:,:,:) + ENDWHERE +! Compute CF and update rc, ri from MF scheme + PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) -ZW2(:,:,:) + PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) + PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:) + PCCS(:,:,:) = PCCT(:,:,:) / PTSTEP + PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP + PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP + PTHS(:,:,:) = PTHS(:,:,:) + & + (ZW1(:,:,:) * ZLV(:,:,:) + ZW2 * ZLS(:,:,:)) / ZCPH(:,:,:) & + / PEXNREF(:,:,:) +END IF ! - IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:)) -! +! Remove cloud droplets if there are few ! -END DO ! end of the iterative loop +ZMASK(:,:,:) = 0.0 +ZW(:,:,:) = 0. +WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) + PRVS(:,:,:) = PRVS(:,:,:) + PRCS(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) - PRCS(:,:,:)*ZLV(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:)) + PRCS(:,:,:) = 0.0 + ZW(:,:,:) = MAX(PCCS(:,:,:),0.) + PCCS(:,:,:) = 0.0 +END WHERE ! +ZW1(:,:,:) = 0. +IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) +ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) +ZW2(:,:,:) = 0. +WHERE ( ZW(:,:,:) > 0. ) + ZMASK(:,:,:) = 1.0 + ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) +ENDWHERE +! +IF (LWARM .AND. NMOD_CCN.GE.1) THEN + DO JMOD = 1, NMOD_CCN + PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & + ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) + PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) - & + ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) + PNAS(:,:,:,JMOD) = MAX( 0.0 , PNAS(:,:,:,JMOD) ) + ENDDO +END IF ! -!* 5.2 compute the cloud fraction PCLDFR (binary !!!!!!!) +IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:)) ! -IF ( .NOT. OSUBG_COND ) THEN - WHERE (PRCS(:,:,:) + PRIS(:,:,:) + PRSS(:,:,:) > 1.E-12 / ZDT) - PCLDFR(:,:,:) = 1. - ELSEWHERE - PCLDFR(:,:,:) = 0. - ENDWHERE -END IF ! -IF ( SIZE(PSRCS,3) /= 0 ) THEN - WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT) - PSRCS(:,:,:) = 1. - ELSEWHERE - PSRCS(:,:,:) = 0. - ENDWHERE -END IF ! -IF ( OSUBG_COND ) THEN - ! - ! Mixing ratio change (cloud liquid water) - ! - ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP - WHERE( ZW1(:,:,:) < 0.0 ) - ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) - ELSEWHERE - ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) - END WHERE - - WHERE (PCCT(:,:,:) < PCLDFR(:,:,:)*XCTMIN(2) .OR. ZRC(:,:,:)<PCLDFR(:,:,:)*XRTMIN(2)) - ZW1=-PRCS - PCCS=0. - PCLDFR=0. - END WHERE - - PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) - PCCS(:,:,:) = PCCT(:,:,:) / PTSTEP - PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP - PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP - PTHS(:,:,:) = PTHS(:,:,:) + & - ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) -END IF ! fin test OSUBG_COND - IF ( tpfile%lopened ) THEN TZFIELD%CMNHNAME = 'NEB' TZFIELD%CSTDNAME = '' @@ -661,7 +660,6 @@ END IF !* 6. SAVE CHANGES IN PRS AND PSVS ! ---------------------------- ! -! ! Prepare 3D water mixing ratios PRS(:,:,:,1) = PRVS(:,:,:) IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:) @@ -720,7 +718,6 @@ if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) - !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then if ( lwarm ) & diff --git a/src/MNH/lima_bergeron.f90 b/src/MNH/lima_bergeron.f90 index 9afd9ac36..7a4967708 100644 --- a/src/MNH/lima_bergeron.f90 +++ b/src/MNH/lima_bergeron.f90 @@ -10,8 +10,7 @@ INTERFACE SUBROUTINE LIMA_BERGERON (LDCOMPUTE, & PRCT, PRIT, PCIT, PLBDI, & PSSIW, PAI, PCJ, PLVFACT, PLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) + P_TH_BERFI, P_RC_BERFI ) ! LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! @@ -28,10 +27,6 @@ REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI !! END SUBROUTINE LIMA_BERGERON END INTERFACE @@ -41,8 +36,7 @@ END MODULE MODI_LIMA_BERGERON SUBROUTINE LIMA_BERGERON( LDCOMPUTE, & PRCT, PRIT, PCIT, PLBDI, & PSSIW, PAI, PCJ, PLVFACT, PLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) + P_TH_BERFI, P_RC_BERFI ) ! ############################################################# ! !! PURPOSE @@ -89,18 +83,9 @@ REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI ! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -! -!* 0.2 Declarations of local variables : -! -! !------------------------------------------------------------------------------- ! -! -!* 1. Bergeron-Findeisen process -! -------------------------- +! Bergeron-Findeisen process ! P_TH_BERFI(:) = 0.0 P_RC_BERFI(:) = 0.0 @@ -111,11 +96,6 @@ WHERE( (PRCT(:)>XRTMIN(2)) .AND. (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) . P_TH_BERFI(:) = - P_RC_BERFI(:)*(PLSFACT(:)-PLVFACT(:)) END WHERE ! -!PA_RC(:) = PA_RC(:) + P_RC_BERFI(:) -!PA_RI(:) = PA_RI(:) - P_RC_BERFI(:) -!PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) -! -! !------------------------------------------------------------------------------- ! END SUBROUTINE LIMA_BERGERON diff --git a/src/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90 index 698697a2c..7ded11bd1 100644 --- a/src/MNH/lima_ice_aggregation_snow.f90 +++ b/src/MNH/lima_ice_aggregation_snow.f90 @@ -59,7 +59,7 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW ! ------------ ! USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT, NMOM_I USE MODD_PARAM_LIMA_COLD, ONLY : XBI, XCCS, XCXS, XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & XAGGS_RLARGE1, XAGGS_RLARGE2, XFIAGGS ! @@ -99,24 +99,30 @@ P_RI_AGGS(:) = 0. P_CI_AGGS(:) = 0. ! ! -WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) -!!$ ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 -!!$ ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*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(:)) -! - ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & - * PRIT(:) & - * PLBDS(:)**(1.-0.27-2.) & - * PRHODREF(:)**(-XCEXVT) -! - P_RI_AGGS(:) = - ZZW1(:) -END WHERE +IF (NMOM_I.EQ.1) THEN + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) + ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & + * PRIT(:) & + * PLBDS(:)**(1.-0.27-2.) & + * PRHODREF(:)**(-XCEXVT) +! + P_RI_AGGS(:) = - ZZW1(:) + END WHERE +ELSE + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) + ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 + ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*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 +END IF ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_ice_deposition.f90 b/src/MNH/lima_ice_deposition.f90 index 34dd0c2c1..0c9bfedda 100644 --- a/src/MNH/lima_ice_deposition.f90 +++ b/src/MNH/lima_ice_deposition.f90 @@ -73,8 +73,9 @@ SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS, LSNOW -USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS,& + LSNOW, NMOM_I +USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & @@ -131,54 +132,51 @@ P_CI_CNVS(:) = 0. GMICRO(:) = LDCOMPUTE(:) .AND. PRIT(:)>XRTMIN(4) ! ! -WHERE( GMICRO ) +IF (NMOM_I.EQ.1) THEN + WHERE( GMICRO ) ! +!* Conversion of pristine ice to r_s: RICNVS +! ----------------------------------------- ! -!* 2.2 Deposition of water vapor on r_i: RVDEPI -! ----------------------------------------------- + ZCRIAUTI(:)=MIN(0.2E-4,10**(0.06*(PT(:)-XTT)-3.5)) + ZZW(:) = 0.0 + WHERE ( (PRIT(:)>XRTMIN(4))) + ZZW(:) = 1.E-3 * EXP( 0.015*(PT(:)-XTT) ) * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) + END WHERE ! -! -! ZZW(:) = 0.0 -! WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) ) -! ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) * & -! ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) ) -! END WHERE -! -! P_RI_DEPI(:) = ZZW(:) -!!$ P_TH_DEPI(:) = P_RI_DEPI(:) * PLSFACT(:) -! -!!$ PA_TH(:) = PA_TH(:) + P_TH_DEPI(:) -!!$ PA_RV(:) = PA_RV(:) - P_RI_DEPI(:) -!!$ PA_RI(:) = PA_RI(:) + P_RI_DEPI(:) -! -! -!* 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(:)) -!!$! -!!$ ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:) -!!$! -!!$ ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) -!!$ END WHERE -! - ZCRIAUTI(:)=MIN(0.2E-4,10**(0.06*(PT(:)-XTT)-3.5)) - ZZW(:) = 0.0 - WHERE ( (PRIT(:)>XRTMIN(4))) - ZZW(:) = 1.E-3 * EXP( 0.015*(PT(:)-XTT) ) * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) + P_RI_CNVS(:) = - ZZW(:) END WHERE -! -P_RI_CNVS(:) = - ZZW(:) -!P_CI_CNVS(:) = - ZZW2(:) -! -! -END WHERE +ELSE + WHERE( GMICRO ) +! +!* Deposition of water vapor on r_i: RVDEPI +! ---------------------------------------- +! + ZZW(:) = 0.0 + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) ) + ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) * & + ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) ) + END WHERE + P_RI_DEPI(:) = ZZW(:) +! +!* 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(:)) +! + ZZW(:) = (XR0DEPIS + XR1DEPIS*PCJ(:))*ZZX(:) +! + ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) + END WHERE + P_RI_CNVS(:) = - ZZW(:) + P_CI_CNVS(:) = - ZZW2(:) + END WHERE +END IF ! IF (.NOT.LSNOW) THEN P_RI_CNVS(:) = 0. diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90 index 430099268..11fb8d6c5 100644 --- a/src/MNH/lima_nucleation_procs.f90 +++ b/src/MNH/lima_nucleation_procs.f90 @@ -90,7 +90,7 @@ 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, & - NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO + NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I USE MODD_TURB_n, ONLY : LSUBG_COND use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end @@ -196,7 +196,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF ( LCOLD .AND. LNUCL .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN +IF ( LCOLD .AND. 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 @@ -260,14 +260,43 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LNUCL .AND. LMEYERS) THEN -! CALL LIMA_MEYERS_NUCLEATION (PTSTEP, & -! PRHODREF, PEXNREF, PPABST, & -! PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & -! PCCT, PCIT, PINT, & -! Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, & -! Z_TH_HINC, Z_RC_HINC, Z_CC_HINC, & -! PICEFR ) +IF (LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN + CALL LIMA_MEYERS_NUCLEATION (PTSTEP, & + PRHODREF, PEXNREF, PPABST, & + PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & + PCCT, PCIT, PINT, & + Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, & + Z_TH_HINC, Z_RC_HINC, Z_CC_HINC, & + PICEFR ) + WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. + ! + if ( lbu_enable ) then + if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIND', z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_sv ) then + call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if (nmod_ifn > 0 ) & + call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', & + z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + end if + + if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HINC', z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HINC', z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( lbudget_sv ) then + call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if (nmod_ifn > 0 ) & + call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', & + -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + end if + end if +END IF +! +!------------------------------------------------------------------------------- +! +IF (LCOLD .AND. 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 diff --git a/src/MNH/lima_snow_deposition.f90 b/src/MNH/lima_snow_deposition.f90 index 7d923f1c9..0f864f4c6 100644 --- a/src/MNH/lima_snow_deposition.f90 +++ b/src/MNH/lima_snow_deposition.f90 @@ -68,7 +68,7 @@ SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS, NMOM_I USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & @@ -113,51 +113,49 @@ P_CI_CNVI(:) = 0. P_TH_DEPS(:) = 0. P_RS_DEPS(:) = 0. ! -! Physical limitations -! -! ! Looking for regions where computations are necessary -! GMICRO(:) = LDCOMPUTE(:) .AND. PRST(:)>XRTMIN(5) ! +IF (NMOM_I.EQ.1) THEN + WHERE( GMICRO ) ! -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(:)**XNUS) * EXP(-ZZW(:)) -!!$! -!!$ ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) -!!$! -!!$ ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) ) -!!$ END WHERE -!!$! -!!$ P_RI_CNVI(:) = ZZW(:) -!!$ P_CI_CNVI(:) = ZZW2(:) +! Deposition of water vapor on r_s: RVDEPS ! -! -!* 2.2 Deposition of water vapor on r_s: RVDEPS -! ----------------------------------------------- -! -! - ZZW(:) = 0.0 - WHERE ( (PRST(:)>XRTMIN(5)) ) - ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * & - ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) - ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) + ZZW(:) = 0.0 + WHERE ( (PRST(:)>XRTMIN(5)) ) + ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * & + ( 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(:) END WHERE -! - P_RS_DEPS(:) = ZZW(:) -!!$ P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:) -! -END WHERE -! +ELSE + WHERE( GMICRO ) +! +! 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(:)**XNUS) * EXP(-ZZW(:)) + ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) + ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) ) + END WHERE + P_RI_CNVI(:) = ZZW(:) + P_CI_CNVI(:) = ZZW2(:) +! +! Deposition of water vapor on r_s: RVDEPS +! + ZZW(:) = 0.0 + WHERE ( (PRST(:)>XRTMIN(5)) ) + ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * & + ( 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(:) + END WHERE +END IF ! END SUBROUTINE LIMA_SNOW_DEPOSITION diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90 index 5a62b0345..312599929 100644 --- a/src/MNH/lima_tendencies.f90 +++ b/src/MNH/lima_tendencies.f90 @@ -239,7 +239,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, & - LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN + LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN, NMOM_I USE MODD_PARAM_LIMA_WARM, ONLY : XLBC, XLBEXC, XLBR, XLBEXR USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH, XLBDAG_MAX USE MODD_PARAM_LIMA_COLD, ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS, XLBDAS_MAX @@ -619,11 +619,11 @@ IF (LCOLD .AND. LSNOW) THEN ! ! Includes vapour deposition on snow, snow -> ice conversion ! - CALL LIMA_SNOW_DEPOSITION (LDCOMPUTE, & ! depends on IF, PF + CALL LIMA_SNOW_DEPOSITION (LDCOMPUTE, & ! depends on IF, PF PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT, & - PRST/ZPF1D, ZLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS ) + PRST/ZPF1D, ZLBDS, & + P_RI_CNVI, P_CI_CNVI, & + P_TH_DEPS, P_RS_DEPS ) ! P_RI_CNVI(:) = P_RI_CNVI(:) * ZPF1D(:) P_CI_CNVI(:) = P_CI_CNVI(:) * ZPF1D(:) @@ -669,19 +669,18 @@ IF (LWARM .AND. LCOLD) THEN PA_TH(:) = PA_TH(:) + P_TH_DEPG(:) END IF ! -IF (LWARM .AND. LCOLD) THEN - CALL LIMA_BERGERON (LDCOMPUTE, & ! depends on CF, IF - PRCT, PRIT, PCIT, ZLBDI, & - ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) +IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN + CALL LIMA_BERGERON (LDCOMPUTE, & ! depends on CF, IF + PRCT/ZCF1D, PRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, & + ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & + P_TH_BERFI, P_RC_BERFI ) + P_TH_BERFI(:) = P_TH_BERFI(:) * MIN(ZCF1D,ZIF1D) + P_RC_BERFI(:) = P_RC_BERFI(:) * MIN(ZCF1D,ZIF1D) +! + PA_RC(:) = PA_RC(:) + P_RC_BERFI(:) + PA_RI(:) = PA_RI(:) - P_RC_BERFI(:) + PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) END IF -!P_TH_BERFI(:) = 0. -!P_RC_BERFI(:) = 0. -! -PA_RC(:) = PA_RC(:) + P_RC_BERFI(:) -PA_RI(:) = PA_RI(:) - P_RC_BERFI(:) -PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) ! IF (LWARM .AND. LCOLD .AND. LSNOW) THEN ! diff --git a/src/MNH/modd_param_lima.f90 b/src/MNH/modd_param_lima.f90 index 66156a056..02aa28088 100644 --- a/src/MNH/modd_param_lima.f90 +++ b/src/MNH/modd_param_lima.f90 @@ -62,6 +62,7 @@ LOGICAL, SAVE :: LMEYERS ! TRUE to use Meyers nucleation ! 1.2 IFN initialisation ! INTEGER, SAVE :: NMOD_IFN ! Number of IFN modes +INTEGER, SAVE :: NMOM_I ! Number of moments for pristine ice 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 diff --git a/src/MNH/modn_param_lima.f90 b/src/MNH/modn_param_lima.f90 index f86b1add0..9fd76de57 100644 --- a/src/MNH/modn_param_lima.f90 +++ b/src/MNH/modn_param_lima.f90 @@ -18,7 +18,7 @@ IMPLICIT NONE ! ! NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,& - NMOD_IFN, XIFN_CONC, LIFN_HOM, & + NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, & CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE, & CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG, & diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 30616e6c5..04ab0ad62 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -981,7 +981,7 @@ SELECT CASE ( HCLOUD ) PDTHRAD, PW_ACT, & PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF ) ELSE CALL LIMA_ADJUST(KRR, KMI, TPFILE, & OSUBG_COND, PTSTEP, & -- GitLab