Skip to content
Snippets Groups Projects
lima.f90 89.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 2013-2020 CNRS, Meteo-France and Universite Paul Sabatier
    
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    
    !MNH_LIC for details. version 1.
    !      ######spl
    MODULE MODI_LIMA
    !      ####################
    !
    INTERFACE
    !
    
       SUBROUTINE LIMA ( KKA, KKU, KKL,                                  &
                         PTSTEP, TPFILE, OCLOSE_OUT,                     &
                         PRHODREF, PEXNREF, PDZZ,                        &
                         PRHODJ, PPABSM, PPABST,                         &
                         NCCN, NIFN, NIMM,                               &
                         PTHM, PTHT, PRT, PSVT, PW_NU,                   &
                         PTHS, PRS, PSVS,                                &
                         PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
                         PEVAP3D                                         )
    
    !
    USE MODD_IO_ll, ONLY: TFILEDATA
    !
    
    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
    !
    
    REAL,                     INTENT(IN)    :: PTSTEP     ! Time step
    TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
    LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of output
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
    
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ       ! Layer thikness (m)
    
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM     ! absolute pressure at t
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
    !
    INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
    INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
    INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
    REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
    REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
    !
    REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
    REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
    REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations sources
    !
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINDEP     ! Cloud droplets deposition
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
    REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
    !
    END SUBROUTINE LIMA
    END INTERFACE
    END MODULE MODI_LIMA
    !
    !
    !     ######spl
    
          SUBROUTINE LIMA ( KKA, KKU, KKL,                                  &
                            PTSTEP, TPFILE, OCLOSE_OUT,                     &
                            PRHODREF, PEXNREF, PDZZ,                        &
    
                            PRHODJ, PPABSM, PPABST,                         &
                            NCCN, NIFN, NIMM,                               &
                            PTHM, PTHT, PRT, PSVT, PW_NU,                   &
                            PTHS, PRS, PSVS,                                &
                            PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
                            PEVAP3D                                         )
    !     ######################################################################
    !
    !!    PURPOSE
    !!    -------
    !!      Compute explicit microphysical sources using the 2-moment scheme LIMA     
    !!    using the time-splitting method
    !!
    !!    REFERENCE
    !!    ---------
    !!      Vié et al. (GMD, 2016)
    !!      Meso-NH scientific documentation
    !!
    !!    AUTHOR
    !!    ------
    !!      S. Riette  * CNRM *
    !!      B. Vié     * CNRM *
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original   15/03/2018
    !!
    
    !!      B.Vié  02/2019 : minor correction on budget
    
    !  P. Wautelet 26/02/2020: bugfix: corrected condition to write budget CORR_BU_RRS
    !
    
    !*       0.    DECLARATIONS
    !              ------------
    USE MODD_IO_ll,   ONLY: TFILEDATA
    USE MODD_LUNIT_n, ONLY: TLUOUT
    USE MODD_CLOUDPAR_n,     ONLY : NSPLITR, NSPLITG
    USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
    USE MODD_PARAM_LIMA,     ONLY : LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI,      &
                                    LACTIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS,               &
                                    LSEDC, LSEDI, XRTMIN, XCTMIN, LDEPOC, XVDEPOC,                  &
                                    LHAIL, LSNOW
    USE MODD_PARAM_LIMA_WARM,ONLY : XLBC, XLBEXC, XAC, XBC, XAR, XBR
    USE MODD_PARAM_LIMA_COLD,ONLY : XAI, XBI
    USE MODD_BUDGET,         ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,     &
                                    LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV
    USE MODD_NSV,            ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, &
                                    NSV_LIMA_SCAVMASS, NSV_LIMA_NI, NSV_LIMA_IFN_FREE,              &
                                    NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE
    USE MODD_CST,            ONLY : XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD
    !
    USE MODI_BUDGET
    USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
    USE MODI_LIMA_SEDIMENTATION
    USE MODI_LIMA_NUCLEATION_PROCS
    USE MODI_LIMA_INST_PROCS
    USE MODI_LIMA_TENDENCIES
    USE MODI_LIMA_DROPS_TO_DROPLETS_CONV
    !
    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
    !
    
    REAL,                     INTENT(IN)    :: PTSTEP     ! Time step
    TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
    LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of output
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
    
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ       ! Layer thikness (m)
    
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM     ! absolute pressure at t
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
    !
    INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
    INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
    INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
    !
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
    REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
    REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
    REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
    !
    REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
    REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
    REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations sources
    !
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINDEP     ! Cloud droplets deposition
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
    REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
    REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
    !
    !*       0.2   Declarations of local variables :
    !
    !
    ! Prognostic variables and sources
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZCCT, ZCRT, ZCIT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZTHS, ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZCCS, ZCRS, ZCIS
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFT, ZCCNAT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFS, ZCCNAS
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFT, ZIFNNT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFS, ZIFNNS
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNS
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZHOMFT
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZHOMFS
    
    !
    ! Other 3D thermodynamical variables
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: ZEXN, ZT, ZTM
    
    !
    ! Packed prognostic & thermo variables
    REAL, DIMENSION(:),   ALLOCATABLE ::                               &
         ZP1D, ZRHODREF1D, ZEXNREF1D, ZEXN1D,                          &
         ZTHT1D,                                                       &
         ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, ZRHT1D,       &
         ZCCT1D, ZCRT1D, ZCIT1D,                                       &
         ZEVAP1D
    REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFNN1D
    
    !
    ! for each process & species inside the loop, we need 1D packed variables to store instant tendencies for hydrometeors
    REAL, DIMENSION(:), ALLOCATABLE ::                          &
    ! mixing ratio & concentration changes by instantaneous processes (kg/kg and #/kg) :
         Z_CR_BRKU,                                             & ! spontaneous break up of drops (BRKU) : Nr
         Z_TH_HONR, Z_RR_HONR, Z_CR_HONR,                       & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
         Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT,                       & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
    ! mixing ratio & concentration tendencies by continuous processes (kg/kg/s and #/kg/s) :
         Z_TH_HONC, Z_RC_HONC, Z_CC_HONC,                       & ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
         Z_CC_SELF,                                             & ! self collection of droplets (SELF) : Nc
         Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO,                       & ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
         Z_RC_ACCR, Z_CC_ACCR,                                  & ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
         Z_CR_SCBU,                                             & ! self collectio break up of drops (SCBU) : Nr
         Z_TH_EVAP, Z_RC_EVAP, Z_CC_EVAP, Z_RR_EVAP, Z_CR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th
         Z_RI_CNVI, Z_CI_CNVI,                                  & ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
         Z_TH_DEPS, Z_RS_DEPS,                                  & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
         Z_RI_CNVS, Z_CI_CNVS,                                  & ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
         Z_RI_AGGS, Z_CI_AGGS,                                  & ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
         Z_TH_DEPG, Z_RG_DEPG,                                  & ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
         Z_TH_BERFI, Z_RC_BERFI,                                & ! Bergeron (BERFI) : rc, ri=-rc, th
         Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM,      & ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th
         Z_RI_HMS, Z_CI_HMS, Z_RS_HMS,                          & ! hallett mossop snow (HMS) : ri, Ni, rs
         Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC,      & ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th
         Z_RS_CMEL,                                             & ! conversion-melting (CMEL) : rs, rg=-rs
         Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
         Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
         Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
         Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
         Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG,            & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
         Z_RI_HMG, Z_CI_HMG, Z_RG_HMG,                          & ! hallett mossop graupel (HMG) : ri, Ni, rg
         Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT,                       & ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
         Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,            & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
         Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
         Z_RG_COHG,                                             & ! conversion of hail into graupel (COHG) : rg, rh
         Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
    !
    ! for the conversion from rain to cloud, we need a 3D variable instead of a 1D packed variable
    REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) ::  &
         Z_RR_CVRC, Z_CR_CVRC                                     ! conversion of rain into cloud droplets (CVRC)
    
    !
    ! Packed variables for total tendencies
    REAL, DIMENSION(:),   ALLOCATABLE ::                                              &
         ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR, ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH, & ! ZA = continuous tendencies (kg/kg/s = S variable)
         ZB_TH, ZB_RV, ZB_RC, ZB_CC, ZB_RR, ZB_CR, ZB_RI, ZB_CI, ZB_RS, ZB_RG, ZB_RH    ! ZB = instant mixing ratio change (kg/kg = T variable)
    REAL, DIMENSION(:,:), ALLOCATABLE :: ZB_IFNN
    
    !
    ! for each process & species, we need 3D variables to store total mmr and conc change (kg/kg and #/kg and theta)
    REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) ::                 &
    ! instantaneous processes :
         ZTOT_CR_BRKU,                                                         & ! spontaneous break up of drops (BRKU)
         ZTOT_TH_HONR, ZTOT_RR_HONR, ZTOT_CR_HONR,                             & ! rain drops homogeneous freezing (HONR)
         ZTOT_TH_IMLT, ZTOT_RC_IMLT, ZTOT_CC_IMLT,                             & ! ice melting (IMLT)
    ! continuous processes :
         ZTOT_TH_HONC, ZTOT_RC_HONC, ZTOT_CC_HONC,                             & ! droplets homogeneous freezing (HONC)
         ZTOT_CC_SELF,                                                         & ! self collection of droplets (SELF)
         ZTOT_RC_AUTO, ZTOT_CC_AUTO, ZTOT_CR_AUTO,                             & ! autoconversion of cloud droplets (AUTO)
         ZTOT_RC_ACCR, ZTOT_CC_ACCR,                                           & ! accretion of droplets by rain drops (ACCR)
         ZTOT_CR_SCBU,                                                         & ! self collectio break up of drops (SCBU)
         ZTOT_TH_EVAP, ZTOT_RC_EVAP, ZTOT_CC_EVAP, ZTOT_RR_EVAP, ZTOT_CR_EVAP, & ! evaporation of rain drops (EVAP)
         ZTOT_RI_CNVI, ZTOT_CI_CNVI,                                           & ! conversion snow -> ice (CNVI)
         ZTOT_TH_DEPS, ZTOT_RS_DEPS,                                           & ! deposition of vapor on snow (DEPS)
         ZTOT_RI_CNVS, ZTOT_CI_CNVS,                                           & ! conversion ice -> snow (CNVS)
         ZTOT_RI_AGGS, ZTOT_CI_AGGS,                                           & ! aggregation of ice on snow (AGGS)
         ZTOT_TH_DEPG, ZTOT_RG_DEPG,                                           & ! deposition of vapor on graupel (DEPG)
         ZTOT_TH_BERFI, ZTOT_RC_BERFI,                                         & ! Bergeron (BERFI)
         ZTOT_TH_RIM, ZTOT_RC_RIM, ZTOT_CC_RIM, ZTOT_RS_RIM, ZTOT_RG_RIM,      & ! cloud droplet riming (RIM)
         ZTOT_RI_HMS, ZTOT_CI_HMS, ZTOT_RS_HMS,                                & ! hallett mossop snow (HMS)
         ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_RG_ACC,      & ! rain accretion on aggregates (ACC)
         ZTOT_RS_CMEL,                                                         & ! conversion-melting (CMEL)
         ZTOT_TH_CFRZ, ZTOT_RR_CFRZ, ZTOT_CR_CFRZ, ZTOT_RI_CFRZ, ZTOT_CI_CFRZ, & ! rain freezing (CFRZ)
         ZTOT_TH_WETG, ZTOT_RC_WETG, ZTOT_CC_WETG, ZTOT_RR_WETG, ZTOT_CR_WETG, & ! wet growth of graupel (WETG)
         ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_RG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG)
         ZTOT_TH_DRYG, ZTOT_RC_DRYG, ZTOT_CC_DRYG, ZTOT_RR_DRYG, ZTOT_CR_DRYG, & ! dry growth of graupel (DRYG)
         ZTOT_RI_DRYG, ZTOT_CI_DRYG, ZTOT_RS_DRYG, ZTOT_RG_DRYG,               & ! dry growth of graupel (DRYG)
         ZTOT_RI_HMG, ZTOT_CI_HMG, ZTOT_RG_HMG,                                & ! hallett mossop graupel (HMG)
         ZTOT_TH_GMLT, ZTOT_RR_GMLT, ZTOT_CR_GMLT,                             & ! graupel melting (GMLT)
         ZTOT_RC_WETH, ZTOT_CC_WETH, ZTOT_RR_WETH, ZTOT_CR_WETH,               & ! wet growth of hail (WETH)
         ZTOT_RI_WETH, ZTOT_CI_WETH, ZTOT_RS_WETH, ZTOT_RG_WETH, ZTOT_RH_WETH, & ! wet growth of hail (WETH)
         ZTOT_RG_COHG,                                                         & ! conversion of hail into graupel (COHG)
         ZTOT_RR_HMLT, ZTOT_CR_HMLT,                                           & ! hail melting (HMLT)
         ZTOT_RR_CVRC, ZTOT_CR_CVRC                                              ! conversion of rain into cloud droplets if diameter too small
    
    !
    !For mixing-ratio splitting
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: Z0RVT,   Z0RCT,   Z0RRT,   Z0RIT,   Z0RST,   Z0RGT,   Z0RHT
    REAL, DIMENSION(:), ALLOCATABLE                      :: Z0RVT1D, Z0RCT1D, Z0RRT1D, Z0RIT1D, Z0RST1D, Z0RGT1D, Z0RHT1D 
    
    !
    ! Loop control variables
    REAL,    DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZTIME,   ZTIME_LASTCALL,   IITER
    REAL,    DIMENSION(:), ALLOCATABLE                      :: ZTIME1D, ZTIME_LASTCALL1D, IITER1D, ZMAXTIME, ZTIME_THRESHOLD
    LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: LLCOMPUTE
    LOGICAL, DIMENSION(:), ALLOCATABLE                      :: LLCOMPUTE1D
    REAL                                                    :: ZTSTEP
    INTEGER                                                 :: INB_ITER_MAX
    
    
    !
    ! 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
    INTEGER, DIMENSION(:), ALLOCATABLE :: I1, I2, I3
    ! Inverse ov PTSTEP
    REAL :: ZINV_TSTEP
    ! Work arrays
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZW3D
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2))             :: ZW2D
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZRT_SUM ! Total condensed water mr
    REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCPT    ! Total condensed water mr
    LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2))          :: GDEP
    !
    !-------------------------------------------------------------------------------
    !
    !*       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.
    ZRVS(:,:,:) = 0.
    ZRCT(:,:,:) = 0.
    ZRCS(:,:,:) = 0.
    ZRRT(:,:,:) = 0.
    ZRRS(:,:,:) = 0.
    ZRIT(:,:,:) = 0.
    ZRIS(:,:,:) = 0.
    ZRST(:,:,:) = 0.
    ZRSS(:,:,:) = 0.
    ZRGT(:,:,:) = 0.
    ZRGS(:,:,:) = 0.
    ZRHT(:,:,:) = 0.
    ZRHS(:,:,:) = 0.
    ZRT_SUM(:,:,:) = 0.
    ZCCT(:,:,:)   = 0.
    ZCCS(:,:,:)   = 0.
    ZCRT(:,:,:)   = 0.
    ZCRS(:,:,:)   = 0.
    ZCIT(:,:,:)   = 0.
    ZCIS(:,:,:)   = 0.
    ZCCNFT(:,:,:,:) = 0.
    ZCCNAT(:,:,:,:) = 0.
    ZCCNFS(:,:,:,:) = 0.
    ZCCNAS(:,:,:,:) = 0.
    ZIFNFT(:,:,:,:) = 0.
    ZIFNNT(:,:,:,:) = 0.
    ZIFNFS(:,:,:,:) = 0.
    ZIFNNS(:,:,:,:) = 0.
    ZIMMNT(:,:,:,:) = 0.
    ZIMMNS(:,:,:,:) = 0.
    ZHOMFT(:,:,:)   = 0.
    ZHOMFS(:,:,:)   = 0.
    
    IF(LBU_ENABLE) THEN
         ZTOT_CR_BRKU(:,:,:) = 0.
         ZTOT_TH_HONR(:,:,:) = 0.
         ZTOT_RR_HONR(:,:,:) = 0.
         ZTOT_CR_HONR(:,:,:) = 0.
         ZTOT_TH_IMLT(:,:,:) = 0.
         ZTOT_RC_IMLT(:,:,:) = 0.
         ZTOT_CC_IMLT(:,:,:) = 0.
         ZTOT_TH_HONC(:,:,:) = 0.
         ZTOT_RC_HONC(:,:,:) = 0.
         ZTOT_CC_HONC(:,:,:) = 0.
         ZTOT_CC_SELF(:,:,:) = 0.
         ZTOT_RC_AUTO(:,:,:) = 0.
         ZTOT_CC_AUTO(:,:,:) = 0.
         ZTOT_CR_AUTO(:,:,:) = 0.
         ZTOT_RC_ACCR(:,:,:) = 0.
         ZTOT_CC_ACCR(:,:,:) = 0.
         ZTOT_CR_SCBU(:,:,:) = 0.
         ZTOT_TH_EVAP(:,:,:) = 0.
         ZTOT_RC_EVAP(:,:,:) = 0.
         ZTOT_CC_EVAP(:,:,:) = 0.
         ZTOT_RR_EVAP(:,:,:) = 0.
         ZTOT_CR_EVAP(:,:,:) = 0.
         ZTOT_RI_CNVI(:,:,:) = 0.
         ZTOT_CI_CNVI(:,:,:) = 0.
         ZTOT_TH_DEPS(:,:,:) = 0.
         ZTOT_RS_DEPS(:,:,:) = 0.
         ZTOT_RI_CNVS(:,:,:) = 0.
         ZTOT_CI_CNVS(:,:,:) = 0.
         ZTOT_RI_AGGS(:,:,:) = 0.
         ZTOT_CI_AGGS(:,:,:) = 0.
         ZTOT_TH_DEPG(:,:,:) = 0.
         ZTOT_RG_DEPG(:,:,:) = 0.
         ZTOT_TH_BERFI(:,:,:) = 0.
         ZTOT_RC_BERFI(:,:,:) = 0.
         ZTOT_TH_RIM(:,:,:) = 0.
         ZTOT_RC_RIM(:,:,:) = 0.
         ZTOT_CC_RIM(:,:,:) = 0.
         ZTOT_RS_RIM(:,:,:) = 0.
         ZTOT_RG_RIM(:,:,:) = 0.
         ZTOT_RI_HMS(:,:,:) = 0.
         ZTOT_CI_HMS(:,:,:) = 0.
         ZTOT_RS_HMS(:,:,:) = 0.
         ZTOT_TH_ACC(:,:,:) = 0.
         ZTOT_RR_ACC(:,:,:) = 0.
         ZTOT_CR_ACC(:,:,:) = 0.
         ZTOT_RS_ACC(:,:,:) = 0.
         ZTOT_RG_ACC(:,:,:) = 0.
         ZTOT_RS_CMEL(:,:,:) = 0.
         ZTOT_TH_CFRZ(:,:,:) = 0.
         ZTOT_RR_CFRZ(:,:,:) = 0.
         ZTOT_CR_CFRZ(:,:,:) = 0.
         ZTOT_RI_CFRZ(:,:,:) = 0.
         ZTOT_CI_CFRZ(:,:,:) = 0.
         ZTOT_TH_WETG(:,:,:) = 0.
         ZTOT_RC_WETG(:,:,:) = 0.
         ZTOT_CC_WETG(:,:,:) = 0.
         ZTOT_RR_WETG(:,:,:) = 0.
         ZTOT_CR_WETG(:,:,:) = 0.
         ZTOT_RI_WETG(:,:,:) = 0.
         ZTOT_CI_WETG(:,:,:) = 0.
         ZTOT_RS_WETG(:,:,:) = 0.
         ZTOT_RG_WETG(:,:,:) = 0.
         ZTOT_RH_WETG(:,:,:) = 0.
         ZTOT_TH_DRYG(:,:,:) = 0.
         ZTOT_RC_DRYG(:,:,:) = 0.
         ZTOT_CC_DRYG(:,:,:) = 0.
         ZTOT_RR_DRYG(:,:,:) = 0.
         ZTOT_CR_DRYG(:,:,:) = 0.
         ZTOT_RI_DRYG(:,:,:) = 0.
         ZTOT_CI_DRYG(:,:,:) = 0.
         ZTOT_RS_DRYG(:,:,:) = 0.
         ZTOT_RG_DRYG(:,:,:) = 0.
         ZTOT_RI_HMG(:,:,:) = 0.
         ZTOT_CI_HMG(:,:,:) = 0.
         ZTOT_RG_HMG(:,:,:) = 0.
         ZTOT_TH_GMLT(:,:,:) = 0.
         ZTOT_RR_GMLT(:,:,:) = 0.
         ZTOT_CR_GMLT(:,:,:) = 0.
         ZTOT_RC_WETH(:,:,:) = 0.
         ZTOT_CC_WETH(:,:,:) = 0.
         ZTOT_RR_WETH(:,:,:) = 0.
         ZTOT_CR_WETH(:,:,:) = 0.
         ZTOT_RI_WETH(:,:,:) = 0.
         ZTOT_CI_WETH(:,:,:) = 0.
         ZTOT_RS_WETH(:,:,:) = 0.
         ZTOT_RG_WETH(:,:,:) = 0.
         ZTOT_RH_WETH(:,:,:) = 0.
         ZTOT_RG_COHG(:,:,:) = 0.
         ZTOT_RR_HMLT(:,:,:) = 0.
         ZTOT_CR_HMLT(:,:,:) = 0.
         ZTOT_RR_CVRC(:,:,:) = 0.
         ZTOT_CR_CVRC(:,:,:) = 0.
    END IF
    !
    ! Initial values computed as source * PTSTEP
    !
    ! Mixing ratios
    !
    KRR=SIZE(PRT,4)
    ZRVT(:,:,:) = PRS(:,:,:,1) * PTSTEP
    ZRVS(:,:,:) = PRS(:,:,:,1)
    IF ( KRR .GE. 2 ) ZRCT(:,:,:) = PRS(:,:,:,2) * PTSTEP
    IF ( KRR .GE. 2 ) ZRCS(:,:,:) = PRS(:,:,:,2)
    IF ( KRR .GE. 3 ) ZRRT(:,:,:) = PRS(:,:,:,3) * PTSTEP
    IF ( KRR .GE. 3 ) ZRRS(:,:,:) = PRS(:,:,:,3)
    IF ( KRR .GE. 4 ) ZRIT(:,:,:) = PRS(:,:,:,4) * PTSTEP
    IF ( KRR .GE. 4 ) ZRIS(:,:,:) = PRS(:,:,:,4)
    IF ( KRR .GE. 5 ) ZRST(:,:,:) = PRS(:,:,:,5) * PTSTEP
    IF ( KRR .GE. 5 ) ZRSS(:,:,:) = PRS(:,:,:,5)
    IF ( KRR .GE. 6 ) ZRGT(:,:,:) = PRS(:,:,:,6) * PTSTEP
    IF ( KRR .GE. 6 ) ZRGS(:,:,:) = PRS(:,:,:,6)
    IF ( KRR .GE. 7 ) ZRHT(:,:,:) = PRS(:,:,:,7) * PTSTEP
    IF ( KRR .GE. 7 ) ZRHS(:,:,:) = PRS(:,:,:,7)
    !
    ! Concentrations
    !
    IF ( LWARM )             ZCCT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP
    IF ( LWARM )             ZCCS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC)
    IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP
    IF ( LWARM .AND. LRAIN ) ZCRS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR)
    IF ( LCOLD )             ZCIT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP
    IF ( LCOLD )             ZCIS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI)
    !
    IF ( NMOD_CCN .GE. 1 )   ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP
    IF ( NMOD_CCN .GE. 1 )   ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP
    IF ( NMOD_CCN .GE. 1 )   ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
    IF ( NMOD_CCN .GE. 1 )   ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
    !
    IF ( NMOD_IFN .GE. 1 )   ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP
    IF ( NMOD_IFN .GE. 1 )   ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP
    IF ( NMOD_IFN .GE. 1 )   ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
    IF ( NMOD_IFN .GE. 1 )   ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
    !
    IF ( NMOD_IMM .GE. 1 )   ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP
    IF ( NMOD_IMM .GE. 1 )   ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
    !
    IF ( LCOLD .AND. LHHONI ) ZHOMFT(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP
    IF ( LCOLD .AND. LHHONI ) ZHOMFS(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
    !
    ZINV_TSTEP  = 1./PTSTEP
    ZEXN(:,:,:) = PEXNREF(:,:,:)
    ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
    !
    !-------------------------------------------------------------------------------
    !
    !*       0.     Check mean diameter for cloud, rain  and ice
    !               --------------------------------------------
    IF (LWARM .AND. LRAIN) THEN
       WHERE( ZRCT>XRTMIN(2) .AND. ZCCT>XCTMIN(2) .AND. ZRCT>XAC*ZCCT*(100.E-6)**XBC )
          ZRRT=ZRRT+ZRCT
          ZRRS=ZRRS+ZRCS
          ZCRT=ZCRT+ZCCT
          ZCRS=ZCRS+ZCCS
          ZRCT=0.
          ZCCT=0.
          ZRCS=0.
          ZCCS=0.
       END WHERE
    END IF
    !
    IF (LWARM .AND. LRAIN) THEN
       WHERE( ZRRT>XRTMIN(3) .AND. ZCRT>XCTMIN(3) .AND. ZRRT<XAR*ZCRT*(60.E-6)**XBR )
          ZRCT=ZRCT+ZRRT
          ZRCS=ZRCS+ZRRS
          ZCCT=ZCCT+ZCRT
          ZCCS=ZCCS+ZCRS
          ZRRT=0.
          ZCRT=0.
          ZRRS=0.
          ZCRS=0.
       END WHERE
    END IF
    !
    IF (LCOLD .AND. LSNOW) THEN
       WHERE( ZRIT>XRTMIN(4) .AND. ZCIT>XCTMIN(4) .AND. ZRIT>XAI*ZCIT*(250.E-6)**XBI )
          ZRST=ZRST+ZRIT
          ZRSS=ZRSS+ZRIS
          ZRIT=0.
          ZCIT=0.
          ZRIS=0.
          ZCIS=0.
       END WHERE
    END IF
    !
    IF(LBU_ENABLE) THEN
      IF (LBUDGET_RC .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'CORR_BU_RRC')
      IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'CORR_BU_RRR')
      IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CORR_BU_RRI')
    
      IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:),10  , 'CORR_BU_RRS')
    
      IF (LBUDGET_SV) THEN
         IF (LWARM .AND. LRAIN) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'CORR_BU_RSV')
         IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'CORR_BU_RSV')
         IF (LCOLD .AND. LSNOW) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CORR_BU_RSV')
      END IF
    END IF
    !-------------------------------------------------------------------------------
    !
    !*       1.     Sedimentation
    !               -------------
    !
    !
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LWARM .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC)
    
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LWARM .AND. LRAIN) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'L', 2, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR)
    
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LCOLD .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'I', 2, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D)
    
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'I', 1, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZW3D, PINPRS)
    
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'I', 1, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZW3D, PINPRG)
    
    ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
    ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
    
    IF (LCOLD .AND. LHAIL) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
                                                   'I', 1, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZW3D, PINPRH)
    
    !
    ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP
    !
    ! Call budgets
    !
    IF(LBU_ENABLE) THEN
      IF (LBUDGET_TH)                         CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'SEDI_BU_RTH')
      IF (LBUDGET_RC .AND. LWARM .AND. LSEDC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'SEDI_BU_RRC')
      IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'SEDI_BU_RRR')
      IF (LBUDGET_RI .AND. LCOLD .AND. LSEDI) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'SEDI_BU_RRI')
      IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS')
      IF (LBUDGET_RG .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG')
      IF (LBUDGET_RH .AND. LCOLD .AND. LHAIL) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH')
      IF (LBUDGET_SV) THEN
         IF (LWARM .AND. LSEDC) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'SEDI_BU_RSV')
         IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'SEDI_BU_RSV')
         IF (LCOLD .AND. LSEDI) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'SEDI_BU_RSV')
      END IF
    END IF
    !
    ! 1.bis Deposition at 1st level above ground
    !
    IF (LWARM .AND. LDEPOC) THEN
      PINDEP(:,:)=0.
      GDEP(:,:) = .FALSE.
    
      GDEP(:,:) = ZRCS(:,:,IKB) >0 .AND. ZCCS(:,:,IKB) >0 .AND. ZRCT(:,:,IKB) >0 .AND. ZCCT(:,:,IKB) >0
    
         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
    
      END WHERE
    !
      IF ( LBUDGET_RC ) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:),7             ,'DEPO_BU_RRC')
      IF ( LBUDGET_SV ) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DEPO_BU_RSV') 
    END IF
    !
    
    !
    Z_RR_CVRC(:,:,:) = 0.
    Z_CR_CVRC(:,:,:) = 0.
    
    IF (LWARM .AND. LRAIN) THEN
       CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCS*PTSTEP, ZRRS*PTSTEP, ZCCS*PTSTEP, ZCRS*PTSTEP, &
                                        Z_RR_CVRC, Z_CR_CVRC)
    
       !
       ZRCS(:,:,:) = ZRCS(:,:,:) - Z_RR_CVRC(:,:,:)/PTSTEP
       ZRRS(:,:,:) = ZRRS(:,:,:) + Z_RR_CVRC(:,:,:)/PTSTEP
       ZCCS(:,:,:) = ZCCS(:,:,:) - Z_CR_CVRC(:,:,:)/PTSTEP
       ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP
       !
    
       IF(LBU_ENABLE) THEN
          IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'R2C1_BU_RRC')
          IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'R2C1_BU_RRR')
          IF (LBUDGET_SV) THEN
             CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'R2C1_BU_RSV')
             CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'R2C1_BU_RSV')
          END IF
       END IF
    END IF
    !
    ! Update variables
    !
    ZTHT(:,:,:) = ZTHS(:,:,:) * PTSTEP
    ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
    !
    
    IF ( KRR .GE. 2 ) ZRCT(:,:,:) = ZRCS(:,:,:) * PTSTEP
    IF ( KRR .GE. 3 ) ZRRT(:,:,:) = ZRRS(:,:,:) * PTSTEP
    
    IF ( KRR .GE. 4 ) ZRIT(:,:,:) = ZRIS(:,:,:) * PTSTEP
    IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP
    IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP
    IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP
    !
    
    IF ( LWARM )             ZCCT(:,:,:)   = ZCCS(:,:,:) * PTSTEP
    IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:)   = ZCRS(:,:,:) * PTSTEP
    
    IF ( LCOLD )             ZCIT(:,:,:)   = ZCIS(:,:,:) * PTSTEP
    ! 
    !-------------------------------------------------------------------------------
    !
    !*       2.     Nucleation processes
    !               --------------------
    !
    !
    IF( LACTIT ) THEN
       ZTM(:,:,:) = PTHM(:,:,:) * (PPABSM(:,:,:)/XP00)**(XRD/XCPD)
    ELSE 
       ZTM(:,:,:) = ZT(:,:,:)
    END IF
    !
    CALL LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, OCLOSE_OUT, PRHODJ,                &
                                PRHODREF, ZEXN, PPABST, ZT, ZTM, PW_NU,             &
                                ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,           &
                                ZCCT, ZCRT, ZCIT,                                   &
                                ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT      )
    !
    ! Saving sources before microphysics time-splitting loop
    !
    ZRVS(:,:,:) = ZRVT(:,:,:) *ZINV_TSTEP
    ZRCS(:,:,:) = ZRCT(:,:,:) *ZINV_TSTEP
    ZRRS(:,:,:) = ZRRT(:,:,:) *ZINV_TSTEP
    ZRIS(:,:,:) = ZRIT(:,:,:) *ZINV_TSTEP
    ZRSS(:,:,:) = ZRST(:,:,:) *ZINV_TSTEP
    ZRGS(:,:,:) = ZRGT(:,:,:) *ZINV_TSTEP
    ZRHS(:,:,:) = ZRHT(:,:,:) *ZINV_TSTEP
    !
    ZCCS(:,:,:) = ZCCT(:,:,:) *ZINV_TSTEP
    ZCRS(:,:,:) = ZCRT(:,:,:) *ZINV_TSTEP
    ZCIS(:,:,:) = ZCIT(:,:,:) *ZINV_TSTEP
    !
    ZCCNFS(:,:,:,:) = ZCCNFT(:,:,:,:) *ZINV_TSTEP
    ZCCNAS(:,:,:,:) = ZCCNAT(:,:,:,:) *ZINV_TSTEP
    ZIFNFS(:,:,:,:) = ZIFNFT(:,:,:,:) *ZINV_TSTEP
    ZIFNNS(:,:,:,:) = ZIFNNT(:,:,:,:) *ZINV_TSTEP
    ZIMMNS(:,:,:,:) = ZIMMNT(:,:,:,:) *ZINV_TSTEP
    ZHOMFS(:,:,:)   = ZHOMFT(:,:,:)   *ZINV_TSTEP
    !
    ZTHS(:,:,:) = ZTHT(:,:,:) *ZINV_TSTEP
    ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
    !
    !
    !-------------------------------------------------------------------------------
    !
    !*       2.     LOOP
    !               ----
    !
    !
    ! Maximum number of iterations
    INB_ITER_MAX=NMAXITER
    IF(XTSTEP_TS/=0.)THEN
      INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting
      ZTSTEP=PTSTEP/INB_ITER_MAX
      INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time
    ENDIF
    IITER(:,:,:)=0
    ZTIME(:,:,:)=0. ! Current integration time (all points may have a different integration time)
    !
    ! Begin the huge time splitting loop
    !
    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,IKB:IKE)<PTSTEP))
       !
       IF(XMRSTEP/=0.) THEN
          ! In this case we need to remember the mixing ratios used to compute the tendencies
          ! because when mixing ratio has evolved more than a threshold, we must re-compute tendecies
          Z0RVT(:,:,:)=ZRVT(:,:,:)
          Z0RCT(:,:,:)=ZRCT(:,:,:)
          Z0RRT(:,:,:)=ZRRT(:,:,:)
          Z0RIT(:,:,:)=ZRIT(:,:,:)
          Z0RST(:,:,:)=ZRST(:,:,:)
          Z0RGT(:,:,:)=ZRGT(:,:,:)
          Z0RHT(:,:,:)=ZRHT(:,:,:)
       ENDIF
       !
       IF(XTSTEP_TS/=0.) THEN
          ! In this case we need to remember the time when tendencies were computed
          ! because when time has evolved more than a limit, we must re-compute tendecies
          ZTIME_LASTCALL(:,:,:)=ZTIME(:,:,:)
       ENDIF
       !
       LLCOMPUTE(:,:,:)=.FALSE.
       LLCOMPUTE(IIB:IIE,IJB:IJE,IKB:IKE) = ZTIME(IIB:IIE,IJB:IJE,IKB:IKE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep
       WHERE(LLCOMPUTE(:,:,:))
          IITER(:,:,:)=IITER(:,:,:)+1
       END WHERE
       ! 
       DO WHILE(ANY(LLCOMPUTE(:,:,:))) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears
    
          !
          ! Packing variables to run computations only where necessary
          !
          IPACK = COUNT(LLCOMPUTE)
          ALLOCATE(I1(IPACK))
          ALLOCATE(I2(IPACK))
          ALLOCATE(I3(IPACK))
          ALLOCATE(ZRHODREF1D(IPACK))
          ALLOCATE(ZEXNREF1D(IPACK))
          ALLOCATE(ZEXN1D(IPACK))
          ALLOCATE(ZP1D(IPACK))     
          ALLOCATE(ZTHT1D(IPACK))
          ALLOCATE(ZRVT1D(IPACK))
          ALLOCATE(ZRCT1D(IPACK))
          ALLOCATE(ZRRT1D(IPACK))
          ALLOCATE(ZRIT1D(IPACK))
          ALLOCATE(ZRST1D(IPACK))
          ALLOCATE(ZRGT1D(IPACK))
          ALLOCATE(ZRHT1D(IPACK))
          ALLOCATE(ZCCT1D(IPACK))
          ALLOCATE(ZCRT1D(IPACK))
          ALLOCATE(ZCIT1D(IPACK))
          ALLOCATE(ZIFNN1D(IPACK,NMOD_IFN))
          ALLOCATE(ZEVAP1D(IPACK))
          ALLOCATE(ZTIME1D(IPACK))
          ALLOCATE(LLCOMPUTE1D(IPACK))
          ALLOCATE(IITER1D(IPACK))
          ALLOCATE(ZTIME_LASTCALL1D(IPACK))
          ALLOCATE(Z0RVT1D(IPACK))
          ALLOCATE(Z0RCT1D(IPACK))
          ALLOCATE(Z0RRT1D(IPACK))
          ALLOCATE(Z0RIT1D(IPACK))
          ALLOCATE(Z0RST1D(IPACK))
          ALLOCATE(Z0RGT1D(IPACK))
          ALLOCATE(Z0RHT1D(IPACK))
          IPACK = COUNTJV(LLCOMPUTE,I1,I2,I3)
          DO II=1,IPACK
             ZRHODREF1D(II)       = PRHODREF(I1(II),I2(II),I3(II))
             ZEXNREF1D(II)        = PEXNREF(I1(II),I2(II),I3(II))
             ZEXN1D(II)           = ZEXN(I1(II),I2(II),I3(II))
             ZP1D(II)             = PPABST(I1(II),I2(II),I3(II))
             ZTHT1D(II)           = ZTHT(I1(II),I2(II),I3(II))
             ZRVT1D(II)           = ZRVT(I1(II),I2(II),I3(II))
             ZRCT1D(II)           = ZRCT(I1(II),I2(II),I3(II))
             ZRRT1D(II)           = ZRRT(I1(II),I2(II),I3(II))
             ZRIT1D(II)           = ZRIT(I1(II),I2(II),I3(II))
             ZRST1D(II)           = ZRST(I1(II),I2(II),I3(II))
             ZRGT1D(II)           = ZRGT(I1(II),I2(II),I3(II))
             ZRHT1D(II)           = ZRHT(I1(II),I2(II),I3(II))
             ZCCT1D(II)           = ZCCT(I1(II),I2(II),I3(II))
             ZCRT1D(II)           = ZCRT(I1(II),I2(II),I3(II))
             ZCIT1D(II)           = ZCIT(I1(II),I2(II),I3(II))
             ZIFNN1D(II,:)        = ZIFNNT(I1(II),I2(II),I3(II),:)
             ZEVAP1D(II)          = PEVAP3D(I1(II),I2(II),I3(II))
             ZTIME1D(II)          = ZTIME(I1(II),I2(II),I3(II))         
             LLCOMPUTE1D(II)      = LLCOMPUTE(I1(II),I2(II),I3(II))         
             IITER1D(II)          = IITER(I1(II),I2(II),I3(II))         
             ZTIME_LASTCALL1D(II) = ZTIME_LASTCALL(I1(II),I2(II),I3(II))         
             Z0RVT1D(II)          = Z0RVT(I1(II),I2(II),I3(II))
             Z0RCT1D(II)          = Z0RCT(I1(II),I2(II),I3(II))
             Z0RRT1D(II)          = Z0RRT(I1(II),I2(II),I3(II))
             Z0RIT1D(II)          = Z0RIT(I1(II),I2(II),I3(II))
             Z0RST1D(II)          = Z0RST(I1(II),I2(II),I3(II))
             Z0RGT1D(II)          = Z0RGT(I1(II),I2(II),I3(II))
             Z0RHT1D(II)          = Z0RHT(I1(II),I2(II),I3(II))
          END DO
          !
          ! Allocating 1D variables
          !
          ALLOCATE(ZMAXTIME(IPACK))           ;  ZMAXTIME(:) = 0.
          ALLOCATE(ZTIME_THRESHOLD(IPACK))    ;  ZTIME_THRESHOLD(:) = 0.
          !
          ALLOCATE(ZA_TH(IPACK))              ;  ZA_TH(:) = 0.
          ALLOCATE(ZA_RV(IPACK))              ;  ZA_RV(:) = 0.
          ALLOCATE(ZA_RC(IPACK))              ;  ZA_RC(:) = 0.
          ALLOCATE(ZA_RR(IPACK))              ;  ZA_RR(:) = 0.
          ALLOCATE(ZA_RI(IPACK))              ;  ZA_RI(:) = 0.
          ALLOCATE(ZA_RS(IPACK))              ;  ZA_RS(:) = 0.
          ALLOCATE(ZA_RG(IPACK))              ;  ZA_RG(:) = 0.
          ALLOCATE(ZA_RH(IPACK))              ;  ZA_RH(:) = 0.
          ALLOCATE(ZA_CC(IPACK))              ;  ZA_CC(:) = 0.
          ALLOCATE(ZA_CR(IPACK))              ;  ZA_CR(:) = 0.
          ALLOCATE(ZA_CI(IPACK))              ;  ZA_CI(:) = 0.
          !
          ALLOCATE(ZB_TH(IPACK))              ;  ZB_TH(:) = 0.
          ALLOCATE(ZB_RV(IPACK))              ;  ZB_RV(:) = 0.
          ALLOCATE(ZB_RC(IPACK))              ;  ZB_RC(:) = 0.
          ALLOCATE(ZB_RR(IPACK))              ;  ZB_RR(:) = 0.
          ALLOCATE(ZB_RI(IPACK))              ;  ZB_RI(:) = 0.
          ALLOCATE(ZB_RS(IPACK))              ;  ZB_RS(:) = 0.
          ALLOCATE(ZB_RG(IPACK))              ;  ZB_RG(:) = 0.
          ALLOCATE(ZB_RH(IPACK))              ;  ZB_RH(:) = 0.
          ALLOCATE(ZB_CC(IPACK))              ;  ZB_CC(:) = 0.
          ALLOCATE(ZB_CR(IPACK))              ;  ZB_CR(:) = 0.
          ALLOCATE(ZB_CI(IPACK))              ;  ZB_CI(:) = 0.
          ALLOCATE(ZB_IFNN(IPACK,NMOD_IFN))   ;  ZB_IFNN(:,:) = 0.
          !
          ALLOCATE(Z_CR_BRKU(IPACK))          ; Z_CR_BRKU(:) = 0.
          ALLOCATE(Z_TH_HONR(IPACK))          ; Z_TH_HONR(:) = 0.
          ALLOCATE(Z_RR_HONR(IPACK))          ; Z_RR_HONR(:) = 0.
          ALLOCATE(Z_CR_HONR(IPACK))          ; Z_CR_HONR(:) = 0.
          ALLOCATE(Z_TH_IMLT(IPACK))          ; Z_TH_IMLT(:) = 0.
          ALLOCATE(Z_RC_IMLT(IPACK))          ; Z_RC_IMLT(:) = 0.
          ALLOCATE(Z_CC_IMLT(IPACK))          ; Z_CC_IMLT(:) = 0.
          ALLOCATE(Z_TH_HONC(IPACK))          ; Z_TH_HONC(:) = 0.
          ALLOCATE(Z_RC_HONC(IPACK))          ; Z_RC_HONC(:) = 0.
          ALLOCATE(Z_CC_HONC(IPACK))          ; Z_CC_HONC(:) = 0.
          ALLOCATE(Z_CC_SELF(IPACK))          ; Z_CC_SELF(:) = 0.
          ALLOCATE(Z_RC_AUTO(IPACK))          ; Z_RC_AUTO(:) = 0.
          ALLOCATE(Z_CC_AUTO(IPACK))          ; Z_CC_AUTO(:) = 0.
          ALLOCATE(Z_CR_AUTO(IPACK))          ; Z_CR_AUTO(:) = 0.
          ALLOCATE(Z_RC_ACCR(IPACK))          ; Z_RC_ACCR(:) = 0.
          ALLOCATE(Z_CC_ACCR(IPACK))          ; Z_CC_ACCR(:) = 0.
          ALLOCATE(Z_CR_SCBU(IPACK))          ; Z_CR_SCBU(:) = 0.
          ALLOCATE(Z_TH_EVAP(IPACK))          ; Z_TH_EVAP(:) = 0.
          ALLOCATE(Z_RR_EVAP(IPACK))          ; Z_RR_EVAP(:) = 0.
          ALLOCATE(Z_RI_CNVI(IPACK))          ; Z_RI_CNVI(:) = 0.
          ALLOCATE(Z_CI_CNVI(IPACK))          ; Z_CI_CNVI(:) = 0.
          ALLOCATE(Z_TH_DEPS(IPACK))          ; Z_TH_DEPS(:) = 0.
          ALLOCATE(Z_RS_DEPS(IPACK))          ; Z_RS_DEPS(:) = 0.
          ALLOCATE(Z_RI_CNVS(IPACK))          ; Z_RI_CNVS(:) = 0.
          ALLOCATE(Z_CI_CNVS(IPACK))          ; Z_CI_CNVS(:) = 0.
          ALLOCATE(Z_RI_AGGS(IPACK))          ; Z_RI_AGGS(:) = 0.
          ALLOCATE(Z_CI_AGGS(IPACK))          ; Z_CI_AGGS(:) = 0.
          ALLOCATE(Z_TH_DEPG(IPACK))          ; Z_TH_DEPG(:) = 0.
          ALLOCATE(Z_RG_DEPG(IPACK))          ; Z_RG_DEPG(:) = 0.
          ALLOCATE(Z_TH_BERFI(IPACK))         ; Z_TH_BERFI(:) = 0.
          ALLOCATE(Z_RC_BERFI(IPACK))         ; Z_RC_BERFI(:) = 0.
          ALLOCATE(Z_TH_RIM(IPACK))           ; Z_TH_RIM = 0.
          ALLOCATE(Z_RC_RIM(IPACK))           ; Z_RC_RIM = 0.
          ALLOCATE(Z_CC_RIM(IPACK))           ; Z_CC_RIM = 0.
          ALLOCATE(Z_RS_RIM(IPACK))           ; Z_RS_RIM = 0.
          ALLOCATE(Z_RG_RIM(IPACK))           ; Z_RG_RIM = 0.
          ALLOCATE(Z_RI_HMS(IPACK))           ; Z_RI_HMS = 0.
          ALLOCATE(Z_CI_HMS(IPACK))           ; Z_CI_HMS = 0.
          ALLOCATE(Z_RS_HMS(IPACK))           ; Z_RS_HMS = 0.
          ALLOCATE(Z_TH_ACC(IPACK))           ; Z_TH_ACC = 0.
          ALLOCATE(Z_RR_ACC(IPACK))           ; Z_RR_ACC = 0.
          ALLOCATE(Z_CR_ACC(IPACK))           ; Z_CR_ACC = 0.
          ALLOCATE(Z_RS_ACC(IPACK))           ; Z_RS_ACC = 0.
          ALLOCATE(Z_RG_ACC(IPACK))           ; Z_RG_ACC = 0.
          ALLOCATE(Z_RS_CMEL(IPACK))          ; Z_RS_CMEL = 0.
          ALLOCATE(Z_TH_CFRZ(IPACK))          ; Z_TH_CFRZ = 0.
          ALLOCATE(Z_RR_CFRZ(IPACK))          ; Z_RR_CFRZ = 0.
          ALLOCATE(Z_CR_CFRZ(IPACK))          ; Z_CR_CFRZ = 0.
          ALLOCATE(Z_RI_CFRZ(IPACK))          ; Z_RI_CFRZ = 0.
          ALLOCATE(Z_CI_CFRZ(IPACK))          ; Z_CI_CFRZ = 0.
          ALLOCATE(Z_TH_WETG(IPACK))          ; Z_TH_WETG = 0.
          ALLOCATE(Z_RC_WETG(IPACK))          ; Z_RC_WETG = 0.
          ALLOCATE(Z_CC_WETG(IPACK))          ; Z_CC_WETG = 0.
          ALLOCATE(Z_RR_WETG(IPACK))          ; Z_RR_WETG = 0.
          ALLOCATE(Z_CR_WETG(IPACK))          ; Z_CR_WETG = 0.
          ALLOCATE(Z_RI_WETG(IPACK))          ; Z_RI_WETG = 0.
          ALLOCATE(Z_CI_WETG(IPACK))          ; Z_CI_WETG = 0.
          ALLOCATE(Z_RS_WETG(IPACK))          ; Z_RS_WETG = 0.
          ALLOCATE(Z_RG_WETG(IPACK))          ; Z_RG_WETG = 0.
          ALLOCATE(Z_RH_WETG(IPACK))          ; Z_RH_WETG = 0.
          ALLOCATE(Z_TH_DRYG(IPACK))          ; Z_TH_DRYG = 0.
          ALLOCATE(Z_RC_DRYG(IPACK))          ; Z_RC_DRYG = 0.
          ALLOCATE(Z_CC_DRYG(IPACK))          ; Z_CC_DRYG = 0.
          ALLOCATE(Z_RR_DRYG(IPACK))          ; Z_RR_DRYG = 0.
          ALLOCATE(Z_CR_DRYG(IPACK))          ; Z_CR_DRYG = 0.
          ALLOCATE(Z_RI_DRYG(IPACK))          ; Z_RI_DRYG = 0.
          ALLOCATE(Z_CI_DRYG(IPACK))          ; Z_CI_DRYG = 0.
          ALLOCATE(Z_RS_DRYG(IPACK))          ; Z_RS_DRYG = 0.
          ALLOCATE(Z_RG_DRYG(IPACK))          ; Z_RG_DRYG = 0.
          ALLOCATE(Z_RI_HMG(IPACK))           ; Z_RI_HMG = 0.
          ALLOCATE(Z_CI_HMG(IPACK))           ; Z_CI_HMG = 0.
          ALLOCATE(Z_RG_HMG(IPACK))           ; Z_RG_HMG = 0.
          ALLOCATE(Z_TH_GMLT(IPACK))          ; Z_TH_GMLT = 0.
          ALLOCATE(Z_RR_GMLT(IPACK))          ; Z_RR_GMLT = 0.
          ALLOCATE(Z_CR_GMLT(IPACK))          ; Z_CR_GMLT = 0.
    
          !
          !***       4.1 Tendecies computation
          !
          
          CALL LIMA_INST_PROCS (PTSTEP, LLCOMPUTE1D,                                &
                                ZEXNREF1D, ZP1D,                                    &
                                ZTHT1D, ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, &
                                ZCCT1D, ZCRT1D, ZCIT1D,                             &
                                ZIFNN1D,                                            &
                                Z_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
                                Z_TH_HONR, Z_RR_HONR, Z_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
                                Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
                                ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RG,           &
                                ZB_CC, ZB_CR, ZB_CI,                                &
                                ZB_IFNN                                             )
          
          CALL LIMA_TENDENCIES (PTSTEP, LLCOMPUTE1D,                                   &
                                ZEXNREF1D, ZRHODREF1D, ZP1D, ZTHT1D,                   &
                                ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, ZRHT1D,&
                                ZCCT1D, ZCRT1D, ZCIT1D,                                &
                                Z_TH_HONC, Z_RC_HONC, Z_CC_HONC,                       & 
                                Z_CC_SELF,                                             & 
                                Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO,                       & 
                                Z_RC_ACCR, Z_CC_ACCR,                                  & 
                                Z_CR_SCBU,                                             & 
                                Z_TH_EVAP, Z_RR_EVAP,                                  & 
                                Z_RI_CNVI, Z_CI_CNVI,                                  & 
                                Z_TH_DEPS, Z_RS_DEPS,                                  & 
                                Z_RI_CNVS, Z_CI_CNVS,                                  & 
                                Z_RI_AGGS, Z_CI_AGGS,                                  & 
                                Z_TH_DEPG, Z_RG_DEPG,                                  & 
                                Z_TH_BERFI, Z_RC_BERFI,                                & 
                                Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM,      & 
                                Z_RI_HMS, Z_CI_HMS, Z_RS_HMS,                          & 
                                Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC,      & 
                                Z_RS_CMEL,                                             & 
                                Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & 
                                Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & 
                                Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & 
                                Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & 
                                Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG,            & 
                                Z_RI_HMG, Z_CI_HMG, Z_RG_HMG,                          & 
                                Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT,                       & 
    !!!     Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &           ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
    !!!     Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
    !!!     Z_RG_COHG, &                                             ! conversion of hail into graupel (COHG) : rg, rh
    !!!     Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
                                ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR,              &
                                ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH,                     &
                                ZEVAP1D                                                )
    
          !
          !***       4.2 Integration time
          !
          ! If we can, we will use these tendecies until the end of the timestep
          ZMAXTIME(:)=PTSTEP-ZTIME1D(:) ! Remaining time until the end of the timestep
    
          ! We need to adjust tendencies when temperature reaches 0
          IF(LFEEDBACKT) THEN
             !Is ZB_TH enough to change temperature sign?