Skip to content
Snippets Groups Projects
Commit f84e94e8 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables

parent 23dbb4de
No related branches found
No related tags found
No related merge requests found
...@@ -67,14 +67,16 @@ END MODULE MODI_INI_NSV ...@@ -67,14 +67,16 @@ END MODULE MODI_INI_NSV
!! Modification 07/2017 (V. Vionnet) Add blowing snow condition !! Modification 07/2017 (V. Vionnet) Add blowing snow condition
! P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv ! 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: 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 !* 0. DECLARATIONS
! ------------ ! ------------
! !
USE MODD_BLOWSNOW, ONLY: CSNOWNAMES, LBLOWSNOW, NBLOWSNOW3D, YPSNOW_INI 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_AEROSOL, ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, &
USE MODD_CH_M9_n, ONLY: NEQ, NEQAQ 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_CH_MNHC_n, ONLY: LCH_PH, LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX
USE MODD_CONDSAMP, ONLY: LCONDSAMP, NCONDSAMP USE MODD_CONDSAMP, ONLY: LCONDSAMP, NCONDSAMP
USE MODD_CONF, ONLY: LLG, CPROGRAM, NVERB USE MODD_CONF, ONLY: LLG, CPROGRAM, NVERB
...@@ -96,22 +98,28 @@ USE MODD_ELEC_DESCR, ONLY: CELECNAMES ...@@ -96,22 +98,28 @@ USE MODD_ELEC_DESCR, ONLY: CELECNAMES
#ifdef MNH_FOREFIRE #ifdef MNH_FOREFIRE
USE MODD_FOREFIRE USE MODD_FOREFIRE
#endif #endif
USE MODD_PARAM_n, ONLY: CCLOUD, CELEC USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES
USE MODD_LG, ONLY: XLG1MIN, XLG2MIN, XLG3MIN USE MODD_LG, ONLY: CLGNAMES, XLG1MIN, XLG2MIN, XLG3MIN
USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_LUNIT_n, ONLY: TLUOUT
USE MODD_NSV USE MODD_NSV
USE MODD_PARAM_C2R2, ONLY: LSUPSAT 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, & NMOD_IFN, NMOD_IMM, LHHONI, &
LWARM, LCOLD, LRAIN 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_PASPOL, ONLY: LPASPOL, NRELEASE
USE MODD_PREP_REAL, ONLY: XT_LS USE MODD_PREP_REAL, ONLY: XT_LS
USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
USE MODD_SALT, ONLY: CSALTNAMES, CDESLTNAMES, JPSALTORDER, & USE MODD_SALT, ONLY: CSALTNAMES, CDESLTNAMES, JPSALTORDER, &
LRGFIX_SLT, LSALT, LSLTINIT, LSLTPRES, LDEPOS_SLT, LVARSIG_SLT, NMODE_SLT, YPDESLT_INI, YPSALT_INI LRGFIX_SLT, LSALT, LSLTINIT, LSLTPRES, LDEPOS_SLT, LVARSIG_SLT, NMODE_SLT, YPDESLT_INI, YPSALT_INI
USE MODE_MSG 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 IMPLICIT NONE
! !
...@@ -744,4 +752,128 @@ IF ( LBLOWSNOW ) THEN ...@@ -744,4 +752,128 @@ IF ( LBLOWSNOW ) THEN
ENDDO ! Loop on moments ENDDO ! Loop on moments
END IF END IF
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 END SUBROUTINE INI_NSV
!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 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. !MNH_LIC for details. version 1.
!-------------------------------------------------------------------------------
! ############### ! ###############
MODULE MODD_NSV MODULE MODD_NSV
! ############### ! ###############
...@@ -27,14 +28,15 @@ ...@@ -27,14 +28,15 @@
!! Pialat/Tulet 15/02/12 add ForeFire !! Pialat/Tulet 15/02/12 add ForeFire
!! Modification 01/2016 (JP Pinty) Add LIMA !! Modification 01/2016 (JP Pinty) Add LIMA
!! V. Vionnet 07/17 add blowing snow !! 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 !* 0. DECLARATIONS
! ------------ ! ------------
! !
USE MODD_PARAMETERS, ONLY : JPMODELMAX,& ! Maximum allowed number of nested models USE MODD_PARAMETERS, ONLY : JPMODELMAX, & ! Maximum allowed number of nested models
JPSVMAX ! Maximum number of scalar variables JPSVMAX, & ! Maximum number of scalar variables
JPSVNAMELGTMAX ! Maximum length of a scalar variable name
! !
IMPLICIT NONE IMPLICIT NONE
SAVE SAVE
...@@ -43,6 +45,8 @@ REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables ...@@ -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 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 INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables
! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+.. ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+..
INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0 ! number of user scalar variables with 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 ...@@ -144,6 +148,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A
! !
! variables updated for the current model ! 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 CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables
INTEGER :: NSV = 0 ! total number of user scalar variables INTEGER :: NSV = 0 ! total number of user scalar variables
! !
......
!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 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. !MNH_LIC for details. version 1.
...@@ -26,6 +26,8 @@ END MODULE MODI_UPDATE_NSV ...@@ -26,6 +26,8 @@ END MODULE MODI_UPDATE_NSV
!! Modify (Vie) 2016 : add LIMA !! Modify (Vie) 2016 : add LIMA
!! V. Vionnet 7/2017 : add blowing snow var !! V. Vionnet 7/2017 : add blowing snow var
! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! 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_CONF, ONLY : NVERB
USE MODD_NSV USE MODD_NSV
...@@ -44,6 +46,8 @@ END IF ...@@ -44,6 +46,8 @@ END IF
! Update the NSV_* variables from original NSV_*_A arrays ! Update the NSV_* variables from original NSV_*_A arrays
! that have been initialized in ini_nsv.f90 for model KMI ! that have been initialized in ini_nsv.f90 for model KMI
! !
CSVNAMES => CSVNAMES_A(:,KMI)
NSV = NSV_A(KMI) NSV = NSV_A(KMI)
NSV_USER = NSV_USER_A(KMI) NSV_USER = NSV_USER_A(KMI)
NSV_C2R2 = NSV_C2R2_A(KMI) NSV_C2R2 = NSV_C2R2_A(KMI)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment