From cdc9d52662b329aa6f4032bcdfcec8ae9b8439cd Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 4 Jun 2020 13:52:42 +0200
Subject: [PATCH] Philippe 04/06/2020: set_conc_lima: correct array start for
 microphysics concentrations + add kmi dummy argument (this subroutine is also
 called for other models)

---
 src/MNH/boundaries.f90    | 59 +++++++++++++++------------------
 src/MNH/ini_micron.f90    |  8 ++---
 src/MNH/ini_one_wayn.f90  | 12 +++----
 src/MNH/one_wayn.f90      | 11 +++---
 src/MNH/set_conc_lima.f90 | 70 +++++++++++++++++----------------------
 5 files changed, 73 insertions(+), 87 deletions(-)

diff --git a/src/MNH/boundaries.f90 b/src/MNH/boundaries.f90
index a0095f8c3..3ab2cf047 100644
--- a/src/MNH/boundaries.f90
+++ b/src/MNH/boundaries.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2020 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/boundaries.f90,v $ $Revision: 1.3.2.1.2.1.2.2.12.3 $ $Date: 2014/01/09 15:01:54 $
-!-----------------------------------------------------------------
 !#####################
 MODULE MODI_BOUNDARIES
 !#####################
@@ -176,46 +172,43 @@ END MODULE MODI_BOUNDARIES
 !!      Modification    18/07/17 (Vionnet)  Add blowing snow variables 
 !!      Modification    01/2018  (JL Redelsperger) Correction for TKE treatment
 !!      Modification    03/02/2020 (B. Vié)  Correction for SV with LIMA
+!  P. Wautelet 04/06/2020: correct call to Set_conc_lima
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !         
-USE MODD_PARAMETERS
-USE MODD_CTURB
-USE MODD_CONF
-USE MODD_NSV
-USE MODD_CH_MNHC_n,   ONLY : LUSECHEM, LUSECHIC
-USE MODD_CH_AEROSOL , ONLY : LORILAM
-USE MODD_DUST
-USE MODD_SALT,        ONLY : LSALT
-USE MODD_PASPOL,      ONLY : LPASPOL
-USE MODD_CONDSAMP,    ONLY : LCONDSAMP
-USE MODD_ELEC_DESCR             
-USE MODD_ELEC_n 
 USE MODD_BLOWSNOW,  ONLY : LBLOWSNOW,NBLOWSNOW_2D
 USE MODD_BLOWSNOW_n
-USE MODD_REF_n    
-USE MODD_PARAM_n,    ONLY : CELEC,CCLOUD 
-USE MODD_LBC_n,      ONLY : XPOND
+USE MODD_CH_AEROSOL , ONLY : LORILAM
+USE MODD_CH_MNHC_n,   ONLY : LUSECHEM, LUSECHIC
+USE MODD_CONDSAMP,    ONLY : LCONDSAMP
+USE MODD_CONF
+USE MODD_CTURB
+USE MODD_DUST
 USE MODD_GRID_n,    ONLY : XZZ
-!
-USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND, LWARM, LCOLD
-!
+USE MODD_ELEC_DESCR
+USE MODD_ELEC_n
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE,   ONLY : LFOREFIRE
 #endif
+USE MODD_LBC_n,      ONLY : XPOND
+USE MODE_ll
 USE MODD_NESTING,      ONLY : NDAD
-!
+USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND, LWARM, LCOLD
+USE MODD_PARAM_n,    ONLY : CELEC,CCLOUD
+USE MODD_PASPOL,      ONLY : LPASPOL
+USE MODD_REF_n
+USE MODD_SALT,        ONLY : LSALT
+
 USE MODE_MODELN_HANDLER
-!
-USE MODI_ION_BOUNDARIES
+USE MODE_SET_CONC_LIMA
+
 USE MODI_CH_BOUNDARIES
-!
-USE MODE_ll
-!
 USE MODI_INIT_AEROSOL_CONCENTRATION
-USE MODI_SET_CONC_LIMA
-!
+USE MODI_ION_BOUNDARIES
+
 IMPLICIT NONE
 !
 !
@@ -1013,7 +1006,7 @@ IF (CCLOUD == 'LIMA' .AND. IMI == 1 .AND. CPROGRAM=='MESONH') THEN
      ENDIF
   END DO
 
-  CALL SET_CONC_LIMA('NONE',PRHODREF,ZRT,ZSVT)
+  CALL SET_CONC_LIMA( IMI, 'NONE', PRHODREF, ZRT(:, :, :, :), ZSVT(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
   IF (NSV_LIMA_NC.GE.1) THEN
      IF (GLIMABOUNDARY(NSV_LIMA_NC)) THEN
         PSVT(IIB-1,:,:,NSV_LIMA_NC)=ZSVT(IIB-1,:,:,NSV_LIMA_NC) ! cloud
diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90
index ecdcce161..3660c408b 100644
--- a/src/MNH/ini_micron.f90
+++ b/src/MNH/ini_micron.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2020 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.
@@ -94,6 +94,7 @@ USE MODI_SET_CONC_ICE_C1R3
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_BLOWSNOW_SEDIM_LKT
+USE MODE_SET_CONC_LIMA
 !
 USE MODD_NSV,        ONLY : NSV,NSV_CHEM,NSV_C2R2BEG,NSV_C2R2END, &
                             NSV_C1R3BEG,NSV_C1R3END,              &
@@ -109,7 +110,6 @@ USE MODD_LIMA_PRECIP_SCAVENGING_n
 !
 USE MODI_INIT_AEROSOL_CONCENTRATION
 USE MODI_INI_LIMA
-USE MODI_SET_CONC_LIMA
 !
 IMPLICIT NONE
 !
@@ -140,6 +140,7 @@ INTEGER :: IMI
 !
 CALL GET_DIM_EXT_ll('B',IIU,IJU)
 IKU=SIZE(XZZ,3)
+IMI = GET_CURRENT_MODEL_INDEX()
 !
 !
 !*       2.    ALLOCATE  Module MODD_PRECIP_n
@@ -317,7 +318,7 @@ ENDIF
 !
 IF (CCLOUD == 'LIMA') THEN
   IF (CGETCLOUD/='READ') THEN
-    CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END))
+    CALL SET_CONC_LIMA(IMI,CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END))
   END IF
 END IF
 !
@@ -326,7 +327,6 @@ END IF
 !              ----------------------------------
 !
 !
-IMI = GET_CURRENT_MODEL_INDEX()
 !IF (CELEC /= 'NONE') THEN
 !  CALL INI_ELEC(IMI,CINIFILE,CLUOUT,XTSTEP,ZDZMIN,NSPLITR, &
 !                XDXX,XDYY,XDZZ,XDZX,XDZY                   )
diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90
index 4182d6a2e..1c0ad2b59 100644
--- a/src/MNH/ini_one_wayn.f90
+++ b/src/MNH/ini_one_wayn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-2020 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.
 !-----------------------------------------------------------------
 !     #######################
@@ -139,8 +139,8 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,                 &
 !!    J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
 !!      B.VIE   2016 : LIMA
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 04/06/2020: correct call to Set_conc_lima
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -164,7 +164,7 @@ USE MODI_SET_CONC_RAIN_C2R2
 USE MODI_SET_CONC_ICE_C1R3
 USE MODI_SET_CHEMAQ_1WAY
 !
-USE MODI_SET_CONC_LIMA
+USE MODE_SET_CONC_LIMA
 !
 IMPLICIT NONE
 !
@@ -407,7 +407,7 @@ IF (HCLOUD=="LIMA"  ) THEN
       ELSE
          ZINIT_TYPE = "NONE"
       END IF
-      CALL SET_CONC_LIMA (ZINIT_TYPE,XRHODREF,XRT,ZCONCM)
+      CALL SET_CONC_LIMA (KMI,ZINIT_TYPE,XRHODREF,XRT,ZCONCM)
       DO JSV=1,NSV_LIMA_A(KMI)
          CALL SET_LSFIELD_1WAY_ll(ZCONCM(:,:,:,JSV),&
               &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90
index 0490f8fd1..baa51ac83 100644
--- a/src/MNH/one_wayn.f90
+++ b/src/MNH/one_wayn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2020 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.
 !-----------------------------------------------------------------
 !     ###################
@@ -186,7 +186,8 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT,                            &
 !!   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
 !!      Modification    01/2016  (JP Pinty) Add LIMA
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 04/06/2020: correct call to Set_conc_lima
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -209,7 +210,7 @@ USE MODI_VER_INTERP_LIN
 USE MODI_SET_CONC_RAIN_C2R2
 USE MODI_SET_CONC_ICE_C1R3
 USE MODI_SET_CHEMAQ_1WAY
-USE MODI_SET_CONC_LIMA
+USE MODE_SET_CONC_LIMA
 !
 IMPLICIT NONE
 !
@@ -487,7 +488,7 @@ IF (HCLOUD=="LIMA"  ) THEN
       ELSE
          ZINIT_TYPE = "NONE"
       END IF
-      CALL SET_CONC_LIMA (ZINIT_TYPE,XRHODREF,XRT,ZCONCT)
+      CALL SET_CONC_LIMA (KMI,ZINIT_TYPE,XRHODREF,XRT,ZCONCT)
       DO JSV=1,NSV_LIMA_A(KMI)
          CALL SET_LSFIELD_1WAY_ll(ZCONCT(:,:,:,JSV),&
               &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
diff --git a/src/MNH/set_conc_lima.f90 b/src/MNH/set_conc_lima.f90
index f9be36c90..25223e03c 100644
--- a/src/MNH/set_conc_lima.f90
+++ b/src/MNH/set_conc_lima.f90
@@ -1,32 +1,18 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2020 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_SET_CONC_LIMA
-!      #######################################
-!
-INTERFACE
-!
-      SUBROUTINE SET_CONC_LIMA (HGETCLOUD,PRHODREF,PRT,PSVT)
-!
-CHARACTER (LEN=4),         INTENT(IN) :: HGETCLOUD  ! Get indicator
-REAL, DIMENSION(:,:,:),    INTENT(IN) :: PRHODREF   ! Reference density
-!
-REAL, DIMENSION(:,:,:,:),  INTENT(INOUT) :: PRT     ! microphysical mixing ratios
-!
-REAL,  DIMENSION(:,:,:,:), INTENT(INOUT):: PSVT     ! microphys. concentrations
-!
-!
-END SUBROUTINE SET_CONC_LIMA
-!
-END INTERFACE
-!
-END MODULE MODI_SET_CONC_LIMA
-!
+module mode_set_conc_lima
+!#######################################
+
+implicit none
+
+contains
+
 !     ###########################################################################
-      SUBROUTINE SET_CONC_LIMA (HGETCLOUD,PRHODREF,PRT,PSVT)
+      SUBROUTINE SET_CONC_LIMA( kmi, HGETCLOUD, PRHODREF, PRT, PSVT )
 !     ###########################################################################
 !
 !!****  *SET_CONC_LIMA * - initialize droplet, raindrop and ice
@@ -79,7 +65,9 @@ END MODULE MODI_SET_CONC_LIMA
 !!      Original    15/11/00
 !!                        2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM        *
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!  B.Vié : 03/03/2020  secure physical tests
+!  B. Vié      03/03/2020: secure physical tests
+!  P. Wautelet 04/06/2020: correct array start for microphys. concentrations + add kmi dummy argument
+!                          (this subroutine is also called for other models)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -87,7 +75,8 @@ END MODULE MODI_SET_CONC_LIMA
 !
 USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, LCOLD, LWARM, LRAIN, NMOD_CCN, NMOD_IFN
 USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI
-USE MODD_NSV,             ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_ACTI, NSV_LIMA_NI, NSV_LIMA_IFN_NUCL
+USE MODD_NSV,             ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, NSV_LIMA_CCN_ACTI_A, &
+                                 NSV_LIMA_NI_A, NSV_LIMA_IFN_NUCL_A
 USE MODD_CST,             ONLY : XPI, XRHOLW, XRHOLI
 USE MODD_CONF,            ONLY : NVERB
 USE MODD_CONF_n,          ONLY : NRR
@@ -100,12 +89,13 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+integer,                   intent(in) :: kmi        ! Model number
 CHARACTER (LEN=4),         INTENT(IN) :: HGETCLOUD  ! Get indicator
 REAL, DIMENSION(:,:,:),    INTENT(IN) :: PRHODREF   ! Reference density
 !
 REAL, DIMENSION(:,:,:,:),  INTENT(INOUT) :: PRT     ! microphysical mixing ratios
 !
-REAL,  DIMENSION(:,:,:,:), INTENT(INOUT):: PSVT     ! microphys. concentrations
+REAL,  DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT     ! microphys. concentrations
 !
 !
 !*       0.2   Declarations of local variables :
@@ -129,19 +119,19 @@ IF (LWARM .AND. NRR.GE.2) THEN
 !
    ZCONCC = 300.E6 ! droplet concentration set at 300 cm-3
    WHERE ( PRT(:,:,:,2) > 1.E-11 )
-      PSVT(:,:,:,NSV_LIMA_NC) = ZCONCC
+      PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = ZCONCC
    END WHERE
    WHERE ( PRT(:,:,:,2) <= 1.E-11 )
       PRT(:,:,:,2)  = 0.0
-      PSVT(:,:,:,NSV_LIMA_NC) = 0.0
+      PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = 0.0
    END WHERE
    
    IF (NMOD_CCN .GE. 1) THEN
       WHERE ( PRT(:,:,:,2) > 1.E-11 )
-         PSVT(:,:,:,NSV_LIMA_CCN_ACTI) = ZCONCC
+         PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = ZCONCC
       END WHERE
       WHERE ( PRT(:,:,:,2) <= 1.E-11 )
-         PSVT(:,:,:,NSV_LIMA_CCN_ACTI) = 0.0
+         PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = 0.0
       END WHERE
    END IF
    
@@ -157,15 +147,15 @@ IF (LWARM .AND. LRAIN .AND. NRR.GE.3) THEN
 !
    ZCONCR = (1.E7)**3/(XPI*XRHOLW) ! cf XCONCR_PARAM_INI in ini_rain_c2r2.f90
    IF (HGETCLOUD == 'INI1') THEN ! init from REVE scheme
-      PSVT(:,:,:,NSV_LIMA_NR) = 0.0
+      PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0
    ELSE ! init from KESS, ICE3...
       WHERE ( PRT(:,:,:,3) > 1.E-11 )
-         PSVT(:,:,:,NSV_LIMA_NR) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) &
+         PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) &
               *ZCONCR)),1. )
       END WHERE
       WHERE ( PRT(:,:,:,3) <= 1.E-11 )
          PRT(:,:,:,3)  = 0.0
-         PSVT(:,:,:,NSV_LIMA_NR) = 0.0
+         PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0
       END WHERE
       IF( NVERB >= 5 ) THEN
          WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The raindrop concentration has "
@@ -181,23 +171,23 @@ IF (LCOLD .AND. NRR.GE.4) THEN
    ZCONCI = 100.E3 ! maximum ice concentration set at 100/L
    WHERE ( PRT(:,:,:,4) > 1.E-11 )
 !
-!      PSVT(:,:,:,NSV_LIMA_NI) = MIN( PRHODREF(:,:,:) /                                     &
+!      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN( PRHODREF(:,:,:) /                                     &
 !           ( XRHOLI * XAI*(10.E-06)**XBI * PRT(:,:,:,4) ), &
 !           ZCONCI )
 ! Correction
-      PSVT(:,:,:,NSV_LIMA_NI) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONCI )
+      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONCI )
    END WHERE
    WHERE ( PRT(:,:,:,4) <= 1.E-11 )
       PRT(:,:,:,4)  = 0.0
-      PSVT(:,:,:,NSV_LIMA_NI) = 0.0
+      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = 0.0
    END WHERE
 
    IF (NMOD_IFN .GE. 1) THEN
       WHERE ( PRT(:,:,:,4) > 1.E-11 )
-         PSVT(:,:,:,NSV_LIMA_IFN_NUCL) = PSVT(:,:,:,NSV_LIMA_NI)
+         PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = PSVT(:,:,:,NSV_LIMA_NI_A(kmi))
       END WHERE
       WHERE ( PRT(:,:,:,4) <= 1.E-11 )
-         PSVT(:,:,:,NSV_LIMA_IFN_NUCL) = 0.0
+         PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = 0.0
       END WHERE
    END IF
 
@@ -209,3 +199,5 @@ IF (LCOLD .AND. NRR.GE.4) THEN
 END IF
 !
 END SUBROUTINE SET_CONC_LIMA
+
+end module mode_set_conc_lima
-- 
GitLab