From dce38acf08df9a998eb9199f803b8d954bf202a0 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 9 Mar 2020 17:09:58 +0100
Subject: [PATCH] Philippe 09/03/2020: budgets: add missing budgets for
 electricity

---
 src/MNH/ini_budget.f90    | 119 ++++++++++++++++++++++++++++++++++++++
 src/MNH/modd_budget.f90   |  36 ++++++++++--
 src/MNH/modn_budget.f90   |  32 +++++-----
 src/MNH/rain_ice_elec.f90 |  54 +++++++++++++++++
 4 files changed, 221 insertions(+), 20 deletions(-)

diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 3cebf2ed4..c226c7121 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -105,6 +105,7 @@ contains
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 15/11/2019: remove unused CBURECORD variable
 !  P. Wautelet 02-03/2020: use the new data structures and subroutines for budgets
+!  P .Wautelet 09/03/2020: add missing budgets for electricity
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -3105,6 +3106,11 @@ SV_BUDGETS: do jsv = 1, ksv
 
         case ( 2 ) SV_ELEC
           ! volumetric charge of cloud droplets
+          gcond = .true.
+          tzsource%cmnhname  = 'HON'
+          tzsource%clongname = 'homogeneous nucleation'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nhonqc )
+
           gcond = lwarm_ice
           tzsource%cmnhname  = 'AUTO'
           tzsource%clongname = 'autoconversion into rain'
@@ -3130,6 +3136,16 @@ SV_BUDGETS: do jsv = 1, ksv
           tzsource%clongname = 'dry growth of graupel'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ndrygqc )
 
+          gcond = linductive
+          tzsource%cmnhname  = 'INCG'
+          tzsource%clongname = 'inductive charge transfer between cloud droplets and graupel'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nincgqc )
+
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'WETH'
+          tzsource%clongname = 'wet growth of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqc )
+
           gcond = .true.
           tzsource%cmnhname  = 'IMLT'
           tzsource%clongname = 'ice melting'
@@ -3158,6 +3174,11 @@ SV_BUDGETS: do jsv = 1, ksv
 
         case ( 3 ) SV_ELEC
           ! volumetric charge of rain drops
+          gcond = .true.
+          tzsource%cmnhname  = 'SFR'
+          tzsource%clongname = 'spontaneous freezing'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nsfrqr )
+
           gcond = lwarm_ice
           tzsource%cmnhname  = 'AUTO'
           tzsource%clongname = 'autoconversion into rain'
@@ -3198,6 +3219,16 @@ SV_BUDGETS: do jsv = 1, ksv
           tzsource%clongname = 'graupel melting'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ngmltqr )
 
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'WETH'
+          tzsource%clongname = 'wet growth of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqr )
+
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'HMLT'
+          tzsource%clongname = 'melting of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nhmltqr )
+
           gcond = .true.
           tzsource%cmnhname  = 'SEDI'
           tzsource%clongname = 'sedimentation'
@@ -3210,6 +3241,11 @@ SV_BUDGETS: do jsv = 1, ksv
 
         case ( 4 ) SV_ELEC
           ! volumetric charge of ice crystals
+          gcond = .true.
+          tzsource%cmnhname  = 'HON'
+          tzsource%clongname = 'homogeneous nucleation'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nhonqi )
+
           gcond = .true.
           tzsource%cmnhname  = 'AGGS'
           tzsource%clongname = 'aggregation of snow'
@@ -3235,6 +3271,11 @@ SV_BUDGETS: do jsv = 1, ksv
           tzsource%clongname = 'dry growth of graupel'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ndrygqi )
 
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'WETH'
+          tzsource%clongname = 'wet growth of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqi )
+
           gcond = .true.
           tzsource%cmnhname  = 'IMLT'
           tzsource%clongname = 'ice melting'
@@ -3313,6 +3354,11 @@ SV_BUDGETS: do jsv = 1, ksv
           tzsource%clongname = 'non-inductive charge separation due to ice-snow collisions'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nniisqs )
 
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'WETH'
+          tzsource%clongname = 'wet growth of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqs )
+
           gcond = .true.
           tzsource%cmnhname  = 'SEDI'
           tzsource%clongname = 'sedimentation'
@@ -3326,6 +3372,11 @@ SV_BUDGETS: do jsv = 1, ksv
 
         case ( 6 ) SV_ELEC
           ! volumetric charge of graupel
+          gcond = .true.
+          tzsource%cmnhname  = 'SFR'
+          tzsource%clongname = 'spontaneous freezing'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nsfrqg )
+
           gcond = .true.
           tzsource%cmnhname  = 'DEPG'
           tzsource%clongname = 'deposition on graupel'
@@ -3361,11 +3412,21 @@ SV_BUDGETS: do jsv = 1, ksv
           tzsource%clongname = 'dry growth of graupel'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ndrygqg )
 
+          gcond = linductive
+          tzsource%cmnhname  = 'INCG'
+          tzsource%clongname = 'inductive charge transfer between cloud droplets and graupel'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nincgqg )
+
           gcond = .true.
           tzsource%cmnhname  = 'GMLT'
           tzsource%clongname = 'graupel melting'
           call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ngmltqg )
 
+          gcond = hcloud == 'ICE4'
+          tzsource%cmnhname  = 'WETH'
+          tzsource%clongname = 'wet growth of hail'
+          call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqg )
+
           gcond = .true.
           tzsource%cmnhname  = 'SEDI'
           tzsource%clongname = 'sedimentation'
@@ -3378,6 +3439,64 @@ SV_BUDGETS: do jsv = 1, ksv
 
 
         case ( 7: ) SV_ELEC
+          if ( ( hcloud == 'ICE4' .and. ( jsv - nsv_elecbeg + 1 ) == 7 ) ) then
+            ! volumetric charge of hail
+            gcond = .true.
+            tzsource%cmnhname  = 'WETG'
+            tzsource%clongname = 'wet growth of graupel'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwetgqh )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'WETH'
+            tzsource%clongname = 'wet growth of hail'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nwethqh )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'HMLT'
+            tzsource%clongname = 'melting of hail'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nhmltqh )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'SEDI'
+            tzsource%clongname = 'sedimentation'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nsediqh )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'NEUT'
+            tzsource%clongname = 'NEUT'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneutqh )
+
+          else if (      ( hcloud == 'ICE3' .and. ( jsv - nsv_elecbeg + 1 ) == 7 ) &
+                    .or. ( hcloud == 'ICE4' .and. ( jsv - nsv_elecbeg + 1 ) == 8 ) ) then
+            ! Negative ions (NSV_ELECEND case)
+            gcond = .true.
+            tzsource%cmnhname  = 'DEPS'
+            tzsource%clongname = 'deposition on snow'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ndepsni )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'DEPG'
+            tzsource%clongname = 'deposition on graupel'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ndepgni )
+
+            gcond = lwarm_ice
+            tzsource%cmnhname  = 'REVA'
+            tzsource%clongname = 'rain evaporation'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nrevani )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'CDEPI'
+            tzsource%clongname = 'condensation/deposition on ice'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, ncdepini )
+
+            gcond = .true.
+            tzsource%cmnhname  = 'NEUT'
+            tzsource%clongname = 'NEUT'
+            call Budget_source_add( tbudgets(ibudget), tzsource, gcond, nneutni )
+
+          else
+            call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', 'unknown electricity budget' )
+          end if
 
       end select SV_ELEC
 
diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90
index 83aa43896..d472e2ebd 100644
--- a/src/MNH/modd_budget.f90
+++ b/src/MNH/modd_budget.f90
@@ -49,6 +49,8 @@
 !  P. Wautelet 27/01/2020: use the tfield_metadata_base abstract datatype
 !  P. Wautelet 28/01/2020: add missing budgets for viscosity
 !  P. Wautelet 28/01/2020: add trhodj in tbudgetdata datatype
+!  P. Wautelet 09/03/2020: add tburhodj variable
+!  P .Wautelet 09/03/2020: add missing budgets for electricity
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -645,23 +647,26 @@ INTEGER, SAVE :: NNEGASV
 INTEGER, SAVE :: NDEPSQV
 INTEGER, SAVE :: NDEPGQV
 INTEGER, SAVE :: NREVAQV
-INTEGER, SAVE :: NDEPIQV
+INTEGER, SAVE :: NCDEPIQV
 INTEGER, SAVE :: NNEUTQV
 !
 ! Allowed processes for the budget of electric charge carried by cloud droplets
+INTEGER, SAVE :: NHONQC
 INTEGER, SAVE :: NAUTOQC
 INTEGER, SAVE :: NACCRQC
 INTEGER, SAVE :: NRIMQC
 INTEGER, SAVE :: NWETGQC
 INTEGER, SAVE :: NDRYGQC
+INTEGER, SAVE :: NINCGQC
+INTEGER, SAVE :: NWETHQC
 INTEGER, SAVE :: NIMLTQC
 INTEGER, SAVE :: NBERFIQC
-INTEGER, SAVE :: NDEPIQC
-INTEGER, SAVE :: NINDQC  ! inductive process
 INTEGER, SAVE :: NSEDIQC
+INTEGER, SAVE :: NCDEPIQC
 INTEGER, SAVE :: NNEUTQC
 !
 ! Allowed processes for the budget of electric charge carried by rain drops
+INTEGER, SAVE :: NSFRQR
 INTEGER, SAVE :: NAUTOQR
 INTEGER, SAVE :: NACCRQR
 INTEGER, SAVE :: NREVAQR
@@ -670,20 +675,24 @@ INTEGER, SAVE :: NCFRZQR
 INTEGER, SAVE :: NWETGQR
 INTEGER, SAVE :: NDRYGQR
 INTEGER, SAVE :: NGMLTQR
+INTEGER, SAVE :: NWETHQR
+INTEGER, SAVE :: NHMLTQR
 INTEGER, SAVE :: NSEDIQR
 INTEGER, SAVE :: NNEUTQR
 !
 ! Allowed processes for the budget of electric charge carried by ice crystals
+INTEGER, SAVE :: NHONQI
 INTEGER, SAVE :: NAGGSQI
 INTEGER, SAVE :: NAUTSQI
 INTEGER, SAVE :: NCFRZQI
 INTEGER, SAVE :: NWETGQI
 INTEGER, SAVE :: NDRYGQI
+INTEGER, SAVE :: NWETHQI
 INTEGER, SAVE :: NIMLTQI
 INTEGER, SAVE :: NBERFIQI
-INTEGER, SAVE :: NDEPIQI
 INTEGER, SAVE :: NNIISQI  ! non-inductive I-S
 INTEGER, SAVE :: NSEDIQI
+INTEGER, SAVE :: NCDEPIQI
 INTEGER, SAVE :: NNEUTQI
 !
 ! Allowed processes for the budget of electric charge carried by snow
@@ -696,10 +705,12 @@ INTEGER, SAVE :: NCMELQS
 INTEGER, SAVE :: NWETGQS
 INTEGER, SAVE :: NDRYGQS
 INTEGER, SAVE :: NNIISQS  ! non-inductive I-S
+INTEGER, SAVE :: NWETHQS
 INTEGER, SAVE :: NSEDIQS
 INTEGER, SAVE :: NNEUTQS
 !
 ! Allowed processes for the budget of electric charge carried by graupel
+INTEGER, SAVE :: NSFRQG
 INTEGER, SAVE :: NDEPGQG
 INTEGER, SAVE :: NRIMQG
 INTEGER, SAVE :: NACCQG
@@ -707,12 +718,25 @@ INTEGER, SAVE :: NCMELQG
 INTEGER, SAVE :: NCFRZQG
 INTEGER, SAVE :: NWETGQG
 INTEGER, SAVE :: NDRYGQG
+INTEGER, SAVE :: NINCGQG
 INTEGER, SAVE :: NGMLTQG
-INTEGER, SAVE :: NINDQG  ! inductive process
+INTEGER, SAVE :: NWETHQG
 INTEGER, SAVE :: NSEDIQG
 INTEGER, SAVE :: NNEUTQG
 !
-! must add processes for electric charge carried by hail
+! Allowed processes for the budget of electric charge carried by hail
+INTEGER, SAVE :: NWETGQH
+INTEGER, SAVE :: NWETHQH
+INTEGER, SAVE :: NHMLTQH
+INTEGER, SAVE :: NSEDIQH
+INTEGER, SAVE :: NNEUTQH
+!
+! Allowed processes for the budget of electric charge carried by negative ions
+INTEGER, SAVE :: NDEPSNI
+INTEGER, SAVE :: NDEPGNI
+INTEGER, SAVE :: NREVANI
+INTEGER, SAVE :: NCDEPINI
+INTEGER, SAVE :: NNEUTNI
 !
 !
 REAL :: XTIME_BU          ! budget time in this time-step
diff --git a/src/MNH/modn_budget.f90 b/src/MNH/modn_budget.f90
index e35f1eff8..56157206a 100644
--- a/src/MNH/modn_budget.f90
+++ b/src/MNH/modn_budget.f90
@@ -226,6 +226,7 @@
 !!      C.Lac        10/2016  Add droplet deposition
 !!      S. Riette   11/2016 New budgets for ICE3/ICE4
 !  P. Wautelet 28/01/2020: add missing budgets for viscosity
+!  P .Wautelet 09/03/2020: add missing budgets for electricity
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -298,19 +299,22 @@ NAMELIST/NAM_BU_RRH/LBU_RRH, NASSERH, NNESTRH, NADVRH, NFRCRH, &
                     NDIFRH, NRELRH, NNEGARH, NSEDIRH, NWETGRH, NWETHRH, NDRYHRH, NHMLTRH, &
                     NCORRRH, NHGCVRH, NGHCVRH, NCOHGRH, NHMLTRH, NVISCRH
 ! 
-NAMELIST/NAM_BU_RSV/ LBU_RSV, NASSESV, NNESTSV, NADVSV, NFRCSV, &
-                     NDIFSV, NRELSV, NDCONVSV, NVTURBSV, NHTURBSV, NCHEMSV, NMAFLSV,       &
-                     NVISCSV, NNEGASV,                                                     &
-                     NAUTOQC, NACCRQC, NRIMQC, NWETGQC, NDRYGQC, NIMLTQC, NBERFIQC,        &
-                     NDEPIQC, NINDQC, NSEDIQC, NNEUTQC,                                    &
-                     NAUTOQR, NACCRQR, NREVAQR, NACCQR, NCFRZQR, NWETGQR, NDRYGQR,         &
-                     NGMLTQR, NSEDIQR, NNEUTQR,                                            &
-                     NAGGSQI, NAUTSQI, NCFRZQI, NWETGQI, NDRYGQI, NIMLTQI, NBERFIQI,       &
-                     NDEPIQI, NNIISQI, NSEDIQI, NNEUTQI,                                   &
-                     NDEPSQS, NAGGSQS, NAUTSQS, NRIMQS, NACCQS, NCMELQS, NWETGQS,          &
-                     NDRYGQS, NNIISQS, NSEDIQS, NNEUTQS,                                   &
-                     NDEPGQG, NRIMQG, NACCQG, NCMELQG, NCFRZQG, NWETGQG, NDRYGQG,          &
-                     NGMLTQG, NINDQG, NSEDIQG, NNEUTQG, NDEPOTRSV
-! must add budget for hail
+NAMELIST/NAM_BU_RSV/ LBU_RSV, NASSESV,  NNESTSV,  NADVSV,   NFRCSV, &
+                     NDIFSV,  NRELSV,   NDCONVSV, NVTURBSV, NHTURBSV, NCHEMSV, NMAFLSV,          &
+                     NVISCSV, NNEGASV,                                                           &
+                     NDEPSQV, NDEPGQV,  NREVAQV, NCDEPIQV,  NNEUTQV,                             &
+                     NHONQC,  NAUTOQC,  NACCRQC, NRIMQC,    NWETGQC,  NDRYGQC, NINCGQC, NWETHQC, &
+                     NIMLTQC, NBERFIQC, NSEDIQC, NCDEPIQC,  NNEUTQC,                             &
+                     NSFRQR,  NAUTOQR,  NACCRQR, NREVAQR,   NACCQR,   NCFRZQR, NWETGQR, NDRYGQR, &
+                     NGMLTQR, NWETHQR,  NHMLTQR, NSEDIQR,   NNEUTQR,                             &
+                     NHONQI,  NAGGSQI,  NAUTSQI, NCFRZQI,   NWETGQI,  NDRYGQI, NWETHQI,          &
+                     NIMLTQI, NBERFIQI, NNIISQI, NSEDIQI,   NCDEPIQI, NNEUTQI,                   &
+                     NDEPSQS, NAGGSQS,  NAUTSQS, NRIMQS,    NACCQS,   NCMELQS, NWETGQS,          &
+                     NDRYGQS, NNIISQS,  NWETHQS, NSEDIQS,   NNEUTQS,                             &
+                     NSFRQG,  NDEPGQG,  NRIMQG,  NACCQG,    NCMELQG,  NCFRZQG, NWETGQG, NDRYGQG, &
+                     NINCGQG, NGMLTQG,  NWETHQG, NSEDIQG,   NNEUTQG,                             &
+                     NWETGQH, NWETHQH,  NHMLTQH, NSEDIQH,   NNEUTQH,                             &
+                     NDEPSNI, NDEPGNI,  NREVANI, NCDEPINI,  NNEUTNI,                             &
+                     NDEPOTRSV
 !
 END MODULE MODN_BUDGET
diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90
index a80086f59..45a43609c 100644
--- a/src/MNH/rain_ice_elec.f90
+++ b/src/MNH/rain_ice_elec.f90
@@ -197,6 +197,7 @@ END MODULE MODI_RAIN_ICE_ELEC
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
 !  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
 !  P. Wautelet    03/2020: use the new data structures and subroutines for budgets
+!  P .Wautelet 09/03/2020: add missing budgets for electricity
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -1159,7 +1160,10 @@ REAL :: ZVR, ZVI, ZVS, ZVG, ZETA0, ZK, ZRE0
     call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'SEDI', pqis(:, :, :) * prhodj(:, :, :) )
     call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'SEDI', pqss(:, :, :) * prhodj(:, :, :) )
     call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SEDI', pqgs(:, :, :) * prhodj(:, :, :) )
+    if ( krr == 7 ) &
+      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'SEDI', pqhs(:, :, :) * prhodj(:, :, :) )
   end if
+
   IF (OSEDIC) PINPRC (:,:) = 0.
   PINPRR (:,:) = 0.
   PINPRR3D (:,:,:) = 0.
@@ -1829,6 +1833,8 @@ REAL :: ZVR, ZVI, ZVS, ZVG, ZETA0, ZK, ZRE0
     call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'SEDI', pqis(:, :, :) * prhodj(:, :, :) )
     call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'SEDI', pqss(:, :, :) * prhodj(:, :, :) )
     call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SEDI', pqgs(:, :, :) * prhodj(:, :, :) )
+    if ( krr == 7 ) &
+      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'SEDI', pqhs(:, :, :) * prhodj(:, :, :) )
   end if
 !
   END SUBROUTINE RAIN_ICE_ELEC_SEDIMENTATION_SPLIT
@@ -1859,6 +1865,16 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !
   if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_sv ) then
+    if ( osedic ) &
+      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'SEDI', pqcs(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'SEDI', pqrs(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'SEDI', pqis(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'SEDI', pqss(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SEDI', pqgs(:, :, :) * prhodj(:, :, :) )
+    if ( krr == 7 ) &
+      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'SEDI', pqhs(:, :, :) * prhodj(:, :, :) )
+  end if
 !
 !*       1. Parameters for cloud sedimentation
 !
@@ -2223,6 +2239,16 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !
   if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_sv ) then
+    if ( osedic ) &
+      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'SEDI', pqcs(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'SEDI', pqrs(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'SEDI', pqis(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'SEDI', pqss(:, :, :) * prhodj(:, :, :) )
+    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'SEDI', pqgs(:, :, :) * prhodj(:, :, :) )
+    if ( krr == 7 ) &
+      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'SEDI', pqhs(:, :, :) * prhodj(:, :, :) )
+  end if
 !
   END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
 !
@@ -4112,12 +4138,34 @@ IMPLICIT NONE
                                              Unpack( zrgs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
     if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'WETH', &
                                              Unpack( zrhs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+    if ( lbudget_sv ) then
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 1 ), 'WETH', &
+                             Unpack( -zwq1(:, 1) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'WETH', &
+                             Unpack( -zwq1(:, 4) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 3 ), 'WETH', &
+                             Unpack( -zwq1(:, 2) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'WETH', &
+                             Unpack( -zwq1(:, 3) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 5 ), 'WETH', &
+                             Unpack( -zwq1(:, 5) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'WETH',                      &
+                             Unpack( ( zwq1(:, 1) + zwq1(:, 2) + zwq1(:, 3) + zwq1(:, 4) + zwq1(:, 5) ) &
+                                       * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+    end if
   END IF
 !
   IF (IHAIL > 0) THEN
 !
 !*       7.5    Melting of the hailstones
 !
+    if ( lbudget_sv ) then
+      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'HMLT', &
+                              Unpack( zqrs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'HMLT', &
+                              Unpack( zqhs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+    end if
+
     ZZW(:) = 0.0
     ZWQ1(:,7) = 0.
 !
@@ -4154,6 +4202,12 @@ IMPLICIT NONE
                                              Unpack(  zzw(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
     if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'HMLT', &
                                              Unpack( -zzw(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+    if ( lbudget_sv ) then
+      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 2 ), 'HMLT', &
+                             Unpack( zqrs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 6 ), 'HMLT', &
+                             Unpack( zqhs(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) )
+    end if
   END IF
 !
   DEALLOCATE(GHAIL)
-- 
GitLab