Skip to content
Snippets Groups Projects
elec_tendencies.f90 149 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    !MNH_LIC for details. version 1.
    !-----------------------------------------------------------------
    !     ###########################
          MODULE MODI_ELEC_TENDENCIES
    !     ###########################
    !
    INTERFACE
          SUBROUTINE ELEC_TENDENCIES (D, KRR, KMICRO, PTSTEP, ODMICRO,                            &
                                      PRHODREF, PRHODJ, PZT, PCIT,                                &
                                      PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                         &
                                      PQPIT, PQCT, PQRT, PQIT, PQST, PQGT, PQNIT,                 &
                                      PQPIS, PQCS, PQRS, PQIS, PQSS, PQGS, PQNIS,                 &
                                      PRVHENI, PRRHONG, PRIMLTC,                                  &
                                      PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG,                &
                                      PRCAUTR, PRCACCR, PRREVAV,                                  &
                                      PRCRIMSS, PRCRIMSG, PRSRIMCG, PRRACCSS, PRRACCSG, PRSACCRG, &
                                      PRSMLTG, PRICFRRG, PRRCFRIG,                                &
                                      PRCWETG, PRIWETG, PRRWETG, PRSWETG,                         &
                                      PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG,                         &
                                      PRGMLTR, PRCBERI,                                           & 
                                      PRCMLTSR, PRICFRR,                                          & !- opt. param. for ICE3 
                                      PCCT, PCRT, PCST, PCGT,                                     & !-- optional
                                      PRVHENC, PRCHINC, PRVHONH,                                  & !| parameters 
                                      PRRCVRC, PRICNVI, PRVDEPI, PRSHMSI, PRGHMGI,                & !|    for
                                      PRICIBU, PRIRDSF,                                           & !|    LIMA
                                      PRCCORR2, PRRCORR2, PRICORR2,                               & !--
                                      PRWETGH, PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH,       & !--  optional
                                      PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH,                & !|  parameters
                                      PRHMLTR, PRDRYHG,                                           & !|     for
                                      PRHT, PRHS, PCHT, PQHT, PQHS)                                 !--    hail                          
    !
    USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
    !
    TYPE(DIMPHYEX_t),                     INTENT(IN)    :: D
    !
    INTEGER,                              INTENT(IN)    :: KMICRO
    REAL,                                 INTENT(IN)    :: PTSTEP  ! Double Time step
                                                                   ! (single if cold start)
    INTEGER,                              INTENT(IN)    :: KRR     ! Number of moist variable
    !
    LOGICAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   :: ODMICRO ! mask to limit computation
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRHODREF! Reference density
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PZT     ! Temperature (K)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PCIT    ! Pristine ice n.c. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQPIT   ! Positive ion (Nb/kg) at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQNIT   ! Negative ion (Nb/kg) at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQCT    ! Cloud water charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQRT    ! Raindrops charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQIT    ! Pristine ice charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQST    ! Snow/aggregates charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQGT    ! Graupel charge at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQPIS   ! Positive ion (Nb/kg) source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQNIS   ! Negative ion (Nb/kg) source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQCS    ! Cloud water charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQRS    ! Raindrops charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQIS    ! Pristine ice charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQSS    ! Snow/aggregates charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQGS    ! Graupel charge source
    !
    ! microphysics rates common to ICE3 and LIMA
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRVHENI, &  ! heterogeneous nucleation mixing ratio change (HIND for LIMA)
                                                           PRCHONI, &  ! Homogeneous nucleation
                                                           PRRHONG, &  ! Spontaneous freezing mixing ratio change
                                                           PRVDEPS, &  ! Deposition on r_s,
                                                           PRIAGGS, &  ! Aggregation on r_s
                                                           PRIAUTS, &  ! Autoconversion of r_i for r_s production (CNVS for LIMA)
                                                           PRVDEPG, &  ! Deposition on r_g
                                                           PRCAUTR, &  ! Autoconversion of r_c for r_r production
                                                           PRCACCR, &  ! Accretion of r_c for r_r production
                                                           PRREVAV, &  ! Evaporation of r_r
                                                           PRIMLTC, &  ! Cloud ice melting mixing ratio change
                                                           PRCBERI, &  ! Bergeron-Findeisen effect
                                                           PRSMLTG, &  ! Conversion-Melting of the aggregates
                                                           PRRACCSS, PRRACCSG, PRSACCRG, & ! Rain accretion onto the aggregates
                                                           PRCRIMSS, PRCRIMSG, PRSRIMCG, & ! Cloud droplet riming of the aggregates
                                                           PRICFRRG, PRRCFRIG,           & ! Rain contact freezing
                                                           PRCWETG, PRIWETG, PRRWETG, PRSWETG, &  ! Graupel wet growth
                                                           PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, &  ! Graupel dry growth
                                                           PRGMLTR     ! Melting of the graupel
    ! microphysics rates specific to ICE3 (knmoments==1)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRCMLTSR,&  ! Cld droplet collection onto aggregates by pos. temp.
                                                                   PRICFRR     ! Rain contact freezing (part of ice crystals converted to rain)
    ! microphysics rates specific to LIMA (knmoments==2)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRVHENC, &  ! Cld droplet formation
                                                                   PRCHINC, &  ! Heterogeneous nucleation of coated IFN
                                                                   PRVHONH, &  ! Nucleation of haze
                                                                   PRRCVRC, &  ! Conversion of small drops into droplets
                                                                   PRICNVI, &  ! Conversion snow --> ice
                                                                   PRVDEPI, &  ! Deposition on r_i
                                                                   PRSHMSI, PRGHMGI, & ! Hallett Mossop for snow and graupel
                                                                   PRICIBU, &  ! Collisional ice breakup
                                                                   PRIRDSF, &  ! Raindrop shattering by freezing
                                                                   PRCCORR2, PRRCORR2, PRICORR2 ! Correction inside LIMA splitting
    ! microphysics rates related to hail (krr == 7, lhail = .t.)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRWETGH, &  ! Conversion of graupel into hail
                                                                   PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & ! Dry growth of hail
                                                                   PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, & ! Wet growth of hail
                                                                   PRHMLTR, &                                     ! Melting of hail  
                                                                   PRDRYHG     ! Conversion of hail into graupel
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCCT   ! Cloud droplets conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCRT   ! Raindrops conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCST   ! Snow conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCGT   ! Graupel conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCHT   ! Hail conc. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRHT   ! Hail m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(INOUT) :: PRHS   ! Hail m.r. source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PQHT   ! Hail charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(INOUT) :: PQHS   ! Hail charge source
    !
    END SUBROUTINE ELEC_TENDENCIES
    END INTERFACE
    END MODULE MODI_ELEC_TENDENCIES
    !
    !
    !     #########################################################################################
          SUBROUTINE ELEC_TENDENCIES (D, KRR, KMICRO, PTSTEP, ODMICRO,                            &
                                      PRHODREF, PRHODJ, PZT, PCIT,                                &
                                      PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                         &
                                      PQPIT, PQCT, PQRT, PQIT, PQST, PQGT, PQNIT,                 &
                                      PQPIS, PQCS, PQRS, PQIS, PQSS, PQGS, PQNIS,                 &
                                      PRVHENI, PRRHONG, PRIMLTC,                                  &
                                      PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG,                &
                                      PRCAUTR, PRCACCR, PRREVAV,                                  &
                                      PRCRIMSS, PRCRIMSG, PRSRIMCG, PRRACCSS, PRRACCSG, PRSACCRG, &
                                      PRSMLTG, PRICFRRG, PRRCFRIG,                                &
                                      PRCWETG, PRIWETG, PRRWETG, PRSWETG,                         &
                                      PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG,                         &
                                      PRGMLTR, PRCBERI,                                           & 
                                      PRCMLTSR, PRICFRR,                                          & !- opt. param. for ICE3 
                                      PCCT, PCRT, PCST, PCGT,                                     & !-- optional
                                      PRVHENC, PRCHINC, PRVHONH,                                  & !| parameters 
                                      PRRCVRC, PRICNVI, PRVDEPI, PRSHMSI, PRGHMGI,                & !|    for
                                      PRICIBU, PRIRDSF,                                           & !|    LIMA
                                      PRCCORR2, PRRCORR2, PRICORR2,                               & !--
                                      PRWETGH, PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH,       & !--  optional
                                      PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH,                & !|  parameters
                                      PRHMLTR, PRDRYHG,                                           & !|     for
                                      PRHT, PRHS, PCHT, PQHT, PQHS)                                 !--    hail
    !     ##########################################################################################
    !
    !!****  * - compute the explicit cloud electrification sources
    !!
    !!    This routine is adapted from rain_ice_elec.f90.
    !!    To avoid duplicated routines, the cloud electrification routine is now called 
    !!    at the end of the microphysics scheme but needs the microphysical tendencies as arguments.
    !!    The sedimentation source for electric charges is treated separately.
    !!
    !!    AUTHOR
    !!    ------
    !!      C. Barthe    * LAERO *
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original    February 2022
    !!
    !!      Modifications
    !! C. Barthe   12/04/2022   include electrification from LIMA
    !! C. Barthe   22/03/2023   5-6: take into account news from LIMA (Ns, Ng, Nh, CIBU and RDSF) and PHYEX
    !! C. Barthe   13/07/2023   5-6: Ns, Ng and Nh can be pronostic variables (LIMA2)
    
    !! C. Barthe   22/11/2023   initialize Nx to 0 when 1-moment
    
    !!
    !------------------------------------------------------------------
    !
    !*      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_CONF
    USE MODD_CST
    USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
    USE MODD_ELEC_DESCR
    USE MODD_ELEC_n
    USE MODD_ELEC_PARAM
    USE MODD_LES
    USE MODE_ll
    USE MODD_NSV,              ONLY: NSV_ELECBEG, NSV_ELECEND ! Scalar variables for budgets
    USE MODD_PARAMETERS
    
    USE MODD_PARAM_LIMA,       ONLY: XALPHAI_L=>XALPHAI, XNUI_L=>XNUI,   &
                                     XCEXVT_L=>XCEXVT, XRTMIN_L=>XRTMIN, &
                                     LCIBU, LRDSF,                       &
                                     NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
    USE MODD_PARAM_LIMA_COLD,  ONLY: XAI_L=>XAI, XBI_L=>XBI,   &
                                     XDS_L=>XDS, XCXS_L=>XCXS, &
                                     XCOLEXIS_L=>XCOLEXIS
    USE MODD_PARAM_LIMA_MIXED, ONLY: XDG_L=>XDG, XCXG_L=>XCXG,                           &
                                     XCOLIG_L=>XCOLIG, XCOLEXIG_L=>XCOLEXIG,             &
                                     XCOLSG_L=>XCOLSG, XCOLEXSG_L=>XCOLEXSG,             &
                                     NGAMINC_L=>NGAMINC,                                 &
                                     NACCLBDAR_L=>NACCLBDAR, NACCLBDAS_L=>NACCLBDAS,     &
                                     XACCINTP1S_L=>XACCINTP1S, XACCINTP2S_L=>XACCINTP2S, &
                                     XACCINTP1R_L=>XACCINTP1R, XACCINTP2R_L=>XACCINTP2R, &
                                     NDRYLBDAR_L=>NDRYLBDAR, NDRYLBDAS_L=>NDRYLBDAS,     &
                                     NDRYLBDAG_L=>NDRYLBDAG,                             &
                                     XDRYINTP1R_L=>XDRYINTP1R, XDRYINTP2R_L=>XDRYINTP2R, &
                                     XDRYINTP1S_L=>XDRYINTP1S, XDRYINTP2S_L=>XDRYINTP2S, &
                                     XDRYINTP1G_L=>XDRYINTP1G, XDRYINTP2G_L=>XDRYINTP2G, &
                                     XRIMINTP1_L=>XRIMINTP1,   XRIMINTP2_L=>XRIMINTP2
    
    USE MODD_PARAM_n,         ONLY: CCLOUD
    
    USE MODD_RAIN_ICE_DESCR_n,ONLY: XCEXVT_I=>XCEXVT, XRTMIN_I=>XRTMIN,                       &
    
                                    XALPHAI_I=>XALPHAI, XNUI_I=>XNUI, XAI_I=>XAI, XBI_I=>XBI, &
                                    XDS_I=>XDS, XDG_I=>XDG,                                   &
                                    XCXS_I=>XCXS, XCXG_I=>XCXG
    
    USE MODD_RAIN_ICE_PARAM_n,ONLY: XCOLIS_I=>XCOLIS, XCOLEXIS_I=>XCOLEXIS,             &
    
                                    XCOLIG_I=>XCOLIG, XCOLEXIG_I=>XCOLEXIG,             &
                                    XCOLSG_I=>XCOLSG, XCOLEXSG_I=>XCOLEXSG,             &
                                    NGAMINC_I=>NGAMINC,                                 &                                
                                    NACCLBDAR_I=>NACCLBDAR, NACCLBDAS_I=>NACCLBDAS,     &
                                    XACCINTP1S_I=>XACCINTP1S, XACCINTP2S_I=>XACCINTP2S, &
                                    XACCINTP1R_I=>XACCINTP1R, XACCINTP2R_I=>XACCINTP2R, &
                                    NDRYLBDAR_I=>NDRYLBDAR, NDRYLBDAS_I=>NDRYLBDAS,     &
                                    NDRYLBDAG_I=>NDRYLBDAG,                             &
                                    XDRYINTP1R_I=>XDRYINTP1R, XDRYINTP2R_I=>XDRYINTP2R, &
                                    XDRYINTP1S_I=>XDRYINTP1S, XDRYINTP2S_I=>XDRYINTP2S, &
                                    XDRYINTP1G_I=>XDRYINTP1G, XDRYINTP2G_I=>XDRYINTP2G, &
                                    XRIMINTP1_I=>XRIMINTP1,   XRIMINTP2_I=>XRIMINTP2
    USE MODD_REF,             ONLY: XTHVREFZ
    !
    #ifdef MNH_PGI
    USE MODE_PACK_PGI
    #endif
    use mode_tools,           only: Countjv
    use mode_budget,          only: Budget_store_add, Budget_store_init, Budget_store_end
    !
    USE MODI_COMPUTE_LAMBDA
    USE MODI_ELEC_COMPUTE_EX
    USE MODI_MOMG
    !
    IMPLICIT NONE
    !
    !
    !*      0.1   Declaration of dummy arguments
    !
    TYPE(DIMPHYEX_t),                     INTENT(IN)    :: D
    !
    INTEGER,                              INTENT(IN)    :: KMICRO
    REAL,                                 INTENT(IN)    :: PTSTEP  ! Double Time step
                                                                   ! (single if cold start)
    INTEGER,                              INTENT(IN)    :: KRR     ! Number of moist variable
    !
    LOGICAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN)   :: ODMICRO ! mask to limit computation
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRHODREF! Reference density
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PZT     ! Temperature (K)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PCIT    ! Pristine ice n.c. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQPIT   ! Positive ion (Nb/kg) at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQNIT   ! Negative ion (Nb/kg) at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQCT    ! Cloud water charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQRT    ! Raindrops charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQIT    ! Pristine ice charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQST    ! Snow/aggregates charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PQGT    ! Graupel charge at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQPIS   ! Positive ion (Nb/kg) source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQNIS   ! Negative ion (Nb/kg) source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQCS    ! Cloud water charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQRS    ! Raindrops charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQIS    ! Pristine ice charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQSS    ! Snow/aggregates charge source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(INOUT) :: PQGS    ! Graupel charge source
    !
    ! microphysics rates common to ICE3 and LIMA
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT),   INTENT(IN)    :: PRVHENI, &  ! heterogeneous nucleation mixing ratio change (HIND for LIMA)
                                                           PRCHONI, &  ! Homogeneous nucleation
                                                           PRRHONG, &  ! Spontaneous freezing mixing ratio change
                                                           PRVDEPS, &  ! Deposition on r_s,
                                                           PRIAGGS, &  ! Aggregation on r_s
                                                           PRIAUTS, &  ! Autoconversion of r_i for r_s production (CNVS for LIMA)
                                                           PRVDEPG, &  ! Deposition on r_g
                                                           PRCAUTR, &  ! Autoconversion of r_c for r_r production
                                                           PRCACCR, &  ! Accretion of r_c for r_r production
                                                           PRREVAV, &  ! Evaporation of r_r
                                                           PRIMLTC, &  ! Cloud ice melting mixing ratio change
                                                           PRCBERI, &  ! Bergeron-Findeisen effect
                                                           PRSMLTG, &  ! Conversion-Melting of the aggregates
                                                           PRRACCSS, PRRACCSG, PRSACCRG, & ! Rain accretion onto the aggregates
                                                           PRCRIMSS, PRCRIMSG, PRSRIMCG, & ! Cloud droplet riming of the aggregates
                                                           PRICFRRG, PRRCFRIG,           & ! Rain contact freezing
                                                           PRCWETG, PRIWETG, PRRWETG, PRSWETG, &  ! Graupel wet growth
                                                           PRCDRYG, PRIDRYG, PRRDRYG, PRSDRYG, &  ! Graupel dry growth
                                                           PRGMLTR     ! Melting of the graupel
    ! microphysics rates specific to ICE3 (knmoments==1)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRCMLTSR,&  ! Cld droplet collection onto aggregates by pos. temp.
                                                                   PRICFRR     ! Rain contact freezing (part of ice crystals converted to rain)
    ! microphysics rates specific to LIMA (knmoments==2)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRVHENC, &  ! Cld droplet formation
                                                                   PRCHINC, &  ! Heterogeneous nucleation of coated IFN
                                                                   PRVHONH, &  ! Nucleation of haze
                                                                   PRRCVRC, &  ! Conversion of small drops into droplets
                                                                   PRICNVI, &  ! Conversion snow --> ice
                                                                   PRVDEPI, &  ! Deposition on r_i
                                                                   PRSHMSI, PRGHMGI, & ! Hallett Mossop for snow and graupel
                                                                   PRICIBU, &  ! Collisional ice breakup
                                                                   PRIRDSF, &  ! Raindrop shattering by freezing
                                                                   PRCCORR2, PRRCORR2, PRICORR2 ! Correction inside LIMA splitting
    ! microphysics rates related to hail (krr == 7, lhail = .t.)
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRWETGH, &  ! Conversion of graupel into hail
                                                                   PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, & ! Dry growth of hail
                                                                   PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, & ! Wet growth of hail
                                                                   PRHMLTR, &                                     ! Melting of hail  
                                                                   PRDRYHG     ! Conversion of hail into graupel
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCCT   ! Cloud droplets conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCRT   ! Raindrops conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCST   ! Snow conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCGT   ! Graupel conc. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PCHT   ! Hail conc. at t
    !
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PRHT   ! Hail m.r. at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(INOUT) :: PRHS   ! Hail m.r. source
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(IN)    :: PQHT   ! Hail charge at t
    REAL, DIMENSION(D%NIT,D%NJT,D%NKT), OPTIONAL, INTENT(INOUT) :: PQHS   ! Hail charge source
    !
    !
    !*      0.2   Declaration of local variables    
    !
    INTEGER :: II, JJ, JL     ! Loop indexes
    INTEGER :: IIB, IIE, &    ! Define the domain
               IJB, IJE, &    ! where the microphysical sources
               IKB, IKE       ! must be computed
    INTEGER                    :: IMICRO   ! nb of pts where r_x > 0
    INTEGER, DIMENSION(KMICRO) :: I1
    INTEGER, DIMENSION(KMICRO) :: II1, II2, II3
    !
    LOGICAL, DIMENSION(KMICRO) :: GMASK    !          Mask 
    !REAL,    DIMENSION(KMICRO) :: ZMASK    !       to reduce
    INTEGER                    :: IGMASK   ! the computation domain
    !
    REAL, DIMENSION(KMICRO) :: ZRHODREF  ! Reference density
    REAL, DIMENSION(KMICRO) :: ZRHODJ    ! RHO times Jacobian
    REAL, DIMENSION(KMICRO) :: ZZT     ! Temperature
    !
    REAL, DIMENSION(KMICRO) :: ZRVT    ! Water vapor m.r. at t 
    REAL, DIMENSION(KMICRO) :: ZRCT    ! Cloud water m.r. at t 
    REAL, DIMENSION(KMICRO) :: ZRRT    ! Rain water m.r. at t 
    REAL, DIMENSION(KMICRO) :: ZRIT    ! Pristine ice m.r. at t
    REAL, DIMENSION(KMICRO) :: ZRST    ! Snow/aggregate m.r. at t
    REAL, DIMENSION(KMICRO) :: ZRGT    ! Graupel m.r. at t
    REAL, DIMENSION(KMICRO) :: ZRHT    ! Hail m.r. at t
    REAL, DIMENSION(KMICRO) :: ZCCT    ! Cloud water conc. at t
    REAL, DIMENSION(KMICRO) :: ZCRT    ! Raindrops conc. at t
    REAL, DIMENSION(KMICRO) :: ZCIT    ! Pristine ice conc. at t
    REAL, DIMENSION(KMICRO) :: ZCST    ! Snow/aggregate conc. at t
    REAL, DIMENSION(KMICRO) :: ZCGT    ! Graupel conc. at t
    REAL, DIMENSION(KMICRO) :: ZCHT    ! Hail conc. at t
    !
    REAL, DIMENSION(KMICRO) :: ZQPIT   ! Positive ion (/kg) at t
    REAL, DIMENSION(KMICRO) :: ZQNIT   ! Negative ion (/kg) at t
    REAL, DIMENSION(KMICRO) :: ZQCT    ! Cloud water charge at t
    REAL, DIMENSION(KMICRO) :: ZQRT    ! Raindrops charge at t
    REAL, DIMENSION(KMICRO) :: ZQIT    ! Pristine ice charge at t
    REAL, DIMENSION(KMICRO) :: ZQST    ! Snow/aggregate charge at t
    REAL, DIMENSION(KMICRO) :: ZQGT    ! Graupel charge at t
    REAL, DIMENSION(KMICRO) :: ZQHT    ! Hail charge at t
    !
    REAL, DIMENSION(KMICRO) :: ZQPIS   ! Positive ion (/kg) source
    REAL, DIMENSION(KMICRO) :: ZQNIS   ! Negative ion (/kg) source
    REAL, DIMENSION(KMICRO) :: ZQCS    ! Cloud water charge source
    REAL, DIMENSION(KMICRO) :: ZQRS    ! Raindrops charge source
    REAL, DIMENSION(KMICRO) :: ZQIS    ! Pristine ice charge source
    REAL, DIMENSION(KMICRO) :: ZQSS    ! Snow/aggregate charge source
    REAL, DIMENSION(KMICRO) :: ZQGS    ! Graupel charge source
    REAL, DIMENSION(KMICRO) :: ZQHS    ! Hail charge source
    !
    REAL, DIMENSION(KMICRO) :: ZLBDAC  ! Slope parameter of the droplets distribution
    REAL, DIMENSION(KMICRO) :: ZLBDAR  ! Slope parameter of the raindrop distribution
    REAL, DIMENSION(KMICRO) :: ZLBDAI  ! Slope parameter of the pristine ice distribution
    REAL, DIMENSION(KMICRO) :: ZLBDAS  ! Slope parameter of the aggregate distribution
    REAL, DIMENSION(KMICRO) :: ZLBDAG  ! Slope parameter of the graupel distribution
    REAL, DIMENSION(KMICRO) :: ZLBDAH  ! Slope parameter of the hail distribution
    !
    REAL, DIMENSION(KMICRO) :: ZECT    !
    REAL, DIMENSION(KMICRO) :: ZERT    !     e_x coef
    REAL, DIMENSION(KMICRO) :: ZEIT    !      in the 
    REAL, DIMENSION(KMICRO) :: ZEST    ! q_x - D_x relation
    REAL, DIMENSION(KMICRO) :: ZEGT    !
    REAL, DIMENSION(KMICRO) :: ZEHT    !
    !
    LOGICAL, DIMENSION(KMICRO,4) :: GELEC  ! Mask for non-inductive charging
    !
    REAL, DIMENSION(:), ALLOCATABLE :: ZDQ, ZDQ_IS, ZDQ_IG, ZDQ_SG
    !
    ! Non-inductive charging process following Gardiner et al. (1995)
    REAL, DIMENSION(:), ALLOCATABLE :: ZDELTALWC ! Gap between LWC and a critical LWC
    REAL, DIMENSION(:), ALLOCATABLE :: ZFT       ! Fct depending on temperature
    !
    ! Non-inductive charging process following Saunders et al. (1991) / EW
    REAL, DIMENSION(:), ALLOCATABLE :: ZEW      ! Effective liquid water content
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK  ! constant B 
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM  !  d_i exponent
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN  !  v_g/s-v_i
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM  !  d_s exponent
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN  !  v_g-v_s
    REAL, DIMENSION(:), ALLOCATABLE :: ZFQIAGGS, ZFQIDRYGBS
    REAL, DIMENSION(:), ALLOCATABLE :: ZLBQSDRYGB1S, ZLBQSDRYGB2S, ZLBQSDRYGB3S
    !
    ! Non-inductive charging process following Saunders and Peck (1998) / RAR
    REAL, DIMENSION(:), ALLOCATABLE :: ZRAR        ! Rime accretion rate
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM_IS  !  d_i exponent
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN_IS  !  v_g/s-v_i
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM_IG  !  d_i exponent
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN_IG  !  v_g/s-v_i
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK_SG  ! constant B 
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM_SG  !  d_s exponent
    REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN_SG  !  v_g-v_s
    !
    ! Inductive charging process (Ziegler et al., 1991)
    REAL, DIMENSION(:), ALLOCATABLE :: ZEFIELDW  ! Vertical component of the electric field
    !
    REAL, DIMENSION(KMICRO) :: ZLIMIT   ! Used to limit the charge separated during NI process 
    REAL, DIMENSION(KMICRO) :: ZQCOLIS  ! Collection efficiency between ice and snow
    REAL, DIMENSION(KMICRO) :: ZQCOLIG  ! Collection efficiency between ice and graupeln
    REAL, DIMENSION(KMICRO) :: ZQCOLSG  ! Collection efficiency between snow and graupeln
    !
    REAL                    :: ZRHO00, ZCOR00   ! Surface reference air density
    REAL, DIMENSION(KMICRO) :: ZRHOCOR  ! Density correction for fallspeed
    !
    INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1, IVEC2                   ! Vectors of indices for interpolation
    REAL,    DIMENSION(:), ALLOCATABLE :: ZVEC1, ZVEC2, ZVEC3            ! Work vectors for interpolation
    REAL,    DIMENSION(:), ALLOCATABLE :: ZVECQ1, ZVECQ2, ZVECQ3, ZVECQ4 ! Work vectors for interpolation
    !
    REAL,    DIMENSION(KMICRO)   :: ZWQ, ZWQ_NI                    !  Work arrays
    REAL,    DIMENSION(KMICRO)   :: ZWQ1, ZWQ2, ZWQ3, ZWQ4         !      for 
    REAL,    DIMENSION(KMICRO,9) :: ZWQ5                           ! charge transfer
    !
    ! variables used to select between common parameters between ICEx and LIMA
    INTEGER :: IMOM_C, IMOM_R, IMOM_I, IMOM_S, IMOM_G, IMOM_H ! number of moments for each hydrometeor
    INTEGER :: IGAMINC,              &
               IACCLBDAR, IACCLBDAS, &
               IDRYLBDAR, IDRYLBDAS, IDRYLBDAG
    !
    REAL    :: ZCEXVT,                                               &
               ZALPHAI, ZNUI, ZAI, ZBI, ZDS, ZDG, ZCXS, ZCXG,        &
               ZCOLIS, ZCOLEXIS, ZCOLIG, ZCOLEXIG, ZCOLSG, ZCOLEXSG, &
               ZACCINTP1S, ZACCINTP2S, ZACCINTP1R, ZACCINTP2R,       &
               ZDRYINTP1R, ZDRYINTP2R, ZDRYINTP1S, ZDRYINTP2S,       &
               ZDRYINTP1G, ZDRYINTP2G,                               &
               ZRIMINTP1,  ZRIMINTP2
    REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN
    !
    ! microphysical tendencies have to be transformed in 1D arrays
    REAL, DIMENSION(KMICRO) :: ZRVHENI, ZRCHONI, ZRRHONG, ZRVDEPS, ZRIAGGS,      &
                               ZRIAUTS, ZRVDEPG, ZRCAUTR, ZRCACCR, ZRREVAV,      &
                               ZRIMLTC, ZRCBERI, ZRSMLTG, ZRRACCSS, ZRRACCSG,    &
                               ZRSACCRG, ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRICFRRG, &
                               ZRRCFRIG, ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG,     &
                               ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, ZRGMLTR
    ! optional microphysical tendencies
    REAL, DIMENSION(:), ALLOCATABLE :: ZRCMLTSR, ZRICFRR, ZRVHENC, ZRCHINC, ZRVHONH,     &
                                       ZRRCVRC, ZRICNVI, ZRVDEPI, ZRSHMSI, ZRGHMGI,      &
                                       ZRICIBU, ZRIRDSF, ZRCCORR2, ZRRCORR2, ZRICORR2,   &
                                       ZRWETGH, ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH,      &
                                       ZRRWETH, ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH,      &
                                       ZRGDRYH, ZRHMLTR, ZRDRYHG 
    !
    !------------------------------------------------------------------
    !
    !*      1.    INITIALIZATIONS
    !             ---------------
    !
    !*      1.1   compute the loop bounds
    !
    IIB = D%NIB
    IIE = D%NIE
    IJB = D%NJB
    IJE = D%NJE
    IKB = D%NKB
    IKE = D%NKE
    !
    !
    !*      1.2   select parameters between ICEx and LIMA
    !
    IF (CCLOUD(1:3) == 'ICE') THEN
      ZCEXVT = XCEXVT_I
      IMOM_C = 1
      IMOM_R = 1
      IMOM_I = 2 ! Ni is diagnostic and always available
      IMOM_S = 1
      IMOM_G = 1
      IF (KRR == 7) THEN
        IMOM_H = 1
      ELSE
        IMOM_H = 0
      END IF
    ELSE IF (CCLOUD == 'LIMA') THEN
      ZCEXVT = XCEXVT_L
      IMOM_C = NMOM_C
      IMOM_R = NMOM_R
      IMOM_I = 2 ! Ni is diagnostic and always available
      IMOM_S = NMOM_S
      IMOM_G = NMOM_G
      IMOM_H = NMOM_H
    END IF
    !
    ZRHO00 = XP00 / (XRD * XTHVREFZ(IKB))
    ZCOR00 = ZRHO00**ZCEXVT
    !
    IF (LINDUCTIVE) ALLOCATE (ZEFIELDW(KMICRO))
    !
    !
    !*      1.3   packing
    !
    !  optimization by looking for locations where
    !  the microphysical fields are larger than a minimal value only !!!
    !
    IF (KMICRO >= 0) THEN
      IMICRO = COUNTJV(ODMICRO(:,:,:), II1(:), II2(:), II3(:))
      !
      ! some microphysical tendencies are optional: the corresponding 1D arrays must be allocated
      IF (CCLOUD(1:3) == 'ICE') THEN  ! ICE3 scheme
        ALLOCATE(ZRCMLTSR(IMICRO))
        ALLOCATE(ZRICFRR(IMICRO))
      END IF
      IF (CCLOUD == 'LIMA') THEN  ! LIMA scheme
        ALLOCATE(ZRVHENC(IMICRO))
        ALLOCATE(ZRCHINC(IMICRO))
        ALLOCATE(ZRVHONH(IMICRO))
        ALLOCATE(ZRRCVRC(IMICRO))
        ALLOCATE(ZRICNVI(IMICRO))
        ALLOCATE(ZRVDEPI(IMICRO))
        ALLOCATE(ZRSHMSI(IMICRO))
        ALLOCATE(ZRGHMGI(IMICRO))
        ALLOCATE(ZRICIBU(IMICRO))
        ALLOCATE(ZRIRDSF(IMICRO))
        ALLOCATE(ZRCCORR2(IMICRO))
        ALLOCATE(ZRRCORR2(IMICRO))
        ALLOCATE(ZRICORR2(IMICRO))
      END IF
      IF (KRR == 7) THEN ! hail activated
        ALLOCATE(ZRWETGH(IMICRO))
        ALLOCATE(ZRCWETH(IMICRO))
        ALLOCATE(ZRIWETH(IMICRO))
        ALLOCATE(ZRSWETH(IMICRO))
        ALLOCATE(ZRGWETH(IMICRO))
        ALLOCATE(ZRRWETH(IMICRO))
        ALLOCATE(ZRCDRYH(IMICRO))
        ALLOCATE(ZRRDRYH(IMICRO))
        ALLOCATE(ZRIDRYH(IMICRO))
        ALLOCATE(ZRSDRYH(IMICRO))
        ALLOCATE(ZRGDRYH(IMICRO))
        ALLOCATE(ZRHMLTR(IMICRO))
        ALLOCATE(ZRDRYHG(IMICRO))
      END IF
      !
      DO JL = 1, IMICRO
        ZZT(JL)      = PZT(II1(JL),II2(JL),II3(JL))
        ZRHODREF(JL) = PRHODREF(II1(JL),II2(JL),II3(JL))
        ZRHOCOR(JL)  = (ZRHO00 / ZRHODREF(JL))**ZCEXVT
        ZRHODJ(JL)   = PRHODJ(II1(JL),II2(JL),II3(JL))
        !
        ZCIT(JL)     = PCIT(II1(JL),II2(JL),II3(JL))
        IF (IMOM_C == 2) ZCCT(JL) = PCCT(II1(JL),II2(JL),II3(JL))
        IF (IMOM_R == 2) ZCRT(JL) = PCRT(II1(JL),II2(JL),II3(JL))
        IF (IMOM_S == 2) ZCST(JL) = PCST(II1(JL),II2(JL),II3(JL))
        IF (IMOM_G == 2) ZCGT(JL) = PCGT(II1(JL),II2(JL),II3(JL))
        IF (IMOM_H == 2) ZCHT(JL) = PCHT(II1(JL),II2(JL),II3(JL))
    
        IF (IMOM_C == 1) ZCCT(JL) = 0.
        IF (IMOM_R == 1) ZCRT(JL) = 0.
        IF (IMOM_S == 1) ZCST(JL) = 0.
        IF (IMOM_G == 1) ZCGT(JL) = 0.
        IF (IMOM_H == 1) ZCHT(JL) = 0.
    
    594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
        !
        ZRVT(JL)  = PRVT(II1(JL),II2(JL),II3(JL))
        ZRCT(JL)  = PRCT(II1(JL),II2(JL),II3(JL))
        ZRRT(JL)  = PRRT(II1(JL),II2(JL),II3(JL))
        ZRIT(JL)  = PRIT(II1(JL),II2(JL),II3(JL))
        ZRST(JL)  = PRST(II1(JL),II2(JL),II3(JL))
        ZRGT(JL)  = PRGT(II1(JL),II2(JL),II3(JL))
        IF (KRR == 7) ZRHT(JL) = PRHT(II1(JL),II2(JL),II3(JL))
        !
        ZQPIT(JL) = PQPIT(II1(JL),II2(JL),II3(JL))
        ZQNIT(JL) = PQNIT(II1(JL),II2(JL),II3(JL))
        ZQCT(JL)  = PQCT(II1(JL),II2(JL),II3(JL))
        ZQRT(JL)  = PQRT(II1(JL),II2(JL),II3(JL))
        ZQIT(JL)  = PQIT(II1(JL),II2(JL),II3(JL))
        ZQST(JL)  = PQST(II1(JL),II2(JL),II3(JL))
        ZQGT(JL)  = PQGT(II1(JL),II2(JL),II3(JL))
        IF (KRR == 7) ZQHT(JL) = PQHT(II1(JL),II2(JL),II3(JL))
        !
        ZQPIS(JL) = PQPIS(II1(JL), II2(JL), II3(JL))
        ZQNIS(JL) = PQNIS(II1(JL), II2(JL), II3(JL))
        ZQCS(JL)  = PQCS(II1(JL), II2(JL), II3(JL))
        ZQRS(JL)  = PQRS(II1(JL), II2(JL), II3(JL))
        ZQIS(JL)  = PQIS(II1(JL), II2(JL), II3(JL))
        ZQSS(JL)  = PQSS(II1(JL), II2(JL), II3(JL))
        ZQGS(JL)  = PQGS(II1(JL), II2(JL), II3(JL))
        IF (KRR == 7) ZQHS(JL) = PQHS(II1(JL), II2(JL), II3(JL))
        !
        IF (LINDUCTIVE) ZEFIELDW(JL) = XEFIELDW(II1(JL), II2(JL), II3(JL))
        !
        ! microphysical tendencies
        ZRVHENI(JL) = PRVHENI(II1(JL), II2(JL), II3(JL))
        ZRRHONG(JL) = PRRHONG(II1(JL), II2(JL), II3(JL))
        ZRIMLTC(JL) = PRIMLTC(II1(JL), II2(JL), II3(JL))
        ZRCHONI(JL) = PRCHONI(II1(JL), II2(JL), II3(JL))
        ZRVDEPS(JL) = PRVDEPS(II1(JL), II2(JL), II3(JL))
        ZRIAGGS(JL) = PRIAGGS(II1(JL), II2(JL), II3(JL))
        ZRIAUTS(JL) = PRIAUTS(II1(JL), II2(JL), II3(JL))
        ZRVDEPG(JL) = PRVDEPG(II1(JL), II2(JL), II3(JL))
        ZRCAUTR(JL) = PRCAUTR(II1(JL), II2(JL), II3(JL))
        ZRCACCR(JL) = PRCACCR(II1(JL), II2(JL), II3(JL))
        ZRREVAV(JL) = PRREVAV(II1(JL), II2(JL), II3(JL))
        ZRCRIMSS(JL) = PRCRIMSS(II1(JL), II2(JL), II3(JL))
        ZRCRIMSG(JL) = PRCRIMSG(II1(JL), II2(JL), II3(JL))
        ZRSRIMCG(JL) = PRSRIMCG(II1(JL), II2(JL), II3(JL))
        ZRRACCSS(JL) = PRRACCSS(II1(JL), II2(JL), II3(JL))
        ZRRACCSG(JL) = PRRACCSG(II1(JL), II2(JL), II3(JL))
        ZRSACCRG(JL) = PRSACCRG(II1(JL), II2(JL), II3(JL))
        ZRSMLTG(JL) = PRSMLTG(II1(JL), II2(JL), II3(JL))
        ZRICFRRG(JL) = PRICFRRG(II1(JL), II2(JL), II3(JL))
        ZRRCFRIG(JL) = PRRCFRIG(II1(JL), II2(JL), II3(JL))
        ZRCWETG(JL) = PRCWETG(II1(JL), II2(JL), II3(JL))
        ZRIWETG(JL) = PRIWETG(II1(JL), II2(JL), II3(JL))
        ZRRWETG(JL) = PRRWETG(II1(JL), II2(JL), II3(JL))
        ZRSWETG(JL) = PRSWETG(II1(JL), II2(JL), II3(JL))
        ZRCDRYG(JL) = PRCDRYG(II1(JL), II2(JL), II3(JL))
        ZRIDRYG(JL) = PRIDRYG(II1(JL), II2(JL), II3(JL))
        ZRRDRYG(JL) = PRRDRYG(II1(JL), II2(JL), II3(JL))
        ZRSDRYG(JL) = PRSDRYG(II1(JL), II2(JL), II3(JL))
        ZRGMLTR(JL) = PRGMLTR(II1(JL), II2(JL), II3(JL))
        ZRCBERI(JL) = PRCBERI(II1(JL), II2(JL), II3(JL))
        IF (CCLOUD(1:3) == 'ICE') THEN
          ZRCMLTSR(JL) = PRCMLTSR(II1(JL), II2(JL), II3(JL))
          ZRICFRR(JL)  = PRICFRR(II1(JL), II2(JL), II3(JL))
        END IF
        IF (CCLOUD == 'LIMA') THEN
          ZCST(JL)    = PCST(II1(JL), II2(JL), II3(JL))
          ZCGT(JL)    = PCGT(II1(JL), II2(JL), II3(JL))
          ZRVHENC(JL) = PRVHENC(II1(JL), II2(JL), II3(JL))
          ZRCHINC(JL) = PRCHINC(II1(JL), II2(JL), II3(JL))
          ZRVHONH(JL) = PRVHONH(II1(JL), II2(JL), II3(JL))
          ZRRCVRC(JL) = PRRCVRC(II1(JL), II2(JL), II3(JL))
          ZRICNVI(JL) = PRICNVI(II1(JL), II2(JL), II3(JL))
          ZRVDEPI(JL) = PRVDEPI(II1(JL), II2(JL), II3(JL))
          ZRSHMSI(JL) = PRSHMSI(II1(JL), II2(JL), II3(JL))
          ZRGHMGI(JL) = PRGHMGI(II1(JL), II2(JL), II3(JL))
          ZRICIBU(JL) = PRICIBU(II1(JL), II2(JL), II3(JL))
          ZRIRDSF(JL) = PRIRDSF(II1(JL), II2(JL), II3(JL))
          ZRCCORR2(JL) = PRCCORR2(II1(JL), II2(JL), II3(JL))
          ZRRCORR2(JL) = PRRCORR2(II1(JL), II2(JL), II3(JL))
          ZRICORR2(JL) = PRICORR2(II1(JL), II2(JL), II3(JL))
        END IF
        IF (KRR == 7) THEN
          ZCHT(JL)    = PCHT(II1(JL), II2(JL), II3(JL))
          ZRWETGH(JL) = PRWETGH(II1(JL), II2(JL), II3(JL))
          ZRCWETH(JL) = PRCWETH(II1(JL), II2(JL), II3(JL))
          ZRIWETH(JL) = PRIWETH(II1(JL), II2(JL), II3(JL))
          ZRSWETH(JL) = PRSWETH(II1(JL), II2(JL), II3(JL))
          ZRGWETH(JL) = PRGWETH(II1(JL), II2(JL), II3(JL))
          ZRRWETH(JL) = PRRWETH(II1(JL), II2(JL), II3(JL))
          ZRCDRYH(JL) = PRCDRYH(II1(JL), II2(JL), II3(JL))
          ZRRDRYH(JL) = PRRDRYH(II1(JL), II2(JL), II3(JL))
          ZRIDRYH(JL) = PRIDRYH(II1(JL), II2(JL), II3(JL))
          ZRSDRYH(JL) = PRSDRYH(II1(JL), II2(JL), II3(JL))
          ZRGDRYH(JL) = PRGDRYH(II1(JL), II2(JL), II3(JL))
          ZRHMLTR(JL) = PRHMLTR(II1(JL), II2(JL), II3(JL))
          ZRDRYHG(JL) = PRDRYHG(II1(JL), II2(JL), II3(JL))
        END IF
      END DO
      !
      ZRHOCOR(:) = (ZRHO00 / ZRHODREF(:))**ZCEXVT
    !
    !
    !*      1.4   allocations for the non-inductive parameterizations
    !
      IF (CNI_CHARGING == 'GARDI') THEN
        ALLOCATE( ZDELTALWC(KMICRO) )
        ALLOCATE( ZFT(KMICRO) )
      END IF
    !
      IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. &
          CNI_CHARGING == 'TAKAH' .OR.                              &
          CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2' .OR. &
          CNI_CHARGING == 'TEEWC' .OR. CNI_CHARGING == 'TERAR') THEN
        ALLOCATE( ZEW(KMICRO) )
      END IF
    !
      IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. &
          CNI_CHARGING == 'TAKAH' .OR. CNI_CHARGING == 'TEEWC') THEN
        ALLOCATE( ZDQ(KMICRO) )
      END IF
    !
      IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. &
          CNI_CHARGING == 'TEEWC' )  THEN
        ALLOCATE( ZSAUNSK(KMICRO) )
        ALLOCATE( ZSAUNIM(KMICRO) )
        ALLOCATE( ZSAUNIN(KMICRO) )
        ALLOCATE( ZSAUNSM(KMICRO) )
        ALLOCATE( ZSAUNSN(KMICRO) )
      END IF
    !
      IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. &
          CNI_CHARGING == 'SAP98' .OR.                              &
          CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2' .OR. &
          CNI_CHARGING == 'TEEWC' .OR. CNI_CHARGING == 'TERAR') THEN
        ALLOCATE( ZFQIAGGS(KMICRO) )
        ALLOCATE( ZFQIDRYGBS(KMICRO) )
        ALLOCATE( ZLBQSDRYGB1S(KMICRO) )
        ALLOCATE( ZLBQSDRYGB2S(KMICRO) )
        ALLOCATE( ZLBQSDRYGB3S(KMICRO) )
      END IF
    !
      IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'TERAR' .OR. &
          CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2') THEN
        ALLOCATE( ZRAR(KMICRO) )
        ALLOCATE( ZDQ_IS(KMICRO) )
        ALLOCATE( ZDQ_IG(KMICRO) )
        ALLOCATE( ZDQ_SG(KMICRO) )
        ALLOCATE( ZSAUNIM_IS(KMICRO) )
        ALLOCATE( ZSAUNIN_IS(KMICRO) )
        ALLOCATE( ZSAUNIM_IG(KMICRO) )
        ALLOCATE( ZSAUNIN_IG(KMICRO) )
        ALLOCATE( ZSAUNSK_SG(KMICRO) )
        ALLOCATE( ZSAUNSM_SG(KMICRO) )
        ALLOCATE( ZSAUNSN_SG(KMICRO) )
      END IF
    !
    !
    !*      1.5   select parameters between ICEx and LIMA
    !
      ALLOCATE(ZRTMIN(KRR))
      IF (CCLOUD(1:3) == 'ICE') THEN
    ! in ini_rain_ice, xrtmin is initialized with dimension 6 (hail not activated) or 7 (hail activated)
        ZRTMIN(1:KRR) = XRTMIN_I(1:KRR)
        !
        ZALPHAI = XALPHAI_I
        ZNUI = XNUI_I
        ZAI = XAI_I
        ZBI = XBI_I
        ZDS = XDS_I
        ZDG = XDG_I
        ZCXS = XCXS_I
        ZCXG = XCXG_I
        !
        ZCOLIS   = XCOLIS_I
        ZCOLEXIS = XCOLEXIS_I
        ZCOLIG   = XCOLIG_I
        ZCOLEXIG = XCOLEXIG_I
        ZCOLSG   = XCOLSG_I
        ZCOLEXSG = XCOLEXSG_I
        !
        IGAMINC = NGAMINC_I
        !
        IACCLBDAR = NACCLBDAR_I
        IACCLBDAS = NACCLBDAS_I
        ZACCINTP1S = XACCINTP1S_I
        ZACCINTP2S = XACCINTP2S_I
        ZACCINTP1R = XACCINTP1R_I
        ZACCINTP2R = XACCINTP2R_I
        ! 
        IDRYLBDAR = NDRYLBDAR_I
        IDRYLBDAS = NDRYLBDAS_I
        IDRYLBDAG = NDRYLBDAG_I
        ZDRYINTP1R = XDRYINTP1R_I
        ZDRYINTP2R = XDRYINTP2R_I
        ZDRYINTP1S = XDRYINTP1S_I
        ZDRYINTP2S = XDRYINTP2S_I
        ZDRYINTP1G = XDRYINTP1G_I
        ZDRYINTP2G = XDRYINTP2G_I
        !
        ZRIMINTP1 = XRIMINTP1_I
        ZRIMINTP2 = XRIMINTP2_I
        !
      ELSE IF (CCLOUD == 'LIMA') THEN
    ! in ini_lima, xrtmin is initialized with dimension 7
        ZRTMIN(1:KRR) = XRTMIN_L(1:KRR)
        !
        ZALPHAI = XALPHAI_L
        ZNUI = XNUI_L
        ZAI = XAI_L
        ZBI = XBI_L
        ZDS = XDS_L
        ZDG = XDG_L
        ZCXS = XCXS_L
        ZCXG = XCXG_L
        !
        ZCOLIS   = 0.25  ! variable not defined in LIMA, the value of ICEx is used 
        ZCOLEXIS = XCOLEXIS_L
        ZCOLIG   = XCOLIG_L
        ZCOLEXIG = XCOLEXIG_L
        ZCOLSG   = XCOLSG_L
        ZCOLEXSG = XCOLEXSG_L
        !
        IGAMINC = NGAMINC_L
        !
        IACCLBDAR = NACCLBDAR_L
        IACCLBDAS = NACCLBDAS_L
        ZACCINTP1S = XACCINTP1S_L
        ZACCINTP2S = XACCINTP2S_L
        ZACCINTP1R = XACCINTP1R_L
        ZACCINTP2R = XACCINTP2R_L
        ! 
        IDRYLBDAR = NDRYLBDAR_L
        IDRYLBDAS = NDRYLBDAS_L
        IDRYLBDAG = NDRYLBDAG_L
        ZDRYINTP1R = XDRYINTP1R_L
        ZDRYINTP2R = XDRYINTP2R_L
        ZDRYINTP1S = XDRYINTP1S_L
        ZDRYINTP2S = XDRYINTP2S_L
        ZDRYINTP1G = XDRYINTP1G_L
        ZDRYINTP2G = XDRYINTP2G_L
        !
        ZRIMINTP1 = XRIMINTP1_L
        ZRIMINTP2 = XRIMINTP2_L
      END IF
    !
    !
    !*      1.6   update the slope parameter of the distribution
    !*            and compute N_x if necessary
    !
      IF (CCLOUD(1:3) == 'ICE') ZCCT(:) = 0.
      CALL COMPUTE_LAMBDA(2, IMOM_C, KMICRO, ZRHODREF, ZRTMIN(2), ZRCT, ZCCT, ZLBDAC)
      CALL COMPUTE_LAMBDA(3, IMOM_R, KMICRO, ZRHODREF, ZRTMIN(3), ZRRT, ZCRT, ZLBDAR)
      CALL COMPUTE_LAMBDA(4, IMOM_I, KMICRO, ZRHODREF, ZRTMIN(4), ZRIT, ZCIT, ZLBDAI)
      CALL COMPUTE_LAMBDA(5, IMOM_S, KMICRO, ZRHODREF, ZRTMIN(5), ZRST, ZCST, ZLBDAS)
      CALL COMPUTE_LAMBDA(6, IMOM_G, KMICRO, ZRHODREF, ZRTMIN(6), ZRGT, ZCGT, ZLBDAG)
      IF (KRR == 7) CALL COMPUTE_LAMBDA(7, IMOM_H, KMICRO, ZRHODREF, ZRTMIN(7), ZRHT, ZCHT, ZLBDAH)
    !
    !
    !*      1.7   update the parameter e in the charge-diameter relationship
    !
    ! Compute e_x at time t
      IF (CCLOUD == 'LIMA') THEN
        CALL ELEC_COMPUTE_EX(2, IMOM_C, KMICRO, 1., ZRHODREF, ZRTMIN(2), ZRCT, ZQCT, ZECT, PLBDX=ZLBDAC, PCX=ZCCT)
        CALL ELEC_COMPUTE_EX(3, IMOM_R, KMICRO, 1., ZRHODREF, ZRTMIN(3), ZRRT, ZQRT, ZERT, PLBDX=ZLBDAR, PCX=ZCRT)
        CALL ELEC_COMPUTE_EX(4, IMOM_I, KMICRO, 1., ZRHODREF, ZRTMIN(4), ZRIT, ZQIT, ZEIT, PLBDX=ZLBDAI, PCX=ZCIT)
        CALL ELEC_COMPUTE_EX(5, IMOM_S, KMICRO, 1., ZRHODREF, ZRTMIN(5), ZRST, ZQST, ZEST, PLBDX=ZLBDAS, PCX=ZCST)
        CALL ELEC_COMPUTE_EX(6, IMOM_G, KMICRO, 1., ZRHODREF, ZRTMIN(6), ZRGT, ZQGT, ZEGT, PLBDX=ZLBDAG, PCX=ZCGT)
        IF (KRR == 7) CALL ELEC_COMPUTE_EX(7, IMOM_H, KMICRO, 1., ZRHODREF, ZRTMIN(7), ZRHT, ZQHT, ZEHT, PLBDX=ZLBDAH, PCX=ZCHT)
      ELSE IF (CCLOUD(1:3) == 'ICE') THEN
        CALL ELEC_COMPUTE_EX(2, 1, KMICRO, 1., ZRHODREF, ZRTMIN(2), ZRCT, ZQCT, ZECT)
        CALL ELEC_COMPUTE_EX(3, 1, KMICRO, 1., ZRHODREF, ZRTMIN(3), ZRRT, ZQRT, ZERT, PLBDX=ZLBDAR)
        CALL ELEC_COMPUTE_EX(4, 1, KMICRO, 1., ZRHODREF, ZRTMIN(4), ZRIT, ZQIT, ZEIT, PCX=ZCIT)
        CALL ELEC_COMPUTE_EX(5, 1, KMICRO, 1., ZRHODREF, ZRTMIN(5), ZRST, ZQST, ZEST, PLBDX=ZLBDAS)
        CALL ELEC_COMPUTE_EX(6, 1, KMICRO, 1., ZRHODREF, ZRTMIN(6), ZRGT, ZQGT, ZEGT, PLBDX=ZLBDAG)
        IF (KRR == 7) CALL ELEC_COMPUTE_EX(7, 1, KMICRO, 1., ZRHODREF, ZRTMIN(7), ZRHT, ZQHT, ZEHT, PLBDX=ZLBDAH)
      END IF
    !
    !
    !*      1.8   initialization for the non-inductive charging process
    !
      SELECT CASE (CNI_CHARGING)
        ! Initialization for the parameterization of Gardiner et al. (1995)
        CASE ('GARDI')
          CALL ELEC_INIT_NOIND_GARDI()
          ! Save the effective water content
          DO JL = 1, KMICRO
            XEW(II1(JL),II2(JL),II3(JL)) = ZDELTALWC(JL) ! 
          END DO      
        !
        ! Initialization for the parameterizations of Saunders et al. (1991)
        ! with and without anomalies, and Tsenova and Mitzeva (2009)
        CASE ('SAUN1', 'SAUN2', 'TEEWC')
          CALL ELEC_INIT_NOIND_EWC()
          ! Save the effective water content
          DO JL = 1, KMICRO
            XEW(II1(JL),II2(JL),II3(JL)) = ZEW(JL) ! g/m3
          END DO
        !
        ! Initialization for the parameterizations of Saunders and Peck (1998), 
        ! Brooks et al. (1997) and Tsenova and Mitzeva (2011)
        CASE ('SAP98', 'BSMP1', 'BSMP2', 'TERAR')
          CALL ELEC_INIT_NOIND_RAR()
          ! Save the rime accretion rate (not recorded properly: 3 different RAR are computed !!!)
          DO JL = 1, KMICRO
            XEW(II1(JL),II2(JL),II3(JL)) = ZRAR(JL) ! g/m3
          END DO
        !
        ! Initialization for the parameterization of Takahashi (1978)
        CASE ('TAKAH')
          CALL ELEC_INIT_NOIND_TAKAH()
          ! Save the effective water content
          DO JL = 1, KMICRO
            XEW(II1(JL),II2(JL),II3(JL)) = ZEW(JL) ! g/m3
          END DO
      END SELECT
    !
    !
    !------------------------------------------------------------------
    !
    !*      2.    COMPUTE THE SLOW COLD PROCESS SOURCES
    !             -------------------------------------
    !
    !*      2.1   heterogeneous nucleation
    !
    ! --> rien n'est fait pour l'elec pour le moment
    ! ICE3/4 : rvheni/rvhind
    ! LIMA : rvhenc, rchinc, rvhonh
    !
    !
    !*      2.2   spontaneous freezing (rhong)
    !
      if ( lbudget_sv ) then
        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'SFR', &
                                Unpack( zqrs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SFR', &
                                Unpack( zqgs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
      end if
    !  
      ZWQ(:) = 0.
      WHERE (ZRRHONG(:) > 0. .AND. &
             ZRRT(:) > XRTMIN_ELEC(3) .AND. ABS(ZQRT(:)) > XQTMIN(3))
        ZWQ(:) = ZQRS(:)
        !
        ZQGS(:) = ZQGS(:) + ZQRS(:)
        ZQRS(:) = 0.
      END WHERE
    !
      if ( lbudget_sv ) then
        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'SFR', &
                               Unpack( zqrs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SFR', &
                               Unpack( zqgs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
      end if
    !
    !
    !*      2.3   cloud ice melting (rimltc)
    !
      if ( lbudget_sv ) then
        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'IMLT', &
                                Unpack( zqcs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'IMLT', &
                                Unpack( zqis(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
      end if
    !
      WHERE (ZRIMLTC(:) > 0.)
        ZQCS(:) = ZQCS(:) + ZQIS(:)
        ZQIS(:) = 0.
      END WHERE
    !
      if ( lbudget_sv ) then
        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'IMLT', &
                               Unpack( zqcs(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'IMLT', &
                               Unpack( zqis(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
      end if
    !
    !
    !*      2.4   riming-conversion of the large sized aggregates into graupel ???
    ! ancienne param => on calcule plutot cette tendance un peu plus loin ?
    !
    !
    !*      2.5   homogeneous nucleation (rchoni)
    !
    ! CB : traitement different entre ice3 et lima --> a modifier eventuellement
    !
      ZWQ(:) = 0.
      WHERE (ZRCHONI(:) > 0. .AND.           &
             ZRCT(:) > XRTMIN_ELEC(2) .AND.  &
             ABS(ZQCT(:)) > XQTMIN(2) .AND. ABS(ZECT(:)) > XECMIN)
        ZWQ(:) = XQHON * ZECT(:) * ZRCHONI(:)
        ZWQ(:) = SIGN( MIN( ABS(ZQCT(:)/PTSTEP),ABS(ZWQ(:)) ),ZQCS(:) )
        !
        ZQIS(:) = ZQIS(:) + ZWQ(:)
        ZQCS(:) = ZQCS(:) - ZWQ(:)
      END WHERE
    !
      if ( lbudget_sv ) then
        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'HON', &
                               Unpack( -zwq(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'HON', &
                               Unpack(  zwq(:) * zrhodj(:), mask = odmicro(:, :, :), field = 0. ) )
      end if
    !
    !
    !*      2.6   deposition on snow/aggregates (rvdeps)
    !
      if ( lbudget_sv ) then