SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_chemicaln.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 init_chemical_n(KLUOUT, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, &
7  hdstnames, hsltnames )
8 !#############################################################
9 !
10 !!**** *INIT_CHEMICAL_n* - routine to initialize CHEMICAL SPECIES
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 08/2011
36 !!
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modd_sv_n, ONLY : sv_t
43 !
44 USE modd_chs_aerosol, ONLY: lvarsigi, lvarsigj
45 USE modd_dst_surf, ONLY: lvarsig_dst, ndstmde, ndst_mdebeg, lrgfix_dst, jpmode_dst
46 USE modd_slt_surf, ONLY: lvarsig_slt, nsltmde, nslt_mdebeg, lrgfix_slt, jpmode_slt
47 !
48 USE modi_ch_init_names
49 USE modi_dslt_init_names
50 USE modi_dslt_init_modes
51 !
52 USE yomhook ,ONLY : lhook, dr_hook
53 USE parkind1 ,ONLY : jprb
54 !
55 IMPLICIT NONE
56 !
57 !* 0.1 Declarations of arguments
58 ! -------------------------
59 !
60 INTEGER, INTENT(IN) :: kluout
61 INTEGER, INTENT(IN) :: ksv ! number of scalars
62  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: hsv ! name of all scalar variables
63  TYPE(sv_t), INTENT(INOUT) :: ysv
64  CHARACTER(LEN=6), DIMENSION(:), POINTER :: hch_names
65  CHARACTER(LEN=6), DIMENSION(:), POINTER :: haer_names
66 
67  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: hdstnames
68  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: hsltnames
69 !
70 !* 0.2 Declarations of local variables
71 ! -------------------------------
72 !
73 REAL(KIND=JPRB) :: zhook_handle
74 !
75 !-------------------------------------------------------------------------------
76 !
77 ! Initialisation for IO
78 !
79 !
80 IF (lhook) CALL dr_hook('INIT_CHEMICAL_n',0,zhook_handle)
81 !
82 IF (ksv /= 0) THEN
83  !
84  ALLOCATE(ysv%CSV(ksv))
85  CALL ch_init_names(kluout, hsv, ysv%NBEQ, ysv%NAEREQ, ysv%CSV, &
86  ysv%NSV_CHSBEG, ysv%NSV_CHSEND, &
87  ysv%NSV_AERBEG, ysv%NSV_AEREND, &
88  lvarsigi, lvarsigj )
89 
90  IF (ysv%NBEQ > 0 ) THEN
91  ALLOCATE(hch_names(ysv%NBEQ))
92  hch_names(:) = ysv%CSV(ysv%NSV_CHSBEG:ysv%NSV_CHSEND)
93  ELSE
94  ALLOCATE(hch_names(0))
95  END IF
96 
97  IF (ysv%NAEREQ > 0 ) THEN
98  ALLOCATE(haer_names(ysv%NAEREQ))
99  haer_names(:) = ysv%CSV(ysv%NSV_AERBEG:ysv%NSV_AEREND)
100  ELSE
101  ALLOCATE(haer_names(0))
102  END IF
103  !
104  CALL dslt_init_names( &
105  kluout, &!I [idx] index of writing unit
106  'DSTM', &
107  hsv, &!I [char] list of scalar variables
108  jpmode_dst, &
109  ysv%NDSTEQ, &!O [nbr] number of dust related tracers
110  ysv%NSV_DSTBEG, &!O [idx] first dust related scalar variable
111  ysv%NSV_DSTEND, &!O [idx] last dust related scalar variable
112  lvarsig_dst, &!O type of standard deviation (fixed or variable)
113  lrgfix_dst &!O type of mean radius (fixed or variable)
114  )
115 
116  IF (present(hdstnames)) THEN
117  IF (ysv%NDSTEQ >=1) THEN
118  CALL dslt_init_modes( &
119  ysv%NDSTEQ, &!I [nbr] number of dust related variables in scalar list
120  ysv%NSV_DSTBEG, &!I [idx] index of first dust related variable in scalar list
121  ysv%NSV_DSTEND, &!I [idx] index of last dust related variable in scalar list
122  lvarsig_dst, &!I type of standard deviation (fixed or variable)
123  lrgfix_dst, &!O type of mean radius (fixed or variable)
124  ndst_mdebeg, &!O [idx] index of mass for first mode in scalar list
125  ndstmde &!O [nbr] number of modes to be transported
126  )
127 
128  IF(.NOT. ASSOCIATED(hdstnames)) ALLOCATE (hdstnames(ysv%NDSTEQ))
129  hdstnames(:) = ysv%CSV(ysv%NSV_DSTBEG:ysv%NSV_DSTEND)
130  ENDIF
131  ENDIF
132 
133 
134  CALL dslt_init_names( &
135  kluout, &!I [idx] index of writing unit
136  'SLTM', &
137  hsv, &!I [char] list of scalar variables
138  jpmode_slt, &
139  ysv%NSLTEQ, &!O [nbr] number of sea salt related tracers
140  ysv%NSV_SLTBEG, &!O [idx] first sea salt related scalar variable
141  ysv%NSV_SLTEND, &!O [idx] last sea salt related scalar variable
142  lvarsig_slt, &!O type of standard deviation (fixed or variable)
143  lrgfix_slt &!O type of mean radius (fixed or variable)
144  )
145 
146  IF (present(hsltnames)) THEN
147  IF (ysv%NSLTEQ >=1) THEN
148  CALL dslt_init_modes( &
149  ysv%NSLTEQ, &!I [nbr] number of sea salt related variables in scalar list
150  ysv%NSV_SLTBEG, &!I [idx] index of first sea salt related variable in scalar list
151  ysv%NSV_SLTEND, &!I [idx] index of last sea salt related variable in scalar list
152  lvarsig_slt, &!I type of standard deviation (fixed or variable)
153  lrgfix_slt, &!O type of mean radius (fixed or variable)
154  nslt_mdebeg, &!O [idx] index of mass for first mode in scalar list
155  nsltmde &!O [nbr] number of modes to be transported
156  )
157  IF(.NOT. ASSOCIATED(hsltnames)) ALLOCATE (hsltnames(ysv%NSLTEQ))
158  hsltnames(:) = ysv%CSV(ysv%NSV_SLTBEG:ysv%NSV_SLTEND)
159  ENDIF
160  END IF
161 
162 ELSE
163  ALLOCATE(ysv%CSV (0))
164  IF (present(hdstnames)) ALLOCATE(hdstnames(0))
165  IF (present(hsltnames)) ALLOCATE(hsltnames(0))
166 ENDIF
167 !
168 IF (lhook) CALL dr_hook('INIT_CHEMICAL_n',1,zhook_handle)
169 !
170 END SUBROUTINE init_chemical_n
subroutine dslt_init_modes(KEQ, KSV_BEG, KSV_END, OVARSIG, ORGFIX, KMDEBEG, KMDE)
subroutine ch_init_names(KLUOUT, HSV, KBEQ, KBAER, HSVO, KSV_CHSBEG, KSV_CHSEND, KSV_AERBEG, KSV_AEREND, OVARSIGI, OVARSIGJ)
subroutine dslt_init_names(KLUOUT, HRC1, HSV, KPMODE, KEQ, KSV_BEG, KSV_END, OVARSIG, ORGFIX)
subroutine init_chemical_n(KLUOUT, KSV, HSV, YSV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)