From 9c185eac2c3e3fe25daab09e7141881f359f8c9d Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Mon, 15 Feb 2021 16:12:50 +0100
Subject: [PATCH] Philippe 15/02/2021: budgets: correct electricity budgets

(cherry picked from commit efa327ed951e640c43d1827e6a8e2c76d4de9071)
---
 src/MNH/ini_budget.f90  | 244 +++++++++++++++++++++++++++++-----------
 src/MNH/modd_budget.f90 |   9 ++
 2 files changed, 186 insertions(+), 67 deletions(-)

diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 0bdaadb6d..8eaf500f3 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -173,6 +173,7 @@ END MODULE MODI_INI_BUDGET
 !  P. Wautelet 03/02/2021: budgets: add new source if LIMA splitting: CORR2
 !  P. Wautelet 10/02/2021: budgets: add missing sources for NSV_C2R2BEG+3 budget
 !  P. Wautelet 11/02/2021: budgets: add missing term SCAV for NSV_LIMA_SCAVMASS budget
+!  P. Wautelet 15/02/2021: budgets: correct electricity budgets
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -880,11 +881,11 @@ IF (LBU_RTH) THEN
                                                              IPROACTV(4,IPROC) = NCEDSTH
      IPROC=IPROC+1
   ELSE
-    IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE) IPROACTV(4,IPROC) = NADJUTH
+    IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE .AND. CELEC == 'NONE' ) IPROACTV(4,IPROC) = NADJUTH
     IPROC=IPROC+1
     IF (HCLOUD(1:3) == 'ICE' .OR. (HCLOUD == 'C2R2' .AND. (.NOT. LSUPSAT)) &
           .OR. ( HCLOUD == 'KHKO' .AND. (.NOT. LSUPSAT)) ) &
-      IPROACTV(4,IPROC) = NHENUTH 
+      IPROACTV(4,IPROC) = NHENUTH
       IPROC=IPROC+1
       IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NHONTH 
       IPROC=IPROC+1
@@ -912,7 +913,7 @@ IF (LBU_RTH) THEN
       IPROC=IPROC+1
       IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NWETHTH
       IPROC=IPROC+1
-      IF (HCLOUD == 'ICE4'.AND. LRED) IPROACTV(4,IPROC) = NDRYHTH
+      IF (HCLOUD == 'ICE4'.AND. LRED .AND. CELEC == 'NONE') IPROACTV(4,IPROC) = NDRYHTH
       IPROC=IPROC+1
       IF (HCLOUD == 'ICE4') IPROACTV(4,IPROC) = NHMLTTH
       IPROC=IPROC+1
@@ -920,11 +921,16 @@ IF (LBU_RTH) THEN
       IPROC=IPROC+1
       IF (HCLOUD(1:3) == 'ICE') IPROACTV(4,IPROC) = NBERFITH 
       IPROC=IPROC+1
-      IF (HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(4,IPROC) = NCORRTH
-      IPROC=IPROC+1
-      IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) )) &
+      IF ( CELEC /= 'NONE' ) THEN
           IPROACTV(4,IPROC) = NCDEPITH
+          IPROC=IPROC+1
+      END IF
+      IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(4,IPROC) = NCORRTH
       IPROC=IPROC+1
+      IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
+          IPROACTV(4,IPROC) = NCDEPITH
+          IPROC=IPROC+1
+      END IF
       IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. HCLOUD(1:3) == 'KES' .OR.   &
       HCLOUD == 'REVE')   IPROACTV(4,IPROC) = NCONDTH                     
       IPROC=IPROC+1
@@ -1062,10 +1068,16 @@ IF (LBU_RTH) THEN
      IPROC=IPROC+1
      YWORK2(4,IPROC) = 'BERFI_'
      IPROC=IPROC+1
+     IF ( CELEC /= 'NONE' ) THEN
+       YWORK2(4,IPROC) = 'CDEPI_'
+       IPROC=IPROC+1
+     END IF
      YWORK2(4,IPROC) = 'CORR_'
      IPROC=IPROC+1
-     YWORK2(4,IPROC) = 'CDEPI_'
-     IPROC=IPROC+1
+     IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
+       YWORK2(4,IPROC) = 'CDEPI_'
+       IPROC=IPROC+1
+     END IF
      YWORK2(4,IPROC) = 'COND_'
      IPROC=IPROC+1
   END IF
@@ -1242,7 +1254,7 @@ IF (LBU_RRV) THEN
      IPROC=IPROC+1
 
   ELSE
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE .AND. CELEC == 'NONE' ) &
           IPROACTV(6,IPROC) = NADJURV
   IPROC=IPROC+1
   IF ((HCLOUD == 'C2R2'  .AND. (.NOT. LSUPSAT)) &
@@ -1260,11 +1272,16 @@ IF (LBU_RRV) THEN
   IF (HCLOUD(1:3) == 'KES'.OR. HCLOUD == 'REVE' .OR. &
       HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' ) IPROACTV(6,IPROC) = NCONDRV
   IPROC=IPROC+1
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(6,IPROC) = NCORRRV
+  IF ( CELEC /= 'NONE' ) THEN
+          IPROACTV(6,IPROC) = NCDEPIRV
+          IPROC=IPROC+1
+  END IF
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(6,IPROC) = NCORRRV
   IPROC=IPROC+1
-  IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) )) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
           IPROACTV(6,IPROC) = NCDEPIRV 
-  IPROC=IPROC+1
+          IPROC=IPROC+1
+  END IF
 END IF
   IF ( HCLOUD /= 'NONE' .AND. CELEC == 'NONE' ) IPROACTV(6,IPROC) = NNECONRV
   IPROC=IPROC+1   
@@ -1342,10 +1359,16 @@ ELSE
   YWORK2(6,IPROC) = 'REVA_'
   IPROC=IPROC+1
   YWORK2(6,IPROC) = 'COND_'
+  IF ( CELEC /= 'NONE' ) THEN
+    IPROC=IPROC+1
+    YWORK2(6,IPROC) = 'CDEPI_'
+  END IF
   IPROC=IPROC+1
   YWORK2(6,IPROC) = 'CORR_'
-  IPROC=IPROC+1
-  YWORK2(6,IPROC) = 'CDEPI_'
+  IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
+    IPROC=IPROC+1
+    YWORK2(6,IPROC) = 'CDEPI_'
+  END IF
 END IF
   IPROC=IPROC+1
   YWORK2(6,IPROC) = 'NECON_'
@@ -1472,11 +1495,11 @@ IF (LBU_RRC) THEN
           IPROACTV(7,IPROC) = NHENURC
   IPROC=IPROC+1
 !
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE .AND. CELEC == 'NONE' ) &
           IPROACTV(7,IPROC) = NADJURC
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE' .AND. LSEDIC .AND. &
-          LRED .AND. (.NOT. LSEDIM_AFTER)) &
+          LRED .AND. (.NOT. LSEDIM_AFTER) .AND. CELEC == 'NONE') &
      IPROACTV(7,IPROC) = NSEDIRC
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE' ) IPROACTV(7,IPROC) = NHONRC
@@ -1490,7 +1513,7 @@ IF (LBU_RRC) THEN
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE') IPROACTV(7,IPROC) = NRIMRC
   IPROC=IPROC+1
-  IF (HCLOUD(1:3) == 'ICE'  .AND. LRED) IPROACTV(7,IPROC) = NCMELRC
+  IF (HCLOUD(1:3) == 'ICE'  .AND. LRED .AND. CELEC == 'NONE' ) IPROACTV(7,IPROC) = NCMELRC
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE') IPROACTV(7,IPROC) = NWETGRC
   IPROC=IPROC+1
@@ -1498,13 +1521,17 @@ IF (LBU_RRC) THEN
   IPROC=IPROC+1
   IF (HCLOUD == 'ICE4')  IPROACTV(7,IPROC) = NWETHRC
   IPROC=IPROC+1
-  IF (HCLOUD == 'ICE4' .AND. LRED)  IPROACTV(7,IPROC) = NDRYHRC
+  IF (HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE')  IPROACTV(7,IPROC) = NDRYHRC
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE' ) IPROACTV(7,IPROC) = NIMLTRC
   IPROC=IPROC+1
   IF (HCLOUD(1:3) == 'ICE') IPROACTV(7,IPROC) = NBERFIRC
   IPROC=IPROC+1
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(7,IPROC) = NCORRRC
+  IF ( CELEC/='NONE' ) THEN
+          IPROACTV(7,IPROC) = NCDEPIRC
+          IPROC=IPROC+1
+  END IF
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(7,IPROC) = NCORRRC
   IPROC=IPROC+1
   IF (((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO').AND. LSEDC) .OR.   &
      (HCLOUD(1:3) == 'ICE' .AND. LSEDIC .AND. .NOT. LRED) .OR. &
@@ -1514,9 +1541,10 @@ IF (LBU_RRC) THEN
   IF (((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO').AND. LDEPOC) .OR.   &
      (HCLOUD(1:3) == 'ICE' .AND. LDEPOSC)) IPROACTV(7,IPROC) = NDEPORC
   IPROC=IPROC+1
-  IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) )) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
           IPROACTV(7,IPROC) = NCDEPIRC
-  IPROC=IPROC+1
+          IPROC=IPROC+1
+  END IF
   IF (HCLOUD == 'C2R2'.OR. HCLOUD == 'KHKO' .OR. &
       HCLOUD(1:3) == 'KES'.OR. HCLOUD == 'REVE') IPROACTV(7,IPROC) = NCONDRC
   IPROC=IPROC+1
@@ -1634,14 +1662,20 @@ END IF
      YWORK2(7,IPROC) = 'IMLT_'
      IPROC=IPROC+1
      YWORK2(7,IPROC) = 'BERFI_'
+     IF ( CELEC/='NONE' ) THEN
+       IPROC=IPROC+1
+       YWORK2(7,IPROC) = 'CDEPI_'
+     END IF
      IPROC=IPROC+1
      YWORK2(7,IPROC) = 'CORR_'
      IPROC=IPROC+1
      YWORK2(7,IPROC) = 'SEDI_'
      IPROC=IPROC+1
      YWORK2(7,IPROC) = 'DEPO_'
-     IPROC=IPROC+1
-     YWORK2(7,IPROC) = 'CDEPI_'
+     IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') THEN
+       IPROC=IPROC+1
+       YWORK2(7,IPROC) = 'CDEPI_'
+     END IF
      IPROC=IPROC+1
      YWORK2(7,IPROC) = 'COND_'
   END IF
@@ -1742,7 +1776,7 @@ IF (LBU_RRR) THEN
      IF (HCLOUD(1:3) == 'KES' )   IPROACTV(8,IPROC) = NREVARR 
      IPROC=IPROC+1
 !
-     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER)) &
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER) .AND. CELEC=='NONE') &
              IPROACTV(8,IPROC) = NSEDIRR
      IPROC=IPROC+1
      IF (HCLOUD(1:3) == 'ICE' ) IPROACTV(8,IPROC) = NSFRRR 
@@ -1758,7 +1792,7 @@ IF (LBU_RRR) THEN
      IPROC=IPROC+1
      IF (HCLOUD(1:3) == 'ICE') IPROACTV(8,IPROC) = NACCRR 
      IPROC=IPROC+1
-     IF (HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(8,IPROC) = NCMELRR
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC=='NONE') IPROACTV(8,IPROC) = NCMELRR
      IPROC=IPROC+1
      IF (HCLOUD(1:3) == 'ICE' ) IPROACTV(8,IPROC) = NCFRZRR 
      IPROC=IPROC+1
@@ -1770,11 +1804,14 @@ IF (LBU_RRR) THEN
      IPROC=IPROC+1
      IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NWETHRR 
      IPROC=IPROC+1
-     IF (HCLOUD == 'ICE4' .AND. LRED) IPROACTV(8,IPROC) = NDRYHRR
+     IF (HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(8,IPROC) = NDRYHRR
      IPROC=IPROC+1
      IF (HCLOUD == 'ICE4') IPROACTV(8,IPROC) = NHMLTRR 
      IPROC=IPROC+1
-     IF (HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(8,IPROC) = NCORRRR
+     IF (CELEC /= 'NONE') &
+       IPROACTV(8,IPROC) = NSEDIRR
+     IPROC=IPROC+1
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(8,IPROC) = NCORRRR
      IPROC=IPROC+1
      IF ((HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO') .AND. LRAIN)  IPROACTV(8,IPROC) = NAUTORR
      IPROC=IPROC+1
@@ -1782,9 +1819,9 @@ IF (LBU_RRR) THEN
      IPROC=IPROC+1
      IF ((HCLOUD == 'C2R2'.OR. HCLOUD == 'KHKO') .AND. LRAIN)   IPROACTV(8,IPROC) = NREVARR
      IPROC=IPROC+1
-     IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. &
+     IF ( CELEC/='NONE' .AND. ( HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' .OR. &
      (HCLOUD(1:3) == 'ICE' .AND. .NOT. (LRED)) .OR. &
-     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
+     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER))) &
        IPROACTV(8,IPROC) = NSEDIRR
      IPROC=IPROC+1
   END IF
@@ -1884,6 +1921,8 @@ ELSE
   IPROC=IPROC+1
   YWORK2(8,IPROC) = 'HMLT_'
   IPROC=IPROC+1
+  YWORK2(8,IPROC) = 'SEDI_'
+  IPROC=IPROC+1
   YWORK2(8,IPROC) = 'CORR_'
   IPROC=IPROC+1
   YWORK2(8,IPROC) = 'AUTO_'
@@ -2002,11 +2041,12 @@ IF (LBU_RRI) THEN
      IPROACTV(9,IPROC) = NCEDSRI
      IPROC=IPROC+1
   ELSE
-     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE) IPROACTV(9,IPROC) = NADJURI
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LADJ_BEFORE .AND. CELEC == 'NONE' ) IPROACTV(9,IPROC) = NADJURI
      IPROC=IPROC+1
-     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER)) &
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER).AND. CELEC == 'NONE' ) THEN
              IPROACTV(9,IPROC) = NSEDIRI
-     IPROC=IPROC+1
+             IPROC=IPROC+1
+     END IF
      IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHENURI
      IPROC=IPROC+1
      IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NHONRI
@@ -2023,19 +2063,25 @@ IF (LBU_RRI) THEN
      IPROC=IPROC+1
      IF( HCLOUD == 'ICE4' ) IPROACTV(9,IPROC) = NWETHRI
      IPROC=IPROC+1
-     IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(9,IPROC) = NDRYHRI
+     IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(9,IPROC) = NDRYHRI
      IPROC=IPROC+1
      IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NIMLTRI
      IPROC=IPROC+1
      IF( HCLOUD(1:3) == 'ICE') IPROACTV(9,IPROC) = NBERFIRI
      IPROC=IPROC+1
-     IF( HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(9,IPROC) = NCORRRI
+     IF ( CELEC /= 'NONE' ) THEN
+             IPROACTV(9,IPROC) = NSEDIRI
+             IPROC=IPROC+1
+             IPROACTV(9,IPROC) = NCDEPIRI
+             IPROC=IPROC+1
+     END IF
+     IF( HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(9,IPROC) = NCORRRI
      IPROC=IPROC+1
      IF ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
      (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
              IPROACTV(9,IPROC) = NSEDIRI
      IPROC=IPROC+1
-     IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) )) &
+     IF (HCLOUD(1:3) == 'ICE' .AND. (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) .AND. CELEC=='NONE') &
              IPROACTV(9,IPROC) = NCDEPIRI
      IPROC=IPROC+1
   END IF
@@ -2112,8 +2158,10 @@ IF (LBU_RRI) THEN
   ELSE
      YWORK2(9,IPROC) = 'ADJU_'
      IPROC=  IPROC+1
-     YWORK2(9,IPROC) = 'SEDI_'
-     IPROC=  IPROC+1
+     IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER).AND. CELEC == 'NONE' ) THEN
+      YWORK2(9,IPROC) = 'SEDI_'
+      IPROC=  IPROC+1
+     END IF
      YWORK2(9,IPROC) = 'HENU_'
      IPROC=  IPROC+1
      YWORK2(9,IPROC) = 'HON_'
@@ -2136,6 +2184,12 @@ IF (LBU_RRI) THEN
      IPROC=  IPROC+1
      YWORK2(9,IPROC) = 'BERFI_'
      IPROC=  IPROC+1
+     IF ( CELEC /= 'NONE' ) THEN
+      YWORK2(9,IPROC) = 'SEDI_'
+      IPROC=  IPROC+1
+      YWORK2(9,IPROC) = 'CDEPI_'
+      IPROC=  IPROC+1
+     END IF
      YWORK2(9,IPROC) = 'CORR_'
      IPROC=  IPROC+1
      YWORK2(9,IPROC) = 'SEDI_'
@@ -2225,7 +2279,7 @@ IF (HCLOUD=='LIMA') THEN
      IF (.NOT.OPTSPLIT .AND. OHAIL)                     IPROACTV(10,IPROC) = NWETHRS
      IPROC=IPROC+1
  ELSE
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER)) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER) .AND. CELEC=='NONE') &
           IPROACTV(10,IPROC) = NSEDIRS
   IPROC=IPROC+1
   IF( HCLOUD(1:3) == 'ICE') IPROACTV(10,IPROC) = NDEPSRS
@@ -2246,12 +2300,15 @@ IF (HCLOUD=='LIMA') THEN
   IPROC=IPROC+1
   IF( HCLOUD == 'ICE4') IPROACTV(10,IPROC) = NWETHRS
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(10,IPROC) = NDRYHRS
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(10,IPROC) = NDRYHRS
+  IPROC=IPROC+1
+  IF (CELEC/='NONE') &
+          IPROACTV(10,IPROC) = NSEDIRS
   IPROC=IPROC+1
-  IF( HCLOUD(1:3) == 'ICE' .AND. LRED) IPROACTV(10,IPROC) = NCORRRS
+  IF( HCLOUD(1:3) == 'ICE' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(10,IPROC) = NCORRRS
   IPROC=IPROC+1
-  IF ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
-     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
+  IF (CELEC=='NONE' .AND. ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
+     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER))) &
           IPROACTV(10,IPROC) = NSEDIRS
   IPROC=IPROC+1
 END IF
@@ -2330,6 +2387,8 @@ ELSE
   IPROC=IPROC+1
   YWORK2(10,IPROC) = 'DRYH_'
   IPROC=IPROC+1
+  YWORK2(10,IPROC) = 'SEDI_'
+  IPROC=  IPROC+1
   YWORK2(10,IPROC) = 'CORR_'
   IPROC=IPROC+1
   YWORK2(10,IPROC) = 'SEDI_'
@@ -2416,7 +2475,7 @@ IF (HCLOUD=='LIMA') THEN
      IF (.NOT.OPTSPLIT .AND. OHAIL)                                 IPROACTV(11,IPROC) = NCOHGRG
      IPROC=IPROC+1
 ELSE
-  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER)) &
+  IF (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. (.NOT. LSEDIM_AFTER) .AND. CELEC=='NONE') &
           IPROACTV(11,IPROC) = NSEDIRG
   IPROC=IPROC+1
   IF( HCLOUD(1:3) == 'ICE') IPROACTV(11,IPROC) = NSFRRG
@@ -2433,7 +2492,7 @@ ELSE
   IPROC=IPROC+1
   IF( HCLOUD(1:3) == 'ICE') IPROACTV(11,IPROC) = NWETGRG
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(11,IPROC) = NGHCVRG
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NGHCVRG
   IPROC=IPROC+1
   IF( HCLOUD(1:3) == 'ICE') IPROACTV(11,IPROC) = NDRYGRG
   IPROC=IPROC+1
@@ -2441,14 +2500,17 @@ ELSE
   IPROC=IPROC+1
   IF( HCLOUD == 'ICE4' ) IPROACTV(11,IPROC) = NWETHRG
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED ) IPROACTV(11,IPROC) = NHGCVRG
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NHGCVRG
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4'  .AND. LRED) IPROACTV(11,IPROC) = NDRYHRG
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NDRYHRG
   IPROC=IPROC+1
-  IF( HCLOUD(1:3) == 'ICE'  .AND. LRED) IPROACTV(11,IPROC) = NCORRRG
+  IF (CELEC/='NONE') &
+          IPROACTV(11,IPROC) = NSEDIRG
   IPROC=IPROC+1
-  IF ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
-     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
+  IF( HCLOUD(1:3) == 'ICE'  .AND. LRED .AND. CELEC == 'NONE') IPROACTV(11,IPROC) = NCORRRG
+  IPROC=IPROC+1
+  IF (CELEC=='NONE' .AND. ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
+     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER))) &
           IPROACTV(11,IPROC) = NSEDIRG
   IPROC=IPROC+1
 END IF
@@ -2533,6 +2595,8 @@ ELSE
   IPROC=IPROC+1
   YWORK2(11,IPROC) = 'DRYH_'
   IPROC=IPROC+1
+  YWORK2(11,IPROC) = 'SEDI_'
+  IPROC=IPROC+1
   YWORK2(11,IPROC) = 'CORR_'
   IPROC=IPROC+1
   YWORK2(11,IPROC)= 'SEDI_'
@@ -2619,25 +2683,28 @@ IF (LBU_RRH) THEN
      IPROC=IPROC+1
      IF (.NOT.OPTSPLIT) IPROACTV(12,IPROC) = NHMLTRH
   ELSE
-  IF( HCLOUD == 'ICE4' .AND. LRED .AND. .NOT. LSEDIM_AFTER) &
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. .NOT. LSEDIM_AFTER .AND. CELEC=='NONE') &
           IPROACTV(12,IPROC) = NSEDIRH
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(12,IPROC) = NGHCVRH
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC=='NONE') IPROACTV(12,IPROC) = NGHCVRH
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. .NOT. LRED) IPROACTV(12,IPROC) = NWETGRH
+  IF( HCLOUD == 'ICE4' .AND. (.NOT. LRED .OR. CELEC/='NONE')) IPROACTV(12,IPROC) = NWETGRH
   IPROC=IPROC+1
   IF( HCLOUD == 'ICE4') IPROACTV(12,IPROC) = NWETHRH
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(12,IPROC) = NHGCVRH
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC=='NONE') IPROACTV(12,IPROC) = NHGCVRH
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(12,IPROC) = NDRYHRH
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC=='NONE') IPROACTV(12,IPROC) = NDRYHRH
   IPROC=IPROC+1
   IF( HCLOUD == 'ICE4' ) IPROACTV(12,IPROC) = NHMLTRH
   IPROC=IPROC+1
-  IF( HCLOUD == 'ICE4' .AND. LRED) IPROACTV(12,IPROC) = NCORRRH
+  IF( CELEC/='NONE' ) &
+          IPROACTV(12,IPROC) = NSEDIRH
   IPROC=IPROC+1
-  IF ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
-     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER)) &
+  IF( HCLOUD == 'ICE4' .AND. LRED .AND. CELEC == 'NONE') IPROACTV(12,IPROC) = NCORRRH
+  IPROC=IPROC+1
+  IF (CELEC=='NONE' .AND. ((HCLOUD(1:3) == 'ICE' .AND. .NOT. LRED).OR. &
+     (HCLOUD(1:3) == 'ICE' .AND. LRED .AND. LSEDIM_AFTER))) &
           IPROACTV(12,IPROC) = NSEDIRH
   END IF
   IPROC=IPROC+1
@@ -2693,6 +2760,8 @@ IF (LBU_RRH) THEN
      IPROC=IPROC+1
      YWORK2(12,IPROC) = 'HMLT_'
      IPROC=IPROC+1
+     YWORK2(12,IPROC) = 'SEDI_'
+     IPROC=IPROC+1
      YWORK2(12,IPROC) = 'CORR_'
      IPROC=IPROC+1
      YWORK2(12,IPROC) = 'SEDI_'
@@ -3987,17 +4056,17 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'BERFI_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NBERFIQI
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
-      YWORK2(12+JSV,ILAST_PROC_NBR) = 'CDEPI_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = NCDEPIQI
-      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
-      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NIIS_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNIISQI
-      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'SEDI_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NSEDIQI
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'CDEPI_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NCDEPIQI
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQI
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NIIS_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNIISQI
    CASE(5)  ! volumetric charge of snow
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
@@ -4027,14 +4096,14 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'DRYG_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NDRYGQS
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
-      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NIIS_'
-      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNIISQS
-      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'SEDI_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NSEDIQS
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQS
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NIIS_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNIISQS
    CASE(6)  ! volumetric charge of graupel
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
@@ -4069,11 +4138,52 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTQG
-    CASE(7)  ! volumetric charge of hail
+    CASE(7)  ! volumetric charge of hail (if ICE4) or ion- (if ICE3)
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      IF ( HCLOUD == 'ICE3' ) THEN
+        ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+        YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSNI
+        ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+        YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPG_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPGNI
+        IF (LWARM) THEN
+          ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+          YWORK2(12+JSV,ILAST_PROC_NBR) = 'REVA_'
+          IPROACTV(12+JSV,ILAST_PROC_NBR) = NREVANI
+        END IF
+        ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+        YWORK2(12+JSV,ILAST_PROC_NBR) = 'CDEPI_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NCDEPINI
+      ELSE
 ! add budget for hail volumetric charge
+      END IF
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTNI
+    CASE(8)  ! volumetric charge of ion- (if ICE4)
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR)= 'NEGA_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEGASV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSNI
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPG_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPGNI
+      IF (LWARM) THEN
+        ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+        YWORK2(12+JSV,ILAST_PROC_NBR) = 'REVA_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NREVANI
+      END IF
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'CDEPI_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NCDEPINI
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR) = 'NEUT_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NNEUTNI
     END SELECT
 !
 ELSE IF (JSV >= NSV_CHEMBEG .AND. JSV <= NSV_CHEMEND) THEN
diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90
index 7f7d64494..bebf8dd88 100644
--- a/src/MNH/modd_budget.f90
+++ b/src/MNH/modd_budget.f90
@@ -47,6 +47,7 @@
 !  P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables
 !  P. Wautelet 01/02/2021: add missing source: VISC
 !  P. Wautelet 03/02/2021: budgets: add new source if LIMA splitting: CORR2
+!  P. Wautelet 15/02/2021: budgets: correct electricity budgets
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -670,6 +671,14 @@ INTEGER, SAVE :: NGMLTQG
 INTEGER, SAVE :: NSEDIQG
 INTEGER, SAVE :: NNEUTQG
 !
+! 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
+#endif
+!
 ! must add processes for electric charge carried by hail
 !
 !
-- 
GitLab