From b6aa2743171cfe722ba0a4ee748198d8c0b61876 Mon Sep 17 00:00:00 2001 From: VIE Benoit <vie@sxphynh> Date: Tue, 17 Jan 2023 17:06:41 +0100 Subject: [PATCH] compilation ok ! --- src/arome/ext/apl_arome.F90 | 39 ++- src/arome/ext/aro_adjust_lima.F90 | 120 +++---- src/arome/ext/aro_adjust_lima.h | 13 +- src/arome/ext/aro_lima.F90 | 22 +- src/arome/ext/aro_lima.h | 8 +- src/arome/ext/aroini_micro_lima.F90 | 164 ++++++---- src/arome/ext/namlima.nam.h | 16 + src/arome/micro/lima_nucleation_procs.F90 | 297 ------------------ src/common/micro/ini_lima_cold_mixed.F90 | 4 +- src/common/micro/lima.F90 | 23 +- src/common/micro/lima_adjust_split.F90 | 20 +- src/common/micro/lima_nucleation_procs.F90 | 252 ++++++++------- src/common/micro/modd_param_lima_cold.F90 | 8 + .../micro/mode_lima_ice4_nucleation.F90 | 147 +++++++++ tools/check_commit_ial.sh | 1 + 15 files changed, 556 insertions(+), 578 deletions(-) create mode 100644 src/arome/ext/namlima.nam.h delete mode 100644 src/arome/micro/lima_nucleation_procs.F90 create mode 100644 src/common/micro/mode_lima_ice4_nucleation.F90 diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index bbf2d2f26..7e421c6d8 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -399,6 +399,8 @@ REAL(KIND=JPRB) :: ZCVTENDRV_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZCVTENDRC_(Y REAL(KIND=JPRB) :: ZMFS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZTHLS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRTS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB) :: ZMFUS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZMFVS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZDEPTH_HEIGHT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +REAL(KIND=JPRB) :: ZDTHRAD_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) + REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB), POINTER :: ZARG_FLXZTHVMF_(:,:) @@ -1137,6 +1139,7 @@ IF (INIT0 >= 0) THEN ZRC_MF_(:,:)=ZVALUE ZRI_MF_(:,:)=ZVALUE ZCF_MF_(:,:)=ZVALUE + ZDTHRAD_(:,:)=ZVALUE ZSVSWAP_(:,:,:)=ZVALUE ZSVSAVE_(:,:,:)=ZVALUE @@ -1469,6 +1472,17 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN ENDDO ENDDO + !initialisation de ZZI_THRAD + IF (YDCPG_OPTS%KSTEP==0) THEN + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB + ENDDO + ELSE + DO JLEV = 1, YDCPG_OPTS%KFLEVG + ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5) + ENDDO + ENDIF + ENDIF ! daand: radflex @@ -1564,14 +1578,25 @@ IF (LMICRO) THEN IF (CMICRO == 'LIMA') THEN + IF (LTURB) THEN + DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA + DO JLEV=1,YDCPG_OPTS%KFLEVG + ZWNU_(JLON,JLEV) = ZWM__(JLON,JLEV) + 0.66*SQRT(ZTKEM__(JLON,JLEV)) + ENDDO + ENDDO + ZPTRWNU_ => ZWNU_(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ELSE + ZPTRWNU_ => ZWM__(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) + ENDIF + CALL SWAP_LIMAS ! for now a copy is needed (see below, inside). I don't like than :-( REK ZLIMAS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)=ZLIMASIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA) CALL ARO_ADJUST_LIMA (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, YDCPG_BNDS%KFDIA, NRR, & - & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & + & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, CCONDENS, CLAMBDA3, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & & ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & - & ZRM_, ZLIMAM_, ZSIGM_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & + & ZRM_, ZLIMAM_, ZSIGM_, ZPTRWNU_, ZDTHRAD_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH & & ) ELSE @@ -2200,6 +2225,14 @@ ENDIF ENDDO ENDIF + !initialisation de ZZI_THRAD + DO JLEV = 1, YDCPG_OPTS%KFLEVG + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA + ZDTHRAD_(JLON,JLEV)=ZTENT(JLON,JLEV)/ZEXNREFM_(JLON,JLEV) + END DO + ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5)=ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV) + ENDDO + DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA ! update sunshine duration [s] !YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)=YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)+ZSDUR(JLON)*TSTEP @@ -3160,7 +3193,7 @@ IF (LMICRO) THEN ENDIF CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG,YDCPG_BNDS%KFDIA,NRR, NLIMA, YDCPG_OPTS%KSTEP+1, & & NSPLITR, NSPLITG, ZDT, ZDZZ_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & - & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, & + & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZDTHRAD_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, & & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_, & & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, & & YDMODEL%YRML_DIAG%YRMDDH) diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90 index 6cd01e848..6d9ace015 100644 --- a/src/arome/ext/aro_adjust_lima.F90 +++ b/src/arome/ext/aro_adjust_lima.F90 @@ -1,12 +1,13 @@ ! ######spl SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT, & - OSUBG_COND, OSIGMAS, OCND2, & + OSUBG_COND, OSIGMAS, OCND2, HCONDENS, HLAMBDA3, & PTSTEP, PSIGQSAT, & PZZF, PRHODJ, PRHODREF, PEXNREF,& PPABSM, PTHT, PRT, PSVT, PSIGS, & + PW_NU, PDTHRAD, & PMFCONV, PRC_MF, PRI_MF, PCF_MF, & PTHS, PRS, PSVS, PSRCS, PCLDFR, & - YDDDH, YDLDDH, YDMDDH) + YDDDH, YDLDDH, YDMDDH) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ########################################################################## @@ -81,12 +82,13 @@ USE MODD_CONF USE MODD_CST USE MODD_PARAMETERS USE MODD_RAIN_ICE_DESCR -USE MODD_BUDGET +USE MODD_BUDGET, ONLY: TBUDGETDATA, NBUDGET_SV1, TBUCONF ! USE MODD_PARAM_LIMA USE MODD_NSV ! -USE MODI_LIMA_ADJUST +USE MODI_LIMA_ADJUST_SPLIT +USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX !USE MODE_BUDGET, ONLY: BUDGET_DDH ! USE DDH_MIX, ONLY : TYP_DDH @@ -116,6 +118,8 @@ LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! use values computed in CONDENSATION ! or that from turbulence scheme LOGICAL, INTENT(IN) :: OCND2 +CHARACTER*80, INTENT(IN) :: HCONDENS +CHARACTER*4, INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 coeff REAL, INTENT(IN) :: PTSTEP ! Time step REAL, INTENT(IN) :: PSIGQSAT ! coeff applied to qsat variance contribution ! @@ -131,6 +135,10 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRT ! Moist variables at time t REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVT ! Moist variables at time t REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS ! Sigma_s at time t +! +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU ! w for CCN activation +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDTHRAD ! rad theta tendency for CCN activation +! REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PMFCONV ! convective mass flux REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRC_MF, PRI_MF, PCF_MF ! @@ -146,9 +154,9 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS ! Second-order flux REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR! Cloud fraction ! ! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH +TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH +TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH +TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! !* 0.2 Declarations of local variables : @@ -170,6 +178,7 @@ REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZCOR ! for the correction of negative rv REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZZZ ! model layer height +REAL, DIMENSION(KLON,1,KLEV):: ZICEFR REAL :: ZMASSTOT ! total mass for one water category ! including the negative values REAL :: ZMASSPOS ! total mass for one water category @@ -216,11 +225,11 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! !* 3.1 Non local correction for precipitating species (Rood 87) ! - DO JRR = 3,KRR - SELECT CASE (JRR) - CASE(3,5,6,7) ! rain, snow, graupel and hail +DO JRR = 3,KRR + SELECT CASE (JRR) + CASE(3,5,6,7) ! rain, snow, graupel and hail - IF ( MINVAL( PRS(:,:,:,JRR)) < 0.0 ) THEN + IF ( MINVAL( PRS(:,:,:,JRR)) < 0.0 ) THEN ! For AROME, we cannot use MAX_ll so that according to JPP's advises ! we only correct negative values but not the total mass ! compute the total water mass computation @@ -229,7 +238,7 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! ! remove the negative values ! - PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) + PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) ) ! ! compute the new total mass ! @@ -240,34 +249,34 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! ZRATIO = ZMASSTOT / ZMASSPOS ! PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO - END IF - END SELECT - END DO + END IF + END SELECT +END DO ! !* 3.2 Correct negative values ! ! Correction where rc<0 - IF (NMOM_C.GE.1) THEN +IF (NMOM_C.GE.1) THEN ! WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NC) < 0.) - WHERE (PRS(:,:,:,2) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,2) = 0.0 - PSVS(:,:,:,NSV_LIMA_NC) = 0.0 - END WHERE - END IF + WHERE (PRS(:,:,:,2) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,2) = 0.0 + PSVS(:,:,:,NSV_LIMA_NC) = 0.0 + END WHERE +END IF ! Correction where rr<0 - IF (NMOM_R.GE.1) THEN +IF (NMOM_R.GE.1) THEN ! WHERE (PRS(:,:,:,3) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NR) < 0.) - WHERE (PRS(:,:,:,3) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,3) = 0.0 - PSVS(:,:,:,NSV_LIMA_NR) = 0.0 - END WHERE - END IF + WHERE (PRS(:,:,:,3) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,3) = 0.0 + PSVS(:,:,:,NSV_LIMA_NR) = 0.0 + END WHERE +END IF ! Correction of IFN concentrations where ri<0 or Ni<0 ! IF (LCOLD_LIMA) THEN ! DO JMOD = 1, NMOD_IFN @@ -280,18 +289,18 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! ENDDO ! END IF ! Correction where ri<0 - IF (NMOM_I.GE.1) THEN +IF (NMOM_I.GE.1) THEN ! WHERE (PRS(:,:,:,4) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NI) < 0.) - WHERE (PRS(:,:,:,4) < 0.) - PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) - PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & - ZCPH(:,:,:) / PEXNREF(:,:,:) - PRS(:,:,:,4) = 0.0 - PSVS(:,:,:,NSV_LIMA_NI) = 0.0 - END WHERE - END IF + WHERE (PRS(:,:,:,4) < 0.) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,4) = 0.0 + PSVS(:,:,:,NSV_LIMA_NI) = 0.0 + END WHERE +END IF ! - PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) +PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) ! ! !* 3.3 STORE THE BUDGET TERMS @@ -306,11 +315,11 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) !IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') !IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') -DO JRR=1, NBUDGET_SV1+NSV_LIMA-1 - YLBUDGET(JRR)%NBUDGET=JRR - YLBUDGET(JRR)%YDDDH=>YDDDH - YLBUDGET(JRR)%YDLDDH=>YDLDDH - YLBUDGET(JRR)%YDMDDH=>YDMDDH +DO JRR = 1, NBUDGET_SV1+NSV_LIMA-1 + YLBUDGET(JRR)%NBUDGET=JRR + YLBUDGET(JRR)%YDDDH=>YDDDH + YLBUDGET(JRR)%YDLDDH=>YDLDDH + YLBUDGET(JRR)%YDMDDH=>YDMDDH ENDDO ! !------------------------------------------------------------------------------- @@ -324,14 +333,13 @@ ENDDO ! ZZZ = PZZF - CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & - KRR=KRR, KMI=KMI, HFMFILE='DUMMY', HLUOUT='DUMMY', HRAD='DUMMY', & - HTURBDIM=HTURBDIM, OCLOSE_OUT=.FALSE., OSUBG_COND=.FALSE., PTSTEP=2*PTSTEP, & - PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PPABSM=PPABSM, PSIGS=PSIGS, PPABST=PPABSM, & - PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS, & - PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, & - YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) - + CALL LIMA_ADJUST_SPLIT(D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & + KRR=KRR, KMI=KMI, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, & + OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, PTSTEP=2*PTSTEP, PSIGQSAT=PSIGQSAT, & + PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PSIGS=PSIGS, PMFCONV=PMFCONV, & + PPABST=PPABSM, PPABSTT=PPABSM, PZZ=ZZZ, PDTHRAD=PDTHRAD, PW_NU=PW_NU, & + PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS, & + PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, PICEFR=ZICEFR, PRC_MF=PRC_MF, PRI_MF=PRI_MF, PCF_MF=PCF_MF ) ! !------------------------------------------------------------------------------- ! diff --git a/src/arome/ext/aro_adjust_lima.h b/src/arome/ext/aro_adjust_lima.h index 7f4f9c8b9..dd691848a 100644 --- a/src/arome/ext/aro_adjust_lima.h +++ b/src/arome/ext/aro_adjust_lima.h @@ -1,10 +1,13 @@ INTERFACE SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT,& - & OSUBG_COND, OSIGMAS,OCND2,& - & PTSTEP, PSIGQSAT, PZZF, PRHODJ, PRHODREF, PEXNREF,& + & OSUBG_COND, OSIGMAS,OCND2, HCONDENS, HLAMBDA3,& + & PTSTEP, PSIGQSAT,& + & PZZF, PRHODJ, PRHODREF, PEXNREF,& & PPABSM, PTHT, PRT, PSVT, PSIGS,& + & PW_NU, PDTHRAD,& & PMFCONV, PRC_MF, PRI_MF, PCF_MF,& - & PTHS, PRS, PSVS, PSRCS, PCLDFR,YDDDH,YDLDDH,YDMDDH) + & PTHS, PRS, PSVS, PSRCS, PCLDFR,& + & YDDDH,YDLDDH,YDMDDH) USE PARKIND1 ,ONLY : JPIM ,JPRB USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -21,6 +24,8 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT LOGICAL, INTENT(IN) :: OSUBG_COND LOGICAL, INTENT(IN) :: OSIGMAS LOGICAL, INTENT(IN) :: OCND2 +CHARACTER*80, INTENT(IN) :: HCONDENS +CHARACTER*4, INTENT(IN) :: HLAMBDA3 REAL(KIND=JPRB), INTENT(IN) :: PTSTEP REAL(KIND=JPRB), INTENT(IN) :: PSIGQSAT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PZZF @@ -32,6 +37,8 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDTHRAD REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PMFCONV REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRC_MF,PRI_MF,PCF_MF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 index 08afb064a..d12e226fd 100644 --- a/src/arome/ext/aro_lima.F90 +++ b/src/arome/ext/aro_lima.F90 @@ -1,7 +1,7 @@ ! ######spl SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA,KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& - PPABSM, PW_NU, PTHT, PRT, PSVT, & + PPABSM, PW_NU, PDTHRAD, PTHT, PRT, PSVT, & PTHS, PRS, PSVS, PEVAP, & PINPRR,PINPRS, & PINPRG,PINPRH,PFPR, & @@ -52,6 +52,7 @@ USE MODD_NSV ! USE MODD_BUDGET USE MODE_BUDGET, ONLY: BUDGET_DDH +USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX ! USE MODI_LIMA ! @@ -94,6 +95,7 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF ! Reference Exner functi ! REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU ! w for CCN activation +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDTHRAD ! radiative Theta tendency for CCN act. REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT ! Moist variables at time t REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT ! LIMA variables at time t @@ -113,9 +115,9 @@ REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip ! REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR ! ice cloud fraction -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH +TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH +TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH +TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! ! !* 0.2 Declarations of local variables : @@ -208,7 +210,7 @@ END DO !* 3.2 Correct negative values ! ! Correction where rc<0 - IF (LWARM_LIMA) THEN + IF (NMOM_C.GE.2) THEN WHERE (PRS(:,:,:,2) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NC) < 1.E-15) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & @@ -218,7 +220,7 @@ END DO END WHERE END IF ! Correction where rr<0 - IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN + IF (NMOM_R.GE.2) THEN WHERE (PRS(:,:,:,3) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NR) < 1.E-15) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & @@ -239,7 +241,7 @@ END DO ! ENDDO ! END IF ! Correction where ri<0 - IF (LCOLD_LIMA) THEN + IF (NMOM_I.GE.2) THEN WHERE (PRS(:,:,:,4) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NI) < 1.E-15) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & @@ -300,12 +302,12 @@ ENDDO ! ! ! -CALL LIMA (YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & +CALL LIMA (D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & PTSTEP=2*PTSTEP, & - PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=PDZZ, & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PDZZ=PDZZ, & PRHODJ=PRHODJ, PPABST=PPABSM, & NCCN=NMOD_CCN, NIFN=NMOD_IFN, NIMM=NMOD_IMM, & - PTHM=PTHT, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU, & + PDTHRAD=PDTHRAD, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU, & PTHS=PTHS, PRS=PRS, PSVS=PSVS, & PINPRC=ZINPRC, PINDEP=ZINDEP, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, & PEVAP3D=PEVAP, PCLDFR=PCLDFR, PICEFR=ZICEFR, PPRCFR=ZPRCFR ) diff --git a/src/arome/ext/aro_lima.h b/src/arome/ext/aro_lima.h index 67ab77467..44b20abcf 100644 --- a/src/arome/ext/aro_lima.h +++ b/src/arome/ext/aro_lima.h @@ -1,9 +1,11 @@ INTERFACE SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KFDIA, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& - & PPABSM, PW_NU, PTHT, PRT, PSVT, & + & PPABSM, PW_NU, PDTHRAD, PTHT, PRT, PSVT, & & PTHS, PRS, PSVS, PEVAP,& - & PINPRR,PINPRS,PINPRG,PINPRH,PFPR,& + & PINPRR,PINPRS,& + & PINPRG,PINPRH,PFPR,& + & PCLDFR,& & YDDDH,YDLDDH,YDMDDH) USE PARKIND1 ,ONLY : JPIM ,JPRB USE DDH_MIX, ONLY : TYP_DDH @@ -27,6 +29,7 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDTHRAD REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT @@ -39,6 +42,7 @@ REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH TYPE(TLDDH), INTENT(IN) :: YDLDDH TYPE(TMDDH), INTENT(IN) :: YDMDDH diff --git a/src/arome/ext/aroini_micro_lima.F90 b/src/arome/ext/aroini_micro_lima.F90 index 839aa2de9..9aeebbcdc 100644 --- a/src/arome/ext/aroini_micro_lima.F90 +++ b/src/arome/ext/aroini_micro_lima.F90 @@ -93,13 +93,26 @@ ILUOUT = KULOUT ! lecture Valeurs par défaut pour les paramètres de la namelist LIMA ! LPTSPLIT = .FALSE. -LCOLD_LIMA = .TRUE. -LNUCL_LIMA = .TRUE. -LSEDI_LIMA = .FALSE. -LSNOW_LIMA = .TRUE. -LHAIL_LIMA = .FALSE. -LHHONI_LIMA = .FALSE. -LMEYERS_LIMA = .FALSE. +LFEEDBACKT = .TRUE. +NMAXITER = 5 +XMRSTEP = 0. +XTSTEP_TS = 0. +! +NMOM_C = 2 +NMOM_R = 2 +NMOM_I = 2 +NMOM_S = 1 +NMOM_G = 1 +NMOM_H = 0 +! +LNUCL = .TRUE. +LSEDI = .TRUE. +LSNOW_T = .FALSE. +LHHONI = .FALSE. +LMEYERS = .FALSE. +LCIBU = .FALSE. +LRDSF = .FALSE. +LMURAKAMI = .FALSE. NMOD_IFN = 1 XIFN_CONC(1) = 1000 LIFN_HOM = .TRUE. @@ -119,11 +132,15 @@ XFACTNUC_DEP = 1. XFACTNUC_CON = 1. NPHILLIPS = 8 ! -LWARM_LIMA = .TRUE. -LACTI_LIMA = .TRUE. -LRAIN_LIMA = .TRUE. -LSEDC_LIMA = .FALSE. -LACTIT_LIMA = .FALSE. +LACTI = .TRUE. +LSEDC = .TRUE. +LDEPOC = .TRUE. +LACTIT = .FALSE. +LACTTKE = .TRUE. +LADJ = .TRUE. +LSPRO = .FALSE. +LKHKO = .FALSE. +LKESSLERAC = .FALSE. NMOD_CCN = 1 XCCN_CONC(1) = 350. LCCN_HOM = .TRUE. @@ -149,16 +166,16 @@ LAERO_MASS = .FALSE. ISV = 1 NSV_LIMA_BEG = ISV - IF (LWARM_LIMA) THEN ! Nc + IF (NMOM_C.GE.2) THEN NSV_LIMA_NC = ISV ISV = ISV+1 + END IF ! Nr - IF (LRAIN_LIMA) THEN - NSV_LIMA_NR = ISV - ISV = ISV+1 - END IF - END IF ! LWARM_LIMA + IF (NMOM_R.GE.2) THEN + NSV_LIMA_NR = ISV + ISV = ISV+1 + END IF ! CCN IF (NMOD_CCN .GT. 0) THEN NSV_LIMA_CCN_FREE = ISV @@ -172,11 +189,26 @@ LAERO_MASS = .FALSE. ISV = ISV+1 END IF ! LSCAV ! - IF (LCOLD_LIMA) THEN ! Ni + IF (NMOM_I.GE.2) THEN NSV_LIMA_NI = ISV ISV = ISV+1 END IF ! LCOLD_LIMA +! Ns + IF (NMOM_S.GE.2) THEN + NSV_LIMA_NS = ISV + ISV = ISV+1 + END IF ! LCOLD_LIMA +! Ng + IF (NMOM_G.GE.2) THEN + NSV_LIMA_NG = ISV + ISV = ISV+1 + END IF ! LCOLD_LIMA +! Nh + IF (NMOM_H.GE.2) THEN + NSV_LIMA_NH = ISV + ISV = ISV+1 + END IF ! LCOLD_LIMA ! IFN IF (NMOD_IFN .GT. 0) THEN NSV_LIMA_IFN_FREE = ISV @@ -190,7 +222,7 @@ LAERO_MASS = .FALSE. ISV = ISV + MAX(1,NMOD_IMM) END IF ! Homogeneous freezing of CCN - IF (LCOLD_LIMA .AND. LHHONI_LIMA) THEN + IF (NMOM_I.GE.1 .AND. LHHONI) THEN NSV_LIMA_HOM_HAZE = ISV ISV = ISV + 1 END IF @@ -205,53 +237,53 @@ NSV=NSV_LIMA ! initialisation de LIMA CALL INIT_AEROSOL_PROPERTIES ! PDZMIN = 20 comme dans l'appel à INI_RAIN_ICE ! -CALL INI_LIMA(KULOUT, PTSTEP, 20., KSPLITR, KSPLITG) +CALL INI_LIMA(PTSTEP, 20., KSPLITR, KSPLITG) -WRITE(UNIT=KULOUT,FMT='(''LIMA SCHEME TUNING VARIABLES :'')') -WRITE(UNIT=KULOUT,FMT='('' LCOLD_LIMA = '',L5)') LCOLD_LIMA -WRITE(UNIT=KULOUT,FMT='('' LNUCL_LIMA = '',L5)') LNUCL_LIMA -WRITE(UNIT=KULOUT,FMT='('' LSEDI_LIMA = '',L5)') LSEDI_LIMA -WRITE(UNIT=KULOUT,FMT='('' LSNOW_LIMA = '',L5)') LSNOW_LIMA -WRITE(UNIT=KULOUT,FMT='('' LHAIL_LIMA = '',L5)') LHAIL_LIMA -WRITE(UNIT=KULOUT,FMT='('' LHHONI_LIMA = '',L5)') LHHONI_LIMA -WRITE(UNIT=KULOUT,FMT='('' LMEYERS_LIMA = '',L5)') LMEYERS_LIMA -WRITE(UNIT=KULOUT,FMT='('' LIFN_HOM = '',L5)') LIFN_HOM -WRITE(UNIT=KULOUT,FMT='('' LWARM_LIMA = '',L5)') LWARM_LIMA -WRITE(UNIT=KULOUT,FMT='('' LACTI_LIMA = '',L5)') LACTI_LIMA -WRITE(UNIT=KULOUT,FMT='('' LRAIN_LIMA = '',L5)') LRAIN_LIMA -WRITE(UNIT=KULOUT,FMT='('' LSEDC_LIMA = '',L5)') LSEDC_LIMA -WRITE(UNIT=KULOUT,FMT='('' LACTIT_LIMA = '',L5)') LACTIT_LIMA -WRITE(UNIT=KULOUT,FMT='('' LCCN_HOM = '',L5)') LCCN_HOM -WRITE(UNIT=KULOUT,FMT='('' LSCAV = '',L5)') LSCAV -WRITE(UNIT=KULOUT,FMT='('' LAERO_MASS = '',L5)') LAERO_MASS -WRITE(UNIT=KULOUT,FMT='('' CIFN_SPECIES = '',A8,''CINT_MIXING = '',A8)')& -&CIFN_SPECIES,CINT_MIXING -WRITE(UNIT=KULOUT,FMT='('' CPRISTINE_ICE_LIMA = '',A4,''CHEVRIMED_ICE_LIMA = '',A4)')& -&CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA -WRITE(UNIT=KULOUT,FMT='('' CCCN_MODES = '',A8)')CCCN_MODES -WRITE(UNIT=KULOUT,FMT='('' HINI_CCN = '',A3,''HTYPE_CCN = '',A1)')& -&HINI_CCN,HTYPE_CCN -WRITE(UNIT=KULOUT,FMT='('' NMOD_IFN = '',I5)') NMOD_IFN -WRITE(UNIT=KULOUT,FMT='('' NMOD_IMM = '',I5)') NMOD_IMM -WRITE(UNIT=KULOUT,FMT='('' NIND_SPECIE = '',I5)') NIND_SPECIE -WRITE(UNIT=KULOUT,FMT='('' NPHILLIPS = '',I5)') NPHILLIPS -WRITE(UNIT=KULOUT,FMT='('' NMOD_CCN = '',I5)') NMOD_CCN -WRITE(UNIT=KULOUT,FMT='('' XIFN_CONC = '',f6.2)') XIFN_CONC -WRITE(UNIT=KULOUT,FMT='('' XALPHAI = '',f6.2)') XALPHAI -WRITE(UNIT=KULOUT,FMT='('' XNUI = '',f6.2)') XNUI -WRITE(UNIT=KULOUT,FMT='('' XALPHAS = '',f6.2)') XALPHAS -WRITE(UNIT=KULOUT,FMT='('' XNUS = '',f6.2)') XNUS -WRITE(UNIT=KULOUT,FMT='('' XALPHAG = '',f6.2)') XALPHAG -WRITE(UNIT=KULOUT,FMT='('' XNUG = '',f6.2)') XNUG -WRITE(UNIT=KULOUT,FMT='('' XCCN_CONC = '',f6.2)') XCCN_CONC -WRITE(UNIT=KULOUT,FMT='('' XALPHAC = '',f6.2)') XALPHAC -WRITE(UNIT=KULOUT,FMT='('' XNUC = '',f6.2)') XNUC -WRITE(UNIT=KULOUT,FMT='('' XALPHAR = '',f6.2)') XALPHAR -WRITE(UNIT=KULOUT,FMT='('' XNUR = '',f6.2)') XNUR -WRITE(UNIT=KULOUT,FMT='('' XFSOLUB_CCN = '',f6.2)') XFSOLUB_CCN -WRITE(UNIT=KULOUT,FMT='('' XACTEMP_CCN = '',f6.2)') XACTEMP_CCN -WRITE(UNIT=KULOUT,FMT='('' XAERDIFF = '',f6.2)') XAERDIFF -WRITE(UNIT=KULOUT,FMT='('' XAERHEIGHT = '',f6.2)') XAERHEIGHT +!!$WRITE(UNIT=KULOUT,FMT='(''LIMA SCHEME TUNING VARIABLES :'')') +!!$WRITE(UNIT=KULOUT,FMT='('' LCOLD_LIMA = '',L5)') LCOLD_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LNUCL_LIMA = '',L5)') LNUCL_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LSEDI_LIMA = '',L5)') LSEDI_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LSNOW_LIMA = '',L5)') LSNOW_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LHAIL_LIMA = '',L5)') LHAIL_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LHHONI_LIMA = '',L5)') LHHONI_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LMEYERS_LIMA = '',L5)') LMEYERS_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LIFN_HOM = '',L5)') LIFN_HOM +!!$WRITE(UNIT=KULOUT,FMT='('' LWARM_LIMA = '',L5)') LWARM_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LACTI_LIMA = '',L5)') LACTI_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LRAIN_LIMA = '',L5)') LRAIN_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LSEDC_LIMA = '',L5)') LSEDC_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LACTIT_LIMA = '',L5)') LACTIT_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' LCCN_HOM = '',L5)') LCCN_HOM +!!$WRITE(UNIT=KULOUT,FMT='('' LSCAV = '',L5)') LSCAV +!!$WRITE(UNIT=KULOUT,FMT='('' LAERO_MASS = '',L5)') LAERO_MASS +!!$WRITE(UNIT=KULOUT,FMT='('' CIFN_SPECIES = '',A8,''CINT_MIXING = '',A8)')& +!!$&CIFN_SPECIES,CINT_MIXING +!!$WRITE(UNIT=KULOUT,FMT='('' CPRISTINE_ICE_LIMA = '',A4,''CHEVRIMED_ICE_LIMA = '',A4)')& +!!$&CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA +!!$WRITE(UNIT=KULOUT,FMT='('' CCCN_MODES = '',A8)')CCCN_MODES +!!$WRITE(UNIT=KULOUT,FMT='('' HINI_CCN = '',A3,''HTYPE_CCN = '',A1)')& +!!$&HINI_CCN,HTYPE_CCN +!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_IFN = '',I5)') NMOD_IFN +!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_IMM = '',I5)') NMOD_IMM +!!$WRITE(UNIT=KULOUT,FMT='('' NIND_SPECIE = '',I5)') NIND_SPECIE +!!$WRITE(UNIT=KULOUT,FMT='('' NPHILLIPS = '',I5)') NPHILLIPS +!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_CCN = '',I5)') NMOD_CCN +!!$WRITE(UNIT=KULOUT,FMT='('' XIFN_CONC = '',f6.2)') XIFN_CONC +!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAI = '',f6.2)') XALPHAI +!!$WRITE(UNIT=KULOUT,FMT='('' XNUI = '',f6.2)') XNUI +!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAS = '',f6.2)') XALPHAS +!!$WRITE(UNIT=KULOUT,FMT='('' XNUS = '',f6.2)') XNUS +!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAG = '',f6.2)') XALPHAG +!!$WRITE(UNIT=KULOUT,FMT='('' XNUG = '',f6.2)') XNUG +!!$WRITE(UNIT=KULOUT,FMT='('' XCCN_CONC = '',f6.2)') XCCN_CONC +!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAC = '',f6.2)') XALPHAC +!!$WRITE(UNIT=KULOUT,FMT='('' XNUC = '',f6.2)') XNUC +!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAR = '',f6.2)') XALPHAR +!!$WRITE(UNIT=KULOUT,FMT='('' XNUR = '',f6.2)') XNUR +!!$WRITE(UNIT=KULOUT,FMT='('' XFSOLUB_CCN = '',f6.2)') XFSOLUB_CCN +!!$WRITE(UNIT=KULOUT,FMT='('' XACTEMP_CCN = '',f6.2)') XACTEMP_CCN +!!$WRITE(UNIT=KULOUT,FMT='('' XAERDIFF = '',f6.2)') XAERDIFF +!!$WRITE(UNIT=KULOUT,FMT='('' XAERHEIGHT = '',f6.2)') XAERHEIGHT diff --git a/src/arome/ext/namlima.nam.h b/src/arome/ext/namlima.nam.h new file mode 100644 index 000000000..3b332acd4 --- /dev/null +++ b/src/arome/ext/namlima.nam.h @@ -0,0 +1,16 @@ +NAMELIST/NAMLIMA/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, & + LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & + XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG, & + XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS, & + LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI, & + LACTI, LSEDC, LACTIT, LBOUND, LSPRO, & + LADJ, LKHKO, LKESSLERAC, NMOM_C, NMOM_R, & + NMOD_CCN, XCCN_CONC, & + LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN, & + XALPHAC, XNUC, XALPHAR, XNUR, & + XFSOLUB_CCN, XACTEMP_CCN, XAERDIFF, XAERHEIGHT, & + LSCAV, LAERO_MASS, LDEPOC, XVDEPOC, LACTTKE, & + LPTSPLIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS diff --git a/src/arome/micro/lima_nucleation_procs.F90 b/src/arome/micro/lima_nucleation_procs.F90 deleted file mode 100644 index 9b23d62f2..000000000 --- a/src/arome/micro/lima_nucleation_procs.F90 +++ /dev/null @@ -1,297 +0,0 @@ -! ############################### - MODULE MODI_LIMA_NUCLEATION_PROCS -! ############################### -! -INTERFACE - SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & - YDDDH, YDLDDH, YDMDDH ) -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -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 -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Reference density -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) :: PT ! Temperature -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTM ! Temperature at time t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at 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 ! Pristine ice m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow 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(IN) :: PCRT ! Rain water conc. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Prinstine ice conc. at t -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! CCN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN C. activated at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT ! IFN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! IFN C. activated at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT ! Coated IFN activated at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHT ! CCN hom freezing -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -END SUBROUTINE LIMA_NUCLEATION_PROCS -END INTERFACE -END MODULE MODI_LIMA_NUCLEATION_PROCS -! ############################################################################# -SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & - YDDDH, YDLDDH, YDMDDH ) -! ############################################################################# -! -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, NMOD_IMM -USE MODD_BUDGET, ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,& - LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, & - NSV_LIMA_NI, NSV_LIMA_IFN_FREE -! -USE MODE_BUDGET, ONLY: BUDGET_DDH -USE MODI_LIMA_CCN_ACTIVATION -USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION -USE MODI_LIMA_MEYERS_NUCLEATION -USE MODI_LIMA_CCN_HOM_FREEZING -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -!------------------------------------------------------------------------------- -! -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 -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Reference density -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) :: PT ! Temperature -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTM ! Temperature at time t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at 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 ! 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(INOUT) :: PCCT ! Cloud water conc. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRT ! Rain water conc. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Prinstine ice conc. at t -! -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! CCN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN C. activated at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT ! IFN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT ! IFN C. activated at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT ! Coated IFN activated at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PNHT ! CCN hom. freezing -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -!------------------------------------------------------------------------------- -! -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, Z_RC_HINC, Z_CC_HINC -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZCCT, ZCRT, ZCIT -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_CCN) :: ZNFT, ZNAT -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_IFN) :: ZIFT, ZINT -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_IMM) :: ZNIT -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZNHT -! -INTEGER :: JL -!------------------------------------------------------------------------------- -! -ZTHT(:,:,:) = PTHT(:,:,:) -ZRVT(:,:,:) = PRVT(:,:,:) -ZRCT(:,:,:) = PRCT(:,:,:) -ZCCT(:,:,:) = PCCT(:,:,:) -ZRRT(:,:,:) = PRRT(:,:,:) -ZCRT(:,:,:) = PCRT(:,:,:) -ZRIT(:,:,:) = PRIT(:,:,:) -ZCIT(:,:,:) = PCIT(:,:,:) -ZRST(:,:,:) = PRST(:,:,:) -ZRGT(:,:,:) = PRGT(:,:,:) -ZNFT(:,:,:,:) = PNFT(:,:,:,:) -ZNAT(:,:,:,:) = PNAT(:,:,:,:) -ZIFT(:,:,:,:) = PIFT(:,:,:,:) -ZINT(:,:,:,:) = PINT(:,:,:,:) -ZNIT(:,:,:,:) = PNIT(:,:,:,:) -ZNHT(:,:,:) = PNHT(:,:,:) -! -!------------------------------------------------------------------------------- -! -IF (LWARM_LIMA .AND. LACTI_LIMA) THEN - CALL LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU, & - ZTHT, ZRVT, ZRCT, ZCCT, ZRRT, ZNFT, ZNAT) - PTHT(:,:,:) = ZTHT(:,:,:) - PRVT(:,:,:) = ZRVT(:,:,:) - PRCT(:,:,:) = ZRCT(:,:,:) - PCCT(:,:,:) = ZCCT(:,:,:) - PNFT(:,:,:,:) = ZNFT(:,:,:,:) - PNAT(:,:,:,:) = ZNAT(:,:,:,:) -! -! Call budgets -! - IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET_DDH (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET_DDH (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET_DDH (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 7, 'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - CALL BUDGET_DDH (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NC, 'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET_DDH (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END DO - END IF - END IF - END IF -END IF -! -!------------------------------------------------------------------------------- -! -IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. .NOT.LMEYERS_LIMA .AND. NMOD_IFN.GE.1) THEN - CALL LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZCCT, ZCIT, ZNAT, ZIFT, ZINT, ZNIT, & - Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, & - Z_RC_HINC, Z_CC_HINC ) -! -! Call budgets -! - IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI, 'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (NMOD_IFN.GE.1) THEN - DO JL=1, NMOD_IFN - CALL BUDGET_DDH ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END DO - END IF - END IF -! - IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END IF - END IF -! - PTHT(:,:,:) = ZTHT(:,:,:) - PRVT(:,:,:) = ZRVT(:,:,:) - PRCT(:,:,:) = ZRCT(:,:,:) - PCCT(:,:,:) = ZCCT(:,:,:) - PRIT(:,:,:) = ZRIT(:,:,:) - PCIT(:,:,:) = ZCIT(:,:,:) - PNAT(:,:,:,:) = ZNAT(:,:,:,:) - PIFT(:,:,:,:) = ZIFT(:,:,:,:) - PINT(:,:,:,:) = ZINT(:,:,:,:) - PNIT(:,:,:,:) = ZNIT(:,:,:,:) -END IF -! -!------------------------------------------------------------------------------- -! -IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. LMEYERS_LIMA) THEN - CALL LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, & - ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZCCT, ZCIT, ZINT, & - Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, & - Z_RC_HINC, Z_CC_HINC ) -! -! Call budgets -! - IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) -! - IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END IF - END IF -! -PTHT(:,:,:) = ZTHT(:,:,:) -PRVT(:,:,:) = ZRVT(:,:,:) -PRCT(:,:,:) = ZRCT(:,:,:) -PCCT(:,:,:) = ZCCT(:,:,:) -PRIT(:,:,:) = ZRIT(:,:,:) -PCIT(:,:,:) = ZCIT(:,:,:) -PINT(:,:,:,:) = ZINT(:,:,:,:) -END IF -! -!------------------------------------------------------------------------------- -! -IF (LCOLD_LIMA .AND. LHHONI_LIMA .AND. NMOD_CCN.GE.1) THEN - CALL LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, PW_NU, & - ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZCCT, ZCRT, ZCIT, ZNFT, ZNHT ) -! -! Call budgets -! - IF (LBU_ENABLE .AND. LHHONI_LIMA) THEN - IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET_DDH (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 9, 'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NI, 'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (NMOD_CCN.GE.1) THEN - DO JL=1, NMOD_CCN - CALL BUDGET_DDH (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END DO - END IF - END IF - END IF -! -PTHT(:,:,:) = ZTHT(:,:,:) -PRVT(:,:,:) = ZRVT(:,:,:) -PRIT(:,:,:) = ZRIT(:,:,:) -PCIT(:,:,:) = ZCIT(:,:,:) -PNHT(:,:,:) = ZNHT(:,:,:) -ENDIF -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_NUCLEATION_PROCS diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90 index 39a7246f5..86fe95eaa 100644 --- a/src/common/micro/ini_lima_cold_mixed.F90 +++ b/src/common/micro/ini_lima_cold_mixed.F90 @@ -57,8 +57,6 @@ USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_WARM USE MODD_PARAM_LIMA_COLD USE MODD_PARAM_LIMA_MIXED -USE MODD_RAIN_ICE_PARAM, ONLY: XALPHA1, XALPHA2, XBETA1, XBETA2, IMNU0=>XMNU0, XNU10, XNU20, & - RAIN_ICE_PARAM_ASSOCIATE USE MODD_REF ! use mode_msg @@ -614,7 +612,7 @@ XNU20 = 1000.*ZFACT_NUCL XALPHA2 = 12.96 XBETA2 = 0.639 ! -IMNU0 = 6.88E-13 +!XMNU0 = 6.88E-13 !------------------------------------------------------------------------------- ! ! diff --git a/src/common/micro/lima.F90 b/src/common/micro/lima.F90 index 619cede63..7fcfd22aa 100644 --- a/src/common/micro/lima.F90 +++ b/src/common/micro/lima.F90 @@ -674,7 +674,7 @@ PINPRH=0. if ( BUCONF%lbu_enable ) then if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) if ( BUCONF%lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( BUCONF%lbudget_rr .and. nomm_r.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rr .and. nmom_r.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) if ( BUCONF%lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) if ( BUCONF%lbudget_rs .and. nmom_s.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) if ( BUCONF%lbudget_rg .and. nmom_g.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) @@ -697,27 +697,27 @@ end if ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(D, & +IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(D, CST, & '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 = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(D, & +IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(D, CST, & '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 = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(D, & +IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(D, CST, & '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 = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(D & +IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(D, CST, & '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 = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(D, & +IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(D, CST, & '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 = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(D, & +IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(D, CST, & 'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH) ! ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP @@ -839,9 +839,10 @@ CALL LIMA_COMPUTE_CLOUD_FRACTIONS (D, & !* 2. Nucleation processes ! -------------------- ! -CALL LIMA_NUCLEATION_PROCS (PTSTEP, PRHODJ, & +CALL LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS, & + PTSTEP, PRHODJ, & PRHODREF, ZEXN, PPABST, ZT, PDTHRAD, PW_NU, & - ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & + ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT, & ZCCT, ZCRT, ZCIT, & ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT, & PCLDFR, PICEFR, PPRCFR ) @@ -1230,7 +1231,7 @@ DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP)) ! We need to adjust tendencies when temperature reaches 0 IF(LFEEDBACKT) THEN !Is ZB_TH enough to change temperature sign? - WHERE( ((ZTHT1D(:) - CST%XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. ) + WHERE( ((ZTHT1D(:) - CST%XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - CST%XTT/ZEXN1D(:))) < 0. ) ZMAXTIME(:)=0. ENDWHERE !Can ZA_TH make temperature change of sign? @@ -1452,7 +1453,7 @@ DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP)) ! !*** 4.4 Unpacking for budgets ! - IF(LBU_ENABLE) THEN + IF(BUCONF%LBU_ENABLE) THEN ZTOT_RR_CVRC(:,:,:) = ZTOT_RR_CVRC(:,:,:) + Z_RR_CVRC(:,:,:) ZTOT_CR_CVRC(:,:,:) = ZTOT_CR_CVRC(:,:,:) + Z_CR_CVRC(:,:,:) diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90 index e0122fa2d..47f042c8e 100644 --- a/src/common/micro/lima_adjust_split.F90 +++ b/src/common/micro/lima_adjust_split.F90 @@ -79,7 +79,8 @@ END INTERFACE END MODULE MODI_LIMA_ADJUST_SPLIT ! ! ########################################################################### - SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, HCONDENS, HLAMBDA3, & +SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS, & + KRR, KMI, HCONDENS, HLAMBDA3, & OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT, & PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, & PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU, & @@ -159,7 +160,8 @@ END MODULE MODI_LIMA_ADJUST_SPLIT !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, & + NBUDGET_RC, NBUDGET_RI, NBUDGET_RV, NBUDGET_SV1, NBUMOD USE MODD_CST, ONLY: CST_t USE MODD_CONF !use modd_field, only: TFIELDDATA, TYPEREAL @@ -181,9 +183,7 @@ use mode_budget, only: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY use mode_msg use mode_tools, only: Countjv ! -USE MODI_CONDENS USE MODI_CONDENSATION -USE MODI_LIMA_FUNCTIONS USE MODI_LIMA_CCN_ACTIVATION ! IMPLICIT NONE @@ -320,7 +320,7 @@ integer :: idx integer :: JI, JJ, JK, jl INTEGER :: JMOD, JMOD_IFN, JMOD_IMM ! -TYPE(TFIELDMETADATA) :: TZFIELD +!!$TYPE(TFIELDMETADATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -461,11 +461,11 @@ end if !* 2.1 remove negative non-precipitating negative water ! ------------------------------------------------ ! -IF (ANY(PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.) .AND. NVERB>5) THEN - WRITE(ILUOUT,*) 'LIMA_ADJUST: negative values of total water (reset to zero)' - WRITE(ILUOUT,*) ' location of minimum PRVS+PRCS+PRIS:',MINLOC(PRVS+PRCS+PRIS) - WRITE(ILUOUT,*) ' value of minimum PRVS+PRCS+PRIS:',MINVAL(PRVS+PRCS+PRIS) -END IF +!IF (ANY(PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.) .AND. NVERB>5) THEN +! WRITE(ILUOUT,*) 'LIMA_ADJUST: negative values of total water (reset to zero)' +! WRITE(ILUOUT,*) ' location of minimum PRVS+PRCS+PRIS:',MINLOC(PRVS+PRCS+PRIS) +! WRITE(ILUOUT,*) ' value of minimum PRVS+PRCS+PRIS:',MINVAL(PRVS+PRCS+PRIS) +!END IF ! WHERE ( PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.) PRVS(:,:,:) = - PRCS(:,:,:) - PRIS(:,:,:) diff --git a/src/common/micro/lima_nucleation_procs.F90 b/src/common/micro/lima_nucleation_procs.F90 index e8e0375bc..5f205ea0f 100644 --- a/src/common/micro/lima_nucleation_procs.F90 +++ b/src/common/micro/lima_nucleation_procs.F90 @@ -8,17 +8,25 @@ ! ############################### ! INTERFACE - SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,& - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & - PCLDFR, PICEFR, PPRCFR ) + SUBROUTINE LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS, & + PTSTEP, PRHODJ, & + PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & + PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & + PCCT, PCRT, PCIT, & + PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & + PCLDFR, PICEFR, PPRCFR ) ! USE MODD_CST, ONLY: CST_t +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t !USE MODD_IO, ONLY: TFILEDATA ! +TYPE(DIMPHYEX_t), INTENT(IN) :: D TYPE(CST_t), INTENT(IN) :: CST +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! REAL, INTENT(IN) :: PTSTEP ! Double Time step !TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! @@ -37,6 +45,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIT ! Pristine ice m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRST ! Snow m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRGT ! Graupel m.r. at t +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHT ! Hail m.r. at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water conc. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRT ! Rain water conc. at t @@ -57,12 +66,13 @@ END SUBROUTINE LIMA_NUCLEATION_PROCS END INTERFACE END MODULE MODI_LIMA_NUCLEATION_PROCS ! ############################################################################# -SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ, & - PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,& - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, & - PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & - PCLDFR, PICEFR, PPRCFR ) +SUBROUTINE LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS, & + PTSTEP, PRHODJ, & + PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & + PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, & + PCCT, PCRT, PCIT, & + PNFT, PNAT, PIFT, PINT, PNIT, PNHT, & + PCLDFR, PICEFR, PPRCFR ) ! ############################################################################# ! !! PURPOSE @@ -84,11 +94,10 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ, & ! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t USE MODD_CST, ONLY: CST_t -use modd_budget, only: lbu_enable, lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, & - lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv, & - NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & - tbudgets +use modd_budget, only: NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1 !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, & @@ -97,13 +106,13 @@ 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 -use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end +use mode_budget, only: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY USE MODI_LIMA_CCN_ACTIVATION USE MODI_LIMA_CCN_HOM_FREEZING USE MODI_LIMA_MEYERS_NUCLEATION USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION -USE MODE_RAIN_ICE_NUCLEATION +USE MODE_LIMA_ICE4_NUCLEATION ! !------------------------------------------------------------------------------- ! @@ -111,8 +120,13 @@ IMPLICIT NONE ! !------------------------------------------------------------------------------- ! +TYPE(DIMPHYEX_t), INTENT(IN) :: D TYPE(CST_t), INTENT(IN) :: CST -REAL, INTENT(IN) :: PTSTEP ! Double Time step +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! +REAL, INTENT(IN) :: PTSTEP ! Double Time step !TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Reference density @@ -130,6 +144,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t REAL, DIMENSION(:,:,:), INTENT(INOUT) :: 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) :: PRHT ! Hail m.r. at t ! REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water conc. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRT ! Rain water conc. at t @@ -149,10 +164,10 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPRCFR ! Precipitation fraction !------------------------------------------------------------------------------- ! REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, Z_TH_HINC, Z_RC_HINC, Z_CC_HINC -REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZTHS, ZRIS, ZRVS, ZRHT, ZCIT, ZT +REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZCIT, ZLSFACT, ZRVHENIMR ! -integer :: idx -INTEGER :: JL +integer :: idx, jl +INTEGER :: JI,JJ ! !------------------------------------------------------------------------------- ! @@ -160,17 +175,17 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN IF (.NOT.LSUBG_COND .AND. .NOT.LSPRO) THEN - if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_sv ) then - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_init( tbudgets(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep ) idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_init( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do end if end if @@ -178,17 +193,17 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN CALL LIMA_CCN_ACTIVATION( CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, PCLDFR ) - if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_sv ) then - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_end( tbudgets(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep ) idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_end( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do end if end if @@ -202,22 +217,22 @@ END IF !------------------------------------------------------------------------------- ! IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN - if ( lbu_enable ) then - if ( lbudget_sv ) then + if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_sv ) then do jl = 1, nmod_ifn idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl - call Budget_store_init( tbudgets(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep ) idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl - call Budget_store_init( tbudgets(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_init( tbudgets(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do do jl = 1, nmod_imm idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl - call Budget_store_init( tbudgets(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do end if end if @@ -231,35 +246,35 @@ IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN 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 ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND', z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ifn idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl - call Budget_store_end( tbudgets(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep ) idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl - call Budget_store_end( tbudgets(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do 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 + if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC', z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC', z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then if (nmom_c.ge.2) then - call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) end if - call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_end( tbudgets(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do do jl = 1, nmod_imm idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl - call Budget_store_end( tbudgets(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do end if end if @@ -277,27 +292,27 @@ IF (LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN 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 ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND', z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_ADD_PHY(D, 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', & + call BUDGET_STORE_ADD_PHY(D, 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 + if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC', z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC', z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then if (nmom_c.ge.2) then - call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) end if - call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_ADD_PHY(D, 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', & + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', & -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) end if end if @@ -308,46 +323,49 @@ END IF 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 - ZRVS=PRVT/PTSTEP - ZRIS=PRIT/PTSTEP - ZRHT=0. - ZCIT=PCIT - ZT=PT - CALL RAIN_ICE_NUCLEATION(1+JPHEXT, SIZE(PT,1)-JPHEXT, 1+JPHEXT, SIZE(PT,2)-JPHEXT, 1+JPVEXT, SIZE(PT,3)-JPVEXT, 6, & - PTSTEP, PTHT, PPABST, PRHODJ, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - ZCIT, PEXNREF, ZTHS, ZRVS, ZRIS, ZT, ZRHT) + ZLSFACT(:,:,:)=(CST%XLSTT+(CST%XCPV-CST%XCI)*(PT(:,:,:)-CST%XTT)) / & + ( ( CST%XCPD + & + CST%XCPV*PRVT(:,:,:) + & + CST%XCL*(PRCT(:,:,:)+PRRT(:,:,:)) + & + CST%XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)+PRHT(:,:,:)) ) * PEXNREF(:,:,:) ) + DO JI = 1, SIZE(PTHT,1) + DO JJ = 1, SIZE(PTHT,2) + CALL LIMA_ICE4_NUCLEATION(CST, SIZE(PTHT,3), & + PTHT(JI,JJ,:), PPABST(JI,JJ,:), PRHODREF(JI,JJ,:), PEXNREF(JI,JJ,:), ZLSFACT(JI,JJ,:), PT(JI,JJ,:), & + PRVT(JI,JJ,:), & + ZCIT(JI,JJ,:), ZRVHENIMR(JI,JJ,:) ) + END DO + END DO ! ! Z_TH_HIND=ZTHS*PTSTEP-PTHT ! Z_RI_HIND=ZRIS*PTSTEP-PRIT ! Z_CI_HIND=ZCIT-PCIT - PCIT=ZCIT - PRIT=ZRIS*PTSTEP - PTHT=ZTHS*PTSTEP - PRVT=ZRVS*PTSTEP + PRIT(:,:,:)=PRIT(:,:,:)+ZRVHENIMR(:,:,:) + PTHT(:,:,:)=PTHT(:,:,:)+ZRVHENIMR(:,:,:)*ZLSFACT(:,:,:) + PRVT(:,:,:)=PRVT(:,:,:)-ZRVHENIMR(:,:,:) ! Z_TH_HINC=0. ! Z_RC_HINC=0. ! Z_CC_HINC=0. ! ! -! 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 ( BUCONF%lbu_enable ) then +! if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND', z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_sv ) then +! call BUDGET_STORE_ADD_PHY(D, 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', & +! call BUDGET_STORE_ADD_PHY(D, 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 ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC', z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC', z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( BUCONF%lbudget_sv ) then +! call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! call BUDGET_STORE_ADD_PHY(D, 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', & +! call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', & ! -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) ! end if ! end if @@ -356,17 +374,17 @@ END IF !------------------------------------------------------------------------------- ! 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 ) - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_sv ) then - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_init( tbudgets(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep ) end if end if @@ -376,17 +394,17 @@ IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN 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_end( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep ) - if ( lbudget_sv ) then - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep ) + if ( BUCONF%lbudget_sv ) then + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep ) do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_end( tbudgets(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep ) end do - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep ) end if end if ENDIF diff --git a/src/common/micro/modd_param_lima_cold.F90 b/src/common/micro/modd_param_lima_cold.F90 index 3801cfcb7..337480312 100644 --- a/src/common/micro/modd_param_lima_cold.F90 +++ b/src/common/micro/modd_param_lima_cold.F90 @@ -139,6 +139,14 @@ 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 ! +! For ICE4 nucleation +REAL, SAVE :: XALPHA1 +REAL, SAVE :: XALPHA2 +REAL, SAVE :: XBETA1 +REAL, SAVE :: XBETA2 +REAL, SAVE :: XNU10 +REAL, SAVE :: XNU20 +! !------------------------------------------------------------------------------- ! END MODULE MODD_PARAM_LIMA_COLD diff --git a/src/common/micro/mode_lima_ice4_nucleation.F90 b/src/common/micro/mode_lima_ice4_nucleation.F90 new file mode 100644 index 000000000..082b3c3e5 --- /dev/null +++ b/src/common/micro/mode_lima_ice4_nucleation.F90 @@ -0,0 +1,147 @@ +!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +MODULE MODE_LIMA_ICE4_NUCLEATION +IMPLICIT NONE +CONTAINS +SUBROUTINE LIMA_ICE4_NUCLEATION(CST, KSIZE, & + PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, & + PRVT, & + PCIT, PRVHENI_MR) +!! +!!** PURPOSE +!! ------- +!! Computes the nucleation +!! +!! AUTHOR +!! ------ +!! S. Riette from the splitting of rain_ice source code (nov. 2014) +!! +!! MODIFICATIONS +!! ------------- +!! +!! R. El Khatib 24-Aug-2021 Optimizations +! +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST, ONLY: CST_t +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK +USE MODD_PARAM_LIMA_COLD, ONLY : XALPHA1, XBETA1, XALPHA2, XBETA2, XNU10, XNU20, XMNU0 +USE MODD_PARAM_LIMA, ONLY: LFEEDBACKT, XRTMIN +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +TYPE(CST_t), INTENT(IN) :: CST +INTEGER, INTENT(IN) :: KSIZE +REAL, DIMENSION(KSIZE), INTENT(IN) :: PTHT ! Theta at t +REAL, DIMENSION(KSIZE), INTENT(IN) :: PPABST ! absolute pressure at t +REAL, DIMENSION(KSIZE), INTENT(IN) :: PRHODREF! Reference density +REAL, DIMENSION(KSIZE), INTENT(IN) :: PEXN ! Exner function +REAL, DIMENSION(KSIZE), INTENT(IN) :: PLSFACT +REAL, DIMENSION(KSIZE), INTENT(IN) :: PT ! Temperature at time t +REAL, DIMENSION(KSIZE), INTENT(IN) :: PRVT ! Water vapor m.r. at t +REAL, DIMENSION(KSIZE), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t +REAL, DIMENSION(KSIZE), INTENT(OUT) :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation +! +!* 0.2 declaration of local variables +! +REAL, DIMENSION(KSIZE) :: ZW ! work array +REAL(KIND=JPRB) :: ZHOOK_HANDLE +LOGICAL, DIMENSION(KSIZE) :: GNEGT ! Test where to compute the HEN process +REAL, DIMENSION(KSIZE) :: ZZW, & ! Work array + ZUSW, & ! Undersaturation over water + ZSSI ! Supersaturation over ice +INTEGER :: JI +!------------------------------------------------------------------------------- +! +IF (LHOOK) CALL DR_HOOK('LIMA_ICE4_NUCLEATION', 0, ZHOOK_HANDLE)! +! +!$mnh_expand_where(JI=1:KSIZE) +GNEGT(:)=PT(:)<CST%XTT .AND. PRVT(:)>XRTMIN(1) +!$mnh_end_expand_where(JI=1:KSIZE) + +ZUSW(:)=0. +ZZW(:)=0. +!$mnh_expand_where(JI=1:KSIZE) +WHERE(GNEGT(:)) + ZZW(:)=ALOG(PT(:)) + ZUSW(:)=EXP(CST%XALPW - CST%XBETAW/PT(:) - CST%XGAMW*ZZW(:)) ! es_w + ZZW(:)=EXP(CST%XALPI - CST%XBETAI/PT(:) - CST%XGAMI*ZZW(:)) ! es_i +END WHERE +!$mnh_end_expand_where(JI=1:KSIZE) + +ZSSI(:)=0. +!$mnh_expand_where(JI=1:KSIZE) +WHERE(GNEGT(:)) + ZZW(:)=MIN(PPABST(:)/2., ZZW(:)) ! safety limitation + ZSSI(:)=PRVT(:)*(PPABST(:)-ZZW(:)) / (CST%XEPSILO*ZZW(:)) - 1.0 + ! Supersaturation over ice + ZUSW(:)=MIN(PPABST(:)/2., ZUSW(:)) ! safety limitation + ZUSW(:)=(ZUSW(:)/ZZW(:))*((PPABST(:)-ZZW(:))/(PPABST(:)-ZUSW(:))) - 1.0 + ! Supersaturation of saturated water vapor over ice + ! + !* 3.1 compute the heterogeneous nucleation source RVHENI + ! + !* 3.1.1 compute the cloud ice concentration + ! + ZSSI(:)=MIN(ZSSI(:), ZUSW(:)) ! limitation of SSi according to SSw=0 +END WHERE +!$mnh_end_expand_where(JI=1:KSIZE) + +ZZW(:)=0. +DO JI=1,KSIZE + IF(GNEGT(JI)) THEN + IF(PT(JI)<CST%XTT-5.0 .AND. ZSSI(JI)>0.0) THEN + ZZW(JI)=XNU20*EXP(XALPHA2*ZSSI(JI)-XBETA2) + ELSEIF(PT(JI)<=CST%XTT-2.0 .AND. PT(JI)>=CST%XTT-5.0 .AND. ZSSI(JI)>0.0) THEN + ZZW(JI)=MAX(XNU20*EXP(-XBETA2 ), & + XNU10*EXP(-XBETA1*(PT(JI)-CST%XTT))*(ZSSI(JI)/ZUSW(JI))**XALPHA1) + ENDIF + ENDIF +ENDDO +!$mnh_expand_where(JI=1:KSIZE) +WHERE(GNEGT(:)) + ZZW(:)=ZZW(:)-PCIT(:) + ZZW(:)=MIN(ZZW(:), 50.E3) ! limitation provisoire a 50 l^-1 +END WHERE +!$mnh_end_expand_where(JI=1:KSIZE) + +PRVHENI_MR(:)=0. +!$mnh_expand_where(JI=1:KSIZE) +WHERE(GNEGT(:)) + ! + !* 3.1.2 update the r_i and r_v mixing ratios + ! + PRVHENI_MR(:)=MAX(ZZW(:), 0.0)*XMNU0/PRHODREF(:) + PRVHENI_MR(:)=MIN(PRVT(:), PRVHENI_MR(:)) +END WHERE +!$mnh_end_expand_where(JI=1:KSIZE) +!Limitation due to 0 crossing of temperature +IF(LFEEDBACKT) THEN + ZW(:)=0. + !$mnh_expand_where(JI=1:KSIZE) + WHERE(GNEGT(:)) + ZW(:)=MIN(PRVHENI_MR(:), & + MAX(0., (CST%XTT/PEXN(:)-PTHT(:))/PLSFACT(:))) / & + MAX(PRVHENI_MR(:), 1.E-20) + END WHERE + PRVHENI_MR(:)=PRVHENI_MR(:)*ZW(:) + ZZW(:)=ZZW(:)*ZW(:) + !$mnh_end_expand_where(JI=1:KSIZE) +ENDIF +!$mnh_expand_where(JI=1:KSIZE) +WHERE(GNEGT(:)) + PCIT(:)=MAX(ZZW(:)+PCIT(:), PCIT(:)) +END WHERE +!$mnh_end_expand_where(JI=1:KSIZE) +! +IF (LHOOK) CALL DR_HOOK('LIMA_ICE4_NUCLEATION', 1, ZHOOK_HANDLE) +END SUBROUTINE LIMA_ICE4_NUCLEATION +END MODULE MODE_LIMA_ICE4_NUCLEATION diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh index 55e0785ea..e5136d8dc 100755 --- a/tools/check_commit_ial.sh +++ b/tools/check_commit_ial.sh @@ -360,6 +360,7 @@ if [ $packcreation -eq 1 ]; then #Move manually files outside of mpa (a find on the whole repository would take too much a long time) [ -f $EXT/yomparar.F90 ] && mv $EXT/yomparar.F90 ../arpifs/module/ [ -f $EXT/namparar.nam.h ] && mv $EXT/namparar.nam.h ../arpifs/namelist + [ -f $EXT/namlima.nam.h ] && mv $EXT/namlima.nam.h ../arpifs/namelist [ -f $EXT/suparar.F90 ] && mv $EXT/suparar.F90 ../arpifs/phys_dmn/ [ -f $EXT/apl_arome.F90 ] && mv $EXT/apl_arome.F90 ../arpifs/phys_dmn/ [ -f $EXT/suphmpa.F90 ] && mv $EXT/suphmpa.F90 ../arpifs/phys_dmn/ -- GitLab