From 331440668b5f0907167ec48a258422630b762f25 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 17 Feb 2021 11:03:54 +0100
Subject: [PATCH] Philippe 17/02/2021: budgets: add DRIFT and CORAY terms for
 electricity

(cherry picked from commit 46b0ca709cc4b71ea5b7cbb9742259bc8278d9fd)
---
 src/MNH/ini_budget.f90     | 18 ++++++++++++++++++
 src/MNH/modd_budget.f90    |  4 ++++
 src/MNH/modn_budget.f90    | 26 +++++++++++++-------------
 src/MNH/resolved_elecn.f90 | 12 +++++++++++-
 4 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 3cb3b1c27..2b07be060 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -3940,6 +3940,12 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       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)= 'DRIFT_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NDRIFTQV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORAY_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NCORAYQV
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
       YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
       IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSQV
       ILAST_PROC_NBR = ILAST_PROC_NBR + 1
@@ -4189,6 +4195,12 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       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)= 'DRIFT_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NDRIFTNI
+        ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+        YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORAY_'
+        IPROACTV(12+JSV,ILAST_PROC_NBR) = NCORAYNI
         ILAST_PROC_NBR = ILAST_PROC_NBR + 1
         YWORK2(12+JSV,ILAST_PROC_NBR) = 'DEPS_'
         IPROACTV(12+JSV,ILAST_PROC_NBR) = NDEPSNI
@@ -4228,6 +4240,12 @@ ELSEIF (JSV >= NSV_ELECBEG .AND. JSV <= NSV_ELECEND) THEN
       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)= 'DRIFT_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NDRIFTNI
+      ILAST_PROC_NBR = ILAST_PROC_NBR + 1
+      YWORK2(12+JSV,ILAST_PROC_NBR)= 'CORAY_'
+      IPROACTV(12+JSV,ILAST_PROC_NBR) = NCORAYNI
+      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
diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90
index d1b16cbc7..b2ae42a51 100644
--- a/src/MNH/modd_budget.f90
+++ b/src/MNH/modd_budget.f90
@@ -603,6 +603,8 @@ INTEGER, SAVE :: NNEADVSV   ! negative correction
 INTEGER, SAVE :: NNECONSV   ! negative correction
 !
 ! Allowed processes for the budget of electric charge carried by water vapor
+INTEGER, SAVE :: NDRIFTQV
+INTEGER, SAVE :: NCORAYQV
 INTEGER, SAVE :: NDEPSQV
 INTEGER, SAVE :: NDEPGQV
 INTEGER, SAVE :: NREVAQV
@@ -691,6 +693,8 @@ INTEGER, SAVE :: NHMLTQH
 INTEGER, SAVE :: NNEUTQH
 !
 ! Allowed processes for the budget of electric charge carried by negative ions
+INTEGER, SAVE :: NDRIFTNI
+INTEGER, SAVE :: NCORAYNI
 INTEGER, SAVE :: NDEPSNI
 INTEGER, SAVE :: NDEPGNI
 INTEGER, SAVE :: NREVANI
diff --git a/src/MNH/modn_budget.f90 b/src/MNH/modn_budget.f90
index 68d609d54..74014bf3b 100644
--- a/src/MNH/modn_budget.f90
+++ b/src/MNH/modn_budget.f90
@@ -309,19 +309,19 @@ NAMELIST/NAM_BU_RRH/LBU_RRH, NASSERH, NNESTRH, NVISCRH, NADVRH, NFRCRH, &
 NAMELIST/NAM_BU_RSV/ LBU_RSV,  NASSESV,  NNESTSV,  NVISCSV,  NADVSV,   NFRCSV,           &
                      NDIFSV,   NRELSV,   NDCONVSV, NVTURBSV, NHTURBSV, NCHEMSV, NMAFLSV, &
                      NNEGASV,  NNETURSV, NNEADVSV, NNECONSV,                             &
-                     NDEPSQV,  NDEPGQV,  NREVAQV,  NCDEPIQV, NNEUTQV,                    &
-                     NHONQC,   NAUTOQC,  NACCRQC,  NRIMQC,   NWETGQC,  NDRYGQC, NINCGQC, &
-                     NWETHQC,  NIMLTQC,  NBERFIQC, NCDEPIQC, NSEDIQC,  NNEUTQC,          &
-                     NSFRQR,   NAUTOQR,  NACCRQR,  NREVAQR,  NACCQR,   NCFRZQR, NWETGQR, &
-                     NDRYGQR,  NWETHQR,  NHMLTQR,  NGMLTQR,  NSEDIQR,  NNEUTQR,          &
-                     NHONQI,   NAGGSQI,  NAUTSQI,  NCFRZQI,  NWETGQI,  NDRYGQI, NWETHQI, &
-                     NIMLTQI,  NBERFIQI, NCDEPIQI, NNIISQI,  NSEDIQI,  NNEUTQI,          &
-                     NDEPSQS,  NAGGSQS,  NAUTSQS,  NRIMQS,   NACCQS,   NCMELQS, NWETGQS, &
-                     NDRYGQS,  NWETHQS,  NNIISQS,  NSEDIQS,  NNEUTQS,                    &
-                     NSFRQG,   NDEPGQG,  NRIMQG,   NACCQG,   NCMELQG,  NCFRZQG, NWETGQG, &
-                     NDRYGQG,  NINCGQG,  NWETHQG,  NGMLTQG,  NSEDIQG,  NNEUTQG,          &
-                     NSEDIQH,  NWETGQH,  NWETHQH,  NHMLTQH,  NNEUTQH,                    &
-                     NDEPSNI,  NDEPGNI,  NREVANI,  NCDEPINI, NNEUTNI,                    &
+                     NDRIFTQV, NCORAYQV, NDEPSQV,  NDEPGQV,  NREVAQV,  NCDEPIQV, NNEUTQV, &
+                     NHONQC,   NAUTOQC,  NACCRQC,  NRIMQC,   NWETGQC,  NDRYGQC,  NINCGQC, &
+                     NWETHQC,  NIMLTQC,  NBERFIQC, NCDEPIQC, NSEDIQC,  NNEUTQC,           &
+                     NSFRQR,   NAUTOQR,  NACCRQR,  NREVAQR,  NACCQR,   NCFRZQR,  NWETGQR, &
+                     NDRYGQR,  NWETHQR,  NHMLTQR,  NGMLTQR,  NSEDIQR,  NNEUTQR,           &
+                     NHONQI,   NAGGSQI,  NAUTSQI,  NCFRZQI,  NWETGQI,  NDRYGQI,  NWETHQI, &
+                     NIMLTQI,  NBERFIQI, NCDEPIQI, NNIISQI,  NSEDIQI,  NNEUTQI,           &
+                     NDEPSQS,  NAGGSQS,  NAUTSQS,  NRIMQS,   NACCQS,   NCMELQS,  NWETGQS, &
+                     NDRYGQS,  NWETHQS,  NNIISQS,  NSEDIQS,  NNEUTQS,                     &
+                     NSFRQG,   NDEPGQG,  NRIMQG,   NACCQG,   NCMELQG,  NCFRZQG,  NWETGQG, &
+                     NDRYGQG,  NINCGQG,  NWETHQG,  NGMLTQG,  NSEDIQG,  NNEUTQG,           &
+                     NSEDIQH,  NWETGQH,  NWETHQH,  NHMLTQH,  NNEUTQH,                     &
+                     NDRIFTNI, NCORAYNI, NDEPSNI,  NDEPGNI,  NREVANI,  NCDEPINI, NNEUTNI, &
                      NDEPOTRSV
 !
 END MODULE MODN_BUDGET
diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90
index b359b8e76..18b409810 100644
--- a/src/MNH/resolved_elecn.f90
+++ b/src/MNH/resolved_elecn.f90
@@ -170,6 +170,7 @@ END MODULE MODI_RESOLVED_ELEC_n
 !  P. Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
 !  P. Wautelet 14/03/2019: bugfix: correct management of files
 !  P. Wautelet 12/02/2021: bugfix: change STATUS for opening files containing flash information (NEW->UNKNOWN)
+!  P. Wautelet 17/02/2021: budgets: add DRIFT and CORAY terms for electricity
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -656,9 +657,13 @@ CALL MYPROC_ELEC_ll (IPROC)
 !
 CALL ION_DRIFT(ZCPH, ZCOR, PSVT, HLBCX, HLBCY)
 
-
 PSVS(:,:,:,NSV_ELECBEG) = PSVS(:,:,:,NSV_ELECBEG) + ZCPH(:,:,:)
 PSVS(:,:,:,NSV_ELECEND) = PSVS(:,:,:,NSV_ELECEND) + ZCOR(:,:,:)
+
+IF (LBUDGET_SV) THEN
+  CALL BUDGET (PSVS(:,:,:,NSV_ELECBEG) * PRHODJ(:,:,:), 12+NSV_ELECBEG, 'DRIFT_BU_RSV')
+  CALL BUDGET (PSVS(:,:,:,NSV_ELECEND) * PRHODJ(:,:,:), 12+NSV_ELECEND, 'DRIFT_BU_RSV')
+END IF
 !
 !*       4.3    Add Cosmic Ray source
 !
@@ -666,6 +671,11 @@ PSVS(:,:,:,NSV_ELECBEG) = PSVS(:,:,:,NSV_ELECBEG) +           &
                               XIONSOURCEFW(:,:,:) / PRHODREF(:,:,:)
 PSVS(:,:,:,NSV_ELECEND) = PSVS(:,:,:,NSV_ELECEND) +           &
                               XIONSOURCEFW(:,:,:) / PRHODREF(:,:,:)
+
+IF (LBUDGET_SV) THEN
+  CALL BUDGET (PSVS(:,:,:,NSV_ELECBEG) * PRHODJ(:,:,:), 12+NSV_ELECBEG, 'CORAY_BU_RSV')
+  CALL BUDGET (PSVS(:,:,:,NSV_ELECEND) * PRHODJ(:,:,:), 12+NSV_ELECEND, 'CORAY_BU_RSV')
+END IF
 !
 !-------------------------------------------------------------------------------
 !
-- 
GitLab