From f745bd046ca5b70737639843ab9021d15606eb8b Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Wed, 8 Mar 2023 13:26:22 +0100
Subject: [PATCH] Pierre T. 08/03/2023: bugfix LIMA with aerosols

---
 src/MNH/aer2lima.f90       | 12 ++++++-----
 src/MNH/prep_real_case.f90 | 42 ++++++++++++++++++++++++++++++--------
 2 files changed, 40 insertions(+), 14 deletions(-)

diff --git a/src/MNH/aer2lima.f90 b/src/MNH/aer2lima.f90
index eaf03fa5b..92798be19 100644
--- a/src/MNH/aer2lima.f90
+++ b/src/MNH/aer2lima.f90
@@ -106,14 +106,16 @@ REAL, DIMENSION(NSV) :: ZMI
 INTEGER :: JSV, JJ, JI, II, IJ, IK, JK
 REAL :: ZCCNRADIUS, ZRATMASSH2O
 
-ZCCNRADIUS = 0.04 ! to suppress the aitken mode  (µm)
+ZCCNRADIUS = 0.03 ! to suppress the aitken mode  (µm)
 
 IF ((CPROGRAM=="REAL  ").OR.(CPROGRAM=="IDEAL ")) CMINERAL = "EQSAM"
-IF (CMINERAL /= 'NONE') THEN
-     ZRATMASSH2O = 0.05 
+
+IF (CMINERAL == 'EQSAM') THEN
+     ZRATMASSH2O = 0.02
 ELSE
-     ZRATMASSH2O = 0. 
+     ZRATMASSH2O = 0.
 END IF
+!
 ZMI(:) = 250.
 ZMI(JP_AER_SO4)  = 98.
 ZMI(JP_AER_NO3)  = 63.
@@ -121,7 +123,7 @@ ZMI(JP_AER_NH3)  = 17.
 ZMI(JP_AER_H2O)  = 18.
 ZCCN_SUM(:,:,:,:) = 0.
 ZIFN_SUM(:,:,:,:) = 0.
-
+!
 ! Anthopogenic part (orilam scheme)
 !
 IF (LORILAM) THEN
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 159d20680..7af314fe4 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -575,10 +575,8 @@ XANGCONV0, XANGCONV1000, XANGCONV2000,            &
  NAMELIST/NAM_AERO_CONF/ LORILAM, LINITPM, LDUST, XINIRADIUSI, XINIRADIUSJ,&
                          XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, CRGUNITD,&
                          LSALT, CRGUNITS, NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,&
-!UPG*PT
                          XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT, &
                          LDSTCAMS, LSLTCAMS,CACTCCN,CCLOUD, NMOD_IFN, NMOD_CCN, LAERINIT
-!UPG*PT
 
 NAMELIST/NAM_CH_CONF/ LUSECHAQ,LUSECHIC,LUSECHEM
 !
@@ -588,14 +586,16 @@ NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH
 INTEGER                :: II, IJ, IGRID, ILENGTH
 CHARACTER (LEN=100)    :: HCOMMENT
 TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL()   ! list of fields to exchange
-!UPG*PT
+!
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXRHO, ZLBYRHO
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXZZ, ZLBYZZ
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXPABST, ZLBYPABST
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXRM, ZLBYRM
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZLBXTHM, ZLBYTHM
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZLBXSVM, ZLBYSVM
+!
 INTEGER :: ILBX,ILBY,IIB,IJB,IIE,IJE
 LOGICAL :: GAERINIT
-!UPG*PT
-
 !-------------------------------------------------------------------------------
 !
 CALL MPPDB_INIT()
@@ -789,10 +789,10 @@ ELSE IF (YATMFILETYPE=='GRIBEX') THEN
   ELSE
     CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
   END IF
-LAERINIT = GAERINIT
 !
   YDAD_NAME=' '
 END IF
+LAERINIT = GAERINIT 
 !
 IF (NIMAX==1 .AND. NJMAX==1) THEN
   L1D=.TRUE.
@@ -1136,8 +1136,14 @@ IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN
     ALLOCATE(ZLBYRHO(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
     ALLOCATE(ZLBXPABST(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
     ALLOCATE(ZLBYPABST(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
+    ALLOCATE(ZLBXTHM(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
+    ALLOCATE(ZLBYTHM(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
     ALLOCATE(ZLBXZZ(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
     ALLOCATE(ZLBYZZ(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
+    ALLOCATE(ZLBXRM(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)))
+    ALLOCATE(ZLBYRM(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)))
+    ALLOCATE(ZLBXSVM(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3), SIZE(XLBXSVM,4)))
+    ALLOCATE(ZLBYSVM(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3), SIZE(XLBXSVM,4)))
 
     ILBX=SIZE(XLBXSVM,1)/2-JPHEXT
     ILBY=SIZE(XLBYSVM,2)/2-JPHEXT
@@ -1152,21 +1158,39 @@ IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN
     ZLBXPABST(ILBX+2:2*ILBX+2,:,:) = XPABST(IIE+1-ILBX:IIE+1,:,:)
     ZLBYPABST(:,1:ILBY+1,:)        = XPABST(:,IJB-1:IJB-1+ILBY,:)
     ZLBYPABST(:,ILBY+2:2*ILBY+2,:) = XPABST(:,IJE+1-ILBY:IJE+1,:)
+    ZLBXTHM(1:ILBX+1,:,:)          = XTHT(IIB-1:IIB-1+ILBX,:,:)
+    ZLBXTHM(ILBX+2:2*ILBX+2,:,:)   = XTHT(IIE+1-ILBX:IIE+1,:,:)
+    ZLBYTHM(:,1:ILBY+1,:)          = XTHT(:,IJB-1:IJB-1+ILBY,:)
+    ZLBYTHM(:,ILBY+2:2*ILBY+2,:)   = XTHT(:,IJE+1-ILBY:IJE+1,:)
     ZLBXZZ(1:ILBX+1,:,:)        = XZZ(IIB-1:IIB-1+ILBX,:,:)
     ZLBXZZ(ILBX+2:2*ILBX+2,:,:) = XZZ(IIE+1-ILBX:IIE+1,:,:)
     ZLBYZZ(:,1:ILBY+1,:)        = XZZ(:,IJB-1:IJB-1+ILBY,:)
     ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:)
+    ZLBXSVM(1:ILBX+1,:,:,:)        = XSVT(IIB-1:IIB-1+ILBX,:,:,:)
+    ZLBXSVM(ILBX+2:2*ILBX+2,:,:,:) = XSVT(IIE+1-ILBX:IIE+1,:,:,:)
+    ZLBYSVM(:,1:ILBY+1,:,:)        = XSVT(:,IJB-1:IJB-1+ILBY,:,:)
+    ZLBYSVM(:,ILBY+2:2*ILBY+2,:,:) = XSVT(:,IJE+1-ILBY:IJE+1,:,:)
+    ZLBXRM(1:ILBX+1,:,:)          = XRT(IIB-1:IIB-1+ILBX,:,:,1)
+    ZLBXRM(ILBX+2:2*ILBX+2,:,:)   = XRT(IIE+1-ILBX:IIE+1,:,:,1)
+    ZLBYRM(:,1:ILBY+1,:)          = XRT(:,IJB-1:IJB-1+ILBY,:,1)
+    ZLBYRM(:,ILBY+2:2*ILBY+2,:)   = XRT(:,IJE+1-ILBY:IJE+1,:,1)
 
-    CALL AER2LIMA(XLBXSVM, ZLBXRHO, XLBXRM(:,:,:,1), ZLBXPABST, XLBXTHM, ZLBXZZ)
-    CALL AER2LIMA(XLBYSVM, ZLBYRHO, XLBYRM(:,:,:,1), ZLBYPABST, XLBYTHM, ZLBYZZ)
+
+    CALL AER2LIMA(ZLBXSVM, ZLBXRHO, ZLBXRM(:,:,:), ZLBXPABST, ZLBXTHM, ZLBXZZ)
+    CALL AER2LIMA(ZLBYSVM, ZLBYRHO, ZLBYRM(:,:,:), ZLBYPABST, ZLBYTHM, ZLBYZZ)
 
     DEALLOCATE(ZLBXRHO)
     DEALLOCATE(ZLBYRHO)
     DEALLOCATE(ZLBXPABST)
     DEALLOCATE(ZLBYPABST)
+    DEALLOCATE(ZLBXTHM)
+    DEALLOCATE(ZLBYTHM)
     DEALLOCATE(ZLBXZZ)
     DEALLOCATE(ZLBYZZ)
-
+    DEALLOCATE(ZLBXRM)
+    DEALLOCATE(ZLBYRM)
+    DEALLOCATE(ZLBXSVM)
+    DEALLOCATE(ZLBYSVM)
 END IF
 !
 IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX)
-- 
GitLab