SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
write_diag_seb_watfluxn.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 write_diag_seb_watflux_n (DTCO, DGU, U, CHW, DGW, &
7  hprogram)
8 ! #################################
9 !
10 !!**** *WRITE_DIAG_SEB_WATFLUX_n* - writes WATFLUX diagnostics
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! V. Masson *Meteo France*
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 01/2004
30 !! Modified 01/2006 : sea flux parameterization.
31 !! S.Bielli 11/2012 : write HU2M_WAT mis placed
32 !! B. Decharme 06/13 Add evap and sublimation diag
33 !! Delete LPROVAR_TO_DIAG here
34 !! S. Belamari 06/2014 : Introduce GRESET to avoid errors due to NBLOCK=0
35 !! when coupled with ARPEGE/ALADIN/AROME
36 !! B. Decharme 02/2016 : NBLOCK instead of LCOUNTW for compilation in AAA
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 !
43 !
46 USE modd_surf_atm_n, ONLY : surf_atm_t
49 !
50 #ifdef SFX_ARO
51 USE modd_io_surf_aro, ONLY : nblock
52 #endif
53 !
54 USE modd_surf_par, ONLY : xundef
55 !
56 !
57 !
58 !
59 USE modi_init_io_surf_n
61 USE modi_end_io_surf_n
62 !
63 !
64 USE yomhook ,ONLY : lhook, dr_hook
65 USE parkind1 ,ONLY : jprb
66 !
67 IMPLICIT NONE
68 !
69 !* 0.1 Declarations of arguments
70 ! -------------------------
71 !
72 !
73 TYPE(data_cover_t), INTENT(INOUT) :: dtco
74 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
75 TYPE(surf_atm_t), INTENT(INOUT) :: u
76 TYPE(ch_watflux_t), INTENT(INOUT) :: chw
77 TYPE(diag_watflux_t), INTENT(INOUT) :: dgw
78 !
79  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling
80 !
81 !* 0.2 Declarations of local variables
82 ! -------------------------------
83 !
84 INTEGER :: iresp ! IRESP : return-code if a problem appears
85  CHARACTER(LEN=12) :: yrecfm ! Name of the article to be written
86  CHARACTER(LEN=100):: ycomment ! Comment string
87  CHARACTER(LEN=2) :: ynum
88 !
89 LOGICAL :: greset
90 INTEGER :: jsv, jsw
91 REAL(KIND=JPRB) :: zhook_handle
92 !-------------------------------------------------------------------------------
93 !
94 ! Initialisation for IO
95 !
96 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_WATFLUX_N',0,zhook_handle)
97 !
98 greset=.true.
99 #ifdef SFX_ARO
100 greset=(nblock>0)
101 #endif
102 !
103  CALL init_io_surf_n(dtco, dgu, u, &
104  hprogram,'WATER ','WATFLX','WRITE')
105 !
106 !
107 !* 2. Richardson number :
108 ! -----------------
109 !
110 IF (dgw%N2M>=1) THEN
111 
112 yrecfm='RI_WAT'
113 ycomment='X_Y_'//yrecfm
114 !
115  CALL write_surf(dgu, u, &
116  hprogram,yrecfm,dgw%XRI(:),iresp,hcomment=ycomment)
117 !
118 END IF
119 !
120 !* 3. Energy fluxes :
121 ! -------------
122 !
123 IF (dgw%LSURF_BUDGET) THEN
124 
125 yrecfm='RN_WAT'
126 ycomment='X_Y_'//yrecfm//' (W/m2)'
127 !
128  CALL write_surf(dgu, u, &
129  hprogram,yrecfm,dgw%XRN(:),iresp,hcomment=ycomment)
130 !
131 yrecfm='H_WAT'
132 ycomment='X_Y_'//yrecfm//' (W/m2)'
133 !
134  CALL write_surf(dgu, u, &
135  hprogram,yrecfm,dgw%XH(:),iresp,hcomment=ycomment)
136 !
137 yrecfm='LE_WAT'
138 ycomment='X_Y_'//yrecfm//' (W/m2)'
139 !
140  CALL write_surf(dgu, u, &
141  hprogram,yrecfm,dgw%XLE(:),iresp,hcomment=ycomment)
142 !
143 yrecfm='LEI_WAT'
144 ycomment='X_Y_'//yrecfm//' (W/m2)'
145 !
146  CALL write_surf(dgu, u, &
147  hprogram,yrecfm,dgw%XLEI(:),iresp,hcomment=ycomment)
148 !
149 yrecfm='GFLUX_WAT'
150 ycomment='X_Y_'//yrecfm//' (W/m2)'
151 !
152  CALL write_surf(dgu, u, &
153  hprogram,yrecfm,dgw%XGFLUX(:),iresp,hcomment=ycomment)
154 !
155 yrecfm='EVAP_WAT'
156 ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
157 !
158  CALL write_surf(dgu, u, &
159  hprogram,yrecfm,dgw%XEVAP(:),iresp,hcomment=ycomment)
160 !
161 yrecfm='SUBL_WAT'
162 ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
163 !
164  CALL write_surf(dgu, u, &
165  hprogram,yrecfm,dgw%XSUBL(:),iresp,hcomment=ycomment)
166 !
167 IF (dgw%LRAD_BUDGET) THEN
168 !
169  yrecfm='SWD_WAT'
170  ycomment='X_Y_'//yrecfm//' (W/m2)'
171  !
172  CALL write_surf(dgu, u, &
173  hprogram,yrecfm,dgw%XSWD(:),iresp,hcomment=ycomment)
174  !
175  yrecfm='SWU_WAT'
176  ycomment='X_Y_'//yrecfm//' (W/m2)'
177  !
178  CALL write_surf(dgu, u, &
179  hprogram,yrecfm,dgw%XSWU(:),iresp,hcomment=ycomment)
180  !
181  yrecfm='LWD_WAT'
182  ycomment='X_Y_'//yrecfm//' (W/m2)'
183  !
184  CALL write_surf(dgu, u, &
185  hprogram,yrecfm,dgw%XLWD(:),iresp,hcomment=ycomment)
186  !
187  yrecfm='LWU_WAT'
188  ycomment='X_Y_'//yrecfm//' (W/m2)'
189  !
190  CALL write_surf(dgu, u, &
191  hprogram,yrecfm,dgw%XLWU(:),iresp,hcomment=ycomment)
192  !
193  DO jsw=1, SIZE(dgw%XSWBD,2)
194  ynum=achar(48+jsw)
195  !
196  yrecfm='SWD_WAT_'//ynum
197  ycomment='X_Y_'//yrecfm//' (W/m2)'
198  !
199  CALL write_surf(dgu, u, &
200  hprogram,yrecfm,dgw%XSWBD(:,jsw),iresp,hcomment=ycomment)
201  !
202  yrecfm='SWU_WAT_'//ynum
203  ycomment='X_Y_'//yrecfm//' (W/m2)'
204  !
205  CALL write_surf(dgu, u, &
206  hprogram,yrecfm,dgw%XSWBU(:,jsw),iresp,hcomment=ycomment)
207  !
208  ENDDO
209 !
210 ENDIF
211 !
212 yrecfm='FMU_WAT'
213 ycomment='X_Y_'//yrecfm//' (kg/ms2)'
214 !
215  CALL write_surf(dgu, u, &
216  hprogram,yrecfm,dgw%XFMU(:),iresp,hcomment=ycomment)
217 !
218 yrecfm='FMV_WAT'
219 ycomment='X_Y_'//yrecfm//' (kg/ms2)'
220 !
221  CALL write_surf(dgu, u, &
222  hprogram,yrecfm,dgw%XFMV(:),iresp,hcomment=ycomment)
223 !
224 END IF
225 !
226 IF (dgw%LSURF_BUDGETC) THEN
227 
228 yrecfm='RNC_WAT'
229 ycomment='X_Y_'//yrecfm//' (J/m2)'
230 !
231  CALL write_surf(dgu, u, &
232  hprogram,yrecfm,dgw%XRNC(:),iresp,hcomment=ycomment)
233 !
234 yrecfm='HC_WAT'
235 ycomment='X_Y_'//yrecfm//' (J/m2)'
236 !
237  CALL write_surf(dgu, u, &
238  hprogram,yrecfm,dgw%XHC(:),iresp,hcomment=ycomment)
239 !
240 yrecfm='LEC_WAT'
241 ycomment='X_Y_'//yrecfm//' (J/m2)'
242 !
243  CALL write_surf(dgu, u, &
244  hprogram,yrecfm,dgw%XLEC(:),iresp,hcomment=ycomment)
245 !
246 yrecfm='LEIC_WAT'
247 ycomment='X_Y_'//yrecfm//' (J/m2)'
248 !
249  CALL write_surf(dgu, u, &
250  hprogram,yrecfm,dgw%XLEIC(:),iresp,hcomment=ycomment)
251 !
252 yrecfm='GFLUXC_WAT'
253 ycomment='X_Y_'//yrecfm//' (J/m2)'
254 !
255  CALL write_surf(dgu, u, &
256  hprogram,yrecfm,dgw%XGFLUXC(:),iresp,hcomment=ycomment)
257 !
258 yrecfm='EVAPC_WAT'
259 ycomment='X_Y_'//yrecfm//' (kg/m2)'
260 !
261  CALL write_surf(dgu, u, &
262  hprogram,yrecfm,dgw%XEVAPC(:),iresp,hcomment=ycomment)
263 !
264 yrecfm='SUBLC_WAT'
265 ycomment='X_Y_'//yrecfm//' (kg/m2)'
266 !
267  CALL write_surf(dgu, u, &
268  hprogram,yrecfm,dgw%XSUBLC(:),iresp,hcomment=ycomment)
269 !
270 IF (dgw%LRAD_BUDGET .OR. (dgw%LSURF_BUDGETC .AND. .NOT.dgu%LRESET_BUDGETC)) THEN
271 !
272  yrecfm='SWDC_WAT'
273  ycomment='X_Y_'//yrecfm//' (J/m2)'
274  !
275  CALL write_surf(dgu, u, &
276  hprogram,yrecfm,dgw%XSWDC(:),iresp,hcomment=ycomment)
277  !
278  yrecfm='SWUC_WAT'
279  ycomment='X_Y_'//yrecfm//' (J/m2)'
280  !
281  CALL write_surf(dgu, u, &
282  hprogram,yrecfm,dgw%XSWUC(:),iresp,hcomment=ycomment)
283  !
284  yrecfm='LWDC_WAT'
285  ycomment='X_Y_'//yrecfm//' (J/m2)'
286  !
287  CALL write_surf(dgu, u, &
288  hprogram,yrecfm,dgw%XLWDC(:),iresp,hcomment=ycomment)
289  !
290  yrecfm='LWUC_WAT'
291  ycomment='X_Y_'//yrecfm//' (J/m2)'
292  !
293  CALL write_surf(dgu, u, &
294  hprogram,yrecfm,dgw%XLWUC(:),iresp,hcomment=ycomment)
295 !
296 ENDIF
297 !
298 yrecfm='FMUC_WAT'
299 ycomment='X_Y_'//yrecfm//' (kg/ms)'
300 !
301  CALL write_surf(dgu, u, &
302  hprogram,yrecfm,dgw%XFMUC(:),iresp,hcomment=ycomment)
303 !
304 yrecfm='FMVC_WAT'
305 ycomment='X_Y_'//yrecfm//' (kg/ms)'
306 !
307  CALL write_surf(dgu, u, &
308  hprogram,yrecfm,dgw%XFMVC(:),iresp,hcomment=ycomment)
309 !
310 END IF
311 !
312 !
313 !* 4. Transfer coefficients
314 ! ---------------------
315 !
316 IF (dgw%LCOEF) THEN
317 
318 yrecfm='CD_WAT'
319 ycomment='X_Y_'//yrecfm
320 !
321  CALL write_surf(dgu, u, &
322  hprogram,yrecfm,dgw%XCD(:),iresp,hcomment=ycomment)
323 !
324 yrecfm='CH_WAT'
325 ycomment='X_Y_'//yrecfm
326 !
327  CALL write_surf(dgu, u, &
328  hprogram,yrecfm,dgw%XCH(:),iresp,hcomment=ycomment)
329 !
330 yrecfm='CE_WAT'
331 ycomment='X_Y_'//yrecfm
332 !
333  CALL write_surf(dgu, u, &
334  hprogram,yrecfm,dgw%XCE(:),iresp,hcomment=ycomment)
335 !
336 yrecfm='Z0_WAT'
337 ycomment='X_Y_'//yrecfm
338 !
339  CALL write_surf(dgu, u, &
340  hprogram,yrecfm,dgw%XZ0(:),iresp,hcomment=ycomment)
341 !
342 yrecfm='Z0H_WAT'
343 ycomment='X_Y_'//yrecfm
344 !
345  CALL write_surf(dgu, u, &
346  hprogram,yrecfm,dgw%XZ0H(:),iresp,hcomment=ycomment)
347 !
348 END IF
349 !
350 !
351 !* 5. Surface humidity
352 ! ----------------
353 !
354 IF (dgw%LSURF_VARS) THEN
355 
356 yrecfm='QS_WAT'
357 ycomment='X_Y_'//yrecfm//' (KG/KG)'
358 !
359  CALL write_surf(dgu, u, &
360  hprogram,yrecfm,dgw%XQS(:),iresp,hcomment=ycomment)
361 !
362 ENDIF
363 !
364 !
365 !* 6. parameters at 2 and 10 meters :
366 ! -----------------------------
367 !
368 IF (dgw%N2M>=1) THEN
369 !
370 yrecfm='T2M_WAT'
371 ycomment='X_Y_'//yrecfm//' (K)'
372 !
373  CALL write_surf(dgu, u, &
374  hprogram,yrecfm,dgw%XT2M(:),iresp,hcomment=ycomment)
375 !
376 yrecfm='T2MMIN_WAT'
377 ycomment='X_Y_'//yrecfm//' (K)'
378 !
379  CALL write_surf(dgu, u, &
380  hprogram,yrecfm,dgw%XT2M_MIN(:),iresp,hcomment=ycomment)
381 IF(greset)dgw%XT2M_MIN(:)=xundef
382 !
383 yrecfm='T2MMAX_WAT'
384 ycomment='X_Y_'//yrecfm//' (K)'
385 !
386  CALL write_surf(dgu, u, &
387  hprogram,yrecfm,dgw%XT2M_MAX(:),iresp,hcomment=ycomment)
388 IF(greset)dgw%XT2M_MAX(:)=0.0
389 !
390 yrecfm='Q2M_WAT'
391 ycomment='X_Y_'//yrecfm//' (KG/KG)'
392 !
393  CALL write_surf(dgu, u, &
394  hprogram,yrecfm,dgw%XQ2M(:),iresp,hcomment=ycomment)
395 !
396 yrecfm='HU2M_WAT'
397 ycomment='X_Y_'//yrecfm//' (-)'
398 !
399  CALL write_surf(dgu, u, &
400  hprogram,yrecfm,dgw%XHU2M(:),iresp,hcomment=ycomment)
401 !
402 yrecfm='HU2MMIN_WAT'
403 ycomment='X_Y_'//yrecfm//' (-)'
404 !
405  CALL write_surf(dgu, u, &
406  hprogram,yrecfm,dgw%XHU2M_MIN(:),iresp,hcomment=ycomment)
407 IF(greset)dgw%XHU2M_MIN(:)=xundef
408 !
409 yrecfm='HU2MMAX_WAT'
410 ycomment='X_Y_'//yrecfm//' (-)'
411 !
412  CALL write_surf(dgu, u, &
413  hprogram,yrecfm,dgw%XHU2M_MAX(:),iresp,hcomment=ycomment)
414 IF(greset)dgw%XHU2M_MAX(:)=-xundef
415 !
416 yrecfm='ZON10M_WAT'
417 ycomment='X_Y_'//yrecfm//' (M/S)'
418 !
419  CALL write_surf(dgu, u, &
420  hprogram,yrecfm,dgw%XZON10M(:),iresp,hcomment=ycomment)
421 !
422 yrecfm='MER10M_WAT'
423 ycomment='X_Y_'//yrecfm//' (M/S)'
424 !
425  CALL write_surf(dgu, u, &
426  hprogram,yrecfm,dgw%XMER10M(:),iresp,hcomment=ycomment)
427 !
428 yrecfm='W10M_WAT'
429 ycomment='X_Y_'//yrecfm//' (M/S)'
430 !
431  CALL write_surf(dgu, u, &
432  hprogram,yrecfm,dgw%XWIND10M(:),iresp,hcomment=ycomment)
433 !
434 yrecfm='W10MMAX_WAT'
435 ycomment='X_Y_'//yrecfm//' (M/S)'
436 !
437  CALL write_surf(dgu, u, &
438  hprogram,yrecfm,dgw%XWIND10M_MAX(:),iresp,hcomment=ycomment)
439 IF(greset)dgw%XWIND10M_MAX(:)=0.0
440 !
441 END IF
442 !
443 !
444 !* 7. chemical diagnostics:
445 ! --------------------
446 !
447 IF (chw%SVW%NBEQ>0 .AND. chw%CCH_DRY_DEP=="WES89 ") THEN
448  DO jsv = 1,SIZE(chw%CCH_NAMES,1)
449  yrecfm='DV_WAT_'//trim(chw%CCH_NAMES(jsv))
450  WRITE(ycomment,'(A13,I3.3)')'(m/s) DV_WAT_',jsv
451  CALL write_surf(dgu, u, &
452  hprogram,yrecfm,chw%XDEP(:,jsv),iresp,hcomment=ycomment)
453  END DO
454 ENDIF
455 !
456 !-------------------------------------------------------------------------------
457 !
458 ! End of IO
459 !
460  CALL end_io_surf_n(hprogram)
461 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_WATFLUX_N',1,zhook_handle)
462 !
463 !
464 END SUBROUTINE write_diag_seb_watflux_n
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine write_diag_seb_watflux_n(DTCO, DGU, U, CHW, DGW, HPROGRAM)