From 0413cd3b6950a1ebb73139430c0bf921b9861af2 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Thu, 11 Jul 2024 17:31:47 +0200
Subject: [PATCH] P.Tulet 11/07/2024: bugfix anthropic aerosols flux

---
 src/SURFEX/ch_aer_emission.F90 | 95 ++++++++++++++--------------------
 1 file changed, 38 insertions(+), 57 deletions(-)

diff --git a/src/SURFEX/ch_aer_emission.F90 b/src/SURFEX/ch_aer_emission.F90
index eb3ad3af3..fa2bce166 100644
--- a/src/SURFEX/ch_aer_emission.F90
+++ b/src/SURFEX/ch_aer_emission.F90
@@ -140,11 +140,24 @@ IF (I_CH_DSTi ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_DSTi ')
 IF (I_CH_DSTj ==-999) CALL ABOR1_SFX ('WRONG VALUE FOR I_CH_DSTj ')
 
 ZMI(:) = 250.
-ZMI(JP_AER_SO4) = 98.
-ZMI(JP_AER_NO3) = 63.
-ZMI(JP_AER_NH3) = 17.
-ZMI(JP_AER_H2O) = 18.
-ZMI(JP_AER_DST) = 100.
+ZMI(JP_AER_SO4)  = 98.
+ZMI(JP_AER_NO3)  = 63.
+ZMI(JP_AER_NH3)  = 17.
+ZMI(JP_AER_H2O)  = 18.
+ZMI(JP_AER_BC)   = 12.
+ZMI(JP_AER_DST)  = 100.
+IF (NSOA .EQ. 10) THEN
+ZMI(JP_AER_SOA1) = 88.
+ZMI(JP_AER_SOA2) = 180.
+ZMI(JP_AER_SOA3) = 1.5374857E+02
+ZMI(JP_AER_SOA4) = 1.9586780E+02
+ZMI(JP_AER_SOA5) = 195.
+ZMI(JP_AER_SOA6) = 195.
+ZMI(JP_AER_SOA7) = 165.
+ZMI(JP_AER_SOA8) = 195.
+ZMI(JP_AER_SOA9) = 270.
+ZMI(JP_AER_SOA10) = 210.
+END IF
 
 ! Aerosol Density
 ! Cf Ackermann (all to black carbon except water)
@@ -181,52 +194,36 @@ IF ((LCO2PM).AND.(PRESENT(PFCO))) THEN
   ZVALBC= 5.* 0.6E-10 / 0.4E-8  ! CO / BC conversion factor
   ZVALOC= 5.* 0.3E-10 / 0.4E-8  ! CO / POM conversion factor
   ZFCO(:) = PFCO(:)
+  PFLUX(:,I_CH_OCi) = PFLUX(:,I_CH_OCi) + ZFCO(:) * ZVALOC / 2.
+  PFLUX(:,I_CH_OCj) = PFLUX(:,I_CH_OCj) + ZFCO(:) * ZVALOC
+  PFLUX(:,I_CH_BCi) = PFLUX(:,I_CH_BCi) + ZFCO(:) * ZVALBC / 2
+  PFLUX(:,I_CH_BCj) = PFLUX(:,I_CH_BCj) + ZFCO(:) * ZVALBC
 END IF
 
-! Initial aerosols fluxes have been transformed into molecu.m-2.s-1, 
-! conversion into are in kg.kg-1.m.s-1 
-!  conversion in kg.kg-1.m.s-1
-!
-ZCONVERSION(:) =  XAVOGADRO * PRHODREF(:)
-!
-PFLUX(:,I_CH_SO4i) = PFLUX(:,I_CH_SO4i) / ZCONVERSION(:) * ZMI(JP_AER_SO4)*1E-3
-PFLUX(:,I_CH_SO4j) = PFLUX(:,I_CH_SO4j) / ZCONVERSION(:) * ZMI(JP_AER_SO4)*1E-3
-PFLUX(:,I_CH_NO3i) = PFLUX(:,I_CH_NO3i) / ZCONVERSION(:) * ZMI(JP_AER_NO3)*1E-3
-PFLUX(:,I_CH_NO3j) = PFLUX(:,I_CH_NO3j) / ZCONVERSION(:) * ZMI(JP_AER_NO3)*1E-3
-PFLUX(:,I_CH_NH3i) = PFLUX(:,I_CH_NH3i) / ZCONVERSION(:) * ZMI(JP_AER_NH3)*1E-3
-PFLUX(:,I_CH_NH3j) = PFLUX(:,I_CH_NH3j) / ZCONVERSION(:) * ZMI(JP_AER_NH3)*1E-3
-PFLUX(:,I_CH_H2Oi) = PFLUX(:,I_CH_H2Oi) / ZCONVERSION(:) * ZMI(JP_AER_H2O)*1E-3
-PFLUX(:,I_CH_H2Oj) = PFLUX(:,I_CH_H2Oj) / ZCONVERSION(:) * ZMI(JP_AER_H2O)*1E-3
-PFLUX(:,I_CH_OCi)  = (PFLUX(:,I_CH_OCi) + ZFCO(:) * ZVALOC / 2.) / ZCONVERSION(:) * ZMI(JP_AER_OC)*1E-3
-PFLUX(:,I_CH_OCj)  = (PFLUX(:,I_CH_OCj) + ZFCO(:) * ZVALOC ) / ZCONVERSION(:) * ZMI(JP_AER_OC)*1E-3
-PFLUX(:,I_CH_BCi)  = (PFLUX(:,I_CH_BCi) + ZFCO(:) * ZVALBC / 2.) / ZCONVERSION(:) * ZMI(JP_AER_BC)*1E-3
-PFLUX(:,I_CH_BCj)  = (PFLUX(:,I_CH_BCj) + ZFCO(:) * ZVALBC ) / ZCONVERSION(:) * ZMI(JP_AER_BC)*1E-3
-PFLUX(:,I_CH_DSTi) = PFLUX(:,I_CH_DSTi) / ZCONVERSION(:) * ZMI(JP_AER_DST)*1E-3 
-PFLUX(:,I_CH_DSTj) = PFLUX(:,I_CH_DSTj) / ZCONVERSION(:) * ZMI(JP_AER_DST)*1E-3 
 !
 !*       1.0    transfer aerosol mass from gas to aerosol variables
-!               (and conversion of kg.kg-1.m.s-1 --> microgram.m-2.s-1)
+!               (and conversion of molecu.m-2.s-1 --> microgram.m-2.s-1)
 !
-ZFCTOTA(:,JP_AER_SO4,1) = PFLUX(:,I_CH_SO4i) *1E+9 * PRHODREF(:) 
-ZFCTOTA(:,JP_AER_SO4,2) = PFLUX(:,I_CH_SO4j) *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_SO4,1) = PFLUX(:,I_CH_SO4i) *1E+6 * ZMI(JP_AER_SO4) / XAVOGADRO
+ZFCTOTA(:,JP_AER_SO4,2) = PFLUX(:,I_CH_SO4j) *1E+6 * ZMI(JP_AER_SO4) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_NH3,1) = PFLUX(:,I_CH_NH3i) *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_NH3,2) = PFLUX(:,I_CH_NH3j) *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_NH3,1) = PFLUX(:,I_CH_NH3i) *1E+6 * ZMI(JP_AER_NH3) / XAVOGADRO
+ZFCTOTA(:,JP_AER_NH3,2) = PFLUX(:,I_CH_NH3j) *1E+6 * ZMI(JP_AER_NH3) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_NO3,1) = PFLUX(:,I_CH_NO3i) *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_NO3,2) = PFLUX(:,I_CH_NO3j) *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_NO3,1) = PFLUX(:,I_CH_NO3i) *1E+6 * ZMI(JP_AER_NO3) / XAVOGADRO
+ZFCTOTA(:,JP_AER_NO3,2) = PFLUX(:,I_CH_NO3j) *1E+6 * ZMI(JP_AER_NO3) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_H2O,1) = PFLUX(:,I_CH_H2Oi) *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_H2O,2) = PFLUX(:,I_CH_H2Oj) *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_H2O,1) = PFLUX(:,I_CH_H2Oi) *1E+6 * ZMI(JP_AER_H2O) / XAVOGADRO
+ZFCTOTA(:,JP_AER_H2O,2) = PFLUX(:,I_CH_H2Oj) *1E+6 * ZMI(JP_AER_H2O) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_OC,1)  = PFLUX(:,I_CH_OCi)  *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_OC,2)  = PFLUX(:,I_CH_OCj)  *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_OC,1)  = PFLUX(:,I_CH_OCi)  *1E+6 * ZMI(JP_AER_OC) / XAVOGADRO
+ZFCTOTA(:,JP_AER_OC,2)  = PFLUX(:,I_CH_OCj)  *1E+6 * ZMI(JP_AER_OC) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_BC,1)  = PFLUX(:,I_CH_BCi)  *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_BC,2)  = PFLUX(:,I_CH_BCj)  *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_BC,1)  = PFLUX(:,I_CH_BCi)  *1E+6 * ZMI(JP_AER_BC) / XAVOGADRO
+ZFCTOTA(:,JP_AER_BC,2)  = PFLUX(:,I_CH_BCj)  *1E+6 * ZMI(JP_AER_BC) / XAVOGADRO
 
-ZFCTOTA(:,JP_AER_DST,1)  = PFLUX(:,I_CH_DSTi)  *1E+9 * PRHODREF(:)
-ZFCTOTA(:,JP_AER_DST,2)  = PFLUX(:,I_CH_DSTj)  *1E+9 * PRHODREF(:)
+ZFCTOTA(:,JP_AER_DST,1)  = PFLUX(:,I_CH_DSTi)*1E+6 * ZMI(JP_AER_DST) / XAVOGADRO
+ZFCTOTA(:,JP_AER_DST,2)  = PFLUX(:,I_CH_DSTj)*1E+6 * ZMI(JP_AER_DST) / XAVOGADRO
 !
 !*       1.1    calculate moment 3 flux from total aerosol mass
 !
@@ -258,23 +255,7 @@ PFLUX(:,I_CH_M0j) = ZFM(:,4) * 1E-6 / (ZDEN2MOL * PRHODREF(:))
 IF (LVARSIGI) PFLUX(:,I_CH_M6i) = ZFM(:,3) / (ZDEN2MOL * PRHODREF(:))
 IF (LVARSIGJ) PFLUX(:,I_CH_M6j) = ZFM(:,6) / (ZDEN2MOL * PRHODREF(:))
 !
-! aerosol phase conversion kg/kg.m.s-1 into molecules.m-2.s-1
-PFLUX(:,I_CH_SO4i) = PFLUX(:,I_CH_SO4i) * ZCONVERSION(:) / (ZMI(JP_AER_SO4)*1E-3)
-PFLUX(:,I_CH_SO4j) = PFLUX(:,I_CH_SO4j) * ZCONVERSION(:) / (ZMI(JP_AER_SO4)*1E-3)
-PFLUX(:,I_CH_NO3i) = PFLUX(:,I_CH_NO3i) * ZCONVERSION(:) / (ZMI(JP_AER_NO3)*1E-3)
-PFLUX(:,I_CH_NO3j) = PFLUX(:,I_CH_NO3j) * ZCONVERSION(:) / (ZMI(JP_AER_NO3)*1E-3)
-PFLUX(:,I_CH_NH3i) = PFLUX(:,I_CH_NH3i) * ZCONVERSION(:) / (ZMI(JP_AER_NH3)*1E-3)
-PFLUX(:,I_CH_NH3j) = PFLUX(:,I_CH_NH3j) * ZCONVERSION(:) / (ZMI(JP_AER_NH3)*1E-3)
-PFLUX(:,I_CH_H2Oi) = PFLUX(:,I_CH_H2Oi) * ZCONVERSION(:) / (ZMI(JP_AER_H2O)*1E-3)
-PFLUX(:,I_CH_H2Oj) = PFLUX(:,I_CH_H2Oj) * ZCONVERSION(:) / (ZMI(JP_AER_H2O)*1E-3)
-!
-PFLUX(:,I_CH_OCi) = PFLUX(:,I_CH_OCi) * ZCONVERSION(:) / (ZMI(JP_AER_OC)*1E-3)
-PFLUX(:,I_CH_OCj) = PFLUX(:,I_CH_OCj) * ZCONVERSION(:) / (ZMI(JP_AER_OC)*1E-3)
-PFLUX(:,I_CH_BCi) = PFLUX(:,I_CH_BCi) * ZCONVERSION(:) / (ZMI(JP_AER_BC)*1E-3)
-PFLUX(:,I_CH_BCj) = PFLUX(:,I_CH_BCj) * ZCONVERSION(:) / (ZMI(JP_AER_BC)*1E-3)
-PFLUX(:,I_CH_DSTi) = PFLUX(:,I_CH_DSTi) * ZCONVERSION(:) / (ZMI(JP_AER_DST)*1E-3)
-PFLUX(:,I_CH_DSTj) = PFLUX(:,I_CH_DSTj) * ZCONVERSION(:) / (ZMI(JP_AER_DST)*1E-3)
-!
+ZCONVERSION(:) =  XAVOGADRO * PRHODREF(:) / XMD
 ! conversion M0 and M6  ppv.m.s-1 into  molecules.m-2.s-1
 PFLUX(:,I_CH_M0i) = PFLUX(:,I_CH_M0i) * ZCONVERSION(:)
 PFLUX(:,I_CH_M0j) = PFLUX(:,I_CH_M0j) * ZCONVERSION(:)
-- 
GitLab