From 9dd11d28b0a04a761eff0f2e884a953f7e3910d1 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 31 Jan 2023 15:58:44 +0100
Subject: [PATCH] P.Tulet 31/01/2023: bugfix, add checks and security for
 chemistry and aerosols

---
 src/MNH/ch_convect_scavenging.f90 |  8 +++++---
 src/MNH/ch_monitorn.f90           |  3 ++-
 src/MNH/ini_modeln.f90            |  6 +++---
 src/MNH/mode_aero_psd.f90         | 12 ++++++++++++
 4 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/MNH/ch_convect_scavenging.f90 b/src/MNH/ch_convect_scavenging.f90
index a0bfccfd6..2a3f7082a 100644
--- a/src/MNH/ch_convect_scavenging.f90
+++ b/src/MNH/ch_convect_scavenging.f90
@@ -625,15 +625,17 @@ IF (LORILAM) THEN ! ORILAM chemical aerosol scavenging
   ZSIGAER(:,:,:,2) = XINISIGJ
   ZRGAER(:,:,:,1) = ZINIRADIUSI
   ZRGAER(:,:,:,2) = ZINIRADIUSJ      
+  ZNAER(:,:,:,1) = XN0IMIN
+  ZNAER(:,:,:,2) = XN0IMIN
 
   ! Compute RG and SIGMA with old concentration PCH1
   CALL PPP2AERO(ZSV(:,:,IKB:IKE,NSV_AERBEG:NSV_AEREND),&
               ZRHODREF(:,:,IKB:IKE), PSIG3D=ZSIGAER(:,:,IKB:IKE,:),&
               PRG3D=ZRGAER(:,:,IKB:IKE,:),PN3D=ZNAER(:,:,IKB:IKE,:))
 
-  CALL AERO2PPP(ZSVC(:,:,:,NSV_AERBEG:NSV_AEREND), &
-              ZRHODREF(:,:,:), ZSIGAER(:,:,:,:),&
-              ZRGAER(:,:,:,:))
+  CALL AERO2PPP(ZSVC(:,:,IKB:IKE,NSV_AERBEG:NSV_AEREND), &
+              ZRHODREF(:,:,IKB:IKE), ZSIGAER(:,:,IKB:IKE,:),&
+              ZRGAER(:,:,IKB:IKE,:))
 
   PCH1C(:,:,NSV_AERBEG:NSV_AEREND) = ZSVC(:,1,:,NSV_AERBEG:NSV_AEREND)
 
diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90
index eb8db26c6..1b5f5d07c 100644
--- a/src/MNH/ch_monitorn.f90
+++ b/src/MNH/ch_monitorn.f90
@@ -652,7 +652,6 @@ SELECT CASE (CCH_TDISCRETIZATION)
 END SELECT
 !
 !
-IF (LEN_TRIM(CSPEC_BU_DIAG)/=0.OR.LEN_TRIM(CSPEC_DIAG)/=0) GSPLIT=.FALSE.  ! Modif. for DIAG
 IF (CPROGRAM=='DIAG  ') GSPLIT=.FALSE.  ! Modif. for DIAG
 !
 !
@@ -1028,6 +1027,8 @@ DO JL=1,ISVECNMASK
       END DO 
     END DO
   END IF
+!
+  ZCHEM(:,:) = MAX(ZCHEM, XMNH_TINY)
 !
 !*       4.2   transfer meteo data into chemical core system
 !
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index fa29732f1..5fef62065 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -2809,9 +2809,9 @@ CALL INI_POSPROFILER_n(XTSTEP, XSEGLEN, NRR, NSV,  &
 !              ------------------------
 !
 IF ( ( CRAD=='ECMW' .OR. CRAD=='ECRA' ) .AND. CAOP=='EXPL' .AND. LORILAM ) THEN
-  ALLOCATE(POLYTAU(6,10,8,6,13))
-  ALLOCATE(POLYSSA(6,10,8,6,13))
-  ALLOCATE(POLYG  (6,10,8,6,13))
+  IF(.NOT.ALLOCATED(POLYTAU)) ALLOCATE(POLYTAU(6,10,8,6,13))
+  IF(.NOT.ALLOCATED(POLYSSA)) ALLOCATE(POLYSSA(6,10,8,6,13))
+  IF(.NOT.ALLOCATED(POLYG))   ALLOCATE(POLYG  (6,10,8,6,13))
   CALL INI_AEROSET1
   CALL INI_AEROSET2
   CALL INI_AEROSET3
diff --git a/src/MNH/mode_aero_psd.f90 b/src/MNH/mode_aero_psd.f90
index 7a18e4515..183447aea 100644
--- a/src/MNH/mode_aero_psd.f90
+++ b/src/MNH/mode_aero_psd.f90
@@ -667,6 +667,12 @@ ELSE
     END IF
 ENDIF
 
+! Cf Ackermann (all to black carbon except water)
+!Set molecular weightn g/mol 
+ZRHOI(:) = 1.8e3
+ZRHOI(JP_AER_H2O) = 1.0e3   ! water
+ZRHOI(JP_AER_DST) = XDENSITY_DUST  ! dusts
+
 ! conversion into mol.cm-3
 ZDEN2MOL = 1E-6 * XAVOGADRO  / XMD
 DO JJ=1, SIZE(PSVT, 4)
@@ -898,6 +904,12 @@ ELSE
     END IF
 ENDIF
 
+! Cf Ackermann (all to black carbon except water)
+!Set molecular weightn g/mol 
+ZRHOI(:) = 1.8e3
+ZRHOI(JP_AER_H2O) = 1.0e3   ! water
+ZRHOI(JP_AER_DST) = XDENSITY_DUST  ! dusts
+
 ! conversion into mol.cm-3
 ZDEN2MOL = 1E-6 * XAVOGADRO  / XMD
 !
-- 
GitLab