SURFEX v8.1
General documentation of Surfex
init_trip_diag.F90
Go to the documentation of this file.
1 ! #########
2  SUBROUTINE init_trip_diag (TPDG, TPG, &
3  KLISTING,HFILE,KLON,KLAT,HTITLE,HTIMEUNIT,OTIME)
4 ! #######################################################################
5 !
6 !!**** *INIT_TRIP_DIAG*
7 !!
8 !! PURPOSE
9 !! -------
10 !
11 ! Define the name and unit of each trip output variable.
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_diag, ONLY : trip_diag_t
31 USE modd_trip_grid, ONLY : trip_grid_t
32 !
34 !
35 USE modn_trip_run, ONLY : ldiag_misc
36 USE modn_trip, ONLY : cgroundw, cvit, lflood
37 !
38 USE modd_trip_oasis, ONLY : lcpl_land
39 !
40 USE modd_trip_par, ONLY : xundef, lncprint
41 !
42 !
43 USE yomhook ,ONLY : lhook, dr_hook
44 USE parkind1 ,ONLY : jprb
45 !
46 USE netcdf
47 !
48 USE modi_get_lonlat_trip
49 !
50 IMPLICIT NONE
51 !
52 !
53 !* 0.1 declarations of arguments
54 !
55 !
56 !
57 TYPE(trip_diag_t), INTENT(INOUT) :: TPDG
58 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
59 !
60  CHARACTER(LEN=*), INTENT(IN) :: HFILE, HTITLE, HTIMEUNIT
61 !
62 INTEGER, INTENT(IN) :: KLISTING, KLON, KLAT
63 !
64 LOGICAL, INTENT(IN) :: OTIME
65 !
66 !* 0.2 declarations of output variables
67 !
68  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YVNAME !Name of each output variable
69  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YVLNAME !Long name of each output variables
70  CHARACTER(LEN=NF90_MAX_NAME), DIMENSION(:), ALLOCATABLE :: YUNIT !Unit of each output variable
71 !
72  CHARACTER(LEN=NF90_MAX_NAME) :: YFILE,YTITLE,YTIMEUNIT
73 !
74 REAL, DIMENSION(:), ALLOCATABLE :: ZLON
75 REAL, DIMENSION(:), ALLOCATABLE :: ZLAT
76 !
77 INTEGER :: INDIAG, INCID, INUM
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 !
80 !-------------------------------------------------------------------------------
81 !-------------------------------------------------------------------------------
82 !
83 ! * Number of output variable
84 !
85 IF (lhook) CALL dr_hook('INIT_TRIP_DIAG',0,zhook_handle)
86 inum = 0
87 indiag = 2
88 IF(ldiag_misc) indiag = indiag + 1
89 IF(lcpl_land.AND.ldiag_misc) indiag = indiag + 2
90 IF(cvit=='VAR') indiag = indiag + 2
91 IF(cgroundw/='DEF') indiag = indiag + 2
92 IF(cgroundw=='DIF')THEN
93  indiag = indiag + 3
94  IF(ldiag_misc)indiag = indiag + 2
95 ENDIF
96 IF(lflood)THEN
97  indiag = indiag + 3
98  IF(ldiag_misc) indiag = indiag + 8
99 ENDIF
100 !
101 ! * Allocate netcdf file attributs
102 !
103 ALLOCATE(yvname(indiag))
104 ALLOCATE(yvlname(indiag))
105 ALLOCATE(yunit(indiag))
106 !
107 ALLOCATE(zlon(klon))
108 ALLOCATE(zlat(klat))
109 !
110 ! * Initialyse netcdf file attributs
111 !
112 inum = inum + 1
113 yvname(inum) = 'SURF_STO '
114 yvlname(inum) = 'River storage '
115 yunit(inum) = 'kg m-2 '
116 !
117 inum = inum + 1
118 yvname(inum) = 'QDIS '
119 yvlname(inum) = 'Discharge '
120 yunit(inum) = 'm3 s-1 '
121 !
122 IF(ldiag_misc)THEN
123 !
124  inum = inum + 1
125  yvname(inum) = 'QSIN '
126  yvlname(inum) = 'Inflow to the river '
127  yunit(inum) = 'm3 s-1 '
128 !
129 ENDIF
130 !
131 IF(lcpl_land.AND.ldiag_misc)THEN
132 !
133  inum = inum + 1
134  yvname(inum) = 'RUNOFF '
135  yvlname(inum) = 'Input surface runoff (can be used to force TRIP offline)'
136  yunit(inum) = 'mm of water '
137 !
138  inum = inum + 1
139  yvname(inum) = 'DRAIN '
140  yvlname(inum) = 'Input drainage or recharge (can be used to force TRIP offline)'
141  yunit(inum) = 'mm of water '
142 !
143 ENDIF
144 !
145 IF(cgroundw/='DEF')THEN
146 !
147  inum = inum + 1
148  yvname(inum) = 'QGF'
149  yvlname(inum) = 'Groundwater-river exchange'
150  yunit(inum) = 'm3 s-1 '
151 !
152  inum = inum + 1
153  yvname(inum) = 'GROUND_STO '
154  IF(cgroundw=='CST')THEN
155  yvlname(inum) = 'Groundwater storage '
156  ELSEIF(cgroundw=='DIF')THEN
157  yvlname(inum) = 'Groundwater mass equivalent'
158  ENDIF
159  yunit(inum) = 'kg m-2 '
160 !
161 ENDIF
162 !
163 IF(cgroundw=='DIF')THEN
164 !
165  inum = inum + 1
166  yvname(inum) = 'HGROUND '
167  yvlname(inum) = 'Groundwater height '
168  yunit(inum) = 'm '
169 !
170  inum = inum + 1
171  yvname(inum) = 'FWTD '
172  yvlname(inum) = 'grid-cell fraction of wtd '
173  yunit(inum) = '- '
174 !
175  inum = inum + 1
176  yvname(inum) = 'WTD '
177  yvlname(inum) = 'Wat Tab Depth for coupling'
178  yunit(inum) = 'm '
179 !
180  IF(ldiag_misc)THEN
181 !
182  inum = inum + 1
183  yvname(inum) = 'QGCELL '
184  yvlname(inum) = 'Grid-cell fluxes budget '
185  yunit(inum) = 'm3 s-1 '
186 !
187  inum = inum + 1
188  yvname(inum)= 'HGHRIV '
189  yvlname(inum)= 'Hground - Hriver '
190  yunit(inum)= 'm '
191 !
192  ENDIF
193 !
194 ENDIF
195 !
196 IF(cvit=='VAR')THEN
197 !
198  inum = inum + 1
199  yvname(inum) = 'VEL '
200  yvlname(inum) = 'Stream flow velocity '
201  yunit(inum) = 'm s-1 '
202 !
203  inum = inum + 1
204  yvname(inum) = 'HSTREAM '
205  yvlname(inum) = 'Stream river height '
206  yunit(inum) = 'm '
207 !
208 ENDIF
209 !
210 IF(lflood)THEN
211 !
212  inum = inum + 1
213  yvname(inum) = 'FLOOD_STO '
214  yvlname(inum) = 'Floodplain storage '
215  yunit(inum) = 'kg m-2 '
216 !
217  inum = inum + 1
218  yvname(inum) = 'FFLOOD '
219  yvlname(inum) = 'TRIP flooded fraction '
220  yunit(inum) = '- '
221 !
222  inum = inum + 1
223  yvname(inum) = 'HFLOOD '
224  yvlname(inum) = 'Flood depth '
225  yunit(inum) = 'm '
226 !
227  IF(ldiag_misc)THEN
228 !
229  inum = inum + 1
230  yvname(inum)= 'FSOURCE '
231  yvlname(inum)= 'Floodplains source (Pf-Ef-If) (can be used to force TRIP offline)'
232  yunit(inum)= 'mm of water '
233 !
234  inum = inum + 1
235  yvname(inum)= 'VFIN '
236  yvlname(inum)= 'River to flood velocity '
237  yunit(inum)= 'm s-1 '
238 !
239  inum = inum + 1
240  yvname(inum)= 'QRF '
241  yvlname(inum)= 'River flow to floodplain '
242  yunit(inum)= 'm3 s-1 '
243 !
244  inum = inum + 1
245  yvname(inum)= 'VFOUT '
246  yvlname(inum)= 'Flood to river velocity '
247  yunit(inum)= 'm s-1 '
248 !
249  inum = inum + 1
250  yvname(inum)= 'QFR '
251  yvlname(inum)= 'Flood flow to river '
252  yunit(inum)= 'm3 s-1 '
253 !
254  inum = inum + 1
255  yvname(inum)= 'HSF '
256  yvlname(inum)= 'River-Flood depth comparison'
257  yunit(inum)= 'm '
258 !
259  inum = inum + 1
260  yvname(inum)= 'WF '
261  yvlname(inum)= 'Flood width during dt '
262  yunit(inum)= 'm '
263 !
264  inum = inum + 1
265  yvname(inum)= 'LF '
266  yvlname(inum)= 'Flood lenght during dt '
267  yunit(inum)= 'm '
268 !
269  ENDIF
270 !
271 ENDIF
272 !
273 ! * Create netcdf file
274 !
275 yfile = hfile(1:len_trim(hfile))
276 ytitle = htitle(1:len_trim(htitle))
277 ytimeunit = htimeunit(1:len_trim(htimeunit))
278 !
279  CALL get_lonlat_trip(tpg, &
280  klon,klat,zlon,zlat)
281 !
282  CALL nccreate(klisting,yfile,ytitle,ytimeunit,yvname,yvlname,yunit,zlon,zlat,xundef,lncprint,incid,otime)
283 !
284  CALL ncclose(klisting,lncprint,yfile,incid)
285 !
286 ! * Deallocate netcdf file attributs
287 !
288 DEALLOCATE(yvname )
289 DEALLOCATE(yvlname )
290 DEALLOCATE(yunit )
291 DEALLOCATE(zlon )
292 DEALLOCATE(zlat )
293 !
294 IF (lhook) CALL dr_hook('INIT_TRIP_DIAG',1,zhook_handle)
295 !
296 !-------------------------------------------------------------------------------
297 !-------------------------------------------------------------------------------
298 END SUBROUTINE init_trip_diag
logical lflood
Definition: modn_trip.F90:62
subroutine init_trip_diag(TPDG, TPG, KLISTING, HFILE, KLON, KLAT, HTITLE, HTIMEU
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)
logical ldiag_misc
subroutine get_lonlat_trip(TPG, KLON, KLAT, PLON, PLAT)
real, save xundef