From f84e94e81d7c09d935c02a489120543376793ab5 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 10 Mar 2021 14:06:13 +0100 Subject: [PATCH] Philippe 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables --- src/MNH/ini_nsv.f90 | 144 +++++++++++++++++++++++++++++++++++++++-- src/MNH/modd_nsv.f90 | 15 +++-- src/MNH/update_nsv.f90 | 6 +- 3 files changed, 153 insertions(+), 12 deletions(-) diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90 index 0124c93e9..3af5e4c35 100644 --- a/src/MNH/ini_nsv.f90 +++ b/src/MNH/ini_nsv.f90 @@ -67,14 +67,16 @@ END MODULE MODI_INI_NSV !! Modification 07/2017 (V. Vionnet) Add blowing snow condition ! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv ! P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv +! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_BLOWSNOW, ONLY: CSNOWNAMES, LBLOWSNOW, NBLOWSNOW3D, YPSNOW_INI -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_AEROSOL, ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, & + LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP +USE MODD_CH_M9_n, ONLY: CICNAMES, CNAMES, 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 @@ -96,22 +98,28 @@ USE MODD_ELEC_DESCR, ONLY: CELECNAMES #ifdef MNH_FOREFIRE USE MODD_FOREFIRE #endif -USE MODD_PARAM_n, ONLY: CCLOUD, CELEC -USE MODD_LG, ONLY: XLG1MIN, XLG2MIN, XLG3MIN +USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES +USE MODD_LG, ONLY: CLGNAMES, 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, & +USE MODD_PARAM_LIMA, ONLY: NINDICE_CCN_IMM, NMOD_CCN, LSCAV, LAERO_MASS, & NMOD_IFN, NMOD_IMM, LHHONI, & LWARM, LCOLD, LRAIN +USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +USE MODD_PARAM_LIMA_WARM, ONLY: CAERO_MASS, CLIMA_WARM_NAMES +USE MODD_PARAM_n, ONLY: CCLOUD, CELEC USE MODD_PASPOL, ONLY: LPASPOL, NRELEASE USE MODD_PREP_REAL, ONLY: XT_LS +USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES USE MODD_SALT, ONLY: CSALTNAMES, CDESLTNAMES, JPSALTORDER, & LRGFIX_SLT, LSALT, LSLTINIT, LSLTPRES, LDEPOS_SLT, LVARSIG_SLT, NMODE_SLT, YPDESLT_INI, YPSALT_INI USE MODE_MSG -USE MODI_UPDATE_NSV, ONLY: UPDATE_NSV +USE MODI_CH_AER_INIT_SOA, ONLY: CH_AER_INIT_SOA +USE MODI_CH_INIT_SCHEME_n, ONLY: CH_INIT_SCHEME_n +USE MODI_UPDATE_NSV, ONLY: UPDATE_NSV ! IMPLICIT NONE ! @@ -744,4 +752,128 @@ IF ( LBLOWSNOW ) THEN ENDDO ! Loop on moments END IF END IF + +! Allocate/reallocate CSVNAMES_A +IF ( .NOT. ALLOCATED( CSVNAMES_A ) ) ALLOCATE( CSVNAMES_A( NSV, KMI) ) +IF ( SIZE( CSVNAMES_A, 1 ) < NSV .OR. SIZE( CSVNAMES_A, 2 ) < KMI ) THEN + ALLOCATE( YSVNAMES_TMP(NSV, KMI) ) + DO JJ = 1, SIZE( CSVNAMES_A, 2 ) + DO JI = 1, SIZE( CSVNAMES_A, 1 ) + YSVNAMES_TMP(JI, JJ) = CSVNAMES_A(JI, JJ) + END DO + END DO + CALL MOVE_ALLOC( FROM = YSVNAMES_TMP, TO = CSVNAMES_A ) +END IF + +!Fill CSVNAMES_A for model KMI +DO JSV = 1, NSV_USER_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV + CSVNAMES_A(JSV,KMI) = 'SVUSER'//YNUM3 +END DO + +DO JSV = NSV_C2R2BEG_A(KMI), NSV_C2R2END_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_C1R3BEG_A(KMI), NSV_C1R3END_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( C1R3NAMES(JSV-NSV_C1R3BEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_LIMA_BEG_A(KMI), NSV_LIMA_END_A(KMI) + IF ( JSV == NSV_LIMA_NC_A(KMI) ) THEN + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(1) ) + ELSE IF ( JSV == NSV_LIMA_NR_A(KMI) ) THEN + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(2) ) + ELSE IF ( JSV >= NSV_LIMA_CCN_FREE_A(KMI) .AND. JSV < NSV_LIMA_CCN_ACTI_A(KMI) ) THEN + WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_FREE_A(KMI) + 1 + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2 + ELSE IF (JSV >= NSV_LIMA_CCN_ACTI_A(KMI) .AND. JSV < ( NSV_LIMA_CCN_ACTI_A(KMI) + NMOD_CCN ) ) THEN + WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_ACTI_A(KMI) + 1 + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2 + ELSE IF ( JSV == NSV_LIMA_SCAVMASS_A(KMI) ) THEN + CSVNAMES_A(JSV,KMI) = TRIM( CAERO_MASS(1) ) + ELSE IF ( JSV == NSV_LIMA_NI_A(KMI) ) THEN + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(1) ) + ELSE IF ( JSV >= NSV_LIMA_IFN_FREE_A(KMI) .AND. JSV < NSV_LIMA_IFN_NUCL_A(KMI) ) THEN + WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_FREE_A(KMI) + 1 + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(2) ) // YNUM2 + ELSE IF ( JSV >= NSV_LIMA_IFN_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IFN_NUCL_A(KMI) + NMOD_IFN ) ) THEN + WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_NUCL_A(KMI) + 1 + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(3) ) // YNUM2 + ELSE IF ( JSV >= NSV_LIMA_IMM_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IMM_NUCL_A(KMI) + NMOD_IMM ) ) THEN + WRITE( YNUM2, '( I2.2 )' ) NINDICE_CCN_IMM(JSV-NSV_LIMA_IMM_NUCL_A(KMI)+1) + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(4) ) // YNUM2 + ELSE IF ( JSV == NSV_LIMA_HOM_HAZE_A(KMI) ) THEN + CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(5) ) + ELSE + CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'invalid index for LIMA' ) + END IF +END DO + +DO JSV = NSV_ELECBEG_A(KMI), NSV_ELECEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_LGBEG_A(KMI), NSV_LGEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_PPBEG_A(KMI), NSV_PPEND_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_PPBEG_A(KMI)+1 + CSVNAMES_A(JSV,KMI) = 'SVPP'//YNUM3 +END DO + +#ifdef MNH_FOREFIRE +DO JSV = NSV_FFBEG_A(KMI), NSV_FFEND_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_FFBEG_A(KMI)+1 + CSVNAMES_A(JSV,KMI) = 'SVFF'//YNUM3 +END DO +#endif + +DO JSV = NSV_CSBEG_A(KMI), NSV_CSEND_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_CSBEG_A(KMI) + CSVNAMES_A(JSV,KMI) = 'SVCS'//YNUM3 +END DO + +DO JSV = NSV_CHEMBEG_A(KMI), NSV_CHEMEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_CHICBEG_A(KMI), NSV_CHICEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_AERBEG_A(KMI), NSV_AEREND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_AERDEPBEG_A(KMI), NSV_AERDEPEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_DSTBEG_A(KMI), NSV_DSTEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_DSTDEPBEG_A(KMI), NSV_DSTDEPEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_SLTBEG_A(KMI), NSV_SLTEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_SLTDEPBEG_A(KMI), NSV_SLTDEPEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_SNWBEG_A(KMI), NSV_SNWEND_A(KMI) + CSVNAMES_A(JSV,KMI) = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ) +END DO + +DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI) + WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_LNOXBEG_A(KMI)+1 + CSVNAMES_A(JSV,KMI) = 'SVLNOX'//YNUM3 +END DO + END SUBROUTINE INI_NSV diff --git a/src/MNH/modd_nsv.f90 b/src/MNH/modd_nsv.f90 index 2417f728a..50e18d615 100644 --- a/src/MNH/modd_nsv.f90 +++ b/src/MNH/modd_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 MODD_NSV ! ############### @@ -27,14 +28,15 @@ !! Pialat/Tulet 15/02/12 add ForeFire !! Modification 01/2016 (JP Pinty) Add LIMA !! V. Vionnet 07/17 add blowing snow -!! +! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS, ONLY : JPMODELMAX,& ! Maximum allowed number of nested models - JPSVMAX ! Maximum number of scalar variables +USE MODD_PARAMETERS, ONLY : JPMODELMAX, & ! Maximum allowed number of nested models + JPSVMAX, & ! Maximum number of scalar variables + JPSVNAMELGTMAX ! Maximum length of a scalar variable name ! IMPLICIT NONE SAVE @@ -43,6 +45,8 @@ REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables ! LOGICAL :: LINI_NSV = .FALSE. ! becomes True when routine INI_NSV is called ! +CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A !Names of all the scalar variables + INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+.. INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0 ! number of user scalar variables with @@ -144,6 +148,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A ! ! variables updated for the current model ! +CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES !Names of all the scalar variables CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables INTEGER :: NSV = 0 ! total number of user scalar variables ! diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90 index 3d691aa48..807307a81 100644 --- a/src/MNH/update_nsv.f90 +++ b/src/MNH/update_nsv.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 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 for details. version 1. @@ -26,6 +26,8 @@ END MODULE MODI_UPDATE_NSV !! Modify (Vie) 2016 : add LIMA !! V. Vionnet 7/2017 : add blowing snow var ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables +!------------------------------------------------------------------------------- ! USE MODD_CONF, ONLY : NVERB USE MODD_NSV @@ -44,6 +46,8 @@ END IF ! Update the NSV_* variables from original NSV_*_A arrays ! that have been initialized in ini_nsv.f90 for model KMI ! +CSVNAMES => CSVNAMES_A(:,KMI) + NSV = NSV_A(KMI) NSV_USER = NSV_USER_A(KMI) NSV_C2R2 = NSV_C2R2_A(KMI) -- GitLab