From db3a833938ee4b984da7b94cd9258209b3c9da0c Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 9 Mar 2021 16:41:48 +0100
Subject: [PATCH] Philippe 09/03/2021: move some chemistry initializations to
 ini_nsv Necessary to ensure availability of chemistry scalar variables names
 in ini_nsv (for further developments)

---
 src/MNH/ini_nsv.f90                    | 81 +++++++++++++++-----------
 src/MNH/ini_prog_var.f90               | 10 +---
 src/MNH/prep_ideal_case.f90            |  8 +--
 src/MNH/read_all_data_grib_case.f90    | 13 ++---
 src/MNH/read_chem_data_netcdf_case.f90 | 10 +---
 src/MNH/read_exsegn.f90                |  8 +--
 src/MNH/spawn_model2.f90               |  5 +-
 7 files changed, 60 insertions(+), 75 deletions(-)

diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90
index 5299ffb8a..14ff53bec 100644
--- a/src/MNH/ini_nsv.f90
+++ b/src/MNH/ini_nsv.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ###################
       MODULE MODI_INI_NSV
 !     ###################
@@ -64,46 +65,48 @@ END MODULE MODI_INI_NSV
 !!       J.escobar     04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization
 !!      Modification    01/2016  (JP Pinty) Add LIMA and LUSECHEM condition
 !!      Modification    07/2017  (V. Vionnet) Add blowing snow condition
-!! 
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_NSV
-USE MODD_ELEC_DESCR,    ONLY : CELECNAMES 
-USE MODD_CH_M9_n,    ONLY : NEQ, NEQAQ
-USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX
-USE MODD_DIAG_FLAG,ONLY : LELECDIAG,LCHEMDIAG,LCHAQDIAG
-USE MODD_PARAM_n,   ONLY : CCLOUD, CELEC
-USE MODD_DYN_n,     ONLY : LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3,   &
-                           LHORELAX_SVLIMA,                               &
-                           LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, &
-                           LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, &
-                           LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC,  &
-                           LHORELAX_SVSNW    
+USE MODD_BLOWSNOW,        ONLY: LBLOWSNOW, NBLOWSNOW3D
+USE MODD_CH_AEROSOL,      ONLY: JPMODE, LAERINIT, LDEPOS_AER, LORILAM, LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP
+USE MODD_CH_M9_n,         ONLY: NEQ, NEQAQ
+USE MODD_CH_MNHC_n,       ONLY: LCH_PH, LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX
+USE MODD_CONDSAMP,        ONLY: LCONDSAMP, NCONDSAMP
+USE MODD_CONF,            ONLY: LLG, CPROGRAM, NVERB
+USE MODD_CST,             ONLY: XMNH_TINY
+USE MODD_DIAG_FLAG,       ONLY: LCHEMDIAG, LCHAQDIAG
+USE MODD_DUST,            ONLY: LDEPOS_DST, LDSTINIT, LDSTPRES, LDUST, LRGFIX_DST, LVARSIG, NMODE_DST
+USE MODD_DYN_n,           ONLY: LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3,   &
+                                LHORELAX_SVLIMA,                               &
+                                LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, &
+                                LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, &
+                                LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC,  &
+                                LHORELAX_SVSNW
+#ifdef MNH_FOREFIRE
+USE MODD_DYN_n,           ONLY: LHORELAX_SVFF
+#endif
+USE MODD_ELEC_DESCR,      ONLY: LLNOX_EXPLICIT
+USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 #ifdef MNH_FOREFIRE
-USE MODD_DYN_n,     ONLY : LHORELAX_SVFF
 USE MODD_FOREFIRE
 #endif
-USE MODD_CONF,     ONLY : LLG, CPROGRAM
-USE MODD_LG
-USE MODD_DUST
-USE MODD_SALT
-USE MODD_PASPOL
-USE MODD_BLOWSNOW
-USE MODD_CONDSAMP
-USE MODD_CH_AEROSOL
-USE MODD_PREP_REAL, ONLY: XT_LS
-USE MODD_ELEC_DESCR, ONLY : LLNOX_EXPLICIT
-USE MODD_PARAM_C2R2, ONLY : LSUPSAT
-!
-USE MODD_PARAM_LIMA, ONLY: NMOD_CCN, LSCAV, LAERO_MASS, &
-                           NMOD_IFN, NMOD_IMM, LHHONI,  &
-                           LWARM, LCOLD, LRAIN
-!
-USE MODI_UPDATE_NSV
-USE MODD_CST, ONLY : XMNH_TINY
+USE MODD_PARAM_n,         ONLY: CCLOUD, CELEC
+USE MODD_LG,              ONLY: XLG1MIN, XLG2MIN, XLG3MIN
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODD_NSV
+USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, LSCAV, LAERO_MASS, &
+                                NMOD_IFN, NMOD_IMM, LHHONI,  &
+                                LWARM, LCOLD, LRAIN
+USE MODD_PASPOL,          ONLY: LPASPOL, NRELEASE
+USE MODD_PREP_REAL,       ONLY: XT_LS
+USE MODD_SALT,            ONLY: LRGFIX_SLT, LSALT, LSLTINIT, LSLTPRES, NMODE_SLT, LDEPOS_SLT, LVARSIG_SLT
+!
+USE MODI_UPDATE_NSV,      ONLY: UPDATE_NSV
 !
 IMPLICIT NONE 
 !
@@ -115,11 +118,14 @@ INTEGER, INTENT(IN)             :: KMI ! model index
 !
 !*       0.2   Declarations of local variables
 !
+INTEGER :: ILUOUT
 INTEGER :: ISV ! total number of scalar variables
 !
 !-------------------------------------------------------------------------------
 !
-LINI_NSV = .TRUE. 
+LINI_NSV = .TRUE.
+
+ILUOUT = TLUOUT%NLU
 !
 ! Users scalar variables are first considered
 !
@@ -323,6 +329,11 @@ END IF
 !
 ! scalar variables used in chemical core system
 !
+IF (LUSECHEM) THEN
+  CALL CH_INIT_SCHEME_n(KMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB)
+  IF (LORILAM) CALL CH_AER_INIT_SOA(ILUOUT, NVERB)
+END IF
+
 IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN
   NSV_CHEM_A(KMI)   = NEQ
   NSV_CHEMBEG_A(KMI)= ISV+1
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 4c3c53a6c..cd0210ab8 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -96,6 +96,7 @@ END MODULE MODI_INI_PROG_VAR
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !  P. Wautelet 09/03/2021: simplify allocation of scalar variable names
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -130,8 +131,6 @@ USE MODE_MSG
 USE MODE_POS
 use mode_tools_ll,         only: GET_INDICE_ll
 !
-USE MODI_CH_AER_INIT_SOA
-USE MODI_CH_INIT_SCHEME_n
 USE MODI_PGDFILTER
 !
 USE MODN_CH_ORILAM
@@ -247,10 +246,7 @@ IF(PRESENT(HCHEMFILE)) THEN
     !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','')
   END IF ! IIMAX
-! check nsv to be read  
   IF (.NOT.LDUST) THEN
-  ! Always initialize chemical scheme variables before INI_NSV call !
-    CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB)
     LUSECHEM = .TRUE.
   END IF
   IF (LORILAM) THEN
@@ -270,7 +266,7 @@ IF(PRESENT(HCHEMFILE)) THEN
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
   ! initialise NSV_* variables
   ENDIF
-  CALL INI_NSV(1)
+  CALL INI_NSV(IMI)
   ALLOCATE(XSVT(IIU,IJU,IKU,NSV))
   
   ! Read scalars in chem file   
@@ -300,8 +296,6 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF
 
   IF (LORILAM) THEN
-    CALL CH_AER_INIT_SOA(ILUOUT,NVERB)
-    !
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CUNITS     = 'ppp'
     TZFIELD%CDIR       = 'XY'
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index a68b311e2..3fc3e4c85 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -318,6 +318,7 @@
 !  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -388,11 +389,9 @@ USE MODI_UPDATE_METRICS
 USE MODI_SET_REF
 USE MODI_SET_PERTURB
 USE MODI_TOTAL_DMASS
-USE MODI_CH_INIT_SCHEME_n
 USE MODI_CH_INIT_FIELD_n
 USE MODI_INI_NSV
 USE MODI_READ_PRE_IDEA_NAM_n
-USE MODI_CH_AER_INIT_SOA
 USE MODI_ZSMT_PIC
 USE MODI_ZSMT_PGD
 USE MODI_READ_VER_GRID
@@ -870,14 +869,11 @@ IF (CIDEAL == 'RSOU' .AND. NRR < 4 ) NRR=4
 !*       3.5   Chemistry
 !
 IF (LORILAM .OR. LCH_INIT_FIELD) THEN
-  ! Always initialize chemical scheme variables before INI_NSV call !
-  CALL CH_INIT_SCHEME_n(1,LUSECHAQ,LUSECHIC,LCH_PH,NLUOUT,NVERB)
   LUSECHEM = .TRUE.
   IF (LORILAM) THEN
     CORGANIC = "MPMPO"
     LVARSIGI = .TRUE.
     LVARSIGJ = .TRUE.
-    CALL CH_AER_INIT_SOA(NLUOUT, NVERB)
   END IF
 END IF
 ! initialise NSV_* variables
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index d52833480..84c137991 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1998-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -134,7 +134,8 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !  Q. Rodier   16/09/2019: switch of GRIB number ID for orography in ARPEGE/AROME in EPyGrAM
 !  Q. Rodier   27/01/2020: switch of GRIB number ID for orography and hydrometeors in ARPEGE/AROME in EPyGrAM v1.3.7
 !  Q. Rodier   21/04/2020: correction GFS u and v wind component written in the right vertical order
-!  Q. Rodier   02/09/2020 : Read and interpol geopotential height for interpolation on isobaric surface Grid of NCEP 
+!  Q. Rodier   02/09/2020: Read and interpol geopotential height for interpolation on isobaric surface Grid of NCEP
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -153,10 +154,7 @@ USE MODI_READ_VER_GRID
 USE MODI_XYTOLATLON
 USE MODI_HORIBL
 USE MODI_INI_NSV
-USE MODI_CH_INIT_SCHEME_n
 USE MODI_REMOVAL_VORTEX
-USE MODI_CH_INIT_CCS
-USE MODI_CH_AER_INIT_SOA
 USE MODI_INI_CTURB
 USE MODI_CH_OPEN_INPUT
 !
@@ -1285,17 +1283,14 @@ DEALLOCATE(IINLO)
 !---------------------------------------------------------------------------------------
 
 IF (IMODEL==5) THEN 
-  ! Always initialize chemical scheme variables before INI_NSV call !
-  CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT0,KVERB)
   LUSECHEM = .TRUE.
   IF (LORILAM) THEN
     CORGANIC = "MPMPO"
     LVARSIGI = .TRUE.
     LVARSIGJ = .TRUE.
-    CALL CH_AER_INIT_SOA(ILUOUT0, KVERB)
   END IF
   ! initialise NSV_* variables
-  CALL INI_NSV(1)
+  CALL INI_NSV(IMI)
   IF( HFILE=='ATM0' ) THEN
     ALLOCATE (XSV_LS(IIU,IJU,INLEVEL,NSV))
   ELSE IF (HFILE=='CHEM' ) THEN
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index 2bcfc576c..faef2f0c5 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2012-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -86,6 +86,7 @@ END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !!      J.Pianezzej 13/02/2019 : correction for use of MEGAN
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 18/09/2019: correct support of 64bit integers (MNH_INT=8)
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -120,8 +121,6 @@ USE MODE_TIME
 USE MODE_TOOLS,      ONLY: UPCASE
 use mode_tools_ll,   only: GET_DIM_EXT_ll
 !
-USE MODI_CH_AER_INIT_SOA
-USE MODI_CH_INIT_SCHEME_n
 USE MODI_CH_OPEN_INPUT
 USE MODI_HORIBL
 USE MODI_INI_NSV
@@ -427,17 +426,14 @@ enddo
 !------------------------------------------------------------------------
 !* 3 Interpolation of MOZART variable
 !---------------------------------------------------------------------
-  ! Always initialize chemical scheme variables before INI_NSV call !
-  CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT0,KVERB)
   LUSECHEM = .TRUE.
   IF (LORILAM) THEN
     CORGANIC = "MPMPO"
     LVARSIGI = .TRUE.
     LVARSIGJ = .TRUE.
-    CALL CH_AER_INIT_SOA(ILUOUT0, KVERB)
   END IF
   ! initialise NSV_* variables
-  CALL INI_NSV(1)
+  CALL INI_NSV(IMI)
     DEALLOCATE(XSV_LS)
     ALLOCATE (XSV_LS(IIU,IJU,ilevlen,NSV))
    XSV_LS(:,:,:,:) = 0.
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index cb7cd3f98..f8a8740cc 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -296,6 +296,7 @@ END MODULE MODI_READ_EXSEG_n
 !  C. Lac         11/2019: correction in the drag formula and application to building in addition to tree
 !  Q. Rodier      03/2020: add abort if use of any LHORELAX and cyclic conditions
 !  P. Wautelet 09/03/2021: simplify allocation of scalar variable names
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !!------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -362,7 +363,6 @@ USE MODE_MSG
 !
 USE MODI_TEST_NAM_VAR
 USE MODI_INI_NSV
-USE MODI_CH_INIT_SCHEME_n
 USE MODN_CH_ORILAM
 USE MODD_CH_AEROSOL
 USE MODD_DUST
@@ -1216,12 +1216,6 @@ IF ((LUSECHIC).AND.(LCH_RET_ICE)) THEN
   WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE IE NO CHEMICAL SPECIES IN ICE' 
 ENDIF
 !
-IF (LUSECHEM) THEN
-  CALL CH_INIT_SCHEME_n(KMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB)
-  IF (LORILAM) CALL CH_AER_INIT_SOA(ILUOUT, NVERB)
-END IF
-!
-
 CALL UPDATE_NAM_CH_MNHCN
 CALL INI_NSV(KMI)
 !
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index e5de7a4c7..0f1a298d8 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -198,6 +198,7 @@ END MODULE MODI_SPAWN_MODEL2
 !  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -260,7 +261,6 @@ USE MODI_INI_BIKHARDT_n
 USE MODI_DEALLOCATE_MODEL1
 USE MODI_BOUNDARIES
 USE MODI_INI_NSV
-USE MODI_CH_INIT_SCHEME_n
 !$20140710
 USE MODI_UPDATE_METRICS
 !
@@ -577,7 +577,6 @@ IF (NSV_CHEM>0) THEN
            LUSECHIC=.TRUE.
    ENDIF 
    CCHEM_INPUT_FILE = HCHEM_INPUT_FILE
-   CALL CH_INIT_SCHEME_n(1,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB)
 END IF
 !
 CTURB    =  HTURB                 ! for MODD_PARAM2
-- 
GitLab