SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ch_init_names.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6 SUBROUTINE ch_init_names (KLUOUT,HSV,KBEQ,KBAER,HSVO,&
7  ksv_chsbeg,ksv_chsend, ksv_aerbeg, ksv_aerend,&
8  ovarsigi, ovarsigj)
9 !! ###########################################
10 !!
11 !!*** *CH_INIT_NAMES*
12 !!
13 !! PURPOSE
14 !! -------
15 !! Read and filter all chemical species into the CSV array
16 !! initialize NSV_CHSBEG and NSV_CHSEND index for the begin and the ending chemical index
17 !!
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !! AUTHOR
23 !! ------
24 !! P. Tulet *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 16/10/01
29 !! 01/12/03 (D.Gazen) change emissions handling for surf. externalization
30 !! 01/06/05 (P.Tulet) add aerosols list
31 !!
32 !! EXTERNAL
33 !! --------
34 !!
35 !! IMPLICIT ARGUMENTS
36 !! ------------------
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 USE yomhook ,ONLY : lhook, dr_hook
44 USE parkind1 ,ONLY : jprb
45 !
46 IMPLICIT NONE
47 !
48 !* 0.1 declarations of arguments
49 !
50 
51 INTEGER, INTENT(IN) :: kluout ! output listing channel
52  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: hsv ! name of chemical species
53  ! with character # (gas chemistry )
54  ! and character @ (aerosols)
55 INTEGER, INTENT(OUT) :: kbeq ! number of chemical variables
56 INTEGER, INTENT(OUT) :: kbaer ! number of aerosol variables
57  CHARACTER(LEN=*), DIMENSION(SIZE(HSV)), INTENT(OUT) :: hsvo ! name of scalar species without # and @
58 INTEGER, INTENT(OUT) :: ksv_chsbeg ! first chemical var.
59 INTEGER, INTENT(OUT) :: ksv_chsend ! last chemical var.
60 INTEGER, INTENT(OUT) :: ksv_aerbeg ! first aerosol var.
61 INTEGER, INTENT(OUT) :: ksv_aerend ! last aerosol var.
62 LOGICAL, INTENT(OUT) :: ovarsigi, ovarsigj ! type of standard deviation
63 !
64 !* 0.2 declarations of local variables
65 INTEGER :: jsv !! loop NBEQ
66  CHARACTER :: yrc1
67  CHARACTER(LEN=5) :: yrc2
68 REAL(KIND=JPRB) :: zhook_handle
69 !
70 !-------------------------------------------------------------------------------
71 
72 IF (lhook) CALL dr_hook('CH_INIT_NAMES',0,zhook_handle)
73 kbeq = 0
74 kbaer = 0
75 ksv_chsbeg = 0
76 ksv_aerbeg = 0
77 ksv_chsend = 0
78 ksv_aerend = 0
79 ovarsigi = .false.
80 ovarsigj = .false.
81 nsoa = 0
82 
83 
84 DO jsv=1, SIZE(hsv)
85 
86  hsvo(jsv) = hsv(jsv)
87  yrc1= hsv(jsv)(1:1)
88  yrc2 = hsv(jsv)(2:)
89 
90  IF (yrc1 == '#') THEN
91  hsvo(jsv) = trim(yrc2)
92  kbeq = kbeq + 1
93  IF (kbeq == 1) ksv_chsbeg=jsv
94  ELSE IF (yrc1 == '@') THEN
95  hsvo(jsv) = trim(yrc2)
96  kbaer = kbaer + 1
97  IF (kbaer == 1) ksv_aerbeg=jsv
98  IF (hsvo(jsv) == "M6I") ovarsigi = .true.
99  IF (hsvo(jsv) == "M6J") ovarsigj = .true.
100  IF (hsvo(jsv) == "SOA1I") nsoa = 10
101  ENDIF
102 
103 ENDDO
104 
105 ksv_chsend = ksv_chsbeg + kbeq -1
106 ksv_aerend = ksv_aerbeg + kbaer -1
107 
108 IF (kbaer .GT. 0) THEN
109 DO jsv=1, size(hsvo)
110  IF (trim(hsvo(jsv)) == "M0I") jp_ch_m0i=jsv-ksv_chsend
111  IF (trim(hsvo(jsv)) == "M0J") jp_ch_m0j=jsv-ksv_chsend
112  IF (trim(hsvo(jsv)) == "M6I") jp_ch_m6i=jsv-ksv_chsend
113  IF (trim(hsvo(jsv)) == "M6J") jp_ch_m6j=jsv-ksv_chsend
114  IF (trim(hsvo(jsv)) == "H2OI") jp_ch_h2oi=jsv-ksv_chsend
115  IF (trim(hsvo(jsv)) == "H2OJ") jp_ch_h2oj=jsv-ksv_chsend
116  IF (trim(hsvo(jsv)) == "SO4I") jp_ch_so4i=jsv-ksv_chsend
117  IF (trim(hsvo(jsv)) == "SO4J") jp_ch_so4j=jsv-ksv_chsend
118  IF (trim(hsvo(jsv)) == "NO3I") jp_ch_no3i=jsv-ksv_chsend
119  IF (trim(hsvo(jsv)) == "NO3J") jp_ch_no3j=jsv-ksv_chsend
120  IF (trim(hsvo(jsv)) == "NH3I") jp_ch_nh3i=jsv-ksv_chsend
121  IF (trim(hsvo(jsv)) == "NH3J") jp_ch_nh3j=jsv-ksv_chsend
122  IF (trim(hsvo(jsv)) == "OCI") jp_ch_oci=jsv-ksv_chsend
123  IF (trim(hsvo(jsv)) == "OCJ") jp_ch_ocj=jsv-ksv_chsend
124  IF (trim(hsvo(jsv)) == "BCI") jp_ch_bci=jsv-ksv_chsend
125  IF (trim(hsvo(jsv)) == "BCJ") jp_ch_bcj=jsv-ksv_chsend
126  IF (trim(hsvo(jsv)) == "DSTI") jp_ch_dsti=jsv-ksv_chsend
127  IF (trim(hsvo(jsv)) == "DSTJ") jp_ch_dstj=jsv-ksv_chsend
128 END DO
129 
130 END IF
131 IF (lhook) CALL dr_hook('CH_INIT_NAMES',1,zhook_handle)
132 
133 !
134 END SUBROUTINE ch_init_names
subroutine ch_init_names(KLUOUT, HSV, KBEQ, KBAER, HSVO, KSV_CHSBEG, KSV_CHSEND, KSV_AERBEG, KSV_AEREND, OVARSIGI, OVARSIGJ)