SURFEX v8.1
General documentation of Surfex
init_param_trip.F90
Go to the documentation of this file.
1 ! #########
2  SUBROUTINE init_param_trip (TPG, &
3  KLISTING,HFILE,KLON,KLAT,HTITLE,HTIMEUNIT)
4 ! #######################################################################
5 !
6 !!**** *INIT_PARAM_TRIP*
7 !!
8 !! PURPOSE
9 !! -------
10 !
11 ! Define the name and unit of each trip parameter.
12 !
13 !! REFERENCE
14 !! ---------
15 !!
16 !! AUTHOR
17 !! ------
18 !! B. Decharme
19 !!
20 !! MODIFICATIONS
21 !! -------------
22 !! Original 27/05/08
23 !-------------------------------------------------------------------------------
24 !
25 !* 0. DECLARATIONS
26 ! ------------
27 !
28 !
29 !
30 USE modd_trip_grid, ONLY : trip_grid_t
31 !
33 !
34 USE modn_trip, ONLY : cgroundw, cvit, lflood
36 !
37 !
38 USE yomhook ,ONLY : lhook, dr_hook
39 USE parkind1 ,ONLY : jprb
40 !
41 USE netcdf
42 !
43 USE modi_get_lonlat_trip
44 !
45 IMPLICIT NONE
46 !
47 !
48 !* 0.1 declarations of arguments
49 !
50 !
51 !
52 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
53 !
54  CHARACTER(LEN=*), INTENT(IN) :: HFILE, HTITLE, HTIMEUNIT
55 !
56 INTEGER, INTENT(IN) :: KLISTING, KLON, KLAT
57 !
58 !* 0.2 declarations of output variables
59 !
60  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YVNAME !Name of each output variable
61  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YVLNAME !Long name of each output variables
62  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YUNIT !Unit of each output variable
63 !
64  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE,YTITLE,YTIMEUNIT
65 !
66 LOGICAL, DIMENSION(:), ALLOCATABLE :: LZLEN
67 !
68 REAL, DIMENSION(:), ALLOCATABLE :: ZLON
69 REAL, DIMENSION(:), ALLOCATABLE :: ZLAT
70 LOGICAL, DIMENSION(:), ALLOCATABLE :: LDOUBLE
71 !
72 INTEGER :: INPARAM, INCID, INUM
73 REAL(KIND=JPRB) :: ZHOOK_HANDLE
74 !
75 !-------------------------------------------------------------------------------
76 !-------------------------------------------------------------------------------
77 !
78 ! * Number of output variable
79 !
80 IF (lhook) CALL dr_hook('INIT_PARAM_TRIP',0,zhook_handle)
81 !
82 inparam = 7
83 IF(cgroundw/='DEF' )inparam = inparam + 1
84 IF(cvit=='VAR' )inparam = inparam + 3
85 IF(cgroundw=='DIF' )inparam = inparam + 6
86 IF(lflood.OR.cgroundw=='DIF')inparam = inparam + 1
87 IF(lflood )inparam = inparam + 4
88 !
89 !
90 ! * Allocate netcdf file attributs
91 !
92 ALLOCATE(yvname(inparam))
93 ALLOCATE(yvlname(inparam))
94 ALLOCATE(yunit(inparam))
95 ALLOCATE(lzlen(inparam))
96 ALLOCATE(ldouble(inparam))
97 !
98 ALLOCATE(zlon(klon))
99 ALLOCATE(zlat(klat))
100 !
101 ! * Initialyse netcdf file attributs
102 !
103 yvname(1) = 'FLOWDIR '
104 yvlname(1) = 'Flow direction '
105 yunit(1) = '- '
106 lzlen(1) = .false.
107 ldouble(1) = .false.
108 !
109 yvname(2) = 'RIVSEQ '
110 yvlname(2) = 'River sequence '
111 yunit(2) = '- '
112 lzlen(2) = .false.
113 ldouble(2) = .false.
114 !
115 yvname(3) = 'RIVLEN '
116 yvlname(3) = 'River length '
117 yunit(3) = 'm '
118 lzlen(3) = .false.
119 ldouble(3) = .true.
120 !
121 yvname(4) = 'NUM_BAS '
122 yvlname(4) = 'Trip basin reference number'
123 yunit(4) = '- '
124 lzlen(4) = .false.
125 ldouble(4) = .false.
126 !
127 yvname(5) = 'CELL_AREA '
128 yvlname(5) = 'Trip cell area '
129 yunit(5) = 'm2 '
130 lzlen(5) = .false.
131 ldouble(5) = .true.
132 !
133 yvname(6) = 'GREEN_ANT '
134 yvlname(6) = 'Greenland/Antarctic mask '
135 yunit(6) = '- '
136 lzlen(6) = .false.
137 ldouble(6) = .false.
138 !
139 yvname(7) = 'DR_AREA '
140 yvlname(7) = 'Trip drainage area '
141 yunit(7) = 'm2 '
142 lzlen(7) = .false.
143 ldouble(7) = .true.
144 !
145 inum = 7
146 !
147 IF(cgroundw/='DEF')THEN
148 !
149 inum = inum + 1
150 !
151 yvname(inum) = 'TAUG '
152 yvlname(inum) = 'Groundwater transfert time (0=permafrost area)'
153 yunit(inum) = 'days '
154 lzlen(inum) = .false.
155 ldouble(inum) = .false.
156 !
157 ENDIF
158 !
159 IF(cvit=='VAR')THEN
160 !
161 inum = inum + 1
162 yvname(inum) = 'N_RIV '
163 yvlname(inum) = 'Manning coefficient '
164 yunit(inum) = '- '
165 lzlen(inum) = .false.
166 ldouble(inum) = .false.
167 !
168 inum = inum + 1
169 yvname(inum) = 'WIDTHRIV '
170 yvlname(inum) = 'Stream river width '
171 yunit(inum) = 'm '
172 lzlen(inum) = .false.
173 ldouble(inum) = .false.
174 !
175 inum = inum + 1
176 yvname(inum) = 'SLOPERIV '
177 yvlname(inum) = 'Stream River slope '
178 yunit(inum) = 'm/m '
179 lzlen(inum) = .false.
180 ldouble(inum) = .true.
181 !
182 ENDIF
183 !
184 IF(cgroundw=='DIF')THEN
185 !
186 inum = inum + 1
187 yvname(inum) = 'WEFF '
188 yvlname(inum) = 'Effective porosity '
189 yunit(inum) = ' '
190 lzlen(inum) = .false.
191 ldouble(inum) = .false.
192 !
193 inum = inum + 1
194 yvname(inum) = 'TRANS '
195 yvlname(inum) = 'Transmissivity'
196 yunit(inum) = 'm2/s '
197 lzlen(inum) = .false.
198 ldouble(inum) = .false.
199 !
200 inum = inum + 1
201 yvname(inum) = 'NUM_AQUI '
202 yvlname(inum) = 'Numero aquifere '
203 yunit(inum) = ' '
204 lzlen(inum) = .false.
205 ldouble(inum) = .false.
206 !
207 inum = inum + 1
208 yvname(inum) = 'TOPO_RIV '
209 yvlname(inum) = 'River elevation '
210 yunit(inum) = ' '
211 lzlen(inum) = .false.
212 ldouble(inum) = .false.
213 !
214 inum = inum + 1
215 !
216 yvname(inum) = 'TABGW_F '
217 yvlname(inum) = 'Potential fraction of wt rise'
218 yunit(inum) = '- '
219 lzlen(inum) = .true.
220 ldouble(inum) = .false.
221 !
222 inum = inum + 1
223 !
224 yvname(inum) = 'TABGW_H '
225 yvlname(inum) = 'Subgrid elevation height '
226 yunit(inum) = 'm '
227 lzlen(inum) = .true.
228 ldouble(inum) = .false.
229 !
230 ENDIF
231 !
232 IF(lflood.OR.cgroundw=='DIF')THEN
233 !
234 inum = inum + 1
235 yvname(inum) = 'RIVDEPTH '
236 yvlname(inum) = 'Stream River Depth (Hc) '
237 yunit(inum) = 'm '
238 lzlen(inum) = .false.
239 ldouble(inum) = .false.
240 !
241 ENDIF
242 !
243 IF(lflood)THEN
244 !
245 inum = inum + 1
246 yvname(inum) = 'NFLOOD '
247 yvlname(inum) = 'Manning coef for flood '
248 yunit(inum) = '- '
249 lzlen(inum) = .false.
250 ldouble(inum) = .false.
251 !
252 inum = inum + 1
253 yvname(inum) = 'TABF '
254 yvlname(inum) = 'Potential flood fraction '
255 yunit(inum) = '- '
256 lzlen(inum) = .true.
257 ldouble(inum) = .false.
258 !
259 inum = inum + 1
260 yvname(inum)= 'TABH '
261 yvlname(inum)= 'Topographic height '
262 yunit(inum)= 'm '
263 lzlen(inum)= .true.
264 ldouble(inum) = .false.
265 !
266 inum = inum + 1
267 yvname(inum)= 'TABVF '
268 yvlname(inum)= 'Potential flood volume '
269 yunit(inum)= 'kg/m2 '
270 lzlen(inum)= .true.
271 ldouble(inum) = .false.
272 !
273 ENDIF
274 !
275 ! * Create netcdf file
276 !
277 yfile = hfile(1:len_trim(hfile))
278 ytitle = htitle(1:len_trim(htitle))
279 ytimeunit = htimeunit(1:len_trim(htimeunit))
280 !
281  CALL get_lonlat_trip(tpg, &
282  klon,klat,zlon,zlat)
283 !
284 IF(all(.NOT.lzlen(:)))THEN
285  CALL nccreate(klisting,yfile,ytitle,ytimeunit,yvname,yvlname,yunit, &
286  zlon,zlat,xundef,lncprint,incid,.false.,odouble=ldouble)
287 ELSE
288  CALL nccreate(klisting,yfile,ytitle,ytimeunit,yvname,yvlname,yunit, &
289  zlon,zlat,xundef,lncprint,incid,.false.,ndimtab,lzlen,odouble=ldouble)
290 ENDIF
291 !
292  CALL ncclose(klisting,lncprint,yfile,incid)
293 !
294 ! * Deallocate netcdf file attributs
295 !
296 DEALLOCATE(yvname )
297 DEALLOCATE(yvlname )
298 DEALLOCATE(yunit )
299 DEALLOCATE(zlon )
300 DEALLOCATE(zlat )
301 !
302 IF (lhook) CALL dr_hook('INIT_PARAM_TRIP',1,zhook_handle)
303 !
304 !-------------------------------------------------------------------------------
305 !-------------------------------------------------------------------------------
306 END SUBROUTINE init_param_trip
logical lflood
Definition: modn_trip.F90:62
subroutine init_param_trip(TPG, KLISTING, HFILE, KLON, KLAT, HTITLE, HTIME
integer, parameter jprb
Definition: parkind1.F90:32
logical, save lncprint
character(len=3) cvit
Definition: modn_trip.F90:41
subroutine ncclose(KLISTING, OVERBOSE, HFILENAME, KNCID)
character(len=3) cgroundw
Definition: modn_trip.F90:49
logical lhook
Definition: yomhook.F90:15
subroutine nccreate(KLISTING, HFILENAME, HTITLE, HTIMEUNIT, HVNAME, HVLNAME, HUNIT, PLON, PLAT, PMISSVAL, OVERBOSE, KNCID, OTIME, KZLEN, OVARZDIM, ODOUBLE)
integer, save ndimtab
subroutine get_lonlat_trip(TPG, KLON, KLAT, PLON, PLAT)
real, save xundef