SURFEX v8.1
General documentation of Surfex
write_diag_pgd_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_pgd_isba_n (DTCO, HSELECT, U, CHI, NCHI, OSURF_DIAG_ALBEDO, &
7  IO, S, K, NP, NPE, ISS, HPROGRAM)
8 ! #########################################
9 !
10 !!**** *WRITE_DIAG_PGD_ISBA_n* - writes the ISBA physiographic diagnostic fields
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/2004
36 !! Modified 10/2004 by P. Le Moigne: add XZ0REL, XVEGTYPE_PATCH
37 !! Modified 11/2005 by P. Le Moigne: limit length of VEGTYPE_PATCH field names
38 !! Modified 11/2013 by B. Decharme : XPATCH now in writesurf_isban.F90
39 !! Modified 10/2014 by P. Samuelsson: MEB variables
40 !! Modified 06/2014 by B. Decharme : add XVEGTYPE
41 !-------------------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 ! ------------
45 !
47 !
49 USE modd_sso_n, ONLY : sso_t
50 USE modd_surf_atm_n, ONLY : surf_atm_t
54 !
55 USE modd_surf_par, ONLY : xundef, nundef
56 USE modd_agri, ONLY : lagrip
57 !
58 !
60 !
61 USE modi_init_io_surf_n
63 USE modi_end_io_surf_n
64 USE modi_write_field_1d_patch
65 USE modi_write_tfield_1d_patch
67 !
68 USE yomhook ,ONLY : lhook, dr_hook
69 USE parkind1 ,ONLY : jprb
70 !
71 IMPLICIT NONE
72 !
73 !* 0.1 Declarations of arguments
74 ! -------------------------
75 !
76 !
77 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
78  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
79 TYPE(surf_atm_t), INTENT(INOUT) :: U
80 TYPE(ch_isba_t), INTENT(INOUT) :: CHI
81 TYPE(ch_isba_np_t), INTENT(INOUT) :: NCHI
82 LOGICAL, INTENT(IN) :: OSURF_DIAG_ALBEDO
83 TYPE(isba_options_t), INTENT(INOUT) :: IO
84 TYPE(isba_s_t), INTENT(INOUT) :: S
85 TYPE(isba_k_t), INTENT(INOUT) :: K
86 TYPE(isba_np_t), INTENT(INOUT) :: NP
87 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
88 TYPE(sso_t), INTENT(INOUT) :: ISS
89 !
90  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
91 !
92 !* 0.2 Declarations of local variables
93 ! -------------------------------
94 !
95 TYPE(isba_p_t), POINTER :: PK
96 TYPE(isba_pe_t), POINTER :: PEK
97 !
98 REAL, DIMENSION(U%NSIZE_NATURE,IO%NPATCH) :: ZWORK
99 !
100 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK1
101 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK2
102 !
103 REAL, DIMENSION(U%NSIZE_NATURE,SIZE(NP%AL(1)%XDG,2)) :: ZDG ! Work array
104 REAL, DIMENSION(U%NSIZE_NATURE) :: ZDG2
105 REAL, DIMENSION(U%NSIZE_NATURE) :: ZDTOT
106 !
107 INTEGER :: IRESP ! IRESP : return-code if a problem appears
108  CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read
109  CHARACTER(LEN=100):: YCOMMENT ! Comment string
110  CHARACTER(LEN=2) :: YLVLV, YPAS
111  CHARACTER(LEN=4) :: YLVL
112  CHARACTER(LEN=2) :: YPAT
113 !
114 INTEGER :: JI, JL, JP, ILAYER, ILU, IMASK
115 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches where multi-energy balance should be applied
116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
117 !-------------------------------------------------------------------------------
118 !
119 ! Initialisation for IO
120 !
121 IF (lhook) CALL dr_hook('WRITE_DIAG_PGD_ISBA_N',0,zhook_handle)
122 !
123 ilu = u%NSIZE_NATURE
124 !
125 isize_lmeb_patch=count(io%LMEB_PATCH(:))
126 !
127  CALL init_io_surf_n(dtco, u, hprogram,'NATURE','ISBA ','WRITE','ISBA_VEG_EVOLUTION.OUT.nc')
128 !
129 !-------------------------------------------------------------------------------
130 !
131 !* Leaf Area Index
132 !
133 IF (io%CPHOTO=='NON' .OR. io%CPHOTO=='AST') THEN
134  !
135  yrecfm='LAI'
136  ycomment='leaf area index (-)'
137  !
138  DO jp = 1,io%NPATCH
139  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
140  np%AL(jp)%NR_P,npe%AL(jp)%XLAI(:),ilu,s%XWORK_WR)
141  ENDDO
142  !
143 ENDIF
144 !
145 !-------------------------------------------------------------------------------
146 !
147 !* Vegetation fraction
148 !
149 yrecfm='VEG'
150 ycomment='vegetation fraction (-)'
151 !
152 DO jp = 1,io%NPATCH
153  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
154  np%AL(jp)%NR_P,npe%AL(jp)%XVEG(:),ilu,s%XWORK_WR)
155 ENDDO
156 !
157 !* Surface roughness length (without snow)
158 !
159 yrecfm='Z0VEG'
160 ycomment='surface roughness length (without snow) (m)'
161 !
162 DO jp = 1,io%NPATCH
163  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
164  np%AL(jp)%NR_P,npe%AL(jp)%XZ0(:),ilu,s%XWORK_WR)
165 ENDDO
166 !
167 IF (isize_lmeb_patch>0) THEN
168  !
169  yrecfm='GNDLITTER'
170  ycomment='MEB: ground litter fraction (-)'
171  !
172 DO jp = 1,io%NPATCH
173  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
174  np%AL(jp)%NR_P,npe%AL(jp)%XGNDLITTER(:),ilu,s%XWORK_WR)
175 ENDDO
176  !
177  yrecfm='Z0LITTER'
178  ycomment='MEB: ground litter roughness length (without snow) (m)'
179  !
180 DO jp = 1,io%NPATCH
181  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
182  np%AL(jp)%NR_P,npe%AL(jp)%XZ0LITTER(:),ilu,s%XWORK_WR)
183 ENDDO
184  !
185 ENDIF
186 !
187 !-------------------------------------------------------------------------------
188 !
189 !* Soil depth for each patch
190 !
191 DO jl=1,SIZE(np%AL(1)%XDG,2)
192  IF (jl<10) THEN
193  WRITE(yrecfm,fmt='(A2,I1)') 'DG',jl
194  ELSE
195  WRITE(yrecfm,fmt='(A2,I2)') 'DG',jl
196  ENDIF
197  ycomment='soil depth'//' (M)'
198 DO jp = 1,io%NPATCH
199  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
200  np%AL(jp)%NR_P,np%AL(jp)%XDG(:,jl),ilu,s%XWORK_WR)
201 ENDDO
202 END DO
203 !
204 !* Averaged Soil depth
205 !
206 IF(io%NPATCH>1)THEN
207 !
208  zdg(:,:)=0.0
209  DO jp=1,io%NPATCH
210  pk => np%AL(jp)
211  DO jl=1,SIZE(pk%XDG,2)
212  DO ji=1, pk%NSIZE_P
213  imask = pk%NR_P(ji)
214  zdg(imask,jl) = zdg(imask,jl) + pk%XPATCH(ji)*pk%XDG(ji,jl)
215  ENDDO
216  ENDDO
217  ENDDO
218 !
219  DO jl=1,SIZE(np%AL(1)%XDG,2)
220  WRITE(ylvl,'(I4)')jl
221  yrecfm='DG'//adjustl(ylvl(:len_trim(ylvl)))
222  yrecfm=yrecfm(:len_trim(yrecfm))//'_ISBA'
223  ycomment='averaged soil depth layer '//adjustl(ylvl(:len_trim(ylvl)))//' (m)'
224  CALL write_surf(hselect,hprogram,yrecfm,zdg(:,jl),iresp,hcomment=ycomment)
225  END DO
226 !
227 ENDIF
228 !
229 !-------------------------------------------------------------------------------
230 !
231 IF(io%CISBA=='DIF')THEN
232  !
233  ALLOCATE(zwork2(ilu,io%NPATCH))
234  !
235  zdg2(:)=0.0
236  zdtot(:)=0.0
237  zwork2(:,:)=xundef
238  DO jp=1,io%NPATCH
239  pk => np%AL(jp)
240  DO ji=1,pk%NSIZE_P
241  imask = pk%NR_P(ji)
242  zdg2(imask) = zdg2(imask) + pk%XPATCH(ji) * pk%XDG2(ji)
243  jl = pk%NWG_LAYER(ji)
244  IF(jl/=nundef)THEN
245  zwork2(ji,jp) = pk%XDG(ji,jl)
246  zdtot(imask) = zdtot(imask) + pk%XPATCH(ji) * pk%XDG(ji,jl)
247  ENDIF
248  ENDDO
249  ENDDO
250  !
251  !* Root depth
252  !
253  yrecfm='DROOT_DIF'
254  ycomment='Root depth in ISBA-DIF'
255  DO jp = 1,io%NPATCH
256  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
257  np%AL(jp)%NR_P,np%AL(jp)%XDROOT(:),ilu,s%XWORK_WR)
258  ENDDO
259  !
260  yrecfm='DG2_DIF'
261  ycomment='DG2 depth in ISBA-DIF'
262  DO jp = 1,io%NPATCH
263  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
264  np%AL(jp)%NR_P,np%AL(jp)%XDG2(:),ilu,s%XWORK_WR)
265  ENDDO
266  !
267  IF(io%NPATCH>1)THEN
268  yrecfm='DG2_DIF_ISBA'
269  ycomment='Averaged DG2 depth in ISBA-DIF'
270  CALL write_surf(hselect,hprogram,yrecfm,zdg2(:),iresp,hcomment=ycomment)
271  ENDIF
272  !
273  !* Runoff depth
274  !
275  yrecfm='RUNOFFD'
276  ycomment='Runoff deph in ISBA-DIF'
277  DO jp = 1,io%NPATCH
278  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
279  np%AL(jp)%NR_P,np%AL(jp)%XRUNOFFD(:),ilu,s%XWORK_WR)
280  ENDDO
281  !
282  !* Total soil depth for mositure
283  !
284  yrecfm='DTOT_DIF'
285  ycomment='Total soil depth for moisture in ISBA-DIF'
286  DO jp = 1,io%NPATCH
287  pk => np%AL(jp)
288  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
289  np%AL(jp)%NR_P,zwork2(1:pk%NSIZE_P,jp),ilu,s%XWORK_WR)
290  ENDDO
291  DEALLOCATE(zwork2)
292  !
293  IF(io%NPATCH>1)THEN
294  yrecfm='DTOTDF_ISBA'
295  ycomment='Averaged Total soil depth for moisture in ISBA-DIF'
296  CALL write_surf(hselect,hprogram,yrecfm,zdtot(:),iresp,hcomment=ycomment)
297  ENDIF
298  !
299  !* Root fraction for each patch
300  !
301  ALLOCATE(zwork1(ilu))
302  DO jp = 1,io%NPATCH
303  pk => np%AL(jp)
304  DO jl=1,SIZE(pk%XROOTFRAC,2)
305  IF (jl<10) THEN
306  WRITE(yrecfm,fmt='(A8,I1)') 'ROOTFRAC',jl
307  ELSE
308  WRITE(yrecfm,fmt='(A8,I2)') 'ROOTFRAC',jl
309  ENDIF
310  ycomment='root fraction by layer (-)'
311  zwork1(:)=xundef
312  DO ji=1,SIZE(pk%XDG,1)
313  IF(jl<=pk%NWG_LAYER(ji).AND.pk%NWG_LAYER(ji)/=nundef) THEN
314  zwork1(ji) = pk%XROOTFRAC(ji,jl)
315  ENDIF
316  ENDDO
317  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
318  np%AL(jp)%NR_P,zwork1(1:pk%NSIZE_P),ilu,s%XWORK_WR)
319  ENDDO
320  END DO
321  DEALLOCATE(zwork1)
322  !
323  !* SOC fraction for each layer
324  !
325  IF(io%LSOC)THEN
326  DO jl=1,SIZE(np%AL(1)%XDG,2)
327  IF (jl<10) THEN
328  WRITE(yrecfm,fmt='(A7,I1)') 'FRACSOC',jl
329  ELSE
330  WRITE(yrecfm,fmt='(A7,I2)') 'FRACSOC',jl
331  ENDIF
332  ycomment='SOC fraction by layer (-)'
333  CALL write_surf(hselect,hprogram,yrecfm,s%XFRACSOC(:,jl),iresp,hcomment=ycomment)
334  ENDDO
335  ENDIF
336 !
337 ENDIF
338 !
339 !-------------------------------------------------------------------------------
340 !
341 DO jl=1,SIZE(np%AL(1)%XDG,2)
342  IF (jl<10) THEN
343  WRITE(yrecfm,fmt='(A4,I1)') 'WSAT',jl
344  ELSE
345  WRITE(yrecfm,fmt='(A4,I2)') 'WSAT',jl
346  ENDIF
347  ycomment='soil porosity by layer (m3/m3)'
348  CALL write_surf(hselect, &
349  hprogram,yrecfm,k%XWSAT(:,jl),iresp,hcomment=ycomment)
350 ENDDO
351 !
352 DO jl=1,SIZE(np%AL(1)%XDG,2)
353  IF (jl<10) THEN
354  WRITE(yrecfm,fmt='(A3,I1)') 'WFC',jl
355  ELSE
356  WRITE(yrecfm,fmt='(A3,I2)') 'WFC',jl
357  ENDIF
358  ycomment='field capacity by layer (m3/m3)'
359  CALL write_surf(hselect,hprogram,yrecfm,k%XWFC(:,jl),iresp,hcomment=ycomment)
360 ENDDO
361 !
362 DO jl=1,SIZE(np%AL(1)%XDG,2)
363  IF (jl<10) THEN
364  WRITE(yrecfm,fmt='(A5,I1)') 'WWILT',jl
365  ELSE
366  WRITE(yrecfm,fmt='(A5,I2)') 'WWILT',jl
367  ENDIF
368  ycomment='wilting point by layer (m3/m3)'
369  CALL write_surf(hselect,hprogram,yrecfm,k%XWWILT(:,jl),iresp,hcomment=ycomment)
370 ENDDO
371 !
372 !-------------------------------------------------------------------------------
373 ! For Earth System Model
374 IF(lfanocompact.AND..NOT.lprep)THEN
375  CALL end_io_surf_n(hprogram)
376  IF (lhook) CALL dr_hook('WRITE_DIAG_PGD_ISBA_N',1,zhook_handle)
377  RETURN
378 ENDIF
379 !
380 !-------------------------------------------------------------------------------
381 !
382 yrecfm='Z0REL'
383 ycomment='orography roughness length (M)'
384 !
385  CALL write_surf(hselect,hprogram,yrecfm,iss%XZ0REL(:),iresp,hcomment=ycomment)
386 !
387 !-------------------------------------------------------------------------------
388 !
389 !* Runoff soil ice depth for each patch
390 !
391 IF(io%CHORT=='SGH'.AND.io%CISBA/='DIF')THEN
392  yrecfm='DICE'
393  ycomment='soil ice depth for runoff (m)'
394  DO jp = 1,io%NPATCH
395  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
396  np%AL(jp)%NR_P,np%AL(jp)%XD_ICE(:),ilu,s%XWORK_WR)
397  ENDDO
398 ENDIF
399 !
400 !-------------------------------------------------------------------------------
401 !
402 !* Fraction of each vegetation type in the grid cell
403 !
404 DO jl=1,SIZE(s%XVEGTYPE_PATCH,2)
405  WRITE(ypas,'(I2)') jl
406  ylvlv=adjustl(ypas(:len_trim(ypas)))
407  WRITE(yrecfm,fmt='(A9)') 'VEGTYPE'//ylvlv
408  ycomment='fraction of each vegetation type in the grid cell'//' (-)'
409  CALL write_surf(hselect,hprogram,yrecfm,s%XVEGTYPE(:,jl),iresp,hcomment=ycomment)
410 END DO
411 !-------------------------------------------------------------------------------
412 !
413 !* Fraction of each vegetation type for each patch
414 !
415 IF(io%NPATCH>1.AND.SIZE(s%XVEGTYPE_PATCH,2)/=SIZE(s%XVEGTYPE_PATCH,3))THEN
416 !
417  DO jl=1,SIZE(s%XVEGTYPE_PATCH,2)
418  WRITE(ypas,'(I2)') jl
419  ylvlv=adjustl(ypas(:len_trim(ypas)))
420  WRITE(yrecfm,fmt='(A9)') 'VEGTY_'//ylvlv
421  ycomment='fraction of each vegetation type in each patch'//' (-)'
422  DO jp = 1,io%NPATCH
423  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
424  np%AL(jp)%NR_P,np%AL(jp)%XVEGTYPE_PATCH(:,jl),ilu,s%XWORK_WR)
425  ENDDO
426  END DO
427 !
428 ENDIF
429 !
430 !-------------------------------------------------------------------------------
431 !
432 !* other surface parameters
433 !
434 yrecfm='RSMIN'
435 ycomment='minimum stomatal resistance (sm-1)'
436 DO jp = 1,io%NPATCH
437  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
438  np%AL(jp)%NR_P,npe%AL(jp)%XRSMIN(:),ilu,s%XWORK_WR)
439 ENDDO
440 !
441 yrecfm='GAMMA'
442 ycomment='coefficient for RSMIN calculation (-)'
443 DO jp = 1,io%NPATCH
444  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
445  np%AL(jp)%NR_P,npe%AL(jp)%XGAMMA(:),ilu,s%XWORK_WR)
446 ENDDO
447 !
448 yrecfm='CV'
449 ycomment='vegetation thermal inertia coefficient (-)'
450 DO jp = 1,io%NPATCH
451  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
452  np%AL(jp)%NR_P,npe%AL(jp)%XCV(:),ilu,s%XWORK_WR)
453 ENDDO
454 !
455 yrecfm='RGL'
456 ycomment='maximum solar radiation usable in photosynthesis (-)'
457 DO jp = 1,io%NPATCH
458  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
459  np%AL(jp)%NR_P,npe%AL(jp)%XRGL(:),ilu,s%XWORK_WR)
460 ENDDO
461 !
462 yrecfm='EMIS_ISBA'
463 ycomment='surface emissivity (-)'
464 DO jp = 1,io%NPATCH
465  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
466  np%AL(jp)%NR_P,npe%AL(jp)%XEMIS(:),ilu,s%XWORK_WR)
467 ENDDO
468 !
469 yrecfm='WRMAX_CF'
470 ycomment='coefficient for maximum water interception (-)'
471 DO jp = 1,io%NPATCH
472  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
473  np%AL(jp)%NR_P,npe%AL(jp)%XWRMAX_CF(:),ilu,s%XWORK_WR)
474 ENDDO
475 !
476 IF (isize_lmeb_patch>0) THEN
477  !
478  yrecfm='H_VEG'
479  ycomment='MEB: height of vegetation (m)'
480  DO jp = 1,io%NPATCH
481  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
482  np%AL(jp)%NR_P,npe%AL(jp)%XH_VEG(:),ilu,s%XWORK_WR)
483  ENDDO
484  !
485 ENDIF
486 !
487 !-------------------------------------------------------------------------------
488 !
489 IF (osurf_diag_albedo) THEN
490 !
491 !* Soil albedos
492 !
493 !
494  yrecfm='ALBNIR_S'
495  ycomment='soil near-infra-red albedo (-)'
496  DO jp=1,io%NPATCH
497  CALL unpack_same_rank(np%AL(jp)%NR_P, npe%AL(jp)%XALBNIR_SOIL, zwork(:,jp))
498  WHERE (zwork(:,jp)/=xundef) zwork(:,1) = zwork(:,jp)
499  ENDDO
500  CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment)
501 !
502 !-------------------------------------------------------------------------------
503 !
504  yrecfm='ALBVIS_S'
505  ycomment='soil visible albedo (-)'
506  DO jp=1,io%NPATCH
507  CALL unpack_same_rank(np%AL(jp)%NR_P, npe%AL(jp)%XALBVIS_SOIL, zwork(:,jp))
508  WHERE (zwork(:,jp)/=xundef) zwork(:,1) = zwork(:,jp)
509  ENDDO
510  CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment)
511 !
512 !-------------------------------------------------------------------------------
513 !
514  yrecfm='ALBUV_S'
515  ycomment='soil UV albedo (-)'
516  DO jp=1,io%NPATCH
517  CALL unpack_same_rank(np%AL(jp)%NR_P, npe%AL(jp)%XALBUV_SOIL, zwork(:,jp))
518  WHERE (zwork(:,jp)/=xundef) zwork(:,1) = zwork(:,jp)
519  ENDDO
520  CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment)
521 !
522 !-------------------------------------------------------------------------------
523 !
524 !* albedos
525 !
526  yrecfm='ALBNIR'
527  ycomment='total near-infra-red albedo (-)'
528  DO jp = 1,io%NPATCH
529  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
530  np%AL(jp)%NR_P,npe%AL(jp)%XALBNIR(:),ilu,s%XWORK_WR)
531  ENDDO
532 !
533 !-------------------------------------------------------------------------------
534 !
535  yrecfm='ALBVIS'
536  ycomment='total visible albedo (-)'
537  DO jp = 1,io%NPATCH
538  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
539  np%AL(jp)%NR_P,npe%AL(jp)%XALBVIS(:),ilu,s%XWORK_WR)
540  ENDDO
541 !
542 !-------------------------------------------------------------------------------
543 !
544  yrecfm='ALBUV'
545  ycomment='total UV albedo (-)'
546  DO jp = 1,io%NPATCH
547  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
548  np%AL(jp)%NR_P,npe%AL(jp)%XALBUV(:),ilu,s%XWORK_WR)
549  ENDDO
550 !
551 END IF
552 !
553 !-------------------------------------------------------------------------------
554 !
555 !* chemical soil resistances
556 !
557 IF (chi%CCH_DRY_DEP=='WES89' .AND. chi%SVI%NBEQ>0) THEN
558  yrecfm='SOILRC_SO2'
559  ycomment='bare soil resistance for SO2 (?)'
560  DO jp = 1,io%NPATCH
561  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
562  np%AL(jp)%NR_P,nchi%AL(jp)%XSOILRC_SO2(:),ilu,s%XWORK_WR)
563  ENDDO
564  !
565  yrecfm='SOILRC_O3'
566  ycomment='bare soil resistance for O3 (?)'
567  DO jp = 1,io%NPATCH
568  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
569  np%AL(jp)%NR_P,nchi%AL(jp)%XSOILRC_O3(:),ilu,s%XWORK_WR)
570  ENDDO
571 END IF
572 !
573 !-------------------------------------------------------------------------------
574 !
575 IF (lagrip .AND. (io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') ) THEN
576 !
577 !* seeding and reaping
578 !
579  yrecfm='TSEED'
580  ycomment='date of seeding (-)'
581  !
582  DO jp = 1,io%NPATCH
583  CALL write_tfield_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
584  np%AL(jp)%NR_P,npe%AL(jp)%TSEED(:),ilu,s%TDATE_WR)
585  ENDDO
586 !
587  yrecfm='TREAP'
588  ycomment='date of reaping (-)'
589 !
590  DO jp = 1,io%NPATCH
591  CALL write_tfield_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
592  np%AL(jp)%NR_P,npe%AL(jp)%TREAP(:),ilu,s%TDATE_WR)
593  ENDDO
594 !
595 !-------------------------------------------------------------------------------
596 !
597 !* irrigated fraction
598 !
599  yrecfm='IRRIG'
600  ycomment='flag for irrigation (irrigation if >0.) (-)'
601 !
602  DO jp = 1,io%NPATCH
603  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
604  np%AL(jp)%NR_P,npe%AL(jp)%XIRRIG(:),ilu,s%XWORK_WR)
605  ENDDO
606 !
607 !-------------------------------------------------------------------------------
608 !
609 !* water supply for irrigation
610 !
611  yrecfm='WATSUP'
612  ycomment='water supply during irrigation process (mm)'
613 !
614  DO jp = 1,io%NPATCH
615  CALL write_field_1d_patch(hselect,hprogram,yrecfm,ycomment,jp,&
616  np%AL(jp)%NR_P,npe%AL(jp)%XWATSUP(:),ilu,s%XWORK_WR)
617  ENDDO
618 !
619 ENDIF
620 !
621 !-------------------------------------------------------------------------------
622 ! End of IO
623 !
624  CALL end_io_surf_n(hprogram)
625 IF (lhook) CALL dr_hook('WRITE_DIAG_PGD_ISBA_N',1,zhook_handle)
626 !
627 !
628 END SUBROUTINE write_diag_pgd_isba_n
subroutine write_field_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, PFIELD_IN, KSIZE, PWORK_WR)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter nundef
subroutine write_diag_pgd_isba_n(DTCO, HSELECT, U, CHI, NCHI, OSU
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
logical lhook
Definition: yomhook.F90:15
logical, save lprep
subroutine write_tfield_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, TFIELD_IN, KSIZE, TPDATE_WR)
logical, save lfanocompact
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
static int count
Definition: memory_hook.c:21