SURFEX v8.1
General documentation of Surfex
trip_diag_write.F90
Go to the documentation of this file.
1 ! #########
2  SUBROUTINE trip_diag_write (TPDG, TPG, &
3  KLISTING,KLON,KLAT,KDIAG,PTSTEP_DIAG,OXIOS)
4 ! ############################################################
5 !
6 !!**** *TRIP_DIAG_WRITE*
7 !!
8 !! PURPOSE
9 !! -------
10 !
11 ! TRIP river routing outputs.
12 !
13 !!
14 !! AUTHOR
15 !! ------
16 !! B. Decharme
17 !!
18 !! MODIFICATIONS
19 !! -------------
20 !! Original 28/05/05
21 !-------------------------------------------------------------------------------
22 !
23 !* 0. DECLARATIONS
24 ! ------------
25 !
26 !
27 USE modd_trip_diag, ONLY : trip_diag_t
28 USE modd_trip_grid, ONLY : trip_grid_t
29 !
30 USE modn_trip, ONLY : cgroundw, cvit, lflood
31 USE modn_trip_run, ONLY : ldiag_misc
32 USE modd_trip_oasis, ONLY : lcpl_land
33 !
34 USE modd_trip_par, ONLY : xtime_diag
35 !
36 #ifdef WXIOS
37 use xios
38 #endif
39 !
40 USE mode_rw_trip
41 !
42 USE yomhook ,ONLY : lhook, dr_hook
43 USE parkind1 ,ONLY : jprb
44 !
45 IMPLICIT NONE
46 !
47 !* 0.1 declarations of arguments
48 !
49 !
50 TYPE(trip_diag_t), INTENT(INOUT) :: TPDG
51 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
52 !
53 INTEGER, INTENT(IN) :: KLISTING
54 INTEGER, INTENT(IN) :: KLON
55 INTEGER, INTENT(IN) :: KLAT
56 INTEGER, INTENT(IN) :: KDIAG
57 REAL, INTENT(IN) :: PTSTEP_DIAG
58 LOGICAL, INTENT(IN) :: OXIOS
59 !
60 !* 0.2 declarations of local variables
61 !
62  CHARACTER(LEN=19), PARAMETER :: YDIAG = 'TRIP_DIAG.nc'
63  CHARACTER(LEN=50) :: YFILE
64  CHARACTER(LEN=10) :: YVNAME
65 !
66 REAL, DIMENSION(KLON,KLAT) :: ZWRITE
67 LOGICAL,DIMENSION(KLON,KLAT) :: LMASK
68 LOGICAL,DIMENSION(KLON,KLAT) :: LMASK_GW
69 !
70 INTEGER :: ITNUM, ITVAL
71 REAL(KIND=JPRB) :: ZHOOK_HANDLE
72 !
73 !-------------------------------------------------------------------------------
74 !
75 IF (lhook) CALL dr_hook('TRIP_DIAG_WRITE',0,zhook_handle)
76 !
77 ! * Trip mask
78 !
79 lmask(:,:) = tpg%GMASK(:,:)
80 !
81 ! * Groundwater specific mask
82 !
83 IF(cgroundw/='DEF')THEN
84  lmask_gw(:,:) = tpg%GMASK_GW(:,:)
85 ENDIF
86 !
87 !-------------------------------------------------------------------------------
88 !outputs
89 !-------------------------------------------------------------------------------
90 !
91 ! * Recup diag file
92 !
93 yfile =ydiag
94 !
95 ! * Time attribut
96 !
97 itnum = kdiag
98 !
99 IF (oxios) THEN
100 #ifdef WXIOS
101  CALL xios_update_calendar(kdiag)
102 #endif
103  itval = 0
104 ELSE
105  itval = (kdiag-1)*int(ptstep_diag/xtime_diag)
106 ENDIF
107 !
108 ! * Store output in diag file
109 !
110 yvname = 'SURF_STO'
111 zwrite = tpdg%TDIAG%XSURF_STO / ptstep_diag
112  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
113  CALL cum_diag(tpdg%TDIAG%XSURF_STO,tpdg%TDIAG_RUN%XSURF_STO)
114 !
115 yvname = 'QDIS'
116 zwrite = tpdg%TDIAG%XQDIS / ptstep_diag
117  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
118  CALL cum_diag(tpdg%TDIAG%XQDIS,tpdg%TDIAG_RUN%XQDIS)
119 !
120 IF(ldiag_misc)THEN
121  yvname = 'QSIN'
122  zwrite = tpdg%TDIAG%XQIN / ptstep_diag
123  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
124  CALL cum_diag(tpdg%TDIAG%XQIN,tpdg%TDIAG_RUN%XQIN)
125 ENDIF
126 !
127 IF(lcpl_land.AND.ldiag_misc)THEN
128 ! kg/m2 (can be used to force the model offline)
129  yvname = 'RUNOFF'
130  zwrite = tpdg%TDIAG%XRUNOFF
131  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
132  CALL cum_diag(tpdg%TDIAG%XRUNOFF,tpdg%TDIAG_RUN%XRUNOFF)
133 ! kg/m2 (can be used to force the model offline)
134  yvname = 'DRAIN'
135  zwrite = tpdg%TDIAG%XDRAIN
136  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
137  CALL cum_diag(tpdg%TDIAG%XDRAIN,tpdg%TDIAG_RUN%XDRAIN)
138 !
139 ENDIF
140 !
141 IF(cgroundw/='DEF')THEN
142 !
143  yvname = 'QGF'
144  zwrite = tpdg%TDIAG%XQGF / ptstep_diag
145  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
146  CALL cum_diag(tpdg%TDIAG%XQGF,tpdg%TDIAG_RUN%XQGF)
147 !
148  yvname = 'GROUND_STO'
149  zwrite = tpdg%TDIAG%XGROUND_STO / ptstep_diag
150  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
151  CALL cum_diag(tpdg%TDIAG%XGROUND_STO,tpdg%TDIAG_RUN%XGROUND_STO)
152 !
153 ENDIF
154 !
155 IF(cgroundw=='DIF')THEN
156 !
157  yvname = 'HGROUND'
158  zwrite = tpdg%TDIAG%XHGROUND / ptstep_diag
159  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
160  CALL cum_diag(tpdg%TDIAG%XHGROUND,tpdg%TDIAG_RUN%XHGROUND)
161 !
162  yvname = 'FWTD'
163  zwrite = tpdg%TDIAG%XFWTD / ptstep_diag
164  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
165  CALL cum_diag(tpdg%TDIAG%XFWTD,tpdg%TDIAG_RUN%XFWTD)
166 !
167  yvname = 'WTD'
168  zwrite = tpdg%TDIAG%XWTD / ptstep_diag
169  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
170  CALL cum_diag(tpdg%TDIAG%XWTD,tpdg%TDIAG_RUN%XWTD)
171 !
172  IF(ldiag_misc)THEN
173 !
174  yvname = 'QGCELL'
175  zwrite = tpdg%TDIAG%XQGCELL / ptstep_diag
176  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
177  CALL cum_diag(tpdg%TDIAG%XQGCELL,tpdg%TDIAG_RUN%XQGCELL)
178 !
179  yvname = 'HGHRIV'
180  zwrite = tpdg%TDIAG%XHGHS / ptstep_diag
181  CALL write_trip(klisting,yfile,yvname,lmask_gw,zwrite,itnum,itval,oxios=oxios)
182  CALL cum_diag(tpdg%TDIAG%XHGHS,tpdg%TDIAG_RUN%XHGHS)
183 !
184  ENDIF
185 !
186 ENDIF
187 !
188 IF(cvit=='VAR')THEN
189 !
190  yvname = 'VEL'
191  zwrite = tpdg%TDIAG%XVEL / ptstep_diag
192  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
193  CALL cum_diag(tpdg%TDIAG%XVEL,tpdg%TDIAG_RUN%XVEL)
194 !
195  yvname = 'HSTREAM'
196  zwrite = tpdg%TDIAG%XHS / ptstep_diag
197  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
198  CALL cum_diag(tpdg%TDIAG%XHS,tpdg%TDIAG_RUN%XHS)
199 !
200 ENDIF
201 !
202 IF(lflood)THEN
203 !
204  yvname = 'FFLOOD'
205  zwrite = tpdg%TDIAG%XFF / ptstep_diag
206  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
207  CALL cum_diag(tpdg%TDIAG%XFF,tpdg%TDIAG_RUN%XFF)
208 !
209  yvname = 'FLOOD_STO'
210  zwrite = tpdg%TDIAG%XFLOOD_STO / ptstep_diag
211  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
212  CALL cum_diag(tpdg%TDIAG%XFLOOD_STO,tpdg%TDIAG_RUN%XFLOOD_STO)
213 !
214  yvname = 'HFLOOD'
215  zwrite = tpdg%TDIAG%XHF / ptstep_diag
216  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
217  CALL cum_diag(tpdg%TDIAG%XHF,tpdg%TDIAG_RUN%XHF)
218 !
219  IF(ldiag_misc)THEN
220 !
221 ! kg/m2 (can be used to force the model offline)
222  yvname = 'FSOURCE'
223  zwrite = tpdg%TDIAG%XSOURCE
224  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
225  CALL cum_diag(tpdg%TDIAG%XSOURCE,tpdg%TDIAG_RUN%XSOURCE)
226 !
227 ! kg/m2/s
228  yvname = 'QFR'
229  zwrite = tpdg%TDIAG%XQFR / ptstep_diag
230  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
231  CALL cum_diag(tpdg%TDIAG%XQFR,tpdg%TDIAG_RUN%XQFR)
232 !
233  yvname = 'QRF'
234  zwrite = tpdg%TDIAG%XQRF / ptstep_diag
235  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
236  CALL cum_diag(tpdg%TDIAG%XQRF,tpdg%TDIAG_RUN%XQRF)
237 !
238  yvname = 'VFIN'
239  zwrite = tpdg%TDIAG%XVFIN / ptstep_diag
240  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
241  CALL cum_diag(tpdg%TDIAG%XVFIN,tpdg%TDIAG_RUN%XVFIN)
242 !
243  yvname = 'VFOUT'
244  zwrite = tpdg%TDIAG%XVFOUT / ptstep_diag
245  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
246  CALL cum_diag(tpdg%TDIAG%XVFOUT,tpdg%TDIAG_RUN%XVFOUT)
247 !
248  yvname = 'HSF'
249  zwrite = tpdg%TDIAG%XHSF / ptstep_diag
250  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
251  CALL cum_diag(tpdg%TDIAG%XHSF,tpdg%TDIAG_RUN%XHSF)
252 !
253  yvname = 'WF'
254  zwrite = tpdg%TDIAG%XWF / ptstep_diag
255  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
256  CALL cum_diag(tpdg%TDIAG%XWF,tpdg%TDIAG_RUN%XWF)
257 !
258  yvname = 'LF'
259  zwrite = tpdg%TDIAG%XLF / ptstep_diag
260  CALL write_trip(klisting,yfile,yvname,lmask,zwrite,itnum,itval,oxios=oxios)
261  CALL cum_diag(tpdg%TDIAG%XLF,tpdg%TDIAG_RUN%XLF)
262 !
263  ENDIF
264 !
265 ENDIF
266 !
267 IF (lhook) CALL dr_hook('TRIP_DIAG_WRITE',1,zhook_handle)
268 !
269 !-------------------------------------------------------------------------------
270  CONTAINS
271 !-------------------------------------------------------------------------------
272 !
273 SUBROUTINE cum_diag(PDIAG,PRUN)
274 !
275 IMPLICIT NONE
276 !
277 REAL, DIMENSION(:,:),INTENT(INOUT) :: PDIAG
278 REAL, DIMENSION(:,:),INTENT(OUT ) :: PRUN
279 !
280 REAL(KIND=JPRB) :: ZHOOK_HANDLE
281 !
282 IF (lhook) CALL dr_hook('TRIP_DIAG_WRITE:CUM_DIAG',0,zhook_handle)
283 !
284 prun(:,:) = prun(:,:) + pdiag(:,:)
285 !
286 pdiag(:,:) = 0.0
287 !
288 IF (lhook) CALL dr_hook('TRIP_DIAG_WRITE:CUM_DIAG',1,zhook_handle)
289 !
290 END SUBROUTINE cum_diag
291 !
292 !-------------------------------------------------------------------------------
293 END SUBROUTINE trip_diag_write
logical lflood
Definition: modn_trip.F90:62
integer, parameter jprb
Definition: parkind1.F90:32
character(len=3) cvit
Definition: modn_trip.F90:41
real, save xtime_diag
character(len=3) cgroundw
Definition: modn_trip.F90:49
logical lhook
Definition: yomhook.F90:15
logical ldiag_misc
subroutine cum_diag(PDIAG, PRUN)
subroutine trip_diag_write(TPDG, TPG, KLISTING, KLON, KLAT, KDIAG, PTSTEP_DIAG, O