diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index fc8e5a96dbb4b40e45947971cb6ea4450da5f8e6..c2986feee9a266f78977e6d8aca9eb1cbfc7f312 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -3162,8 +3162,8 @@ IF (LMICRO) THEN & 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_, & & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_, & - & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH& - & ) + & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, & + & YDMODEL%YRML_DIAG%YRMDDH) ELSE !CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KLON,KLEV,KFDIA,NRR,KSTEP+1,& !this is the target version CALL ARO_RAIN_ICE (NPROMICRO,YDCPG_OPTS%KFLEVG,IKU,IKL,YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDCPG_BNDS%KFDIA,NRR,YDCPG_OPTS%KSTEP+1, & diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 index 4b10ba776c133c4c6a7c2b292f4e14bcad303be8..b3f7d2159e20a10d5c41c28feae45c96b61e9dde 100644 --- a/src/arome/ext/aro_lima.F90 +++ b/src/arome/ext/aro_lima.F90 @@ -5,6 +5,7 @@ PTHS, PRS, PSVS, PEVAP, & PINPRR,PINPRS, & PINPRG,PINPRH,PFPR, & + PCLDFR, & YDDDH, YDLDDH, YDMDDH ) USE PARKIND1, ONLY : JPRB @@ -38,6 +39,8 @@ ! ------------ ! ! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! USE MODD_CONF USE MODD_CST USE MODD_PARAMETERS @@ -108,6 +111,7 @@ REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG! Graupel instant precip 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 @@ -131,7 +135,8 @@ REAL, DIMENSION(KLON,1,KLEV):: & & ZRAINFR, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC REAL, DIMENSION(KLON,1):: ZINPRC ! surf cloud sedimentation ! for the correction of negative rv -REAL, DIMENSION(KLON,1):: ZINPRI ! surf cloud ice sedimentation +REAL, DIMENSION(KLON,1):: ZINPRI, ZINDEP ! surf cloud ice sedimentation +REAL, DIMENSION(KLON,1,KLEV):: ZICEFR, ZPRCFR REAL :: ZMASSTOT ! total mass for one water category ! including the negative values REAL :: ZMASSPOS ! total mass for one water category @@ -140,6 +145,8 @@ REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR LOGICAL :: LL_RRR_BUDGET ! +TYPE(TBUDGETDATA), DIMENSION() :: YLBUDGET +TYPE(DIMPHYEX_t) :: YLDIMPHYEX ! !------------------------------------------------------------------------------ ! @@ -149,6 +156,9 @@ LOGICAL :: LL_RRR_BUDGET REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('ARO_LIMA',0,ZHOOK_HANDLE) +!Dimensions +CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA) + HCLOUD='LIMA' KMI=1 ZINPRC=0. @@ -244,16 +254,16 @@ END DO !* 3.3 STORE THE BUDGET TERMS ! ---------------------- -LL_RRR_BUDGET = (LBUDGET_RV).OR.(LBUDGET_RC).OR.(LBUDGET_RR).OR.(LBUDGET_RI) & - & .OR.(LBUDGET_RS).OR.(LBUDGET_RG).OR.(LBUDGET_RH) +LL_RRR_BUDGET = (TBUCONF%LBUDGET_RV).OR.(TBUCONF%LBUDGET_RC).OR.(TBUCONF%LBUDGET_RR).OR.(TBUCONF%LBUDGET_RI) & + & .OR.(TBUCONF%LBUDGET_RS).OR.(TBUCONF%LBUDGET_RG).OR.(TBUCONF%LBUDGET_RH) IF (LL_RRR_BUDGET) THEN DO JRR=1,KRR CALL BUDGET_DDH (PRS(:,:,:,JRR) * PRHODJ(:,:,:), JRR+5,'NEGA_BU_RRR',YDDDH,YDLDDH, YDMDDH) END DO END IF -IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_SV) THEN +IF (TBUCONF%LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH) +IF (TBUCONF%LBUDGET_SV) THEN CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NC)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NR)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NI)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) @@ -271,7 +281,12 @@ IF (LBUDGET_SV) THEN END IF END IF - +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 ! ! !------------------------------------------------------------------------------- @@ -284,40 +299,15 @@ END IF ! ! ! -IF (LPTSPLIT) THEN - CALL LIMA (PTSTEP=2*PTSTEP, HFMFILE='DUMMY', OCLOSE_OUT=.FALSE., & - PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=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, & - PTHS=PTHS, PRS=PRS, PSVS=PSVS, & - PINPRC=ZINPRC, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, & - PEVAP3D=PEVAP, KSPLITR=KSPLITR, KSPLITG=KSPLITG, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) -ELSE - IF (LWARM_LIMA) CALL LIMA_WARM(OACTIT=LACTIT_LIMA, OSEDC=LSEDC_LIMA, ORAIN=LRAIN_LIMA, KSPLITR=KSPLITR, PTSTEP=2*PTSTEP, KMI=KMI, & - HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & - PRHODREF=PRHODREF, PEXNREF=PEXNREF, PW_NU=PW_NU, PPABSM=PPABSM, PPABST=PPABSM, & - PTHM=PTHT, PRCM=PRT(:,:,:,2), & - PTHT=PTHT, PRT=PRT, PSVT=PSVT, & - PTHS=PTHS, PRS=PRS, PSVS=PSVS, & - PINPRC=ZINPRC,PINPRR=PINPRR, PINPRR3D=ZDUM3DR, PEVAP3D=PEVAP,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) - ! - IF (LCOLD_LIMA) CALL LIMA_COLD(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI, & - HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & - PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU, & - PTHM=PTHT, PPABSM=PPABSM, & - PTHT=PTHT, PRT=PRT, PSVT=PSVT, & - PTHS=PTHS, PRS=PRS, PSVS=PSVS, & - PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH) - ! - IF (LWARM_LIMA .AND. LCOLD_LIMA) CALL LIMA_MIXED(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI, & - HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & - PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU, & - PTHM=PTHT, PPABSM=PPABSM, & - PTHT=PTHT, PRT=PRT, PSVT=PSVT, & - PTHS=PTHS, PRS=PRS, PSVS=PSVS,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) - -ENDIF +CALL LIMA (YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & + PTSTEP=2*PTSTEP, & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=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, & + 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 ) !add ZINPRC in PINPRR PINPRR=PINPRR+ZINPRC !------------------------------------------------------------------------------- diff --git a/src/common/micro/lima.F90 b/src/common/micro/lima.F90 index 797bc823cf2139d9f5c96d07d4c53750277c2e7e..619cede6390ee9b6929ebc0dc04c1afa195dc3b3 100644 --- a/src/common/micro/lima.F90 +++ b/src/common/micro/lima.F90 @@ -9,8 +9,8 @@ MODULE MODI_LIMA ! INTERFACE ! - SUBROUTINE LIMA ( KKA, KKU, KKL, & - PTSTEP, TPFILE, & + SUBROUTINE LIMA ( D, CST, BUCONF, TBUDGETS, KBUDGETS, & + PTSTEP, & PRHODREF, PEXNREF, PDZZ, & PRHODJ, PPABST, & NCCN, NIFN, NIMM, & @@ -21,13 +21,17 @@ INTERFACE ! USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, only: NSV_LIMA_BEG +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t +USE MODD_CST, ONLY: CST_t ! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +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 ! Time step -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function @@ -69,8 +73,8 @@ END MODULE MODI_LIMA ! ! ! ######spl - SUBROUTINE LIMA ( KKA, KKU, KKL, & - PTSTEP, TPFILE, & + SUBROUTINE LIMA ( D, CST, BUCONF, TBUDGETS, KBUDGETS, & + PTSTEP, & PRHODREF, PEXNREF, PDZZ, & PRHODJ, PPABST, & NCCN, NIFN, NIMM, & @@ -110,13 +114,10 @@ END MODULE MODI_LIMA ! !* 0. DECLARATIONS ! ------------ -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_RR, NBUDGET_RI, & - NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & - tbudgets -USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, & + NBUDGET_RI, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1 +USE MODD_CST, ONLY: CST_t USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, ONLY: NSV_LIMA_BEG, & NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & @@ -129,9 +130,8 @@ USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI, & NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_COLD, ONLY: XAI, XBI USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XAC, XBC, XAR, XBR -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 mode_tools, only: Countjv USE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS @@ -145,12 +145,13 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +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 ! Time step -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function @@ -339,7 +340,6 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZCF1D, ZIF1D, ZPF1D ! Various parameters ! domain size and levels (AROME compatibility) INTEGER :: KRR -INTEGER :: IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, IKTB, IKTE ! loops and packing INTEGER :: II, IPACK, JI, JJ, JK integer :: idx @@ -359,22 +359,6 @@ real, dimension(:,:,:), allocatable :: zrhodjontstep !* 0. Init ! ---- ! -! -IIB=1+JPHEXT ! first physical point in i -IIT=SIZE(PDZZ,1) ! total number of points in i -IIE=IIT - JPHEXT ! last physical point in i -! -IJB=1+JPHEXT ! first physical point in j -IJT=SIZE(PDZZ,2) ! total number of points in j -IJE=IJT - JPHEXT ! last physical point in j -! -IKB=KKA+JPVEXT*KKL ! near ground physical point -IKE=KKU-JPVEXT*KKL ! near TOA physical point -IKT=SIZE(PDZZ,3) ! total number of points in k -! -IKTB=1+JPVEXT ! first index for a physical point in k -IKTE=IKT-JPVEXT ! last index for a physical point in k -! ZTHS(:,:,:) = PTHS(:,:,:) ZTHT(:,:,:) = PTHS(:,:,:) * PTSTEP ZRVT(:,:,:) = 0. @@ -417,7 +401,7 @@ ZIMMNS(:,:,:,:) = 0. ZHOMFT(:,:,:) = 0. ZHOMFS(:,:,:) = 0. -if ( lbu_enable ) then +if ( BUCONF%lbu_enable ) then Z_RR_CVRC(:,:,:) = 0. Z_CR_CVRC(:,:,:) = 0. allocate( ZTOT_CR_BRKU (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_BRKU(:,:,:) = 0. @@ -602,25 +586,25 @@ IF ( LHHONI ) ZHOMFT(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP IF ( LHHONI ) ZHOMFS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) ! ZINV_TSTEP = 1./PTSTEP -ZEXN(:,:,:) = (PPABST(:,:,:)/XP00)**(XRD/XCPD) +ZEXN(:,:,:) = (PPABST(:,:,:)/CST%XP00)**(CST%XRD/CST%XCPD) ZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) ! !------------------------------------------------------------------------------- ! !* 0. Check mean diameter for cloud, rain and ice ! -------------------------------------------- -! if ( lbu_enable ) then -! if ( lbudget_rc .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_ri .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_sv ) then +! if ( BUCONF%lbu_enable ) then +! if ( BUCONF%lbudget_rc .and. lwarm .and. lrain ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_rr .and. lwarm .and. lrain ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_ri .and. lcold .and. lsnow ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_rs .and. lcold .and. lsnow ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_sv ) then ! if ( lwarm .and. lrain .and. nmom_c.ge.2) & -! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) ) ! if ( lwarm .and. lrain .and. nmom_r.ge.2) & -! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) ) ! if ( lcold .and. lsnow .and. nmom_i.ge.2) & -! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) ) ! end if ! end if !!$IF (NMOM_R.GE.2) THEN @@ -660,18 +644,18 @@ ZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) !!$ END WHERE !!$END IF ! -! if ( lbu_enable ) then -! if ( lbudget_rc .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_ri .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) ) -! if ( lbudget_sv ) then +! if ( BUCONF%lbu_enable ) then +! if ( BUCONF%lbudget_rc .and. lwarm .and. lrain ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_rr .and. lwarm .and. lrain ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_ri .and. lcold .and. lsnow ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_rs .and. lcold .and. lsnow ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) ) +! if ( BUCONF%lbudget_sv ) then ! if ( lwarm .and. lrain .and. nmom_c.ge.2) & -! call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) ) ! if ( lwarm .and. lrain .and. nmom_r.ge.2) & -! call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) ) ! if ( lcold .and. lsnow .and. nmom_i.ge.2) & -! call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) ) ! end if ! end if !------------------------------------------------------------------------------- @@ -687,116 +671,116 @@ PINPRI=0. PINPRS=0. PINPRG=0. PINPRH=0. -if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr .and. nomm_r.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs .and. nmom_s.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg .and. nmom_g.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh .and. nmom_h.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv ) then +if ( 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_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(:, :, :) ) + if ( BUCONF%lbudget_rh .and. nmom_h.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv ) then if ( lsedc .and. nmom_c.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) if ( nmom_r.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) if ( lsedi .and. nmom_i.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) if ( nmom_s.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) if ( nmom_g.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) if ( nmom_h.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) end if end if ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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, & 'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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, & 'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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, & 'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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 & 'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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, & 'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP -ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP -IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & +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, & 'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH) ! ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP ! ! Call budgets ! -if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr .and. nmom_r.ge.2 ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs .and. nmom_s.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg .and. nmom_g.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh .and. nmom_h.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv ) then +if ( BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rr .and. nmom_r.ge.2 ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rs .and. nmom_s.ge.1 ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rg .and. nmom_g.ge.1 ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rh .and. nmom_h.ge.1 ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv ) then if ( lsedc .and. nmom_c.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) ) if ( nmom_r.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) ) if ( lsedi .and. nmom_i.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) ) if ( nmom_s.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) ) if ( nmom_g.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) ) if ( nmom_h.ge.2 ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) ) end if end if ! ! 1.bis Deposition at 1st level above ground ! IF (NMOM_C.GE.1 .AND. LDEPOC) THEN - if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv .and. nmom_c.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) & + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) PINDEP(:,:)=0. GDEP(:,:) = .FALSE. - GDEP(:,:) = ZRCS(:,:,IKB) >0 .AND. ZCCS(:,:,IKB) >0 .AND. ZRCT(:,:,IKB) >0 .AND. ZCCT(:,:,IKB) >0 + GDEP(:,:) = ZRCS(:,:,D%NKB) >0 .AND. ZCCS(:,:,D%NKB) >0 .AND. ZRCT(:,:,D%NKB) >0 .AND. ZCCT(:,:,D%NKB) >0 WHERE (GDEP) - ZRCS(:,:,IKB) = ZRCS(:,:,IKB) - XVDEPOC * ZRCT(:,:,IKB) / PDZZ(:,:,IKB) - ZCCS(:,:,IKB) = ZCCS(:,:,IKB) - XVDEPOC * ZCCT(:,:,IKB) / PDZZ(:,:,IKB) - PINPRC(:,:) = PINPRC(:,:) + XVDEPOC * ZRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW - PINDEP(:,:) = XVDEPOC * ZRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW + ZRCS(:,:,D%NKB) = ZRCS(:,:,D%NKB) - XVDEPOC * ZRCT(:,:,D%NKB) / PDZZ(:,:,D%NKB) + ZCCS(:,:,D%NKB) = ZCCS(:,:,D%NKB) - XVDEPOC * ZCCT(:,:,D%NKB) / PDZZ(:,:,D%NKB) + PINPRC(:,:) = PINPRC(:,:) + XVDEPOC * ZRCT(:,:,D%NKB) * PRHODREF(:,:,D%NKB) /CST%XRHOLW + PINDEP(:,:) = XVDEPOC * ZRCT(:,:,D%NKB) * PRHODREF(:,:,D%NKB) /CST%XRHOLW END WHERE - if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv .and. nmom_c.ge.2) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) & + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) ) END IF ! ! !!$Z_RR_CVRC(:,:,:) = 0. !!$Z_CR_CVRC(:,:,:) = 0. !!$IF (NMOM_R.GE.2) THEN -!!$ if( lbu_enable ) then -!!$ if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'R2C1', zrcs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'R2C1', zrrs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_sv .and. nmom_c.ge.2) & -!!$ call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_sv .and. nmom_r.ge.2) & -!!$ call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) ) +!!$ if( BUCONF%lbu_enable ) then +!!$ if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'R2C1', zrcs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_rr ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'R2C1', zrrs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) & +!!$ call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_sv .and. nmom_r.ge.2) & +!!$ call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) ) !!$ end if !!$ !!$ CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCS*PTSTEP, ZRRS*PTSTEP, ZCCS*PTSTEP, ZCRS*PTSTEP, & @@ -807,13 +791,13 @@ END IF !!$ ZCCS(:,:,:) = ZCCS(:,:,:) - Z_CR_CVRC(:,:,:)/PTSTEP !!$ ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP !!$ -!!$ if( lbu_enable ) then -!!$ if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'R2C1', zrcs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'R2C1', zrrs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_sv .and. nmom_c.ge.2) & -!!$ call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) ) -!!$ if ( lbudget_sv .and. nmom_r.ge.2) & -!!$ call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) ) +!!$ if( BUCONF%lbu_enable ) then +!!$ if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'R2C1', zrcs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_rr ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'R2C1', zrrs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) & +!!$ call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) ) +!!$ if ( BUCONF%lbudget_sv .and. nmom_r.ge.2) & +!!$ call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) ) !!$ end if !!$END IF ! @@ -841,7 +825,7 @@ IF ( NMOM_H.GE.2 ) ZCHT(:,:,:) = ZCHS(:,:,:) * PTSTEP !* 2. Compute cloud, ice and precipitation fractions ! ---------------------------------------------- ! -CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, & +CALL LIMA_COMPUTE_CLOUD_FRACTIONS (D, & ZCCT, ZRCT, & ZCRT, ZRRT, & ZCIT, ZRIT, & @@ -855,7 +839,7 @@ CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, & !* 2. Nucleation processes ! -------------------- ! -CALL LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, PRHODJ, & +CALL LIMA_NUCLEATION_PROCS (PTSTEP, PRHODJ, & PRHODREF, ZEXN, PPABST, ZT, PDTHRAD, PW_NU, & ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & ZCCT, ZCRT, ZCIT, & @@ -911,7 +895,7 @@ ZTIME(:,:,:)=0. ! Current integration time (all points may have a different inte ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:) WHERE (ZRT_SUM(:,:,:)<XRTMIN(2)) ZTIME(:,:,:)=PTSTEP ! no need to treat hydrometeor-free point ! -DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) +DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP)) ! IF(XMRSTEP/=0.) THEN ! In this case we need to remember the mixing ratios used to compute the tendencies @@ -932,7 +916,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ENDIF ! LLCOMPUTE(:,:,:)=.FALSE. - LLCOMPUTE(IIB:IIE,IJB:IJE,IKTB:IKTE) = ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep + LLCOMPUTE(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE) = ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep WHERE(LLCOMPUTE(:,:,:)) IITER(:,:,:)=IITER(:,:,:)+1 END WHERE @@ -1246,13 +1230,13 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ! We need to adjust tendencies when temperature reaches 0 IF(LFEEDBACKT) THEN !Is ZB_TH enough to change temperature sign? - WHERE( ((ZTHT1D(:) - XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. ) + WHERE( ((ZTHT1D(:) - CST%XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. ) ZMAXTIME(:)=0. ENDWHERE !Can ZA_TH make temperature change of sign? ZTIME_THRESHOLD(:)=-1. WHERE(ABS(ZA_TH(:))>1.E-20) - ZTIME_THRESHOLD(:)=(XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:) + ZTIME_THRESHOLD(:)=(CST%XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:) ENDWHERE WHERE(ZTIME_THRESHOLD(:)>0.) ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) @@ -1834,230 +1818,230 @@ IF ( LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TSTEP ! ! Call budgets ! -if ( lbu_enable ) then +if ( BUCONF%lbu_enable ) then allocate( zrhodjontstep(size( prhodj, 1), size( prhodj, 2), size( prhodj, 3) ) ) zrhodjontstep(:, :, :) = zinv_tstep * prhodj(:, :, :) - if ( lbudget_th ) then - call Budget_store_add( tbudgets(NBUDGET_TH), 'REVA', ztot_th_evap (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'HONC', ztot_th_honc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'HONR', ztot_th_honr (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPS', ztot_th_deps (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPI', ztot_th_depi (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPG', ztot_th_depg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'IMLT', ztot_th_imlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'BERFI', ztot_th_berfi(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'RIM', ztot_th_rim (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'ACC', ztot_th_acc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'CFRZ', ztot_th_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'WETG', ztot_th_wetg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'DRYG', ztot_th_dryg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'GMLT', ztot_th_gmlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPH', ztot_th_deph (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'WETH', ztot_th_weth (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_TH), 'HMLT', ztot_th_hmlt (:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_th ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA', ztot_th_evap (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HONC', ztot_th_honc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HONR', ztot_th_honr (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS', ztot_th_deps (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPI', ztot_th_depi (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG', ztot_th_depg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT', ztot_th_imlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI', ztot_th_berfi(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM', ztot_th_rim (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC', ztot_th_acc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ', ztot_th_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG', ztot_th_wetg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG', ztot_th_dryg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT', ztot_th_gmlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPH', ztot_th_deph (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH', ztot_th_weth (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT', ztot_th_hmlt (:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rv ) then - call Budget_store_add( tbudgets(NBUDGET_RV), 'REVA', -ztot_rr_evap (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPS', -ztot_rs_deps (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPI', -ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPG', -ztot_rg_depg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RV), 'CORR2', ztot_rv_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPH', -ztot_rh_deph (:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_rv ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA', -ztot_rr_evap (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ztot_rs_deps (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPI', -ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ztot_rg_depg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'CORR2', ztot_rv_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPH', -ztot_rh_deph (:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rc ) then - call Budget_store_add( tbudgets(NBUDGET_RC), 'AUTO', ztot_rc_auto (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'ACCR', ztot_rc_accr (:, :, :) * zrhodjontstep(:, :, :) ) - !call Budget_store_add( tbudgets(NBUDGET_RC), 'REVA', 0. ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'HONC', ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'IMLT', ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'BERFI', ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'RIM', ztot_rc_rim (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'WETG', ztot_rc_wetg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'DRYG', ztot_rc_dryg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'CVRC', -ztot_rr_cvrc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'CORR2', ztot_rc_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RC), 'WETH', ztot_rc_weth(:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_rc ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO', ztot_rc_auto (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR', ztot_rc_accr (:, :, :) * zrhodjontstep(:, :, :) ) + !call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'REVA', 0. ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HONC', ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT', ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM', ztot_rc_rim (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG', ztot_rc_wetg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG', ztot_rc_dryg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CVRC', -ztot_rr_cvrc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR2', ztot_rc_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH', ztot_rc_weth(:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rr ) then - call Budget_store_add( tbudgets(NBUDGET_RR), 'AUTO', -ztot_rc_auto(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'ACCR', -ztot_rc_accr(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'REVA', ztot_rr_evap(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'HONR', ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'ACC', ztot_rr_acc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'CFRZ', ztot_rr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'WETG', ztot_rr_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'DRYG', ztot_rr_dryg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'GMLT', ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'CVRC', ztot_rr_cvrc(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'CORR2', ztot_rr_corr2(:, :, :)* zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'WETH', ztot_rr_weth(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RR), 'HMLT', ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_rr ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO', -ztot_rc_auto(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR', -ztot_rc_accr(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA', ztot_rr_evap(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HONR', ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC', ztot_rr_acc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ', ztot_rr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG', ztot_rr_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG', ztot_rr_dryg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT', ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CVRC', ztot_rr_cvrc(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR2', ztot_rr_corr2(:, :, :)* zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH', ztot_rr_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT', ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_ri ) then - call Budget_store_add( tbudgets(NBUDGET_RI), 'HONC', -ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'CNVI', ztot_ri_cnvi (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'CNVS', ztot_ri_cnvs (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'AGGS', ztot_ri_aggs (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'IMLT', -ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'BERFI', -ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'HMS', ztot_ri_hms (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'CFRZ', ztot_ri_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'DEPI', ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'CIBU', ztot_ri_cibu (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'RDSF', ztot_ri_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'WETG', ztot_ri_wetg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'DRYG', ztot_ri_dryg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'HMG', ztot_ri_hmg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'CORR2', ztot_ri_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RI), 'WETH', ztot_ri_weth (:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_ri ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HONC', -ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CNVI', ztot_ri_cnvi (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CNVS', ztot_ri_cnvs (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS', ztot_ri_aggs (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT', -ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI', -ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HMS', ztot_ri_hms (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ', ztot_ri_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DEPI', ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CIBU', ztot_ri_cibu (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'RDSF', ztot_ri_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG', ztot_ri_wetg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG', ztot_ri_dryg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HMG', ztot_ri_hmg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR2', ztot_ri_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH', ztot_ri_weth (:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rs ) then - call Budget_store_add( tbudgets(NBUDGET_RS), 'CNVI', -ztot_ri_cnvi(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'DEPS', ztot_rs_deps(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'CNVS', -ztot_ri_cnvs(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'AGGS', -ztot_ri_aggs(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'RIM', ztot_rs_rim (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'HMS', ztot_rs_hms (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'ACC', ztot_rs_acc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'CIBU', -ztot_ri_cibu(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'WETG', ztot_rs_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'DRYG', ztot_rs_dryg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RS), 'WETH', ztot_rs_weth(:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_rs ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CNVI', -ztot_ri_cnvi(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS', ztot_rs_deps(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CNVS', -ztot_ri_cnvs(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS', -ztot_ri_aggs(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM', ztot_rs_rim (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'HMS', ztot_rs_hms (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC', ztot_rs_acc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL', ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CIBU', -ztot_ri_cibu(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG', ztot_rs_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG', ztot_rs_dryg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH', ztot_rs_weth(:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rg ) then - call Budget_store_add( tbudgets(NBUDGET_RG), 'HONR', -ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'DEPG', ztot_rg_depg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'RIM', ztot_rg_rim (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'ACC', ztot_rg_acc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'CMEL', -ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'CFRZ', ( -ztot_rr_cfrz(:, :, :) - ztot_ri_cfrz(:, :, :) ) & + if ( BUCONF%lbudget_rg ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HONR', -ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG', ztot_rg_depg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM', ztot_rg_rim (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC', ztot_rg_acc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL', -ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( -ztot_rr_cfrz(:, :, :) - ztot_ri_cfrz(:, :, :) ) & * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'RDSF', -ztot_ri_rdsf(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'WETG', ztot_rg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'DRYG', ztot_rg_dryg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'HMG', ztot_rg_hmg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'GMLT', -ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'WETH', ztot_rg_weth(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RG), 'COHG', ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RDSF', -ztot_ri_rdsf(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG', ztot_rg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG', ztot_rg_dryg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HMG', ztot_rg_hmg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH', ztot_rg_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'COHG', ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_rh ) then - call Budget_store_add( tbudgets(NBUDGET_RH), 'WETG', ztot_rh_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RH), 'DEPH', ztot_rh_deph(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RH), 'WETH', ztot_rh_weth(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RH), 'COHG', -ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(NBUDGET_RH), 'HMLT', -ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) + if ( BUCONF%lbudget_rh ) then + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETG', ztot_rh_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DEPH', ztot_rh_deph(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH', ztot_rh_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'COHG', -ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) end if - if ( lbudget_sv ) then + if ( BUCONF%lbudget_sv ) then ! ! Cloud droplets ! if (nmom_c.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_nc - call Budget_store_add( tbudgets(idx), 'SELF', ztot_cc_self (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'AUTO', ztot_cc_auto (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'ACCR', ztot_cc_accr (:, :, :) * zrhodjontstep(:, :, :) ) - !call Budget_store_add( tbudgets(idx), 'REVA', 0. ) - call Budget_store_add( tbudgets(idx), 'HONC', ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'IMLT', ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'RIM', ztot_cc_rim (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETG', ztot_cc_wetg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'DRYG', ztot_cc_dryg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CVRC', -ztot_cr_cvrc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CORR2', ztot_cc_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETH', ztot_cc_weth (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SELF', ztot_cc_self (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AUTO', ztot_cc_auto (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACCR', ztot_cc_accr (:, :, :) * zrhodjontstep(:, :, :) ) + !call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'REVA', 0. ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONC', ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT', ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM', ztot_cc_rim (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', ztot_cc_wetg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG', ztot_cc_dryg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CVRC', -ztot_cr_cvrc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2', ztot_cc_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH', ztot_cc_weth (:, :, :) * zrhodjontstep(:, :, :) ) end if ! ! Rain drops ! if (nmom_r.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_nr - call Budget_store_add( tbudgets(idx), 'AUTO', ztot_cr_auto(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'SCBU', ztot_cr_scbu(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'REVA', ztot_cr_evap(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'BRKU', ztot_cr_brku(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'HONR', ztot_cr_honr(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'ACC', ztot_cr_acc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CFRZ', ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETG', ztot_cr_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'DRYG', ztot_cr_dryg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'GMLT', ztot_cr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CVRC', ztot_cr_cvrc(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CORR2', ztot_cr_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETH', ztot_cr_weth(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'HMLT', ztot_cr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AUTO', ztot_cr_auto(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SCBU', ztot_cr_scbu(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'REVA', ztot_cr_evap(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'BRKU', ztot_cr_brku(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONR', ztot_cr_honr(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC', ztot_cr_acc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ', ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', ztot_cr_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG', ztot_cr_dryg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'GMLT', ztot_cr_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CVRC', ztot_cr_cvrc(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2', ztot_cr_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH', ztot_cr_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMLT', ztot_cr_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) end if ! ! Ice crystals ! if (nmom_i.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_ni - call Budget_store_add( tbudgets(idx), 'HONC', -ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CNVI', ztot_ci_cnvi (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CNVS', ztot_ci_cnvs (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'AGGS', ztot_ci_aggs (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'IMLT', -ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'HMS', ztot_ci_hms (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CFRZ', ztot_ci_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CIBU', ztot_ci_cibu (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'RDSF', ztot_ci_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETG', ztot_ci_wetg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'DRYG', ztot_ci_dryg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'HMG', ztot_ci_hmg (:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CORR2', ztot_ci_corr2(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETH', ztot_ci_weth (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONC', -ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVI', ztot_ci_cnvi (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVS', ztot_ci_cnvs (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AGGS', ztot_ci_aggs (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT', -ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMS', ztot_ci_hms (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ', ztot_ci_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CIBU', ztot_ci_cibu (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RDSF', ztot_ci_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', ztot_ci_wetg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG', ztot_ci_dryg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMG', ztot_ci_hmg (:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2', ztot_ci_corr2(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH', ztot_ci_weth (:, :, :) * zrhodjontstep(:, :, :) ) end if ! ! Snow ! if (nmom_s.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_ns - call Budget_store_add( tbudgets(idx), 'CNVI', -ztot_ci_cnvi(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CNVS', -ztot_ci_cnvs(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'RIM', ztot_cs_rim(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'ACC', ztot_cs_acc(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CMEL', ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'SSC', ztot_cs_ssc(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETG', ztot_cs_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'DRYG', ztot_cs_dryg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETH', ztot_cs_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVI', -ztot_ci_cnvi(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVS', -ztot_ci_cnvs(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM', ztot_cs_rim(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC', ztot_cs_acc(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CMEL', ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SSC', ztot_cs_ssc(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', ztot_cs_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG', ztot_cs_dryg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH', ztot_cs_weth(:, :, :) * zrhodjontstep(:, :, :) ) end if ! ! Graupel ! if (nmom_g.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_ng - call Budget_store_add( tbudgets(idx), 'RIM', -ztot_cs_rim(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'ACC', -ztot_cs_acc(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CMEL', -ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'CFRZ', -ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETG', ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'GMLT', ztot_cg_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'WETH', ztot_cg_weth(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'COHG', ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM', -ztot_cs_rim(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC', -ztot_cs_acc(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CMEL', -ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ', -ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'GMLT', ztot_cg_gmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH', ztot_cg_weth(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'COHG', ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) end if ! ! Hail ! if (nmom_h.ge.2) then idx = NBUDGET_SV1 - 1 + nsv_lima_nh - call Budget_store_add( tbudgets(idx), 'WETG', -ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'COHG', -ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) - call Budget_store_add( tbudgets(idx), 'HMLT', ztot_ch_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG', -ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'COHG', -ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMLT', ztot_ch_hmlt(:, :, :) * zrhodjontstep(:, :, :) ) end if do ii = 1, nmod_ifn idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + ii - 1 - call Budget_store_add( tbudgets(idx), 'IMLT', ztot_ifnn_imlt(:, :, :, ii) * zrhodjontstep(:, :, :) ) + call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT', ztot_ifnn_imlt(:, :, :, ii) * zrhodjontstep(:, :, :) ) end do end if diff --git a/src/common/micro/lima_ccn_activation.F90 b/src/common/micro/lima_ccn_activation.F90 index bac576fa00f953074ced8034ceeb6e1271f3aadb..a391aad68227b1e4a3e5235ab206235cf5c4a932 100644 --- a/src/common/micro/lima_ccn_activation.F90 +++ b/src/common/micro/lima_ccn_activation.F90 @@ -8,13 +8,15 @@ ! ############################### ! INTERFACE - SUBROUTINE LIMA_CCN_ACTIVATION (TPFILE, & + SUBROUTINE LIMA_CCN_ACTIVATION (CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, & PCLDFR ) -USE MODD_IO, ONLY: TFILEDATA +USE MODD_CST, ONLY: CST_t +!USE MODD_IO, ONLY: TFILEDATA ! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +TYPE(CST_t), INTENT(IN) :: CST +!TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function @@ -39,7 +41,7 @@ END SUBROUTINE LIMA_CCN_ACTIVATION END INTERFACE END MODULE MODI_LIMA_CCN_ACTIVATION ! ############################################################################# - SUBROUTINE LIMA_CCN_ACTIVATION (TPFILE, & + SUBROUTINE LIMA_CCN_ACTIVATION (CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, & PCLDFR ) @@ -97,9 +99,9 @@ END MODULE MODI_LIMA_CCN_ACTIVATION !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMNH_EPSILON, XMV, XRV, XTT -use modd_field, only: TFIELDMETADATA, TYPEREAL -USE MODD_IO, ONLY: TFILEDATA +USE MODD_CST, ONLY: CST_t +!use modd_field, only: TFIELDDATA, TYPEREAL +!USE MODD_IO, ONLY: TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: LADJ, LACTIT, NMOD_CCN, XCTMIN, XKHEN_MULTI, XRTMIN, XLIMIT_FACTOR @@ -117,7 +119,8 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +TYPE(CST_t), INTENT(IN) :: CST +!TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function @@ -198,8 +201,8 @@ IKE=SIZE(PRHODREF,3) - JPVEXT ! ! Saturation vapor mixing ratio and radiative tendency ! -ZEPS= XMV / XMD -ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:)*EXP(-XALPW+XBETAW/PT(:,:,:)+XGAMW*ALOG(PT(:,:,:))) - 1.0) +ZEPS= CST%XMV / CST%XMD +ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:)*EXP(-CST%XALPW+CST%XBETAW/PT(:,:,:)+CST%XGAMW*ALOG(PT(:,:,:))) - 1.0) ZTDT(:,:,:) = 0. IF (LACTIT .AND. SIZE(PDTHRAD).GT.0) ZTDT(:,:,:) = PDTHRAD(:,:,:) * PEXNREF(:,:,:) ! @@ -222,7 +225,7 @@ IF (LADJ) THEN .OR. ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN ! GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & - .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & + .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(CST%XTT-22.) & .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) ! IF (LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & @@ -231,7 +234,7 @@ IF (LADJ) THEN .AND. PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) ELSE GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) & - .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & + .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(CST%XTT-22.) & .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) END IF ! @@ -285,7 +288,7 @@ IF( INUCT >= 1 ) THEN ALLOCATE(ZSMAX(INUCT)) IF (LADJ) THEN ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & - + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2 + + (((CST%XLVTT+(CST%XCPV-CST%XCL)*(ZZT(:)-CST%XTT))/ZZT(:))**2)/(CST%XCPD*CST%XRV) ! Psi2 ! ! !------------------------------------------------------------------------------- @@ -454,8 +457,8 @@ IF( INUCT >= 1 ) THEN ! IF (.NOT.LSUBG_COND) THEN ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) ) - PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (XLVTT+(XCPV-XCL)*(PT(:,:,:)-XTT))/ & - (PEXNREF(:,:,:)*(XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:)))) + PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(:,:,:)-CST%XTT))/ & + (PEXNREF(:,:,:)*(CST%XCPD+CST%XCPV*PRVT(:,:,:)+CST%XCL*(PRCT(:,:,:)+PRRT(:,:,:)))) PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:) PRCT(:,:,:) = PRCT(:,:,:) + ZW(:,:,:) PCCT(:,:,:) = PCCT(:,:,:) + UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) @@ -497,37 +500,36 @@ IF( INUCT >= 1 ) THEN ! END IF ! INUCT ! -IF ( tpfile%lopened ) THEN - IF ( INUCT == 0 ) THEN - ZW (:,:,:) = 0. - ZW2(:,:,:) = 0. - END IF - TZFIELD = TFIELDMETADATA( & - CMNHNAME = 'SMAX', & - CSTDNAME = '', & - CLONGNAME = 'SMAX', & - CUNITS = '', & - CDIR = 'XY', & - CCOMMENT = 'X_Y_Z_SMAX', & - NGRID = 1, & - NTYPE = TYPEREAL, & - NDIMS = 3, & - LTIMEDEP = .TRUE. ) - CALL IO_Field_write(TPFILE,TZFIELD,ZW) - ! - TZFIELD = TFIELDMETADATA( & - CMNHNAME = 'NACT', & - CSTDNAME = '', & - CLONGNAME = 'NACT', & - CUNITS = 'kg-1', & - CDIR = 'XY', & - CCOMMENT = 'X_Y_Z_NACT', & - NGRID = 1, & - NTYPE = TYPEREAL, & - NDIMS = 3, & - LTIMEDEP = .TRUE. ) - CALL IO_Field_write(TPFILE,TZFIELD,ZW2) -END IF +!!$IF ( tpfile%lopened ) THEN +!!$ IF ( INUCT == 0 ) THEN +!!$ ZW (:,:,:) = 0. +!!$ ZW2(:,:,:) = 0. +!!$ END IF +!!$ +!!$ TZFIELD%CMNHNAME ='SMAX' +!!$ TZFIELD%CSTDNAME = '' +!!$ TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) +!!$ TZFIELD%CUNITS = '' +!!$ TZFIELD%CDIR = 'XY' +!!$ TZFIELD%CCOMMENT = 'X_Y_Z_SMAX' +!!$ TZFIELD%NGRID = 1 +!!$ TZFIELD%NTYPE = TYPEREAL +!!$ TZFIELD%NDIMS = 3 +!!$ TZFIELD%LTIMEDEP = .TRUE. +!!$ CALL IO_Field_write(TPFILE,TZFIELD,ZW) +!!$ ! +!!$ TZFIELD%CMNHNAME ='NACT' +!!$ TZFIELD%CSTDNAME = '' +!!$ TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) +!!$ TZFIELD%CUNITS = 'kg-1' +!!$ TZFIELD%CDIR = 'XY' +!!$ TZFIELD%CCOMMENT = 'X_Y_Z_NACT' +!!$ TZFIELD%NGRID = 1 +!!$ TZFIELD%NTYPE = TYPEREAL +!!$ TZFIELD%NDIMS = 3 +!!$ TZFIELD%LTIMEDEP = .TRUE. +!!$ CALL IO_Field_write(TPFILE,TZFIELD,ZW2) +!!$END IF ! ! !------------------------------------------------------------------------------- @@ -770,7 +772,7 @@ INTEGER :: PIVEC1 ALLOCATE(PFUNCSMAX(NPTS)) ! PFUNCSMAX(:) = 0. -PZVEC1 = MAX( ( 1.0 + 10.0 * XMNH_EPSILON ) ,MIN( REAL(NHYP)*( 1.0 - 10.0 * XMNH_EPSILON ) , & +PZVEC1 = MAX( ( 1.0 + 10.0 * CST%XMNH_EPSILON ) ,MIN( REAL(NHYP)*( 1.0 - 10.0 * CST%XMNH_EPSILON ) , & XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) ) PIVEC1 = INT( PZVEC1 ) PZVEC1 = PZVEC1 - REAL( PIVEC1 ) diff --git a/src/common/micro/lima_ccn_hom_freezing.F90 b/src/common/micro/lima_ccn_hom_freezing.F90 index 86b7a9408b864e7d93dde71f280c0ce432bf57a8..b57bc6f2a99592997db11ce391024386fa85d4fc 100644 --- a/src/common/micro/lima_ccn_hom_freezing.F90 +++ b/src/common/micro/lima_ccn_hom_freezing.F90 @@ -8,11 +8,13 @@ ! ################################# ! INTERFACE - SUBROUTINE LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU, & + SUBROUTINE LIMA_CCN_HOM_FREEZING (CST, PRHODREF, PEXNREF, PPABST, PW_NU, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCRT, PCIT, PNFT, PNHT, & PICEFR ) +USE MODD_CST, ONLY: CST_t ! +TYPE(CST_t), INTENT(IN) :: CST 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 @@ -41,7 +43,7 @@ END INTERFACE END MODULE MODI_LIMA_CCN_HOM_FREEZING ! ! ########################################################################## - SUBROUTINE LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU, & + SUBROUTINE LIMA_CCN_HOM_FREEZING (CST, PRHODREF, PEXNREF, PPABST, PW_NU, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCRT, PCIT, PNFT, PNHT , & PICEFR ) @@ -69,9 +71,7 @@ END MODULE MODI_LIMA_CCN_HOM_FREEZING !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI, & - XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI, & - XG +USE MODD_CST, ONLY: CST_t USE MODD_NSV USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC @@ -89,6 +89,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST 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 @@ -185,7 +186,7 @@ IKB=1+JPVEXT IKE=SIZE(PTHT,3) - JPVEXT ! ! Temperature -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) +ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD) ! ZNHT(:,:,:) = PNHT(:,:,:) ! @@ -193,7 +194,7 @@ ZNHT(:,:,:) = PNHT(:,:,:) ! PACK variables ! GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-35.0 +GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT-35.0 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) ! IF (INEGT.GT.0) THEN @@ -256,14 +257,14 @@ IF (INEGT.GT.0) THEN ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0 ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0 ! - ZTCELSIUS(:) = ZZT(:)-XTT ! T [°C] - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) + ZTCELSIUS(:) = ZZT(:)-CST%XTT ! T [°C] + ZZW(:) = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) & + +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) + ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) + ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) ! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i - ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) ! Saturation over ice + ZZW(:) = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:) ) ) ! es_i + ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:)) ! Saturation over ice ! ! !------------------------------------------------------------------------------- @@ -293,7 +294,7 @@ IF (INEGT.GT.0) THEN ! ZZW(:) = 0.0 ZZX(:) = 0.0 - ZEPS = XMV / XMD + ZEPS = CST%XMV / CST%XMD ZZY(:) = XCRITSAT1_HONH - & ! Critical Sat. (MIN( XTMAX_HONH,MAX( XTMIN_HONH,ZZT(:) ) )/XCRITSAT2_HONH) ! @@ -303,19 +304,19 @@ IF (INEGT.GT.0) THEN ALLOCATE(ZTAU(INEGT)) ALLOCATE(ZBFACT(INEGT)) ! - WHERE( (ZZT(:)<XTT-35.0) .AND. (ZSI(:)>ZZY(:)) ) - ZLS(:) = XLSTT+(XCPV-XCI)*ZTCELSIUS(:) ! Ls + WHERE( (ZZT(:)<CST%XTT-35.0) .AND. (ZSI(:)>ZZY(:)) ) + ZLS(:) = CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:) ! Ls ! - ZPSI1(:) = ZZY(:) * (XG/(XRD*ZZT(:)))*(ZEPS*ZLS(:)/(XCPD*ZZT(:))-1.) + ZPSI1(:) = ZZY(:) * (CST%XG/(CST%XRD*ZZT(:)))*(ZEPS*ZLS(:)/(CST%XCPD*ZZT(:))-1.) ! ! Psi1 (a1*Scr in KL01) ! BV correction PSI2 enlever 1/ZEPS ? ! ZPSI2(:) = ZSI(:) * (1.0/ZEPS+1.0/ZRVT(:)) + & ZPSI2(:) = ZSI(:) * (1.0/ZRVT(:)) + & - ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(XCPD*XRV) + ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(CST%XCPD*CST%XRV) ! ! Psi2 (a2+a3*Scr in KL01) ZTAU(:) = 1.0 / ( MAX( XC1_HONH,XC1_HONH*(XC2_HONH-XC3_HONH*ZZT(:)) ) *& ABS( (XDLNJODT1_HONH - XDLNJODT2_HONH*ZZT(:)) * & - ((ZPRES(:)/XP00)**(XRD/XCPD))*ZTHT(:) ) ) + ((ZPRES(:)/CST%XP00)**(CST%XRD/CST%XCPD))*ZTHT(:) ) ) ! ZBFACT(:) = (XRHOI_HONH/ZRHODREF(:)) * (ZSI(:)/(ZZY(:)-1.0)) & ! BV correction ZBFACT enlever 1/ZEPS ? diff --git a/src/common/micro/lima_compute_cloud_fractions.F90 b/src/common/micro/lima_compute_cloud_fractions.F90 index bc861da682fa9484669c5ed33d05d189230c20be..60bdab28e1f6ff8b2cd0f972d041820e1f154ae0 100644 --- a/src/common/micro/lima_compute_cloud_fractions.F90 +++ b/src/common/micro/lima_compute_cloud_fractions.F90 @@ -7,7 +7,7 @@ MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS !####################################### INTERFACE - SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, & + SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (D, & PCCT, PRCT, & PCRT, PRRT, & PCIT, PRIT, & @@ -15,13 +15,8 @@ MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS PCGT, PRGT, & PCHT, PRHT, & PCLDFR, PICEFR, PPRCFR ) - INTEGER, INTENT(IN) :: KIB ! - INTEGER, INTENT(IN) :: KIE ! - INTEGER, INTENT(IN) :: KJB ! - INTEGER, INTENT(IN) :: KJE ! - INTEGER, INTENT(IN) :: KKB ! - INTEGER, INTENT(IN) :: KKE ! - INTEGER, INTENT(IN) :: KKL ! + USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t + TYPE(DIMPHYEX_t), INTENT(IN) :: D ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PCCT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRCT ! @@ -51,7 +46,7 @@ END MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS ! ! !################################################################ -SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, & +SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (D, & PCCT, PRCT, & PCRT, PRRT, & PCIT, PRIT, & @@ -79,6 +74,7 @@ SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, & !* 0. DECLARATIONS ! ------------ ! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PARAM_LIMA, ONLY : XCTMIN, XRTMIN, & NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H ! @@ -86,13 +82,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -INTEGER, INTENT(IN) :: KIB ! -INTEGER, INTENT(IN) :: KIE ! -INTEGER, INTENT(IN) :: KJB ! -INTEGER, INTENT(IN) :: KJE ! -INTEGER, INTENT(IN) :: KKB ! -INTEGER, INTENT(IN) :: KKE ! -INTEGER, INTENT(IN) :: KKL ! +TYPE(DIMPHYEX_t), INTENT(IN) :: D ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PCCT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRCT ! @@ -134,14 +124,14 @@ WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. (NMOM_I.EQ.1 .OR. P ! ! Precipitation fraction !!$PPRCFR(:,:,:) = MAX(PCLDFR(:,:,:),PICEFR(:,:,:)) -!!$DO JI = KIB,KIE -!!$ DO JJ = KJB, KJE -!!$ DO JK=KKE-KKL, KKB, -KKL +!!$DO JI = D%NIB,D%NIE +!!$ DO JJ = D%NJB, D%NJE +!!$ DO JK=D%NKE-D%NKL, D%NKB, -D%NKL !!$ IF ( (PRRT(JI,JJ,JK).GT.XRTMIN(3) .AND. PCRT(JI,JJ,JK).GT.XCTMIN(3)) .OR. & !!$ PRST(JI,JJ,JK).GT.XRTMIN(5) .OR. & !!$ PRGT(JI,JJ,JK).GT.XRTMIN(6) .OR. & !!$ PRHT(JI,JJ,JK).GT.XRTMIN(7) ) THEN -!!$ PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+KKL)) +!!$ PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+D%NKL)) !!$ IF (PPRCFR(JI,JJ,JK)==0) THEN !!$ PPRCFR(JI,JJ,JK)=1. !!$ END IF @@ -153,14 +143,14 @@ WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. (NMOM_I.EQ.1 .OR. P !!$END DO !!$ !!$PPRCFR(:,:,:) = MAX(PCLDFR(:,:,:),PICEFR(:,:,:)) -!!$DO JI = KIB,KIE -!!$ DO JJ = KJB, KJE -!!$ DO JK=KKE-KKL, KKB, -KKL +!!$DO JI = D%NIB,D%NIE +!!$ DO JJ = D%NJB, D%NJE +!!$ DO JK=D%NKE-D%NKL, D%NKB, -D%NKL !!$ IF ( (PRRT(JI,JJ,JK).GT.0. .AND. PCRT(JI,JJ,JK).GT.0.) .OR. & !!$ PRST(JI,JJ,JK).GT.0. .OR. & !!$ PRGT(JI,JJ,JK).GT.0. .OR. & !!$ PRHT(JI,JJ,JK).GT.0. ) THEN -!!$ PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+KKL)) +!!$ PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+D%NKL)) !!$ IF (PPRCFR(JI,JJ,JK)==0) THEN !!$ PPRCFR(JI,JJ,JK)=1. !!$ END IF diff --git a/src/common/micro/lima_drops_to_droplets_conv.F90 b/src/common/micro/lima_drops_to_droplets_conv.F90 index b2c63fde29ab9a752faf1669c721d3cce9b47037..b7b1a48bf416027e773dfb621ac8abaa08a63571 100644 --- a/src/common/micro/lima_drops_to_droplets_conv.F90 +++ b/src/common/micro/lima_drops_to_droplets_conv.F90 @@ -7,9 +7,12 @@ ! ################################# ! INTERFACE - SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (PRHODREF, PRCT, PRRT, PCCT, PCRT, & + SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (CST, PRHODREF, PRCT, PRRT, PCCT, PCRT, & P_RR_CVRC, P_CR_CVRC ) ! +USE MODD_CST, ONLY: CST_t +TYPE(CST_t), INTENT(IN) :: CST +! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t @@ -25,7 +28,7 @@ END INTERFACE END MODULE MODI_LIMA_DROPS_TO_DROPLETS_CONV ! ! ###################################################################### - SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (PRHODREF, PRCT, PRRT, PCCT, PCRT, & + SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (CST, PRHODREF, PRCT, PRRT, PCCT, PCRT, & P_RR_CVRC, P_CR_CVRC ) ! ###################################################################### ! @@ -50,7 +53,7 @@ END MODULE MODI_LIMA_DROPS_TO_DROPLETS_CONV !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY : XPI, XRHOLW +USE MODD_CST, ONLY : CST_t USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN USE MODD_PARAM_LIMA_WARM, ONLY : XLBR, XLBEXR, XLBC, XLBEXC, & XACCR1, XACCR3, XACCR4, XACCR5 @@ -59,6 +62,8 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST +! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Rain water m.r. at t @@ -88,7 +93,7 @@ ZDR(:,:,:) = 9999. ZMASKR(:,:,:) = PRRT(:,:,:).GT.XRTMIN(3) .AND. PCRT(:,:,:).GT.XCTMIN(3) ZMASKC(:,:,:) = PRCT(:,:,:).GT.XRTMIN(2) .AND. PCCT(:,:,:).GT.XCTMIN(2) WHERE(ZMASKR(:,:,:)) - ZDR(:,:,:)=(6.*PRRT(:,:,:)/XPI/XRHOLW/PCRT(:,:,:))**0.33 + ZDR(:,:,:)=(6.*PRRT(:,:,:)/CST%XPI/CST%XRHOLW/PCRT(:,:,:))**0.33 END WHERE ! ! Transfer all drops in droplets if out of cloud and Dr<82microns diff --git a/src/common/micro/lima_meyers_nucleation.F90 b/src/common/micro/lima_meyers_nucleation.F90 index f0c38fd6ad95ec88b8b3517646347640ce7f9091..03163197500d3c22fd96ca128686d01049ac01ba 100644 --- a/src/common/micro/lima_meyers_nucleation.F90 +++ b/src/common/micro/lima_meyers_nucleation.F90 @@ -8,14 +8,16 @@ ! ################################## ! INTERFACE - SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, & + SUBROUTINE LIMA_MEYERS_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PINT, & P_TH_HIND, P_RI_HIND, P_CI_HIND, & P_TH_HINC, P_RC_HINC, P_CC_HINC, & PICEFR ) +USE MODD_CST, ONLY: CST_t ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density @@ -48,7 +50,7 @@ END INTERFACE END MODULE MODI_LIMA_MEYERS_NUCLEATION ! ! ############################################################################# - SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, & + SUBROUTINE LIMA_MEYERS_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PINT, & @@ -80,7 +82,7 @@ END MODULE MODI_LIMA_MEYERS_NUCLEATION !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST +USE MODD_CST, ONLY: CST_t USE MODD_NSV, ONLY: NSV_LIMA_NC, NSV_LIMA_NI USE MODD_PARAMETERS USE MODD_PARAM_LIMA @@ -92,6 +94,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density @@ -188,12 +191,12 @@ IKE=SIZE(PTHT,3) - JPVEXT ! ! Temperature ! -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) +ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD) ! ! Saturation over ice ! -ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) -ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) +ZW(:,:,:) = EXP( CST%XALPI - CST%XBETAI/ZT(:,:,:) - CST%XGAMI*ALOG(ZT(:,:,:) ) ) +ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (CST%XMV/CST%XMD) * ZW(:,:,:) ) ! ! !------------------------------------------------------------------------------- @@ -202,7 +205,7 @@ ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) ! the temperature is negative only !!! ! GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT .AND. & +GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT .AND. & ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.8 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) IF( INEGT >= 1 ) THEN @@ -251,14 +254,14 @@ IF( INEGT >= 1 ) THEN ALLOCATE(ZSSI(INEGT)) ALLOCATE(ZTCELSIUS(INEGT)) ! - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZTCELSIUS(:) = MAX( ZZT(:)-XTT,-50.0 ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) + ZZW(:) = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) & + +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) + ZTCELSIUS(:) = MAX( ZZT(:)-CST%XTT,-50.0 ) + ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) + ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) ! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:)) ) ! es_i - ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) - 1.0 + ZZW(:) = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:)) ) ! es_i + ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:)) - 1.0 ! Supersaturation over ice ! !--------------------------------------------------------------------------- @@ -272,7 +275,7 @@ IF( INEGT >= 1 ) THEN ZZX(:) = 0.0 ZZY(:) = 0.0 ! - WHERE( ZZT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 ) + WHERE( ZZT(:)<CST%XTT-5.0 .AND. ZSSI(:)>0.0 ) ZZY(:) = XNUC_DEP*EXP( XEXSI_DEP*100.*MIN(1.,ZSSI(:))+XEX_DEP)/ZRHODREF(:) ZZX(:) = MAX( ZZY(:)-ZINT(:,1) , 0.0 ) ! number of ice crystals formed at this time step #/kg ZZW(:) = MIN( XMNU0*ZZX(:) , ZRVT(:) ) ! mass of ice formed at this time step (kg/kg) @@ -299,7 +302,7 @@ IF( INEGT >= 1 ) THEN ZZX(:) = 0.0 ZZY(:) = 0.0 ! - WHERE( ZZT(:)<XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) ) + WHERE( ZZT(:)<CST%XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) ) ZZY(:) = MIN( XNUC_CON * EXP( XEXTT_CON*ZTCELSIUS(:)+XEX_CON ) & /ZRHODREF(:) , ZCCT(:) ) ZZX(:) = MAX( ZZY(:)-ZINT(:,1),0.0 ) diff --git a/src/common/micro/lima_nucleation_procs.F90 b/src/common/micro/lima_nucleation_procs.F90 index 0bb1f934ac8b10a5a9ed3c61eea1a83bf5033e3a..e8e0375bc77971da96ea5f1b576fb3fc79ea002b 100644 --- a/src/common/micro/lima_nucleation_procs.F90 +++ b/src/common/micro/lima_nucleation_procs.F90 @@ -8,17 +8,19 @@ ! ############################### ! INTERFACE - SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, PRHODJ, & + 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 ) ! -USE MODD_IO, ONLY: TFILEDATA +USE MODD_CST, ONLY: CST_t +!USE MODD_IO, ONLY: TFILEDATA ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! Double Time step -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +!TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density @@ -55,7 +57,7 @@ END SUBROUTINE LIMA_NUCLEATION_PROCS END INTERFACE END MODULE MODI_LIMA_NUCLEATION_PROCS ! ############################################################################# -SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, PRHODJ, & +SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,& PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCRT, PCIT, & @@ -82,11 +84,12 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, PRHODJ, ! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! +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_IO, ONLY: TFILEDATA +!USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE @@ -108,8 +111,9 @@ IMPLICIT NONE ! !------------------------------------------------------------------------------- ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! Double Time step -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file +!TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Reference density REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density @@ -171,7 +175,7 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN end if end if - CALL LIMA_CCN_ACTIVATION( TPFILE, & + CALL LIMA_CCN_ACTIVATION( CST, & PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, & PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, PCLDFR ) if ( lbu_enable ) then @@ -218,7 +222,7 @@ IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN end if end if - CALL LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, & + CALL LIMA_PHILLIPS_IFN_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PNAT, PIFT, PINT, PNIT, & @@ -264,7 +268,7 @@ END IF !------------------------------------------------------------------------------- ! IF (LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN - CALL LIMA_MEYERS_NUCLEATION (PTSTEP, & + CALL LIMA_MEYERS_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PINT, & @@ -366,10 +370,10 @@ IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN end if end if - CALL LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & - PCCT, PCRT, PCIT, PNFT, PNHT, & - PICEFR ) + CALL LIMA_CCN_HOM_FREEZING (CST, PRHODREF, PEXNREF, PPABST, PW_NU, & + PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & + PCCT, PCRT, PCIT, PNFT, PNHT, & + PICEFR ) WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. ! if ( lbu_enable ) then diff --git a/src/common/micro/lima_phillips_ifn_nucleation.F90 b/src/common/micro/lima_phillips_ifn_nucleation.F90 index 1010555ff86b477d3fd0dcebb638a0b9b0b32959..b1834f790acd7bf51a00e558d25ee5a3e1005543 100644 --- a/src/common/micro/lima_phillips_ifn_nucleation.F90 +++ b/src/common/micro/lima_phillips_ifn_nucleation.F90 @@ -8,14 +8,16 @@ ! ######################################## ! INTERFACE - SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, & + SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PNAT, PIFT, PINT, PNIT, & P_TH_HIND, P_RI_HIND, P_CI_HIND, & P_TH_HINC, P_RC_HINC, P_CC_HINC, & PICEFR ) +USE MODD_CST, ONLY: CST_t ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density @@ -51,7 +53,7 @@ END INTERFACE END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION ! ! ################################################################################# - SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, & + SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (CST, PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & PCCT, PCIT, PNAT, PIFT, PINT, PNIT, & @@ -115,9 +117,7 @@ END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI, & - XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI, & - XALPW, XBETAW, XGAMW, XPI +USE MODD_CST, ONLY: CST_t USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY : NMOD_IFN, NSPECIE, XFRAC, & @@ -134,6 +134,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF! Reference density @@ -240,12 +241,12 @@ IKE=SIZE(PTHT,3) - JPVEXT ! ! Temperature ! -ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD) +ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD) ! ! Saturation over ice ! -ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) -ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) +ZW(:,:,:) = EXP( CST%XALPI - CST%XBETAI/ZT(:,:,:) - CST%XGAMI*ALOG(ZT(:,:,:) ) ) +ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (CST%XMV/CST%XMD) * ZW(:,:,:) ) ! ! !------------------------------------------------------------------------------- @@ -256,7 +257,7 @@ ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) ! ! GNEGT(:,:,:) = .FALSE. -GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. & +GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT-2.0 .AND. & ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95 ! INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) @@ -334,17 +335,17 @@ IF (INEGT > 0) THEN ! ----------------------------------------- ! ! - ZTCELSIUS(:) = ZZT(:)-XTT ! T [°C] - ZZW(:) = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) & - +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) - ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) + ZTCELSIUS(:) = ZZT(:)-CST%XTT ! T [°C] + ZZW(:) = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) & + +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) ) + ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph) + ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph) ! - ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i - ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) ! Saturation over ice + ZZW(:) = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:) ) ) ! es_i + ZSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:)) ! Saturation over ice ! - ZZY(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w - ZSW(:) = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:)) ! Saturation over water + ZZY(:) = EXP( CST%XALPW - CST%XBETAW/ZZT(:) - CST%XGAMW*ALOG(ZZT(:) ) ) ! es_w + ZSW(:) = ZRVT(:)*(ZPRES(:)-ZZY(:))/((CST%XMV/CST%XMD)*ZZY(:)) ! Saturation over water ! ZSI_W(:)= ZZY(:)/ZZW(:) ! Saturation over ice at water saturation: es_w/es_i ! @@ -373,12 +374,12 @@ IF (INEGT > 0) THEN ! ! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} ) ! - CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY) + CALL LIMA_PHILLIPS_REF_SPECTRUM(CST, ZZT, ZSI, ZSI_W, ZZY) ! ! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated ! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated ! - CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) + CALL LIMA_PHILLIPS_INTEG(CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) ! ! !------------------------------------------------------------------------------- diff --git a/src/common/micro/lima_phillips_integ.F90 b/src/common/micro/lima_phillips_integ.F90 index 3af3048c6be9e97c9e7f21db12995e446ec2c802..7cb098c3b4bb5d848e8d91b355a5490e477af53a 100644 --- a/src/common/micro/lima_phillips_integ.F90 +++ b/src/common/micro/lima_phillips_integ.F90 @@ -3,8 +3,10 @@ ! ############################### ! INTERFACE - SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) + SUBROUTINE LIMA_PHILLIPS_INTEG (CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) ! +USE MODD_CST, ONLY: CST_t +TYPE(CST_t), INTENT(IN) :: CST REAL, DIMENSION(:), INTENT(IN) :: ZZT REAL, DIMENSION(:), INTENT(IN) :: ZSI REAL, DIMENSION(:,:), INTENT(IN) :: ZSI0 @@ -17,7 +19,7 @@ END INTERFACE END MODULE MODI_LIMA_PHILLIPS_INTEG ! ! ###################################################################### - SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) + SUBROUTINE LIMA_PHILLIPS_INTEG (CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT) ! ###################################################################### !! !! PURPOSE @@ -48,7 +50,7 @@ END MODULE MODI_LIMA_PHILLIPS_INTEG !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY : XTT, XPI +USE MODD_CST, ONLY: CST_t USE MODD_PARAM_LIMA, ONLY : XMDIAM_IFN, XSIGMA_IFN, NSPECIE, XFRAC_REF, & XH, XAREA1, XGAMMA, XABSCISS, XWEIGHT, NDIAM, & XT0, XDT0, XDSI0, XSW0, XTX1, XTX2 @@ -59,6 +61,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST REAL, DIMENSION(:), INTENT(IN) :: ZZT REAL, DIMENSION(:), INTENT(IN) :: ZSI REAL, DIMENSION(:,:), INTENT(IN) :: ZSI0 @@ -105,15 +108,15 @@ DO JSPECIE = 1, NSPECIE ! = 4 = {DM1, DM2, BC, O} respectively ! For T warmer than -35°C, the integration is approximated with µ_X << 1 ! Error function : GAMMA_INC(1/2, x**2) = ERF(x) !!! for x>=0 !!! ! -! WHERE (ZZT(:)>(XTT-35.) .AND. ZEMBRYO(:)>1.0E-8) -! ZZX(:) = ZZX(:) + ZEMBRYO(:) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & +! WHERE (ZZT(:)>(CST%XTT-35.) .AND. ZEMBRYO(:)>1.0E-8) +! ZZX(:) = ZZX(:) + ZEMBRYO(:) * CST%XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & ! * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2) & ! * (1.0+GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) ! END WHERE DO JL = 1, SIZE(ZZT) - IF (ZZT(JL)>(XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN - ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & + IF (ZZT(JL)>(CST%XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN + ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * CST%XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0 & * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2) & * (1.0+SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) END IF @@ -124,12 +127,12 @@ DO JSPECIE = 1, NSPECIE ! = 4 = {DM1, DM2, BC, O} respectively ! quadrature method and integration between 0 and 0.1 uses e(x) ~ 1+x+O(x**2) ! Beware : here, weights are normalized : XWEIGHT = wi/sqrt(pi) ! - GINTEG(:) = ZZT(:)<=(XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8 + GINTEG(:) = ZZT(:)<=(CST%XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8 ! DO JL = 1, NDIAM DO JL2 = 1, SIZE(GINTEG) IF (GINTEG(JL2)) THEN - ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*XPI*(XMDIAM_IFN(JSPECIE))**2 & + ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*CST%XPI*(XMDIAM_IFN(JSPECIE))**2 & * EXP(2.0*SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE)) * XABSCISS(JL)) ) END IF ENDDO @@ -137,7 +140,7 @@ DO JSPECIE = 1, NSPECIE ! = 4 = {DM1, DM2, BC, O} respectively ! ! DO JL2 = 1, SIZE(GINTEG) ! IF (GINTEG(JL2)) THEN -! ZZX(JL2) = ZZX(JL2) + 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 & +! ZZX(JL2) = ZZX(JL2) + 0.5* CST%XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 & ! * (1.0-( 1.0-GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) & ! * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2) ) ! END IF @@ -145,7 +148,7 @@ DO JSPECIE = 1, NSPECIE ! = 4 = {DM1, DM2, BC, O} respectively DO JL2 = 1, SIZE(GINTEG) IF (GINTEG(JL2)) THEN ZZX(JL2) = 1 + ZZX(JL2) & - - ( 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2) & + - ( 0.5* CST%XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2) & * ( 1.0-SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) ) END IF ENDDO diff --git a/src/common/micro/lima_phillips_ref_spectrum.F90 b/src/common/micro/lima_phillips_ref_spectrum.F90 index a49a998bd0cacca500e97c68598e35b8af3b9c8e..62d5f1985c88867a7f17bdd7363ccc0170df0ce3 100644 --- a/src/common/micro/lima_phillips_ref_spectrum.F90 +++ b/src/common/micro/lima_phillips_ref_spectrum.F90 @@ -3,8 +3,10 @@ ! ###################################### ! INTERFACE - SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY) + SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (CST, ZZT, ZSI, ZSI_W, ZZY) ! +USE MODD_CST, ONLY: CST_t +TYPE(CST_t), INTENT(IN) :: CST REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature REAL, DIMENSION(:), INTENT(IN) :: ZSI ! Saturation over ice REAL, DIMENSION(:), INTENT(IN) :: ZSI_W ! Saturation over ice at water sat. @@ -15,7 +17,7 @@ END INTERFACE END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM ! ! ###################################################################### - SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY) + SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (CST, ZZT, ZSI, ZSI_W, ZZY) ! ###################################################################### !! !! PURPOSE @@ -46,7 +48,7 @@ END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY : XTT +USE MODD_CST, ONLY: CST_t USE MODD_PARAM_LIMA, ONLY : XGAMMA, XRHO_CFDC USE MODI_LIMA_FUNCTIONS, ONLY : RECT, DELTA ! @@ -54,6 +56,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! +TYPE(CST_t), INTENT(IN) :: CST REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature REAL, DIMENSION(:), INTENT(IN) :: ZSI ! Saturation over ice REAL, DIMENSION(:), INTENT(IN) :: ZSI_W ! Saturation over ice at water sat. @@ -93,7 +96,7 @@ WHERE( ZSI(:)>1.0 ) ! ZZY(:) =1000.*XGAMMA/XRHO_CFDC & * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3 & - * RECT(1.,0.,ZZT(:),(XTT-80.),(XTT-35.)) + * RECT(1.,0.,ZZT(:),(CST%XTT-80.),(CST%XTT-35.)) ! !* -35 C < T <= -25 C (in Appendix A) ! @@ -106,13 +109,13 @@ WHERE( ZSI(:)>1.0 ) ! ZMAX(:) =1000.*XGAMMA/XRHO_CFDC & * ( EXP(12.96*(ZSI_W(:)-1.1)) )**0.3 & - * RECT(1.,0.,ZZT(:),(XTT-35.),(XTT-30.)) + * RECT(1.,0.,ZZT(:),(CST%XTT-35.),(CST%XTT-30.)) ! !* -30 C < T <= -25 C ! ZMAX(:) = ZMAX(:) +1000.*XPSI & * EXP( 12.96*(ZSI_W(:)-1.0)-0.639 ) & - * RECT(1.,0.,ZZT(:),(XTT-30.),(XTT-25.)) + * RECT(1.,0.,ZZT(:),(CST%XTT-30.),(CST%XTT-25.)) Z1(:) = MIN(ZZY1(:), ZMAX(:)) Z2(:) = MIN(ZZY2(:), ZMAX(:)) ! @@ -120,11 +123,11 @@ WHERE( ZSI(:)>1.0 ) ! ZZY(:) = ZZY(:) + 1000.*XPSI & * EXP( 12.96*(MIN(ZSI2(:),7.)-1.0)-0.639 ) & - * RECT(1.,0.,ZZT(:),(XTT-25.),(XTT-2.)) + * RECT(1.,0.,ZZT(:),(CST%XTT-25.),(CST%XTT-2.)) END WHERE ! WHERE (Z2(:)>0.0 .AND. Z1(:)>0.0) - ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(XTT-35.),(XTT-25.)) + ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(CST%XTT-35.),(CST%XTT-25.)) ZZY(:) = ZZY(:) + MIN(ZMOY(:),ZMAX(:)) ! N_{IN,1,*} END WHERE ! diff --git a/src/common/micro/lima_sedimentation.F90 b/src/common/micro/lima_sedimentation.F90 index 23072bb81dab233cfbfdb920e0ee5b995c6a6848..9f9b73aba8add666b3c1bb66944fb0df35878923 100644 --- a/src/common/micro/lima_sedimentation.F90 +++ b/src/common/micro/lima_sedimentation.F90 @@ -8,11 +8,15 @@ ! ################################### ! INTERFACE - SUBROUTINE LIMA_SEDIMENTATION (KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & + SUBROUTINE LIMA_SEDIMENTATION (D, CST, & HPHASE, KMOMENTS, KID, KSPLITG, PTSTEP, PDZZ, PRHODREF, & PPABST, PT, PRT_SUM, PCPT, PRS, PCS, PINPR ) ! -INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_CST, ONLY: CST_t +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST CHARACTER(1), INTENT(IN) :: HPHASE ! Liquid or solid hydrometeors INTEGER, INTENT(IN) :: KMOMENTS ! Number of moments INTEGER, INTENT(IN) :: KID ! Hydrometeor ID @@ -34,7 +38,7 @@ END MODULE MODI_LIMA_SEDIMENTATION ! ! ! ###################################################################### - SUBROUTINE LIMA_SEDIMENTATION (KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & + SUBROUTINE LIMA_SEDIMENTATION (D, CST, & HPHASE, KMOMENTS, KID, KSPLITG, PTSTEP, PDZZ, PRHODREF, & PPABST, PT, PRT_SUM, PCPT, PRS, PCS, PINPR ) ! ###################################################################### @@ -72,7 +76,8 @@ END MODULE MODI_LIMA_SEDIMENTATION !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY: XRHOLW, XCL, XCI, XPI +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_CST, ONLY: CST_t USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: XCEXVT, XRTMIN, XCTMIN, NSPLITSED, & XLB, XLBEX, XD, XFSEDR, XFSEDC, & @@ -89,7 +94,8 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL +TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST CHARACTER(1), INTENT(IN) :: HPHASE ! Liquid or solid hydrometeors INTEGER, INTENT(IN) :: KMOMENTS ! Number of moments INTEGER, INTENT(IN) :: KID ! Hydrometeor ID @@ -150,16 +156,16 @@ PINPR(:,:) = 0. ! PRS(:,:,:) = PRS(:,:,:) * PTSTEP IF (KMOMENTS==2) PCS(:,:,:) = PCS(:,:,:) * PTSTEP -DO JK = KKTB , KKTE +DO JK = D%NKTB , D%NKTE ZW(:,:,JK)=ZTSPLITG/PDZZ(:,:,JK) END DO ! -IF (HPHASE=='L') ZC=XCL -IF (HPHASE=='I') ZC=XCI +IF (HPHASE=='L') ZC=CST%XCL +IF (HPHASE=='I') ZC=CST%XCI ! IF (KID==4 .AND. ZMOMENTS==1) THEN ZMOMENTS=2 - WHERE(PRS(:,:,:)>0) PCS(:,:,:)=1/(4*XPI*900.) * PRS(:,:,:) * & + WHERE(PRS(:,:,:)>0) PCS(:,:,:)=1/(4*CST%XPI*900.) * PRS(:,:,:) * & MAX(0.05E6,-0.15319E6-0.021454E6*ALOG(PRHODREF(:,:,:)*PRS(:,:,:)))**3 END IF ! @@ -170,7 +176,7 @@ END IF DO JN = 1 , NSPLITSED(KID) ! Computation only where enough ice, snow, graupel or hail GSEDIM(:,:,:) = .FALSE. - GSEDIM(KIB:KIE,KJB:KJE,KKTB:KKTE) = PRS(KIB:KIE,KJB:KJE,KKTB:KKTE)>XRTMIN(KID) + GSEDIM(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE) = PRS(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)>XRTMIN(KID) IF (ZMOMENTS==2) GSEDIM(:,:,:) = GSEDIM(:,:,:) .AND. PCS(:,:,:)>XCTMIN(KID) ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:)) ! @@ -225,25 +231,25 @@ DO JN = 1 , NSPLITSED(KID) END IF ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - ZWSEDR(:,:,KKTB:KKTE) = MIN( ZWSEDR(:,:,KKTB:KKTE), PRS(:,:,KKTB:KKTE) * PRHODREF(:,:,KKTB:KKTE) / ZW(:,:,KKTB:KKTE) ) + ZWSEDR(:,:,D%NKTB:D%NKTE) = MIN( ZWSEDR(:,:,D%NKTB:D%NKTE), PRS(:,:,D%NKTB:D%NKTE) * PRHODREF(:,:,D%NKTB:D%NKTE) / ZW(:,:,D%NKTB:D%NKTE) ) IF (KMOMENTS==2) THEN ZWSEDC(:,:,:) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 ) - ZWSEDC(:,:,KKTB:KKTE) = MIN( ZWSEDC(:,:,KKTB:KKTE), PCS(:,:,KKTB:KKTE) * PRHODREF(:,:,KKTB:KKTE) / ZW(:,:,KKTB:KKTE) ) + ZWSEDC(:,:,D%NKTB:D%NKTE) = MIN( ZWSEDC(:,:,D%NKTB:D%NKTE), PCS(:,:,D%NKTB:D%NKTE) * PRHODREF(:,:,D%NKTB:D%NKTE) / ZW(:,:,D%NKTB:D%NKTE) ) END IF - DO JK = KKTB , KKTE + DO JK = D%NKTB , D%NKTE PRS(:,:,JK) = PRS(:,:,JK) + ZW(:,:,JK)* & - (ZWSEDR(:,:,JK+KKL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK) + (ZWSEDR(:,:,JK+D%NKL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK) IF (KMOMENTS==2) PCS(:,:,JK) = PCS(:,:,JK) + ZW(:,:,JK)* & - (ZWSEDC(:,:,JK+KKL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK) + (ZWSEDC(:,:,JK+D%NKL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK) ! Heat transport - !PRT_SUM(:,:,JK-KKL) = PRT_SUM(:,:,JK-KKL) + ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL) + !PRT_SUM(:,:,JK-D%NKL) = PRT_SUM(:,:,JK-D%NKL) + ZW(:,:,JK-D%NKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-D%NKL) !PRT_SUM(:,:,JK) = PRT_SUM(:,:,JK) - ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK) - !PCPT(:,:,JK-KKL) = PCPT(:,:,JK-KKL) + ZC * (ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL)) + !PCPT(:,:,JK-D%NKL) = PCPT(:,:,JK-D%NKL) + ZC * (ZW(:,:,JK-D%NKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-D%NKL)) !PCPT(:,:,JK) = PCPT(:,:,JK) - ZC * (ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK)) - !ZWDT(:,:,JK) =(PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + & - ! ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+KKL)) / & - ! (PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+KKL)*ZC) + !ZWDT(:,:,JK) =(PRHODREF(:,:,JK+D%NKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + & + ! ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+D%NKL)) / & + ! (PRHODREF(:,:,JK+D%NKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+D%NKL)*ZC) !ZWDT(:,:,JK) = ZWDT(:,:,JK) - PT(:,:,JK) END DO DEALLOCATE(ZRHODREF) @@ -257,7 +263,7 @@ DO JN = 1 , NSPLITSED(KID) DEALLOCATE(ZZX) DEALLOCATE(ZZY) ! - PINPR(:,:) = PINPR(:,:) + ZWSEDR(:,:,KKB)/XRHOLW/NSPLITSED(KID) ! in m/s + PINPR(:,:) = PINPR(:,:) + ZWSEDR(:,:,D%NKB)/CST%XRHOLW/NSPLITSED(KID) ! in m/s !PT(:,:,:) = PT(:,:,:) + ZWDT(:,:,:) END IF