SURFEX v8.1
General documentation of Surfex
write_diag_seb_isban.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_isba_n ( DTCO, DUO, U, NCHI, CHI, ID, NDST, GB, &
7  IO, S, NP, NPE, HPROGRAM)
8 ! #################################
9 !
10 !!**** *WRITE_DIAG_SEB_ISBA* - writes the ISBA diagnostic fields
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 !! B. Decharme 06/2009 key to write (or not) patch result
31 !! B. Decharme 08/2009 cumulative radiative budget
32 !! B. Decharme 09/2012 : Bug in local variables declaration in PROVAR_TO_DIAG
33 !! B. Decharme 09/2012 New diag :
34 !! carbon fluxes and reservoirs
35 !! soil liquid and ice water content in kg/m2 and m3/m3
36 !! B. Decharme 06/13 Add diags (sublimation, lateral drainage)
37 !! All snow outputs noted SN
38 !! delete NWG_SIZE
39 !! S. Belamari 06/2014 : Introduce GRESET to avoid errors due to NBLOCK=0
40 !! when coupled with ARPEGE/ALADIN/AROME
41 !! P. Samuelsson 10/2014 MEB
42 !! B. Decharme 02/2016 : NBLOCK instead of LCOUNTW for compilation in AAA
43 !-------------------------------------------------------------------------------
44 !
45 !* 0. DECLARATIONS
46 ! ------------
47 !
48 USE modd_surfex_mpi, ONLY : nrank, npio
49 !
51 USE modd_diag_n, ONLY : diag_options_t
52 USE modd_surf_atm_n, ONLY : surf_atm_t
54 USE modd_surfex_n, ONLY : isba_diag_t
55 USE modd_dst_n, ONLY : dst_np_t
56 USE modd_gr_biog_n, ONLY : gr_biog_t
59 !
60 #ifdef SFX_ARO
61 USE modd_io_surf_aro, ONLY : nblock
62 #endif
63 !
67 !
68 USE modd_surf_par, ONLY : xundef, nundef
69 !
70 USE modd_csts, ONLY : xrholw, xtt, xlmtt
71 !
72 USE modd_dst_surf
73 !
74 USE modd_agri, ONLY : lagrip
75 !
76 USE mode_diag
77 !
78 USE modi_init_io_surf_n
80 USE modi_end_io_surf_n
81 USE modi_write_field_1d_patch
82 !
83 #ifdef SFX_OL
84 USE modd_io_surf_ol, ONLY : ldef
86 #endif
87 !
88 USE yomhook ,ONLY : lhook, dr_hook
89 USE parkind1 ,ONLY : jprb
90 !
91 IMPLICIT NONE
92 !
93 !* 0.1 Declarations of arguments
94 ! -------------------------
95 !
96 !
97 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
98 TYPE(diag_options_t), INTENT(INOUT) :: DUO
99 TYPE(surf_atm_t), INTENT(INOUT) :: U
100 TYPE(ch_isba_np_t), INTENT(INOUT) :: NCHI
101 TYPE(ch_isba_t), INTENT(INOUT) :: CHI
102 TYPE(isba_diag_t), INTENT(INOUT) :: ID
103 TYPE(dst_np_t), INTENT(INOUT) :: NDST
104 TYPE(gr_biog_t), INTENT(INOUT) :: GB
105 TYPE(isba_options_t), INTENT(INOUT) :: IO
106 TYPE(isba_s_t), INTENT(INOUT) :: S
107 TYPE(isba_np_t), INTENT(INOUT) :: NP
108 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
109 !
110  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
111 !
112 !* 0.2 Declarations of local variables
113 ! -------------------------------
114 !
115 TYPE(isba_p_t), POINTER :: PK
116 TYPE(isba_pe_t), POINTER :: PEK
117 !
118 INTEGER :: IRESP ! IRESP : return-code if a problem appears
119  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be write
120  CHARACTER(LEN=100):: YCOMMENT ! Comment string
121  CHARACTER(LEN=2) :: YNUM
122 !
123 LOGICAL :: GRESET
124 INTEGER :: JSV, JSW, JP, ISIZE
125 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches where multi-energy balance should be applied
126 REAL(KIND=JPRB) :: ZHOOK_HANDLE
127 !
128 !-------------------------------------------------------------------------------
129 !
130 ! Initialisation for IO
131 !
132 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N',0,zhook_handle)
133 !
134 isize_lmeb_patch=count(io%LMEB_PATCH(:))
135 !
136 greset=.true.
137 #ifdef SFX_ARO
138 greset=(nblock>0)
139 #endif
140 #ifdef SFX_OL
141 IF (ldef) greset = .false.
142 #endif
143 !
144 #ifdef SFX_OL
145 IF (id%O%LSURF_BUDGET .AND. duo%LRESETCUMUL .AND. id%O%LSURF_BUDGETC .AND. .NOT.ldef) THEN
146  !
147  ! Output variables are not instantaneous but averaged over the output time step
148  ! Fluxes by patch
149  DO jp = 1,io%NPATCH
150  CALL avg_diag_tstep_surf(xtstep_output, id%NDC%AL(jp), id%ND%AL(jp))
151  ENDDO
152  CALL avg_diag_tstep_surf(xtstep_output, id%DC, id%D)
153  !
154  IF (id%DE%LSURF_EVAP_BUDGET) THEN
155  DO jp = 1,io%NPATCH
156  CALL avg_diag_tstep_evap(xtstep_output, id%NDEC%AL(jp), id%NDE%AL(jp))
157  ENDDO
158  CALL avg_diag_tstep_evap(xtstep_output, id%DEC, id%DE)
159  !
160  IF (id%DE%LWATER_BUDGET) THEN
161  DO jp = 1,io%NPATCH
162  CALL avg_diag_tstep_water(xtstep_output, id%NDEC%AL(jp), id%NDE%AL(jp))
163  ENDDO
164  CALL avg_diag_tstep_water(xtstep_output, id%DEC, id%DE)
165  ENDIF
166  ENDIF
167  !
168 END IF
169 #endif
170 !
171 IF ( id%DM%LPROSNOW ) THEN
172  CALL init_io_surf_n(dtco, u, hprogram,'NATURE','ISBA ','WRITE','ISBA_PROGNOSTIC.OUT.nc')
173 ELSE
174  CALL init_io_surf_n(dtco, u, hprogram,'NATURE','ISBA ','WRITE','ISBA_DIAGNOSTICS.OUT.nc')
175 ENDIF
176 !
177 !-------------------------------------------------------------------------------
178 !
179 !* 2. Richardson number :
180 ! -----------------
181 !
182 IF (id%O%N2M>=1) THEN
183  !
184  yrecfm='RI_ISBA'
185  ycomment='Richardson number over tile nature'
186  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XRI(:),iresp,hcomment=ycomment)
187  !
188 END IF
189 !
190 !* 3. Energy fluxes :
191 ! -------------
192 !
193 IF (id%O%LSURF_BUDGET) THEN
194  !
195  yrecfm='TALB_ISBA'
196  ycomment='total albedo over tile nature (-)'
197  CALL write_surf(duo%CSELECT, hprogram,yrecfm,id%D%XALBT(:),iresp,hcomment=ycomment)
198  !
199  yrecfm='RN_ISBA'
200  ycomment='Net radiation over tile nature'//' (W/m2)'
201  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XRN(:),iresp,hcomment=ycomment)
202  !
203  yrecfm='H_ISBA'
204  ycomment='Sensible heat flux over tile nature'//' (W/m2)'
205  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XH(:),iresp,hcomment=ycomment)
206  !
207  yrecfm='LE_ISBA'
208  ycomment='total latent heat flux over tile nature'//' (W/m2)'
209  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XLE(:),iresp,hcomment=ycomment)
210  !
211  yrecfm='LEI_ISBA'
212  ycomment='sublimation latent heat flux over tile nature'//' (W/m2)'
213  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XLEI(:),iresp,hcomment=ycomment)
214  !
215  yrecfm='GFLUX_ISBA'
216  ycomment='Ground flux over tile nature'//' (W/m2)'
217  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XGFLUX(:),iresp,hcomment=ycomment)
218  !
219  yrecfm='EVAP_ISBA'
220  ycomment='total evaporative flux for tile nature'//' (Kg/m2/s)'
221  CALL write_surf(duo%CSELECT, hprogram,yrecfm,id%D%XEVAP(:),iresp,hcomment=ycomment)
222  !
223  yrecfm='SUBL_ISBA'
224  ycomment='sublimation flux for tile nature'//' (Kg/m2/s)'
225  CALL write_surf(duo%CSELECT, hprogram,yrecfm,id%D%XSUBL(:),iresp,hcomment=ycomment)
226  !
227  IF (id%O%LRAD_BUDGET .OR. (id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC)) THEN
228  !
229  yrecfm='SWD_ISBA'
230  ycomment='short wave downward radiation over tile nature'//' (W/m2)'
231  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XSWD(:),iresp,hcomment=ycomment)
232  !
233  yrecfm='SWU_ISBA'
234  ycomment='short wave upward radiation over tile nature'//' (W/m2)'
235  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XSWU(:),iresp,hcomment=ycomment)
236  !
237  yrecfm='LWD_ISBA'
238  ycomment='long wave downward radiation over tile nature'//' (W/m2)'
239  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XLWD(:),iresp,hcomment=ycomment)
240  !
241  yrecfm='LWU_ISBA'
242  ycomment='long wave upward radiation over tile nature'//' (W/m2)'
243  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XLWU(:),iresp,hcomment=ycomment)
244  !
245  IF (lallow_add_dim) THEN
246  !
247  yrecfm='SWD_ISBA_'
248  ycomment='X_Y_'//yrecfm//' (W/m2)'
249  CALL write_surf(duo%CSELECT,&
250  hprogram,yrecfm,id%D%XSWBD(:,:),iresp,hcomment=ycomment, hnam_dim=yswband_dim_name)
251  !
252  yrecfm='SWU_ISBA_'
253  ycomment='X_Y_'//yrecfm//' (W/m2)'
254  CALL write_surf(duo%CSELECT,&
255  hprogram,yrecfm,id%D%XSWBU(:,:),iresp,hcomment=ycomment, hnam_dim=yswband_dim_name)
256  !
257  ELSE
258  !
259  DO jsw=1, SIZE(id%D%XSWBD,2)
260  ynum=achar(48+jsw)
261  !
262  yrecfm='SWD_ISBA_'//ynum
263  ycomment='short wave downward radiation over tile nature for spectral band'//ynum//' (W/m2)'
264  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XSWBD(:,jsw),iresp,hcomment=ycomment)
265  !
266  yrecfm='SWU_ISBA_'//ynum
267  ycomment='short wave upward radiation over tile nature for spectral band'//ynum//' (W/m2)'
268  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XSWBU(:,jsw),iresp,hcomment=ycomment)
269  !
270  ENDDO
271  !
272  ENDIF
273  !
274  ENDIF
275  !
276  yrecfm='FMU_ISBA'
277  ycomment='u component of wind stress'//' (Pa)'
278  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XFMU(:),iresp,hcomment=ycomment)
279  !
280  yrecfm='FMV_ISBA'
281  ycomment='v component of wind stress'//' (Pa)'
282  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XFMV(:),iresp,hcomment=ycomment)
283  !
284 END IF
285 !
286 !* 4. Specific Energy fluxes :(for each patch)
287 ! ----------------------------------------
288 !
289 IF (id%DE%LSURF_EVAP_BUDGET) CALL write_evap_bud(id%DE,"_ISBA ",.false.)
290 !
291 !* 6. parameters at 2 and 10 meters :
292 ! -------------------------------
293 !
294 IF (id%O%N2M>=1) THEN
295  !
296  yrecfm='T2M_ISBA'
297  ycomment='X_Y_'//yrecfm//' (K)'
298  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XT2M(:),iresp,hcomment=ycomment)
299  !
300  yrecfm='T2MMIN_ISBA'
301  ycomment='X_Y_'//yrecfm//' (K)'
302  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XT2M_MIN(:),iresp,hcomment=ycomment)
303  IF(greset)id%D%XT2M_MIN(:)=xundef
304  !
305  yrecfm='T2MMAX_ISBA'
306  ycomment='X_Y_'//yrecfm//' (K)'
307  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XT2M_MAX(:),iresp,hcomment=ycomment)
308  IF(greset)id%D%XT2M_MAX(:)=-xundef
309  !
310  yrecfm='Q2M_ISBA'
311  ycomment='X_Y_'//yrecfm//' (KG/KG)'
312  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XQ2M(:),iresp,hcomment=ycomment)
313  !
314  yrecfm='HU2M_ISBA'
315  ycomment='X_Y_'//yrecfm//' (-)'
316  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XHU2M(:),iresp,hcomment=ycomment)
317  !
318  yrecfm='HU2MMIN_ISBA'
319  ycomment='X_Y_'//yrecfm//' (-)'
320  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XHU2M_MIN(:),iresp,hcomment=ycomment)
321  IF(greset)id%D%XHU2M_MIN(:)=xundef
322  !
323  yrecfm='HU2MMAX_ISBA'
324  ycomment='X_Y_'//yrecfm//' (-)'
325  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XHU2M_MAX(:),iresp,hcomment=ycomment)
326  IF(greset)id%D%XHU2M_MAX(:)=-xundef
327  !
328  yrecfm='ZON10M_ISBA'
329  ycomment='X_Y_'//yrecfm//' (M/S)'
330  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XZON10M(:),iresp,hcomment=ycomment)
331  !
332  yrecfm='MER10M_ISBA'
333  ycomment='X_Y_'//yrecfm//' (M/S)'
334  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XMER10M(:),iresp,hcomment=ycomment)
335  !
336  yrecfm='W10M_ISBA'
337  ycomment='X_Y_'//yrecfm//' (M/S)'
338  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XWIND10M(:),iresp,hcomment=ycomment)
339  !
340  yrecfm='W10MMAX_ISBA'
341  ycomment='X_Y_'//yrecfm//' (M/S)'
342  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XWIND10M_MAX(:),iresp,hcomment=ycomment)
343  IF(greset)id%D%XWIND10M_MAX(:)=0.0
344  !
345  yrecfm='SFCO2_ISBA'
346  ycomment='X_Y_'//yrecfm//' (M.kgCO2.S-1.kgAIR-1)'
347  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XSFCO2(:),iresp,hcomment=ycomment)
348  !
349 END IF
350 !----------------------------------------------------------------------------
351 !
352 !* 7. Transfer coefficients
353 ! ---------------------
354 !
355 IF (id%O%LCOEF) THEN
356  !
357  yrecfm='CD_ISBA'
358  ycomment='X_Y_'//yrecfm
359  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XCD(:),iresp,hcomment=ycomment)
360  !
361  yrecfm='CH_ISBA'
362  ycomment='X_Y_'//yrecfm
363  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XCH(:),iresp,hcomment=ycomment)
364  !
365  yrecfm='CE_ISBA'
366  ycomment='X_Y_'//yrecfm
367  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XCE(:),iresp,hcomment=ycomment)
368  !
369  yrecfm='Z0_ISBA'
370  ycomment='X_Y_'//yrecfm//' (M)'
371  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XZ0(:),iresp,hcomment=ycomment)
372  !
373  yrecfm='Z0H_ISBA'
374  ycomment='X_Y_'//yrecfm//' (M)'
375  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XZ0H(:),iresp,hcomment=ycomment)
376  !
377 ENDIF
378 !
379 !----------------------------------------------------------------------------
380 !
381 !* 8. Surface humidity
382 ! ----------------
383 IF (id%O%LSURF_VARS) THEN
384  !
385  yrecfm='QS_ISBA'
386  ycomment='X_Y_'//yrecfm//' (KG/KG)'
387  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%D%XQS(:),iresp,hcomment=ycomment)
388  !
389 ENDIF
390 !
391 !----------------------------------------------------------------------------
392 !
393 isize = u%NSIZE_NATURE
394 !
395 !User want (or not) patch output
396 IF (id%O%LPATCH_BUDGET.AND.(io%NPATCH >1)) THEN
397  !
398  !* 10. Richardson number (for each patch)
399  ! -----------------
400  !
401  IF (id%O%N2M>=1) THEN
402  !
403  yrecfm='RI_'
404  ycomment='X_Y_'//yrecfm
405  DO jp=1,io%NPATCH
406  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
407  np%AL(jp)%NR_P,id%ND%AL(jp)%XRI(:),isize,s%XWORK_WR)
408  ENDDO
409  !
410  END IF
411  !
412  !* 11. Energy fluxes :(for each patch)
413  ! -------------
414  !
415  IF (id%O%LSURF_BUDGET) THEN
416  !
417  yrecfm='TALB_'
418  ycomment='total albedo per patch'
419  DO jp=1,io%NPATCH
420  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
421  np%AL(jp)%NR_P,id%ND%AL(jp)%XALBT(:),isize,s%XWORK_WR)
422  ENDDO
423  !
424  yrecfm='RN_'
425  ycomment='X_Y_'//yrecfm//' (W/m2)'
426  DO jp=1,io%NPATCH
427  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
428  np%AL(jp)%NR_P,id%ND%AL(jp)%XRN(:),isize,s%XWORK_WR)
429  ENDDO
430  !
431  yrecfm='H_'
432  ycomment='X_Y_'//yrecfm//' (W/m2)'
433  DO jp=1,io%NPATCH
434  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
435  np%AL(jp)%NR_P,id%ND%AL(jp)%XH(:),isize,s%XWORK_WR)
436  ENDDO
437  !
438  yrecfm='LE_'
439  ycomment='X_Y_'//yrecfm//' (W/m2)'
440  DO jp = 1,io%NPATCH
441  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
442  np%AL(jp)%NR_P,npe%AL(jp)%XLE(:),isize,s%XWORK_WR)
443  ENDDO
444  !
445  yrecfm='LEI_'
446  ycomment='X_Y_'//yrecfm//' (W/m2)'
447  DO jp=1,io%NPATCH
448  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
449  np%AL(jp)%NR_P,id%ND%AL(jp)%XLEI(:),isize,s%XWORK_WR)
450  ENDDO
451  !
452  yrecfm='GFLUX_'
453  ycomment='X_Y_'//yrecfm//' (W/m2)'
454  DO jp=1,io%NPATCH
455  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
456  np%AL(jp)%NR_P,id%ND%AL(jp)%XGFLUX(:),isize,s%XWORK_WR)
457  ENDDO
458  !
459  yrecfm='EVAP_'
460  ycomment='X_Y_'//yrecfm//' (W/m2)'
461  DO jp=1,io%NPATCH
462  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
463  np%AL(jp)%NR_P,id%ND%AL(jp)%XEVAP(:),isize,s%XWORK_WR)
464  ENDDO
465  !
466  yrecfm='SUBL_'
467  ycomment='X_Y_'//yrecfm//' (W/m2)'
468  DO jp=1,io%NPATCH
469  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
470  np%AL(jp)%NR_P,id%ND%AL(jp)%XSUBL(:),isize,s%XWORK_WR)
471  ENDDO
472  !
473  IF (id%O%LRAD_BUDGET .OR. (id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC)) THEN
474  !
475  yrecfm='SWD_'
476  ycomment='X_Y_'//yrecfm//' (W/m2)'
477  DO jp=1,io%NPATCH
478  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
479  np%AL(jp)%NR_P,id%ND%AL(jp)%XSWD(:),isize,s%XWORK_WR)
480  ENDDO
481  !
482  yrecfm='SWU_'
483  ycomment='X_Y_'//yrecfm//' (W/m2)'
484  DO jp=1,io%NPATCH
485  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
486  np%AL(jp)%NR_P,id%ND%AL(jp)%XSWU(:),isize,s%XWORK_WR)
487  ENDDO
488  !
489  yrecfm='LWD_'
490  ycomment='X_Y_'//yrecfm//' (W/m2)'
491  DO jp=1,io%NPATCH
492  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
493  np%AL(jp)%NR_P,id%ND%AL(jp)%XLWD(:),isize,s%XWORK_WR)
494  ENDDO
495  !
496  yrecfm='LWU_'
497  ycomment='X_Y_'//yrecfm//' (W/m2)'
498  DO jp=1,io%NPATCH
499  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
500  np%AL(jp)%NR_P,id%ND%AL(jp)%XLWU(:),isize,s%XWORK_WR)
501  ENDDO
502  !
503  DO jsw=1, SIZE(id%D%XSWBD,2)
504  ynum=achar(48+jsw)
505  !
506  yrecfm='SWD_'//ynum
507  ycomment='X_Y_'//yrecfm//' (W/m2)'
508  DO jp=1,io%NPATCH
509  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
510  np%AL(jp)%NR_P,id%ND%AL(jp)%XSWD(:),isize,s%XWORK_WR)
511  ENDDO
512  !
513  yrecfm='SWU_'//ynum
514  ycomment='X_Y_'//yrecfm//' (W/m2)'
515  DO jp=1,io%NPATCH
516  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
517  np%AL(jp)%NR_P,id%ND%AL(jp)%XSWU(:),isize,s%XWORK_WR)
518  ENDDO
519  !
520  ENDDO
521  !
522  ENDIF
523  !
524  yrecfm='FMU_'
525  ycomment='X_Y_'//yrecfm//' (Pa)'
526  DO jp=1,io%NPATCH
527  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
528  np%AL(jp)%NR_P,id%ND%AL(jp)%XFMU(:),isize,s%XWORK_WR)
529  ENDDO
530  !
531  yrecfm='FMV_'
532  ycomment='X_Y_'//yrecfm//' (Pa)'
533  DO jp=1,io%NPATCH
534  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
535  np%AL(jp)%NR_P,id%ND%AL(jp)%XFMV(:),isize,s%XWORK_WR)
536  ENDDO
537  !
538  END IF
539  !
540  !* 12. Specific Energy fluxes :(for each patch)
541  ! ----------------------------------------
542  !
543  IF (id%DE%LSURF_EVAP_BUDGET) CALL write_evap_bud_patch(id%NDE,'_ ',.false.)
544  !
545  !* 13. surface temperature parameters at 2 and 10 meters (for each patch):
546  ! -------------------------------------------------------------------
547  !
548  IF (id%O%N2M>=1.AND..NOT.io%LCANOPY) THEN
549  !
550  yrecfm='T2M_'
551  ycomment='X_Y_'//yrecfm//' (K)'
552  DO jp=1,io%NPATCH
553  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
554  np%AL(jp)%NR_P,id%ND%AL(jp)%XT2M(:),isize,s%XWORK_WR)
555  ENDDO
556  !
557  yrecfm='T2MMIN_'
558  ycomment='X_Y_'//yrecfm//' (K)'
559  DO jp=1,io%NPATCH
560  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
561  np%AL(jp)%NR_P,id%ND%AL(jp)%XT2M_MIN(:),isize,s%XWORK_WR)
562  IF (greset) id%ND%AL(jp)%XT2M_MIN(:)=xundef
563  ENDDO
564  !
565  yrecfm='T2MMAX_'
566  ycomment='X_Y_'//yrecfm//' (K)'
567  DO jp=1,io%NPATCH
568  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
569  np%AL(jp)%NR_P,id%ND%AL(jp)%XT2M_MAX(:),isize,s%XWORK_WR)
570  IF (greset) id%ND%AL(jp)%XT2M_MAX(:)=-xundef
571  ENDDO
572  !
573  yrecfm='Q2M_'
574  ycomment='X_Y_'//yrecfm//' (KG/KG)'
575  DO jp=1,io%NPATCH
576  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
577  np%AL(jp)%NR_P,id%ND%AL(jp)%XQ2M(:),isize,s%XWORK_WR)
578  ENDDO
579  !
580  yrecfm='HU2M_'
581  ycomment='X_Y_'//yrecfm//' (PERCENT)'
582  DO jp=1,io%NPATCH
583  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
584  np%AL(jp)%NR_P,id%ND%AL(jp)%XHU2M(:),isize,s%XWORK_WR)
585  ENDDO
586  !
587  yrecfm='ZON10M_'
588  ycomment='X_Y_'//yrecfm//' (M/S)'
589  DO jp=1,io%NPATCH
590  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
591  np%AL(jp)%NR_P,id%ND%AL(jp)%XZON10M(:),isize,s%XWORK_WR)
592  ENDDO
593  !
594  yrecfm='MER10M_'
595  ycomment='X_Y_'//yrecfm//' (M/S)'
596  DO jp=1,io%NPATCH
597  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
598  np%AL(jp)%NR_P,id%ND%AL(jp)%XMER10M(:),isize,s%XWORK_WR)
599  ENDDO
600  !
601  yrecfm='W10M_'
602  ycomment='X_Y_'//yrecfm//' (M/S)'
603  DO jp=1,io%NPATCH
604  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
605  np%AL(jp)%NR_P,id%ND%AL(jp)%XWIND10M(:),isize,s%XWORK_WR)
606  ENDDO
607  !
608  END IF
609  !
610 ENDIF
611 !
612 !----------------------------------------------------------------------------
613 !
614 !* 9. Diag of prognostic fields
615 ! -------------------------
616 !
617 IF (duo%LPROVAR_TO_DIAG) CALL provar_to_diag
618 !
619 !----------------------------------------------------------------------------
620 !
621 !* 15. chemical diagnostics:
622 ! --------------------
623 !
624 IF (chi%SVI%NBEQ>0 .AND. chi%CCH_DRY_DEP=="WES89 ") THEN
625  !
626  DO jsv = 1,SIZE(chi%CCH_NAMES,1)
627  yrecfm='DVNT'//trim(chi%CCH_NAMES(jsv))
628  WRITE(ycomment,'(A13,I3.3)')'(m/s) DV_NAT_',jsv
629  DO jp = 1,io%NPATCH
630  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
631  np%AL(jp)%NR_P,nchi%AL(jp)%XDEP(:,jsv),isize,s%XWORK_WR)
632  ENDDO
633  END DO
634  !
635 ENDIF
636 !
637 IF (chi%SVI%NBEQ>0 .AND. chi%LCH_BIO_FLUX) THEN
638  !
639  IF (ASSOCIATED(gb%XFISO)) THEN
640  yrecfm='FISO'
641  WRITE(ycomment,'(A21)')'FISO (molecules/m2/s)'
642  CALL write_surf(duo%CSELECT,hprogram,yrecfm,gb%XFISO(:),iresp,hcomment=ycomment)
643  END IF
644  !
645  IF (ASSOCIATED(gb%XFISO)) THEN
646  yrecfm='FMONO'
647  WRITE(ycomment,'(A22)')'FMONO (molecules/m2/s)'
648  CALL write_surf(duo%CSELECT,hprogram,yrecfm,gb%XFMONO(:),iresp,hcomment=ycomment)
649  END IF
650  !
651 ENDIF
652 !
653 IF (chi%LCH_NO_FLUX) THEN
654  IF (ASSOCIATED(gb%XNOFLUX)) THEN
655  yrecfm='NOFLUX'
656  WRITE(ycomment,'(A21)')'NOFLUX (molecules/m2/s)'
657  CALL write_surf(duo%CSELECT, hprogram,yrecfm,gb%XNOFLUX(:),iresp,hcomment=ycomment)
658  END IF
659 END IF
660 !
661 IF (chi%SVI%NDSTEQ > 0)THEN
662  !
663  DO jsv = 1,ndstmde ! for all dust modes
664  WRITE(yrecfm,'(A5,I3.3)')'F_DST',jsv
665  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
666  DO jp = 1,io%NPATCH
667  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
668  np%AL(jp)%NR_P,ndst%AL(jp)%XSFDST(:,jsv),isize,s%XWORK_WR)
669  ENDDO
670  END DO
671  !
672 ENDIF
673 !
674 !----------------------------------------------------------------------------
675 !
676 !* 5. Cumulated Energy fluxes
677 ! -----------------------
678 !
679  CALL end_io_surf_n(hprogram)
680  CALL init_io_surf_n(dtco, u, hprogram,'NATURE','ISBA ','WRITE','ISBA_DIAG_CUMUL.OUT.nc')
681 !
682 IF (id%O%LSURF_BUDGETC) THEN
683  !
684  CALL write_evap_bud(id%DEC,"C_ISBA",(id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC))
685  !
686  IF(io%LGLACIER)THEN
687  yrecfm='ICE_FC_ISBA'
688  ycomment='X_Y_'//yrecfm//' (Kg/m2)'
689  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DEC%XICEFLUX(:),iresp,hcomment=ycomment)
690  ENDIF
691  !
692  yrecfm='RNC_ISBA'
693  ycomment='X_Y_'//yrecfm//' (J/m2)'
694  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XRN(:),iresp,hcomment=ycomment)
695  !
696  yrecfm='HC_ISBA'
697  ycomment='X_Y_'//yrecfm//' (J/m2)'
698  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XH(:),iresp,hcomment=ycomment)
699  !
700  yrecfm='LEC_ISBA'
701  ycomment='X_Y_'//yrecfm//' (J/m2)'
702  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XLE(:),iresp,hcomment=ycomment)
703  !
704  yrecfm='LEIC_ISBA'
705  ycomment='X_Y_'//yrecfm//' (J/m2)'
706  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XLEI(:),iresp,hcomment=ycomment)
707  !
708  yrecfm='GFLUXC_ISBA'
709  ycomment='X_Y_'//yrecfm//' (J/m2)'
710  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XGFLUX(:),iresp,hcomment=ycomment)
711  !
712  yrecfm='EVAPC_ISBA'
713  ycomment='total evaporative flux for tile nature'//' (Kg/m2/s)'
714  CALL write_surf(duo%CSELECT, hprogram,yrecfm,id%DC%XEVAP(:),iresp,hcomment=ycomment)
715  !
716  yrecfm='SUBLC_ISBA'
717  ycomment='sublimation flux for tile nature'//' (Kg/m2/s)'
718  CALL write_surf(duo%CSELECT, hprogram,yrecfm,id%DC%XSUBL(:),iresp,hcomment=ycomment)
719  !
720  IF (id%O%LRAD_BUDGET .OR. (id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC)) THEN
721  !
722  yrecfm='SWDC_ISBA'
723  ycomment='X_Y_'//yrecfm//' (J/m2)'
724  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XSWD(:),iresp,hcomment=ycomment)
725  !
726  yrecfm='SWUC_ISBA'
727  ycomment='X_Y_'//yrecfm//' (J/m2)'
728  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XSWU(:),iresp,hcomment=ycomment)
729  !
730  yrecfm='LWDC_ISBA'
731  ycomment='X_Y_'//yrecfm//' (J/m2)'
732  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XLWD(:),iresp,hcomment=ycomment)
733  !
734  yrecfm='LWUC_ISBA'
735  ycomment='X_Y_'//yrecfm//' (J/m2)'
736  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XLWU(:),iresp,hcomment=ycomment)
737  !
738  ENDIF
739  !
740  yrecfm='FMUC_ISBA'
741  ycomment='X_Y_'//yrecfm//' (Pa.s)'
742  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XFMU(:),iresp,hcomment=ycomment)
743  !
744  yrecfm='FMVC_ISBA'
745  ycomment='X_Y_'//yrecfm//' (Pa.s)'
746  CALL write_surf(duo%CSELECT,hprogram,yrecfm,id%DC%XFMV(:),iresp,hcomment=ycomment)
747  !
748 ENDIF
749 !
750 !----------------------------------------------------------------------------
751 !
752 !User want (or not) patch output
753 IF (id%O%LPATCH_BUDGET.AND.(io%NPATCH >1)) THEN
754  !
755  !* 14. Cumulated Energy fluxes :(for each patch)
756  ! -----------------------------------------
757  !
758  IF (id%O%LSURF_BUDGETC) THEN
759  !
760  CALL write_evap_bud_patch(id%NDEC,'C_',(id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC))
761  !
762  IF(io%LGLACIER)THEN
763  yrecfm='ICE_FC_'
764  ycomment='X_Y_'//yrecfm//' (Kg/m2)'
765  DO jp=1,io%NPATCH
766  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
767  np%AL(jp)%NR_P,id%NDEC%AL(jp)%XICEFLUX(:),isize,s%XWORK_WR)
768  ENDDO
769  ENDIF
770  !
771  yrecfm='RNC_'
772  ycomment='X_Y_'//yrecfm//' (J/m2)'
773  DO jp=1,io%NPATCH
774  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
775  np%AL(jp)%NR_P,id%NDC%AL(jp)%XRN(:),isize,s%XWORK_WR)
776  ENDDO
777  !
778  yrecfm='HC_'
779  ycomment='X_Y_'//yrecfm//' (J/m2)'
780  DO jp=1,io%NPATCH
781  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
782  np%AL(jp)%NR_P,id%NDC%AL(jp)%XH(:),isize,s%XWORK_WR)
783  ENDDO
784  !
785  yrecfm='LEC_'
786  ycomment='X_Y_'//yrecfm//' (J/m2)'
787  DO jp=1,io%NPATCH
788  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
789  np%AL(jp)%NR_P,id%NDC%AL(jp)%XLE(:),isize,s%XWORK_WR)
790  ENDDO
791  !
792  yrecfm='LEIC_'
793  ycomment='X_Y_'//yrecfm//' (J/m2)'
794  DO jp=1,io%NPATCH
795  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
796  np%AL(jp)%NR_P,id%NDC%AL(jp)%XLEI(:),isize,s%XWORK_WR)
797  ENDDO
798  !
799  yrecfm='GFLUXC_'
800  ycomment='X_Y_'//yrecfm//' (J/m2)'
801  DO jp=1,io%NPATCH
802  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
803  np%AL(jp)%NR_P,id%NDC%AL(jp)%XGFLUX(:),isize,s%XWORK_WR)
804  ENDDO
805  !
806  yrecfm='EVAPC_'
807  ycomment='X_Y_'//yrecfm//' (W/m2)'
808  DO jp=1,io%NPATCH
809  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
810  np%AL(jp)%NR_P,id%NDC%AL(jp)%XEVAP(:),isize,s%XWORK_WR)
811  ENDDO
812  !
813  yrecfm='SUBLC_'
814  ycomment='X_Y_'//yrecfm//' (W/m2)'
815  DO jp=1,io%NPATCH
816  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
817  np%AL(jp)%NR_P,id%NDC%AL(jp)%XSUBL(:),isize,s%XWORK_WR)
818  ENDDO
819  !
820  IF (id%O%LRAD_BUDGET .OR. (id%O%LSURF_BUDGETC .AND. .NOT.duo%LRESET_BUDGETC)) THEN
821  !
822  yrecfm='SWDC_'
823  ycomment='X_Y_'//yrecfm//' (J/m2)'
824  DO jp=1,io%NPATCH
825  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
826  np%AL(jp)%NR_P,id%NDC%AL(jp)%XSWD(:),isize,s%XWORK_WR)
827  ENDDO
828  !
829  yrecfm='SWUC_'
830  ycomment='X_Y_'//yrecfm//' (J/m2)'
831  DO jp=1,io%NPATCH
832  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
833  np%AL(jp)%NR_P,id%NDC%AL(jp)%XSWU(:),isize,s%XWORK_WR)
834  ENDDO
835  !
836  yrecfm='LWDC_'
837  ycomment='X_Y_'//yrecfm//' (J/m2)'
838  DO jp=1,io%NPATCH
839  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
840  np%AL(jp)%NR_P,id%NDC%AL(jp)%XLWD(:),isize,s%XWORK_WR)
841  ENDDO
842  !
843  yrecfm='LWUC_'
844  ycomment='X_Y_'//yrecfm//' (J/m2)'
845  DO jp=1,io%NPATCH
846  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
847  np%AL(jp)%NR_P,id%NDC%AL(jp)%XLWU(:),isize,s%XWORK_WR)
848  ENDDO
849  !
850  ENDIF
851  !
852  yrecfm='FMUC_'
853  ycomment='X_Y_'//yrecfm//' (Pa.s)'
854  DO jp=1,io%NPATCH
855  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
856  np%AL(jp)%NR_P,id%NDC%AL(jp)%XFMU(:),isize,s%XWORK_WR)
857  ENDDO
858  !
859  yrecfm='FMVC_'
860  ycomment='X_Y_'//yrecfm//' (Pa.s)'
861  DO jp=1,io%NPATCH
862  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
863  np%AL(jp)%NR_P,id%NDC%AL(jp)%XFMV(:),isize,s%XWORK_WR)
864  ENDDO
865  !
866  ENDIF
867  !
868  !-------------------------------------------------------------------------------
869 ENDIF
870 !
871 ! End of IO
872 !
873  CALL end_io_surf_n(hprogram)
874 !
875 !-------------------------------------------------------------------------------
876 !
877 !User want (or not) patch output
878 !-------------------------------------------------------------------------------
879 !
880 IF ( duo%LRESETCUMUL .AND. id%O%LSURF_BUDGETC ) THEN
881  !
882  DO jp = 1,io%NPATCH
883  CALL init_surf_bud(id%NDC%AL(jp),0.)
884  ENDDO
885  !
886  IF (id%DE%LSURF_EVAP_BUDGET) THEN
887  DO jp = 1,io%NPATCH
888  CALL init_evap_bud(id%NDEC%AL(jp))
889  ENDDO
890  !
891  IF (id%DE%LWATER_BUDGET) THEN
892  DO jp = 1,io%NPATCH
893  CALL init_water_bud(id%NDEC%AL(jp))
894  ENDDO
895  ENDIF
896  ENDIF
897  !
898 END IF
899 !
900 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N',1,zhook_handle)
901 !
902 CONTAINS
903 !
904 !-------------------------------------------------------------------------------
905 !
906 SUBROUTINE write_evap_bud(DEA,HTERM,OFLAG)
907 !
909 !
910 TYPE(diag_evap_isba_t) :: DEA
911  CHARACTER(LEN=6), INTENT(IN) :: HTERM
912 LOGICAL, INTENT(IN) :: OFLAG
913 REAL(KIND=JPRB) :: ZHOOK_HANDLE
914 !
915 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:WRITE_EVAP_BUD',0,zhook_handle)
916 !
917 yrecfm='LEG'//trim(hterm)
918 ycomment='bare ground evaporation for tile nature'//' (W/m2)'
919  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLEG(:),iresp,hcomment=ycomment)
920 !
921 yrecfm='LEGI'//trim(hterm)
922 ycomment='bare ground sublimation for tile nature'//' (W/m2)'
923  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLEGI(:),iresp,hcomment=ycomment)
924 !
925 yrecfm='LEV'//trim(hterm)
926 ycomment='total vegetation evaporation for tile nature'//' (W/m2)'
927  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLEV(:),iresp,hcomment=ycomment)
928  !
929 yrecfm='LES'//trim(hterm)
930 ycomment='snow sublimation for tile nature'//' (W/m2)'
931  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLES(:),iresp,hcomment=ycomment)
932  !
933 IF(npe%AL(1)%TSNOW%SCHEME=='3-L' .OR. npe%AL(1)%TSNOW%SCHEME=='CRO')THEN
934  yrecfm='LESL'//trim(hterm)
935  ycomment='liquid water evaporation over snow for tile nature'//' (W/m2)'
936  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLESL(:),iresp,hcomment=ycomment)
937  yrecfm='SNDRIF'//trim(hterm)
938  ycomment='blowing snow sublimation for tile nature'//' (Kg/m2/s)'
939  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSNDRIFT(:),iresp,hcomment=ycomment)
940 ENDIF
941  !
942 yrecfm='LER'//trim(hterm)
943 ycomment='canopy direct evaporation for tile nature'//' (W/m2)'
944  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLER(:),iresp,hcomment=ycomment)
945  !
946 yrecfm='LETR'//trim(hterm)
947 ycomment='vegetation transpiration for tile nature'//' (W/m2)'
948  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLETR(:),iresp,hcomment=ycomment)
949  !
950 yrecfm='DRAIN'//trim(hterm)
951 ycomment='drainage for tile nature'//' (Kg/m2/s)'
952  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDRAIN(:),iresp,hcomment=ycomment)
953  !
954 IF(io%CRUNOFF=='SGH'.AND.io%CISBA=='DIF')THEN
955  yrecfm='QSB'//trim(hterm)
956  ycomment='lateral subsurface flow for tile nature'//' (Kg/m2/s)'
957  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XQSB(:),iresp,hcomment=ycomment)
958 ENDIF
959  !
960 yrecfm='RUNOFF'//trim(hterm)
961 ycomment='runoff for tile nature'//' (Kg/m2/s)'
962  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XRUNOFF(:),iresp,hcomment=ycomment)
963  !
964 IF(io%CHORT=='SGH'.OR.io%CISBA=='DIF')THEN
965  yrecfm='HORTON'//trim(hterm)
966  ycomment='horton runoff for tile nature'//' (Kg/m2/s)'
967  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XHORT(:),iresp,hcomment=ycomment)
968 ENDIF
969  !
970 yrecfm='DRIVEG'//trim(hterm)
971 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
972  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDRIP(:),iresp,hcomment=ycomment)
973  !
974 yrecfm='RRVEG'//trim(hterm)
975 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
976  CALL write_surf(duo%CSELECT, &
977  hprogram,yrecfm,dea%XRRVEG(:),iresp,hcomment=ycomment)
978  !
979 yrecfm='SNOMLT'//trim(hterm)
980 ycomment='snow melting rate'//' (Kg/m2/s)'
981  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XMELT(:),iresp,hcomment=ycomment)
982  !
983 IF(lagrip)THEN
984  yrecfm='IRRIG'//trim(hterm)
985  ycomment='irrigation rate'//' (Kg/m2/s)'
986  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XIRRIG_FLUX(:),iresp,hcomment=ycomment)
987 ENDIF
988 ! MEB STUFF
989 IF (isize_lmeb_patch>0) THEN
990  yrecfm='LELIT'//trim(hterm)
991  ycomment='X_Y_'//yrecfm//' (W/m2)'
992  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLELITTER(:),iresp,hcomment=ycomment)
993  !
994  yrecfm='LELITI'//trim(hterm)
995  ycomment='X_Y_'//yrecfm//' (W/m2)'
996  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLELITTERI(:),iresp,hcomment=ycomment)
997  !
998  yrecfm='DRIPLIT'//trim(hterm)
999  ycomment='X_Y_'//yrecfm//' (W/m2)'
1000  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDRIPLIT(:),iresp,hcomment=ycomment)
1001  !
1002  yrecfm='RRLIT'//trim(hterm)
1003  ycomment='X_Y_'//yrecfm//' (W/m2)'
1004  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XRRLIT(:),iresp,hcomment=ycomment)
1005  !
1006  yrecfm='LEV_CV'//trim(hterm)
1007  ycomment='X_Y_'//yrecfm//' (W/m2)'
1008  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLEV_CV(:),iresp,hcomment=ycomment)
1009  !
1010  yrecfm='LES_CV'//trim(hterm)
1011  ycomment='X_Y_'//yrecfm//' (W/m2)'
1012  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLES_CV(:),iresp,hcomment=ycomment)
1013  !
1014  yrecfm='LETR_CV'//trim(hterm)
1015  ycomment='X_Y_'//yrecfm//' (W/m2)'
1016  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLETR_CV(:),iresp,hcomment=ycomment)
1017  !
1018  yrecfm='LER_CV'//trim(hterm)
1019  ycomment='X_Y_'//yrecfm//' (W/m2)'
1020  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLER_CV(:),iresp,hcomment=ycomment)
1021  !
1022  yrecfm='LE_CV'//trim(hterm)
1023  ycomment='X_Y_'//yrecfm//' (W/m2)'
1024  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLE_CV(:),iresp,hcomment=ycomment)
1025  !
1026  yrecfm='H_CV'//trim(hterm)
1027  ycomment='X_Y_'//yrecfm//' (W/m2)'
1028  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XH_CV(:),iresp,hcomment=ycomment)
1029  !
1030  yrecfm='MELT_CV'//trim(hterm)
1031  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1032  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XMELT_CV(:),iresp,hcomment=ycomment)
1033  !
1034  yrecfm='FRZ_CV'//trim(hterm)
1035  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1036  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XFRZ_CV(:),iresp,hcomment=ycomment)
1037  !
1038  yrecfm='LETR_GV'//trim(hterm)
1039  ycomment='X_Y_'//yrecfm//' (W/m2)'
1040  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLETR_GV(:),iresp,hcomment=ycomment)
1041  !
1042  yrecfm='LER_GV'//trim(hterm)
1043  ycomment='X_Y_'//yrecfm//' (W/m2)'
1044  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLER_GV(:),iresp,hcomment=ycomment)
1045  !
1046  yrecfm='LE_GV'//trim(hterm)
1047  ycomment='X_Y_'//yrecfm//' (W/m2)'
1048  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLE_GV(:),iresp,hcomment=ycomment)
1049  !
1050  yrecfm='H_GV'//trim(hterm)
1051  ycomment='X_Y_'//yrecfm//' (W/m2)'
1052  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XH_GV(:),iresp,hcomment=ycomment)
1053  !
1054  yrecfm='LE_GN'//trim(hterm)
1055  ycomment='X_Y_'//yrecfm//' (W/m2)'
1056  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLE_GN(:),iresp,hcomment=ycomment)
1057  !
1058  yrecfm='H_GN'//trim(hterm)
1059  ycomment='X_Y_'//yrecfm//' (W/m2)'
1060  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XH_GN(:),iresp,hcomment=ycomment)
1061  !
1062  yrecfm='SR_GN'//trim(hterm)
1063  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1064  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSR_GN(:),iresp,hcomment=ycomment)
1065  !
1066  yrecfm='SWDN_GN'//trim(hterm)
1067  ycomment='X_Y_'//yrecfm//' (W/m2)'
1068  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSWDOWN_GN(:),iresp,hcomment=ycomment)
1069  !
1070  yrecfm='LWDN_GN'//trim(hterm)
1071  ycomment='X_Y_'//yrecfm//' (W/m2)'
1072  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLWDOWN_GN(:),iresp,hcomment=ycomment)
1073  !
1074  yrecfm='LE_CA'//trim(hterm)
1075  ycomment='X_Y_'//yrecfm//' (W/m2)'
1076  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLE_CA(:),iresp,hcomment=ycomment)
1077  !
1078  yrecfm='H_CA'//trim(hterm)
1079  ycomment='X_Y_'//yrecfm//' (W/m2)'
1080  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XH_CA(:),iresp,hcomment=ycomment)
1081  !
1082  yrecfm='SWNT_V'//trim(hterm)
1083  ycomment='X_Y_'//yrecfm//' (W/m2)'
1084  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSWNET_V(:),iresp,hcomment=ycomment)
1085  !
1086  yrecfm='SWNT_G'//trim(hterm)
1087  ycomment='X_Y_'//yrecfm//' (W/m2)'
1088  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSWNET_G(:),iresp,hcomment=ycomment)
1089  !
1090  yrecfm='SWNT_N'//trim(hterm)
1091  ycomment='X_Y_'//yrecfm//' (W/m2)'
1092  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSWNET_N(:),iresp,hcomment=ycomment)
1093  !
1094  yrecfm='SWNT_NS'//trim(hterm)
1095  ycomment='X_Y_'//yrecfm//' (W/m2)'
1096  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSWNET_NS(:),iresp,hcomment=ycomment)
1097  !
1098  yrecfm='LWNT_V'//trim(hterm)
1099  ycomment='X_Y_'//yrecfm//' (W/m2)'
1100  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLWNET_V(:),iresp,hcomment=ycomment)
1101  !
1102  yrecfm='LWNT_G'//trim(hterm)
1103  ycomment='X_Y_'//yrecfm//' (W/m2)'
1104  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLWNET_G(:),iresp,hcomment=ycomment)
1105  !
1106  yrecfm='LWNT_N'//trim(hterm)
1107  ycomment='X_Y_'//yrecfm//' (W/m2)'
1108  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLWNET_N(:),iresp,hcomment=ycomment)
1109  !
1110 ENDIF
1111  ! END MEB STUFF
1112  !
1113 IF(io%LFLOOD)THEN
1114  !
1115  yrecfm='IFLOOD'//trim(hterm)
1116  ycomment='flood soil infiltration (Kg/m2/s)'
1117  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XIFLOOD(:),iresp,hcomment=ycomment)
1118  !
1119  yrecfm='PFLOOD'//trim(hterm)
1120  ycomment='intercepted precipitation by floodplains (Kg/m2/s)'
1121  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XPFLOOD(:),iresp,hcomment=ycomment)
1122  !
1123  yrecfm='LEF'//trim(hterm)
1124  ycomment='total floodplains evaporation (W/m2)'
1125  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLE_FLOOD(:),iresp,hcomment=ycomment)
1126  !
1127  yrecfm='LEIF'//trim(hterm)
1128  ycomment='solid floodplains evaporation (W/m2)'
1129  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XLEI_FLOOD(:),iresp,hcomment=ycomment)
1130  !
1131 ENDIF
1132  !
1133 IF(io%CPHOTO/='NON')THEN
1134  !
1135  yrecfm='GPP'//trim(hterm)
1136  ycomment='gross primary production over tile nature (kgCO2/m2/s)'
1137  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XGPP(:),iresp,hcomment=ycomment)
1138  !
1139  IF (hterm(1:1)=="C") THEN
1140  yrecfm='RC_AUTO'//trim(hterm(2:))
1141  ELSE
1142  yrecfm='R_AUTO'//trim(hterm)
1143  ENDIF
1144  ycomment='autotrophic respiration over tile nature (kgCO2/m2/s)'
1145  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XRESP_AUTO(:),iresp,hcomment=ycomment)
1146  !
1147  IF (hterm(1:1)=="C") THEN
1148  yrecfm='RC_ECO'//trim(hterm(2:))
1149  ELSE
1150  yrecfm='R_ECO'//trim(hterm)
1151  ENDIF
1152  ycomment='ecosystem respiration over tile nature (kgCO2/m2/s)'
1153  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XRESP_ECO(:),iresp,hcomment=ycomment)
1154  !
1155 ENDIF
1156 !
1157 IF(id%DE%LWATER_BUDGET .OR. oflag)THEN
1158  !
1159  yrecfm='RAINF'//trim(hterm)
1160  ycomment='input rainfall rate (Kg/m2/s)'
1161  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XRAINFALL(:),iresp,hcomment=ycomment)
1162  !
1163  yrecfm='SNOWF'//trim(hterm)
1164  ycomment='input snowfall rate (Kg/m2/s)'
1165  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XSNOWFALL(:),iresp,hcomment=ycomment)
1166  !
1167  yrecfm='DWG'//trim(hterm)
1168  ycomment='change in liquid soil moisture (Kg/m2/s)'
1169  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDWG(:),iresp,hcomment=ycomment)
1170  !
1171  yrecfm='DWGI'//trim(hterm)
1172  ycomment='change in solid soil moisture (Kg/m2/s)'
1173  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDWGI(:),iresp,hcomment=ycomment)
1174  !
1175  yrecfm='DWR'//trim(hterm)
1176  ycomment='change in water on canopy (Kg/m2/s)'
1177  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDWR(:),iresp,hcomment=ycomment)
1178  !
1179  yrecfm='DSWE'//trim(hterm)
1180  ycomment='change in snow water equivalent (Kg/m2/s)'
1181  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XDSWE(:),iresp,hcomment=ycomment)
1182  !
1183  yrecfm='WATBUD'//trim(hterm)
1184  ycomment='isba water budget as residue (Kg/m2/s)'
1185  CALL write_surf(duo%CSELECT, hprogram,yrecfm,dea%XWATBUD(:),iresp,hcomment=ycomment)
1186  !
1187 ENDIF
1188 !
1189 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:WRITE_EVAP_BUD',1,zhook_handle)
1190 
1191 !
1192 END SUBROUTINE write_evap_bud
1193 !
1194 SUBROUTINE write_evap_bud_patch(NDEA,HTERM,OFLAG)
1197 !
1198 TYPE(diag_evap_isba_np_t) :: NDEA
1199  CHARACTER(LEN=2), INTENT(IN) :: HTERM
1200 LOGICAL, INTENT(IN) :: OFLAG
1201 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1202 !
1203 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:WRITE_EVAP_BUD_PATCH',0,zhook_handle)
1204 !
1205 yrecfm='LEG'//trim(hterm)
1206 ycomment='X_Y_'//yrecfm//' (W/m2)'
1207 DO jp=1,io%NPATCH
1208  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1209  np%AL(jp)%NR_P,ndea%AL(jp)%XLEG(:),isize,s%XWORK_WR)
1210 ENDDO
1211 !
1212 yrecfm='LEGI'//trim(hterm)
1213 ycomment='X_Y_'//yrecfm//' (W/m2)'
1214 DO jp=1,io%NPATCH
1215  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1216  np%AL(jp)%NR_P,ndea%AL(jp)%XLEGI(:),isize,s%XWORK_WR)
1217 ENDDO
1218 !
1219 yrecfm='LEV'//trim(hterm)
1220 ycomment='X_Y_'//yrecfm//' (W/m2)'
1221 DO jp=1,io%NPATCH
1222  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1223  np%AL(jp)%NR_P,ndea%AL(jp)%XLEV(:),isize,s%XWORK_WR)
1224 ENDDO
1225 !
1226 
1227 yrecfm='LES'//trim(hterm)
1228 ycomment='X_Y_'//yrecfm//' (W/m2)'
1229 DO jp=1,io%NPATCH
1230  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1231  np%AL(jp)%NR_P,ndea%AL(jp)%XLES(:),isize,s%XWORK_WR)
1232 ENDDO
1233 !
1234 IF(npe%AL(1)%TSNOW%SCHEME=='3-L' .OR. npe%AL(1)%TSNOW%SCHEME=='CRO')THEN
1235  yrecfm='LESL'//trim(hterm)
1236  ycomment='X_Y_'//yrecfm//' (W/m2)'
1237  DO jp=1,io%NPATCH
1238  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1239  np%AL(jp)%NR_P,ndea%AL(jp)%XLESL(:),isize,s%XWORK_WR)
1240 ENDDO
1241  yrecfm='SNDRIF'//trim(hterm)
1242  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1243  DO jp=1,io%NPATCH
1244  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1245  np%AL(jp)%NR_P,ndea%AL(jp)%XSNDRIFT(:),isize,s%XWORK_WR)
1246 ENDDO
1247 ENDIF
1248 !
1249 yrecfm='LER'//trim(hterm)
1250 ycomment='X_Y_'//yrecfm//' (W/m2)'
1251 DO jp=1,io%NPATCH
1252  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1253  np%AL(jp)%NR_P,ndea%AL(jp)%XLER(:),isize,s%XWORK_WR)
1254 ENDDO
1255 !
1256 yrecfm='LETR'//trim(hterm)
1257 ycomment='X_Y_'//yrecfm//' (W/m2)'
1258 DO jp=1,io%NPATCH
1259  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1260  np%AL(jp)%NR_P,ndea%AL(jp)%XLETR(:),isize,s%XWORK_WR)
1261 ENDDO
1262 !
1263 yrecfm='DRAIN'//trim(hterm)
1264 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1265 DO jp=1,io%NPATCH
1266  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1267  np%AL(jp)%NR_P,ndea%AL(jp)%XDRAIN(:),isize,s%XWORK_WR)
1268 ENDDO
1269 !
1270 IF(io%CRUNOFF=='SGH'.AND.io%CISBA=='DIF')THEN
1271  yrecfm='QSB'//trim(hterm)
1272  ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1273  DO jp=1,io%NPATCH
1274  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1275  np%AL(jp)%NR_P,ndea%AL(jp)%XQSB(:),isize,s%XWORK_WR)
1276  ENDDO
1277 ENDIF
1278 !
1279 yrecfm='RUNOFF'//trim(hterm)
1280 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1281 DO jp=1,io%NPATCH
1282  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1283  np%AL(jp)%NR_P,ndea%AL(jp)%XRUNOFF(:),isize,s%XWORK_WR)
1284 ENDDO
1285 !
1286 IF(io%CHORT=='SGH'.OR.io%CISBA=='DIF')THEN
1287 
1288  yrecfm='HORTON'//trim(hterm)
1289  ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1290  DO jp=1,io%NPATCH
1291  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1292  np%AL(jp)%NR_P,ndea%AL(jp)%XHORT(:),isize,s%XWORK_WR)
1293  ENDDO
1294 
1295 ENDIF
1296 !
1297 yrecfm='DRIVEG'//trim(hterm)
1298 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1299 DO jp=1,io%NPATCH
1300  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1301  np%AL(jp)%NR_P,ndea%AL(jp)%XDRIP(:),isize,s%XWORK_WR)
1302 ENDDO
1303 !
1304 yrecfm='RRVEG'//trim(hterm)
1305 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1306 DO jp=1,io%NPATCH
1307  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1308  np%AL(jp)%NR_P,ndea%AL(jp)%XRRVEG(:),isize,s%XWORK_WR)
1309 ENDDO
1310 !
1311 yrecfm='SNOMLT'//trim(hterm)
1312 ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1313 DO jp=1,io%NPATCH
1314  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1315  np%AL(jp)%NR_P,ndea%AL(jp)%XMELT(:),isize,s%XWORK_WR)
1316 ENDDO
1317 !
1318 ! MEB STUFF
1319 IF (isize_lmeb_patch>0) THEN
1320  !
1321  yrecfm='LELIT'//trim(hterm)
1322  ycomment='X_Y_'//yrecfm//' (W/m2)'
1323  DO jp=1,io%NPATCH
1324  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1325  np%AL(jp)%NR_P,ndea%AL(jp)%XLELITTER(:),isize,s%XWORK_WR)
1326  ENDDO
1327  !
1328  yrecfm='LELITI'//trim(hterm)
1329  ycomment='X_Y_'//yrecfm//' (W/m2)'
1330  DO jp=1,io%NPATCH
1331  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1332  np%AL(jp)%NR_P,ndea%AL(jp)%XLELITTERI(:),isize,s%XWORK_WR)
1333  ENDDO
1334  !
1335  yrecfm='DRIPLIT'//trim(hterm)
1336  ycomment='X_Y_'//yrecfm//' (W/m2)'
1337  DO jp=1,io%NPATCH
1338  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1339  np%AL(jp)%NR_P,ndea%AL(jp)%XDRIPLIT(:),isize,s%XWORK_WR)
1340  ENDDO
1341  !
1342  yrecfm='RRLIT'//trim(hterm)
1343  ycomment='X_Y_'//yrecfm//' (W/m2)'
1344  DO jp=1,io%NPATCH
1345  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1346  np%AL(jp)%NR_P,ndea%AL(jp)%XRRLIT(:),isize,s%XWORK_WR)
1347  ENDDO
1348  !
1349  yrecfm='LEV_CV'//trim(hterm)
1350  ycomment='X_Y_'//yrecfm//' (W/m2)'
1351  DO jp=1,io%NPATCH
1352  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1353  np%AL(jp)%NR_P,ndea%AL(jp)%XLEV_CV(:),isize,s%XWORK_WR)
1354  ENDDO
1355  !
1356  yrecfm='LES_CV'//trim(hterm)
1357  ycomment='X_Y_'//yrecfm//' (W/m2)'
1358  DO jp=1,io%NPATCH
1359  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1360  np%AL(jp)%NR_P,ndea%AL(jp)%XLES_CV(:),isize,s%XWORK_WR)
1361  ENDDO
1362  !
1363  yrecfm='LETR_CV'//trim(hterm)
1364  ycomment='X_Y_'//yrecfm//' (W/m2)'
1365  DO jp=1,io%NPATCH
1366  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1367  np%AL(jp)%NR_P,ndea%AL(jp)%XLETR_CV(:),isize,s%XWORK_WR)
1368  ENDDO
1369  !
1370  yrecfm='LER_CV'//trim(hterm)
1371  ycomment='X_Y_'//yrecfm//' (W/m2)'
1372  DO jp=1,io%NPATCH
1373  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1374  np%AL(jp)%NR_P,ndea%AL(jp)%XLER_CV(:),isize,s%XWORK_WR)
1375  ENDDO
1376  !
1377  yrecfm='LE_CV'//trim(hterm)
1378  ycomment='X_Y_'//yrecfm//' (W/m2)'
1379  DO jp=1,io%NPATCH
1380  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1381  np%AL(jp)%NR_P,ndea%AL(jp)%XLE_CV(:),isize,s%XWORK_WR)
1382  ENDDO
1383  !
1384  yrecfm='H_CV'//trim(hterm)
1385  ycomment='X_Y_'//yrecfm//' (W/m2)'
1386  DO jp=1,io%NPATCH
1387  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1388  np%AL(jp)%NR_P,ndea%AL(jp)%XH_CV(:),isize,s%XWORK_WR)
1389  ENDDO
1390  !
1391  yrecfm='MELT_CV'//trim(hterm)
1392  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1393  DO jp=1,io%NPATCH
1394  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1395  np%AL(jp)%NR_P,ndea%AL(jp)%XMELT_CV(:),isize,s%XWORK_WR)
1396  ENDDO
1397  !
1398  yrecfm='FRZ_CV'//trim(hterm)
1399  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1400  DO jp=1,io%NPATCH
1401  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1402  np%AL(jp)%NR_P,ndea%AL(jp)%XFRZ_CV(:),isize,s%XWORK_WR)
1403  ENDDO
1404  !
1405  yrecfm='LE_GV'//trim(hterm)
1406  ycomment='X_Y_'//yrecfm//' (W/m2)'
1407  DO jp=1,io%NPATCH
1408  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1409  np%AL(jp)%NR_P,ndea%AL(jp)%XLE_GV(:),isize,s%XWORK_WR)
1410  ENDDO
1411  !
1412  yrecfm='H_GV'//trim(hterm)
1413  ycomment='X_Y_'//yrecfm//' (W/m2)'
1414  DO jp=1,io%NPATCH
1415  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1416  np%AL(jp)%NR_P,ndea%AL(jp)%XH_GV(:),isize,s%XWORK_WR)
1417  ENDDO
1418  !
1419  yrecfm='LE_GN'//trim(hterm)
1420  ycomment='X_Y_'//yrecfm//' (W/m2)'
1421  DO jp=1,io%NPATCH
1422  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1423  np%AL(jp)%NR_P,ndea%AL(jp)%XLE_GN(:),isize,s%XWORK_WR)
1424  ENDDO
1425  !
1426  yrecfm='H_GN'//trim(hterm)
1427  ycomment='X_Y_'//yrecfm//' (W/m2)'
1428  DO jp=1,io%NPATCH
1429  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1430  np%AL(jp)%NR_P,ndea%AL(jp)%XH_GN(:),isize,s%XWORK_WR)
1431  ENDDO
1432  !
1433  yrecfm='SR_GN'//trim(hterm)
1434  ycomment='X_Y_'//yrecfm//' (kg/m2/s)'
1435  DO jp=1,io%NPATCH
1436  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1437  np%AL(jp)%NR_P,ndea%AL(jp)%XSR_GN(:),isize,s%XWORK_WR)
1438  ENDDO
1439  !
1440  yrecfm='SWDN_GN'//trim(hterm)
1441  ycomment='X_Y_'//yrecfm//' (W/m2)'
1442  DO jp=1,io%NPATCH
1443  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1444  np%AL(jp)%NR_P,ndea%AL(jp)%XSWDOWN_GN(:),isize,s%XWORK_WR)
1445  ENDDO
1446  !
1447  yrecfm='LWDN_GN'//trim(hterm)
1448  ycomment='X_Y_'//yrecfm//' (W/m2)'
1449  DO jp=1,io%NPATCH
1450  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1451  np%AL(jp)%NR_P,ndea%AL(jp)%XLWDOWN_GN(:),isize,s%XWORK_WR)
1452  ENDDO
1453  !
1454  yrecfm='LE_CA'//trim(hterm)
1455  ycomment='X_Y_'//yrecfm//' (W/m2)'
1456  DO jp=1,io%NPATCH
1457  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1458  np%AL(jp)%NR_P,ndea%AL(jp)%XLE_CA(:),isize,s%XWORK_WR)
1459  ENDDO
1460  !
1461  yrecfm='H_CA'//trim(hterm)
1462  ycomment='X_Y_'//yrecfm//' (W/m2)'
1463  DO jp=1,io%NPATCH
1464  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1465  np%AL(jp)%NR_P,ndea%AL(jp)%XH_CA(:),isize,s%XWORK_WR)
1466  ENDDO
1467  !
1468  yrecfm='SWNT_V'//trim(hterm)
1469  ycomment='X_Y_'//yrecfm//' (W/m2)'
1470  DO jp=1,io%NPATCH
1471  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1472  np%AL(jp)%NR_P,ndea%AL(jp)%XSWNET_V(:),isize,s%XWORK_WR)
1473  ENDDO
1474  !
1475  yrecfm='SWNT_G'//trim(hterm)
1476  ycomment='X_Y_'//yrecfm//' (W/m2)'
1477  DO jp=1,io%NPATCH
1478  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1479  np%AL(jp)%NR_P,ndea%AL(jp)%XSWNET_G(:),isize,s%XWORK_WR)
1480  ENDDO
1481  !
1482  yrecfm='SWNT_N'//trim(hterm)
1483  ycomment='X_Y_'//yrecfm//' (W/m2)'
1484  DO jp=1,io%NPATCH
1485  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1486  np%AL(jp)%NR_P,ndea%AL(jp)%XSWNET_N(:),isize,s%XWORK_WR)
1487  ENDDO
1488  !
1489  yrecfm='SWNT_NS'//trim(hterm)
1490  ycomment='X_Y_'//yrecfm//' (W/m2)'
1491  DO jp=1,io%NPATCH
1492  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1493  np%AL(jp)%NR_P,ndea%AL(jp)%XSWNET_NS(:),isize,s%XWORK_WR)
1494  ENDDO
1495  !
1496  yrecfm='LWNT_V'//trim(hterm)
1497  ycomment='X_Y_'//yrecfm//' (W/m2)'
1498  DO jp=1,io%NPATCH
1499  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1500  np%AL(jp)%NR_P,ndea%AL(jp)%XLWNET_V(:),isize,s%XWORK_WR)
1501  ENDDO
1502  !
1503  yrecfm='LWNT_G'//trim(hterm)
1504  ycomment='X_Y_'//yrecfm//' (W/m2)'
1505  DO jp=1,io%NPATCH
1506  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1507  np%AL(jp)%NR_P,ndea%AL(jp)%XLWNET_G(:),isize,s%XWORK_WR)
1508  ENDDO
1509  !
1510  yrecfm='LWNT_N'//trim(hterm)
1511  ycomment='X_Y_'//yrecfm//' (W/m2)'
1512  DO jp=1,io%NPATCH
1513  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1514  np%AL(jp)%NR_P,ndea%AL(jp)%XLWNET_N(:),isize,s%XWORK_WR)
1515  ENDDO
1516 
1517 ENDIF
1518 ! END MEB STUFF
1519 !
1520 IF(lagrip)THEN
1521  yrecfm='IRRIG'//trim(hterm)
1522  ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1523  DO jp=1,io%NPATCH
1524  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1525  np%AL(jp)%NR_P,ndea%AL(jp)%XIRRIG_FLUX(:),isize,s%XWORK_WR)
1526  ENDDO
1527 ENDIF
1528 !
1529 IF(io%LFLOOD)THEN
1530  !
1531  yrecfm='IFLOOD'//trim(hterm)
1532  ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1533  DO jp=1,io%NPATCH
1534  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1535  np%AL(jp)%NR_P,ndea%AL(jp)%XIFLOOD(:),isize,s%XWORK_WR)
1536  ENDDO
1537  !
1538  yrecfm='PFLOOD'//trim(hterm)
1539  ycomment='X_Y_'//yrecfm//' (Kg/m2/s)'
1540  DO jp=1,io%NPATCH
1541  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1542  np%AL(jp)%NR_P,ndea%AL(jp)%XPFLOOD(:),isize,s%XWORK_WR)
1543  ENDDO
1544  !
1545 
1546  yrecfm='LEF'//trim(hterm)
1547  ycomment='X_Y_'//yrecfm//' (W/m2)'
1548  DO jp=1,io%NPATCH
1549  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1550  np%AL(jp)%NR_P,ndea%AL(jp)%XLE_FLOOD(:),isize,s%XWORK_WR)
1551 ENDDO
1552  !
1553 
1554  yrecfm='LEIF'//trim(hterm)
1555  ycomment='X_Y_'//yrecfm//' (W/m2)'
1556  DO jp=1,io%NPATCH
1557  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1558  np%AL(jp)%NR_P,ndea%AL(jp)%XLEI_FLOOD(:),isize,s%XWORK_WR)
1559  ENDDO
1560  !
1561 ENDIF
1562 !
1563 IF(io%CPHOTO/='NON')THEN
1564  !
1565 
1566  yrecfm='GPP'//trim(hterm)
1567  ycomment='gross primary production per patch (kgCO2/m2/s)'
1568  DO jp=1,io%NPATCH
1569  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1570  np%AL(jp)%NR_P,ndea%AL(jp)%XGPP(:),isize,s%XWORK_WR)
1571  ENDDO
1572  !
1573  IF (hterm(1:1)=="C") THEN
1574  yrecfm='RC_AUTO'//trim(hterm(2:))
1575  ELSE
1576  yrecfm='R_AUTO'//trim(hterm)
1577  ENDIF
1578  ycomment='autotrophic respiration per patch (kgCO2/m2/s)'
1579  DO jp=1,io%NPATCH
1580  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1581  np%AL(jp)%NR_P,ndea%AL(jp)%XRESP_AUTO(:),isize,s%XWORK_WR)
1582  ENDDO
1583  !
1584  IF (hterm(1:1)=="C") THEN
1585  yrecfm='RC_ECO'//trim(hterm(2:))
1586  ELSE
1587  yrecfm='R_ECO'//trim(hterm)
1588  ENDIF
1589  ycomment='ecosystem respiration per patch (kgCO2/m2/s)'
1590  DO jp=1,io%NPATCH
1591  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1592  np%AL(jp)%NR_P,ndea%AL(jp)%XRESP_ECO(:),isize,s%XWORK_WR)
1593  ENDDO
1594  !
1595 ENDIF
1596 !
1597 IF(id%DE%LWATER_BUDGET .OR. oflag)THEN
1598  !
1599  yrecfm='DWG'//trim(hterm)
1600  ycomment='change in liquid soil moisture per patch (Kg/m2/s)'
1601  DO jp=1,io%NPATCH
1602  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1603  np%AL(jp)%NR_P,ndea%AL(jp)%XDWG(:),isize,s%XWORK_WR)
1604  ENDDO
1605  !
1606  yrecfm='DWGI'//trim(hterm)
1607  ycomment='change in solid soil moisture per patch (Kg/m2/s)'
1608  DO jp=1,io%NPATCH
1609  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1610  np%AL(jp)%NR_P,ndea%AL(jp)%XDWGI(:),isize,s%XWORK_WR)
1611  ENDDO
1612  !
1613  yrecfm='DWR'//trim(hterm)
1614  ycomment='change in water on canopy per patch (Kg/m2/s)'
1615  DO jp=1,io%NPATCH
1616  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1617  np%AL(jp)%NR_P,ndea%AL(jp)%XDWR(:),isize,s%XWORK_WR)
1618  ENDDO
1619  !
1620  yrecfm='DSWE'//trim(hterm)
1621  ycomment='change in snow water equivalent per patch (Kg/m2/s)'
1622  DO jp=1,io%NPATCH
1623  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1624  np%AL(jp)%NR_P,ndea%AL(jp)%XDSWE(:),isize,s%XWORK_WR)
1625  ENDDO
1626  !
1627  yrecfm='WATBUD'//trim(hterm)
1628  ycomment='isba water budget as residue per patch (Kg/m2/s)'
1629  DO jp=1,io%NPATCH
1630  CALL write_field_1d_patch(duo%CSELECT,hprogram,yrecfm,ycomment,jp,&
1631  np%AL(jp)%NR_P,ndea%AL(jp)%XWATBUD(:),isize,s%XWORK_WR)
1632  ENDDO
1633  !
1634 ENDIF
1635 !
1636 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:WRITE_EVAP_BUD_PATCH',1,zhook_handle)
1637 !
1638 END SUBROUTINE write_evap_bud_patch
1639 !
1640 !
1641 SUBROUTINE provar_to_diag
1643 REAL, DIMENSION(U%NSIZE_NATURE) :: ZPATCH, ZWORK
1644 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NPE%AL(1)%XWG,2)) :: ZWG
1645 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NPE%AL(1)%XWG,2)) :: ZWGI
1646 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NPE%AL(1)%XTG,2)) :: ZTG
1647 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NP%AL(1)%XDG,2)) :: ZDG_TOT
1648 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NP%AL(1)%XDG,2)) :: ZDG
1649 !
1650 REAL, DIMENSION(U%NSIZE_NATURE,IO%NNBIOMASS) :: ZBIOMASS
1651 REAL, DIMENSION(U%NSIZE_NATURE,IO%NNSOILCARB) :: ZSOILCARB
1652 REAL, DIMENSION(U%NSIZE_NATURE,IO%NNLITTLEVS) :: ZLIGNIN_STRUC
1653 REAL, DIMENSION(U%NSIZE_NATURE,IO%NNLITTER,IO%NNLITTLEVS) :: ZLITTER
1654 !
1655  CHARACTER(LEN=4 ) :: YLVL
1656 REAL :: ZMISS
1657 INTEGER :: JL, JP, JJ, INI, IWORK, IDEPTH, IMASK
1658 !
1659 REAL(KIND=JPRB) :: ZHOOK_HANDLE
1660 !
1661 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:PROVAR_TO_DIAG',0,zhook_handle)
1662 !
1663 ini=u%NSIZE_NATURE
1664 !
1665 ! * soil temperatures (K)
1666 !
1667 IF(io%LTEMP_ARP)THEN
1668  iwork=io%NTEMPLAYER_ARP
1669 ELSEIF(io%CISBA/='DIF')THEN
1670  iwork=2
1671 ELSE
1672  iwork=io%NGROUND_LAYER
1673 ENDIF
1674 !
1675 ztg(:,:)=0.0
1676 DO jp=1,io%NPATCH
1677  pk => np%AL(jp)
1678  pek => npe%AL(jp)
1679  DO jl=1,iwork
1680  DO jj=1,pk%NSIZE_P
1681  imask = pk%NR_P(jj)
1682  ztg(imask,jl) = ztg(imask,jl) + pk%XPATCH(jj) * pek%XTG(jj,jl)
1683  ENDDO
1684  ENDDO
1685 ENDDO
1686 !
1687 IF (lallow_add_dim) THEN
1688  yrecfm='TG_ISBA' ;
1689  ycomment='Soil temperature (K)'
1690  CALL write_surf(duo%CSELECT, &
1691  hprogram,yrecfm,ztg(:,:),iresp,ycomment,hnam_dim=yground_layer_dim_name)
1692 ELSE
1693  DO jl=1,iwork
1694  WRITE(ylvl,'(I4)') jl
1695  yrecfm='TG'//adjustl(ylvl(:len_trim(ylvl)))
1696  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1697  ycomment='X_Y_'//yrecfm//' (K)'
1698  CALL write_surf(duo%CSELECT,hprogram,yrecfm,ztg(:,jl),iresp,hcomment=ycomment)
1699  END DO
1700 ENDIF
1701 !
1702 ! * Compute soil liquid and ice water content (kg/m2 and m3/m3)
1703 !
1704 zwg(:,:)=0.0
1705 zwgi(:,:)=0.0
1706 zdg_tot(:,:)=0.0
1707 !
1708 IF(io%CISBA=='DIF')THEN
1709  !
1710  DO jp=1,io%NPATCH
1711  pk => np%AL(jp)
1712  pek => npe%AL(jp)
1713 
1714  DO jj=1,pk%NSIZE_P
1715  imask = pk%NR_P(jj)
1716  DO jl=1,io%NGROUND_LAYER
1717 !
1718 ! liquid and ice water content
1719  idepth= pk%NWG_LAYER(jj)
1720  IF(jl<=idepth)THEN
1721  zwg(imask,jl) = zwg(imask,jl)+ pk%XPATCH(jj) * pek%XWG (jj,jl) * pk%XDZG(jj,jl)
1722  zwgi(imask,jl)= zwgi(imask,jl)+ pk%XPATCH(jj) * pek%XWGI(jj,jl) * pk%XDZG(jj,jl)
1723  zdg_tot(imask,jl)= zdg_tot(imask,jl)+ pk%XPATCH(jj)* pk%XDZG(jj,jl)
1724  ENDIF
1725 !
1726  ENDDO
1727  ENDDO
1728  ENDDO
1729 !
1730 ELSE
1731  !
1732  DO jp=1,io%NPATCH
1733  pk => np%AL(jp)
1734  pek => npe%AL(jp)
1735 
1736  zdg(1:pk%NSIZE_P,1) = pk%XDG(:,1)
1737  zdg(1:pk%NSIZE_P,2) = pk%XDG(:,2)
1738  IF(io%CISBA=='3-L')THEN
1739  zdg(1:pk%NSIZE_P,3) = pk%XDG(:,3)-pk%XDG(:,2)
1740  ENDIF
1741 
1742  DO jj=1,pk%NSIZE_P
1743  imask = pk%NR_P(jj)
1744  DO jl=1,io%NGROUND_LAYER
1745 
1746  zwg(imask,jl) = zwg(imask,jl)+ pk%XPATCH(jj) *pek%XWG(jj,jl)* zdg(jj,jl)
1747  zwgi(imask,jl)= zwgi(imask,jl)+ pk%XPATCH(jj) *pek%XWGI(jj,jl)* zdg(jj,jl)
1748  zdg_tot(imask,jl)=zdg_tot(imask,jl)+pk%XPATCH(jj)*zdg(jj,jl)
1749  ENDDO
1750  ENDDO
1751  ENDDO
1752 !
1753 ENDIF
1754 !
1755 IF(hprogram=='AROME '.OR.hprogram=='FA ')THEN
1756  zmiss=0.0
1757 ELSE
1758  zmiss=xundef
1759 ENDIF
1760 !
1761 WHERE(zdg_tot(:,:)>0.0)
1762  zwg(:,:)=zwg(:,:)/zdg_tot(:,:)
1763  zwgi(:,:)=zwgi(:,:)/zdg_tot(:,:)
1764 ELSEWHERE
1765  zwg(:,:)=zmiss
1766  zwgi(:,:)=zmiss
1767 ENDWHERE
1768 !
1769 ! * soil liquid water content (m3/m3) and soil moisture (kg/m2)
1770 !
1771 IF (lallow_add_dim) THEN
1772  yrecfm='WG_ISBA' ;
1773  ycomment='Soil liquid water content (m3/m3)'
1774  CALL write_surf(duo%CSELECT, &
1775  hprogram,yrecfm,zwg(:,:),iresp,ycomment,hnam_dim=ywground_layer_dim_name)
1776 ELSE
1777  DO jl=1,io%NGROUND_LAYER
1778  WRITE(ylvl,'(I4)') jl
1779  yrecfm='WG'//adjustl(ylvl(:len_trim(ylvl)))
1780  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1781  ycomment='Soil liquid water content (m3/m3)'
1782  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwg(:,jl),iresp,hcomment=ycomment)
1783  END DO
1784 ENDIF
1785 !
1786 ! * soil ice water content (m3/m3) and soil ice mass (kg/m2)
1787 !
1788 iwork=io%NGROUND_LAYER
1789 IF(io%CISBA/='DIF')THEN
1790  iwork=2 ! No ice in the FR 3-layers
1791 ENDIF
1792 !
1793 IF (lallow_add_dim) THEN
1794  yrecfm='WGI_ISBA' ;
1795  ycomment='Soil solid water content (m3/m3)'
1796  CALL write_surf(duo%CSELECT, &
1797  hprogram,yrecfm,zwgi(:,:),iresp,ycomment,hnam_dim=ywiground_layer_dim_name)
1798 ELSE
1799  DO jl=1,iwork
1800  WRITE(ylvl,'(I4)') jl
1801  yrecfm='WGI'//adjustl(ylvl(:len_trim(ylvl)))
1802  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1803  ycomment='Soil solid water content (m3/m3)'
1804  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwgi(:,jl),iresp,hcomment=ycomment)
1805  END DO
1806 ENDIF
1807 !
1808 ! * water intercepted on leaves (kg/m2)
1809 !
1810 zwork(:)=0.0
1811 DO jp=1,io%NPATCH
1812  DO jj=1,np%AL(jp)%NSIZE_P
1813  imask = np%AL(jp)%NR_P(jj)
1814  zwork(imask) = zwork(imask) + np%AL(jp)%XPATCH(jj) * npe%AL(jp)%XWR(jj)
1815  ENDDO
1816 ENDDO
1817 !
1818 yrecfm='WR_ISBA'
1819 ycomment='X_Y_'//yrecfm//' (kg/m2)'
1820  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1821 !
1822 ! * Glacier ice storage (semi-prognostic) (kg/m2)
1823 !
1824 IF(io%LGLACIER)THEN
1825  !
1826  zwork(:)=0.0
1827  DO jp=1,io%NPATCH
1828  DO jj=1,np%AL(jp)%NSIZE_P
1829  imask = np%AL(jp)%NR_P(jj)
1830  zwork(imask) = zwork(imask) + np%AL(jp)%XPATCH(jj) * npe%AL(jp)%XICE_STO(jj)
1831  ENDDO
1832  ENDDO
1833  !
1834  yrecfm='ICE_STO_ISBA'
1835  ycomment='X_Y_'//yrecfm//' (kg/m2)'
1836  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1837  !
1838 ENDIF
1839 !
1840 ! * Snow albedo (-)
1841 !
1842 zpatch(:) = 0.0
1843 zwork(:) = 0.0
1844 DO jp=1,io%NPATCH
1845  pk => np%AL(jp)
1846  pek => npe%AL(jp)
1847 
1848  DO jj=1,pk%NSIZE_P
1849  imask = pk%NR_P(jj)
1850 
1851  IF(pek%TSNOW%ALB(jj)/=xundef)THEN
1852  zwork(imask) = zwork(imask) + pk%XPATCH(jj) * pek%TSNOW%ALB(jj)
1853  zpatch(imask) = zpatch(imask) + pk%XPATCH(jj)
1854  ENDIF
1855  ENDDO
1856 ENDDO
1857 !
1858 WHERE(zpatch(:)>0.0)
1859  zwork(:) = zwork(:) / zpatch(:)
1860 ELSEWHERE
1861  zwork(:) = xundef
1862 ENDWHERE
1863 !
1864 yrecfm='ASN_ISBA'
1865 ycomment='X_Y_'//yrecfm//' (-)'
1866  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1867 !
1868 IF(npe%AL(1)%TSNOW%SCHEME=='3-L' .OR. npe%AL(1)%TSNOW%SCHEME=='CRO')THEN
1869  !
1870  ! * Snow reservoir (kg/m2) by layer
1871  !
1872  DO jl = 1,npe%AL(1)%TSNOW%NLAYER
1873  !
1874  zwork(:)=0.0
1875  DO jp=1,io%NPATCH
1876  pk => np%AL(jp)
1877  pek => npe%AL(jp)
1878  DO jj=1,pk%NSIZE_P
1879  imask = pk%NR_P(jj)
1880  zwork(imask) = zwork(imask) + pk%XPATCH(jj) * pek%TSNOW%WSNOW(jj,jl)
1881  ENDDO
1882  ENDDO
1883  !
1884  WRITE(ylvl,'(I4)') jl
1885  yrecfm='WSN_'//adjustl(ylvl(:len_trim(ylvl)))
1886  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1887  ycomment='X_Y_'//yrecfm//' (kg/m2)'
1888  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1889  !
1890  ENDDO
1891  !
1892  ! * Snow depth (m)
1893  !
1894  DO jl = 1,npe%AL(1)%TSNOW%NLAYER
1895  !
1896  zwork(:)=0.0
1897  DO jp=1,io%NPATCH
1898  pk => np%AL(jp)
1899  pek => npe%AL(jp)
1900  DO jj=1,pk%NSIZE_P
1901  imask = pk%NR_P(jj)
1902  zwork(imask) = zwork(imask) + pk%XPATCH(jj) * &
1903  pek%TSNOW%WSNOW(jj,jl)/pek%TSNOW%RHO(jj,jl)
1904  ENDDO
1905  ENDDO
1906  !
1907  WRITE(ylvl,'(I4)') jl
1908  yrecfm='DSN_'//adjustl(ylvl(:len_trim(ylvl)))
1909  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1910  ycomment='X_Y_'//yrecfm//' (kg/m2)'
1911  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1912  !
1913  ENDDO
1914  !
1915  ! * Snow temperature (k)
1916  !
1917  IF(hprogram=='AROME '.OR.hprogram=='FA ')THEN
1918  zmiss=xtt
1919  ELSE
1920  zmiss=xundef
1921  ENDIF
1922  !
1923  DO jl = 1,npe%AL(1)%TSNOW%NLAYER
1924  !
1925  zwork(:) = 0.0
1926  zpatch(:) = 0.0
1927  DO jp=1,io%NPATCH
1928  pk => np%AL(jp)
1929  pek => npe%AL(jp)
1930  DO jj=1,pk%NSIZE_P
1931  imask = pk%NR_P(jj)
1932  IF(pek%TSNOW%WSNOW(jj,jl)>0.)THEN
1933  zwork(imask) = zwork(imask) + pk%XPATCH(jj) * pek%TSNOW%TEMP(jj,jl)
1934  zpatch(imask) = zpatch(imask) + pk%XPATCH(jj)
1935  ENDIF
1936  ENDDO
1937  ENDDO
1938  !
1939  WHERE(zpatch(:)>0.0)
1940  zwork(:) = zwork(:) / zpatch(:)
1941  ELSEWHERE
1942  zwork(:) = zmiss
1943  ENDWHERE
1944  !
1945  WRITE(ylvl,'(I4)') jl
1946  yrecfm='TSN_'//adjustl(ylvl(:len_trim(ylvl)))
1947  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1948  ycomment='X_Y_'//yrecfm//' (K)'
1949  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1950  !
1951  ENDDO
1952  !
1953  ! * Snow age (day)
1954  !
1955  DO jl = 1,npe%AL(1)%TSNOW%NLAYER
1956  !
1957  zwork(:) = 0.0
1958  zpatch(:) = 0.0
1959  DO jp=1,io%NPATCH
1960  pk => np%AL(jp)
1961  pek => npe%AL(jp)
1962  DO jj=1,pk%NSIZE_P
1963  imask = pk%NR_P(jj)
1964  IF(pek%TSNOW%WSNOW(jj,jl)>0.)THEN
1965  zwork(imask) = zwork(imask) + pk%XPATCH(jj) * pek%TSNOW%AGE(jj,jl)
1966  zpatch(imask) = zpatch(imask) + pk%XPATCH(jj)
1967  ENDIF
1968  ENDDO
1969  ENDDO
1970  !
1971  WHERE(zpatch(:)>0.0)
1972  zwork(:) = zwork(:) / zpatch(:)
1973  ENDWHERE
1974  !
1975  WRITE(ylvl,'(I4)') jl
1976  yrecfm='AGSN_'//adjustl(ylvl(:len_trim(ylvl)))
1977  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
1978  ycomment='X_Y_'//yrecfm//' (day_since_snowfall)'
1979  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zwork(:),iresp,hcomment=ycomment)
1980  !
1981  ENDDO
1982  !
1983 ENDIF
1984 !
1985 ! * Isba-Ags biomass reservoir
1986 !
1987 IF(io%CPHOTO=='NIT'.OR.io%CPHOTO=='NCB')THEN
1988 !
1989  zbiomass(:,:)=0.0
1990  DO jp=1,io%NPATCH
1991  pk => np%AL(jp)
1992  pek => npe%AL(jp)
1993  DO jj=1,pk%NSIZE_P
1994  imask = pk%NR_P(jj)
1995  DO jl=1,io%NNBIOMASS
1996  zbiomass(imask,jl) = zbiomass(imask,jl) + pk%XPATCH(jj) * pek%XBIOMASS(jj,jl)
1997  ENDDO
1998  ENDDO
1999  ENDDO
2000 !
2001  DO jl = 1,io%NNBIOMASS
2002  WRITE(ylvl,'(I4)') jl
2003  yrecfm='BIOM'//adjustl(ylvl(:len_trim(ylvl)))
2004  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
2005  ycomment='X_Y_'//yrecfm//' (kgDM/m2)'
2006  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zbiomass(:,jl),iresp,hcomment=ycomment)
2007  ENDDO
2008 !
2009 ENDIF
2010 !
2011 ! * Isba-CC carbon reservoir
2012 !
2013 IF(io%CRESPSL=='CNT')THEN
2014 !
2015  zlitter(:,:,:)=0.0
2016  zlignin_struc(:,:)=0.0
2017  DO jp=1,io%NPATCH
2018  pk => np%AL(jp)
2019  pek => npe%AL(jp)
2020  DO jj=1,pk%NSIZE_P
2021  imask = pk%NR_P(jj)
2022  DO jl=1,io%NNLITTLEVS
2023  zlitter(imask,1,jl) = zlitter(imask,1,jl) + pk%XPATCH(jj) * pek%XLITTER(jj,1,jl)
2024  zlitter(imask,2,jl) = zlitter(imask,2,jl) + pk%XPATCH(jj) * pek%XLITTER(jj,2,jl)
2025  zlignin_struc(imask,jl) = zlignin_struc(imask,jl) + pk%XPATCH(jj) * pek%XLIGNIN_STRUC(jj,jl)
2026  ENDDO
2027  ENDDO
2028  ENDDO
2029 !
2030  DO jl=1,io%NNLITTLEVS
2031  WRITE(ylvl,'(I4)') jl
2032  yrecfm='LIT1_'//adjustl(ylvl(:len_trim(ylvl)))
2033  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
2034  ycomment='X_Y_'//yrecfm//' (gC/m2)'
2035  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zlitter(:,1,jl),iresp,hcomment=ycomment)
2036  WRITE(ylvl,'(I4)') jl
2037  yrecfm='LIT2_'//adjustl(ylvl(:len_trim(ylvl)))
2038  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
2039  ycomment='X_Y_'//yrecfm//' (gC/m2)'
2040  CALL write_surf(duo%CSELECT, hprogram,yrecfm,zlitter(:,2,jl),iresp,hcomment=ycomment)
2041  WRITE(ylvl,'(I4)') jl
2042  yrecfm='LIGSTR'//adjustl(ylvl(:len_trim(ylvl)))
2043  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
2044  ycomment='X_Y_'//yrecfm//' (-)'
2045  CALL write_surf(duo%CSELECT,hprogram,yrecfm,zlignin_struc(:,jl),iresp,hcomment=ycomment)
2046  END DO
2047 !
2048  zsoilcarb(:,:)=0.0
2049  DO jp=1,io%NPATCH
2050  pk => np%AL(jp)
2051  pek => npe%AL(jp)
2052  DO jj=1,pk%NSIZE_P
2053  imask = pk%NR_P(jj)
2054  DO jl=1,io%NNSOILCARB
2055  zsoilcarb(imask,jl) = zsoilcarb(imask,jl) + pk%XPATCH(jj) * pek%XSOILCARB(jj,jl)
2056  ENDDO
2057  ENDDO
2058  ENDDO
2059 !
2060  DO jl = 1,io%NNSOILCARB
2061  WRITE(ylvl,'(I4)') jl
2062  yrecfm='SCARB'//adjustl(ylvl(:len_trim(ylvl)))
2063  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
2064  ycomment='X_Y_'//yrecfm//' (gC/m2)'
2065  CALL write_surf(duo%CSELECT, hprogram,yrecfm,zsoilcarb(:,jl),iresp,hcomment=ycomment)
2066  ENDDO
2067 !
2068 ENDIF
2069 !
2070 IF (lhook) CALL dr_hook('WRITE_DIAG_SEB_ISBA_N:PROVAR_TO_DIAG',1,zhook_handle)
2071 !
2072 END SUBROUTINE provar_to_diag
2073 !
2074 END SUBROUTINE write_diag_seb_isba_n
static const char * trim(const char *name, int *n)
Definition: drhook.c:2383
subroutine init_surf_bud(DA, PVAL)
Definition: mode_diag.F90:213
character(len=30) yground_layer_dim_name
Definition: modd_xios.F90:64
character(len=30) ywground_layer_dim_name
Definition: modd_xios.F90:65
subroutine write_field_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, PFIELD_IN, KSIZE, PWORK_WR)
subroutine avg_diag_tstep_surf(PTSTEP, DAC, DA)
Definition: mode_diag.F90:613
subroutine write_evap_bud(DEA, HTERM, OFLAG)
subroutine avg_diag_tstep_evap(PTSTEP, DEAC, DEA)
Definition: mode_diag.F90:563
real, parameter xundef
subroutine init_water_bud(DEA)
Definition: mode_diag.F90:546
integer, parameter jprb
Definition: parkind1.F90:32
subroutine provar_to_diag
integer, parameter nundef
logical lallow_add_dim
Definition: modd_xios.F90:49
character(len=30) ywiground_layer_dim_name
Definition: modd_xios.F90:66
character(len=30) yswband_dim_name
Definition: modd_xios.F90:69
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
subroutine init_evap_bud(DEA)
Definition: mode_diag.F90:441
logical lhook
Definition: yomhook.F90:15
subroutine avg_diag_tstep_water(PTSTEP, DEAC, DEA)
Definition: mode_diag.F90:594
real, save xrholw
Definition: modd_csts.F90:64
real, save xtt
Definition: modd_csts.F90:66
real, save xlmtt
Definition: modd_csts.F90:72
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
static int count
Definition: memory_hook.c:21
subroutine write_evap_bud_patch(NDEA, HTERM, OFLAG)
subroutine write_diag_seb_isba_n(DTCO, DUO, U, NCHI, CHI, ID, ND