7 IO, S, K, NP, NPE, ISS, HPROGRAM)
56 USE modd_agri
, ONLY : lagrip
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
78 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: HSELECT
82 LOGICAL,
INTENT(IN) :: OSURF_DIAG_ALBEDO
88 TYPE(
sso_t),
INTENT(INOUT) :: ISS
90 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
98 REAL,
DIMENSION(U%NSIZE_NATURE,IO%NPATCH) :: ZWORK
100 REAL,
DIMENSION(:),
ALLOCATABLE :: ZWORK1
101 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWORK2
103 REAL,
DIMENSION(U%NSIZE_NATURE,SIZE(NP%AL(1)%XDG,2)) :: ZDG
104 REAL,
DIMENSION(U%NSIZE_NATURE) :: ZDG2
105 REAL,
DIMENSION(U%NSIZE_NATURE) :: ZDTOT
108 CHARACTER(LEN=12) :: YRECFM
109 CHARACTER(LEN=100):: YCOMMENT
110 CHARACTER(LEN=2) :: YLVLV, YPAS
111 CHARACTER(LEN=4) :: YLVL
112 CHARACTER(LEN=2) :: YPAT
114 INTEGER :: JI, JL, JP, ILAYER, ILU, IMASK
115 INTEGER :: ISIZE_LMEB_PATCH
116 REAL(KIND=JPRB) :: ZHOOK_HANDLE
121 IF (
lhook)
CALL dr_hook(
'WRITE_DIAG_PGD_ISBA_N',0,zhook_handle)
125 isize_lmeb_patch=
count(io%LMEB_PATCH(:))
127 CALL init_io_surf_n(dtco, u, hprogram,
'NATURE',
'ISBA ',
'WRITE',
'ISBA_VEG_EVOLUTION.OUT.nc' 133 IF (io%CPHOTO==
'NON' .OR. io%CPHOTO==
'AST')
THEN 136 ycomment=
'leaf area index (-)' 140 np%AL(jp)%NR_P,npe%AL(jp)%XLAI(:),ilu,s%XWORK_WR)
150 ycomment=
'vegetation fraction (-)' 154 np%AL(jp)%NR_P,npe%AL(jp)%XVEG(:),ilu,s%XWORK_WR)
160 ycomment=
'surface roughness length (without snow) (m)' 164 np%AL(jp)%NR_P,npe%AL(jp)%XZ0(:),ilu,s%XWORK_WR)
167 IF (isize_lmeb_patch>0)
THEN 170 ycomment=
'MEB: ground litter fraction (-)' 174 np%AL(jp)%NR_P,npe%AL(jp)%XGNDLITTER(:),ilu,s%XWORK_WR)
178 ycomment=
'MEB: ground litter roughness length (without snow) (m)' 182 np%AL(jp)%NR_P,npe%AL(jp)%XZ0LITTER(:),ilu,s%XWORK_WR)
191 DO jl=1,
SIZE(np%AL(1)%XDG,2)
193 WRITE(yrecfm,fmt=
'(A2,I1)')
'DG',jl
195 WRITE(yrecfm,fmt=
'(A2,I2)')
'DG',jl
197 ycomment=
'soil depth'//
' (M)' 200 np%AL(jp)%NR_P,np%AL(jp)%XDG(:,jl),ilu,s%XWORK_WR)
211 DO jl=1,
SIZE(pk%XDG,2)
214 zdg(imask,jl) = zdg(imask,jl) + pk%XPATCH(ji)*pk%XDG(ji,jl)
219 DO jl=1,
SIZE(np%AL(1)%XDG,2)
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
231 IF(io%CISBA==
'DIF')
THEN 233 ALLOCATE(zwork2(ilu,io%NPATCH))
242 zdg2(imask) = zdg2(imask) + pk%XPATCH(ji) * pk%XDG2(ji)
243 jl = pk%NWG_LAYER(ji)
245 zwork2(ji,jp) = pk%XDG(ji,jl)
246 zdtot(imask) = zdtot(imask) + pk%XPATCH(ji) * pk%XDG(ji,jl)
254 ycomment=
'Root depth in ISBA-DIF' 257 np%AL(jp)%NR_P,np%AL(jp)%XDROOT(:),ilu,s%XWORK_WR)
261 ycomment=
'DG2 depth in ISBA-DIF' 264 np%AL(jp)%NR_P,np%AL(jp)%XDG2(:),ilu,s%XWORK_WR)
268 yrecfm=
'DG2_DIF_ISBA' 269 ycomment=
'Averaged DG2 depth in ISBA-DIF' 270 CALL write_surf(hselect,hprogram,yrecfm,zdg2(:),iresp,hcomment=ycomment
276 ycomment=
'Runoff deph in ISBA-DIF' 279 np%AL(jp)%NR_P,np%AL(jp)%XRUNOFFD(:),ilu,s%XWORK_WR)
285 ycomment=
'Total soil depth for moisture in ISBA-DIF' 289 np%AL(jp)%NR_P,zwork2(1:pk%NSIZE_P,jp),ilu,s%XWORK_WR)
295 ycomment=
'Averaged Total soil depth for moisture in ISBA-DIF' 296 CALL write_surf(hselect,hprogram,yrecfm,zdtot(:),iresp,hcomment=ycomment
301 ALLOCATE(zwork1(ilu))
304 DO jl=1,
SIZE(pk%XROOTFRAC,2)
306 WRITE(yrecfm,fmt=
'(A8,I1)')
'ROOTFRAC',jl
308 WRITE(yrecfm,fmt=
'(A8,I2)')
'ROOTFRAC',jl
310 ycomment=
'root fraction by layer (-)' 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)
318 np%AL(jp)%NR_P,zwork1(1:pk%NSIZE_P),ilu,s%XWORK_WR)
326 DO jl=1,
SIZE(np%AL(1)%XDG,2)
328 WRITE(yrecfm,fmt=
'(A7,I1)')
'FRACSOC',jl
330 WRITE(yrecfm,fmt=
'(A7,I2)')
'FRACSOC',jl
332 ycomment=
'SOC fraction by layer (-)' 333 CALL write_surf(hselect,hprogram,yrecfm,s%XFRACSOC(:,jl),iresp,hcomment
341 DO jl=1,
SIZE(np%AL(1)%XDG,2)
343 WRITE(yrecfm,fmt=
'(A4,I1)')
'WSAT',jl
345 WRITE(yrecfm,fmt=
'(A4,I2)')
'WSAT',jl
347 ycomment=
'soil porosity by layer (m3/m3)' 349 hprogram,yrecfm,k%XWSAT(:,jl),iresp,hcomment=ycomment)
352 DO jl=1,
SIZE(np%AL(1)%XDG,2)
354 WRITE(yrecfm,fmt=
'(A3,I1)')
'WFC',jl
356 WRITE(yrecfm,fmt=
'(A3,I2)')
'WFC',jl
358 ycomment=
'field capacity by layer (m3/m3)' 359 CALL write_surf(hselect,hprogram,yrecfm,k%XWFC(:,jl),iresp,hcomment=ycomment
362 DO jl=1,
SIZE(np%AL(1)%XDG,2)
364 WRITE(yrecfm,fmt=
'(A5,I1)')
'WWILT',jl
366 WRITE(yrecfm,fmt=
'(A5,I2)')
'WWILT',jl
368 ycomment=
'wilting point by layer (m3/m3)' 369 CALL write_surf(hselect,hprogram,yrecfm,k%XWWILT(:,jl),iresp,hcomment=ycomment
376 IF (
lhook)
CALL dr_hook(
'WRITE_DIAG_PGD_ISBA_N',1,zhook_handle)
383 ycomment=
'orography roughness length (M)' 385 CALL write_surf(hselect,hprogram,yrecfm,iss%XZ0REL(:),iresp,hcomment=ycomment
391 IF(io%CHORT==
'SGH'.AND.io%CISBA/=
'DIF')
THEN 393 ycomment=
'soil ice depth for runoff (m)' 396 np%AL(jp)%NR_P,np%AL(jp)%XD_ICE(:),ilu,s%XWORK_WR)
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
415 IF(io%NPATCH>1.AND.
SIZE(s%XVEGTYPE_PATCH,2)/=
SIZE(s%XVEGTYPE_PATCH,3))
THEN 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'//
' (-)' 424 np%AL(jp)%NR_P,np%AL(jp)%XVEGTYPE_PATCH(:,jl),ilu,s%XWORK_WR
435 ycomment=
'minimum stomatal resistance (sm-1)' 438 np%AL(jp)%NR_P,npe%AL(jp)%XRSMIN(:),ilu,s%XWORK_WR)
442 ycomment=
'coefficient for RSMIN calculation (-)' 445 np%AL(jp)%NR_P,npe%AL(jp)%XGAMMA(:),ilu,s%XWORK_WR)
449 ycomment=
'vegetation thermal inertia coefficient (-)' 452 np%AL(jp)%NR_P,npe%AL(jp)%XCV(:),ilu,s%XWORK_WR)
456 ycomment=
'maximum solar radiation usable in photosynthesis (-)' 459 np%AL(jp)%NR_P,npe%AL(jp)%XRGL(:),ilu,s%XWORK_WR)
463 ycomment=
'surface emissivity (-)' 466 np%AL(jp)%NR_P,npe%AL(jp)%XEMIS(:),ilu,s%XWORK_WR)
470 ycomment=
'coefficient for maximum water interception (-)' 473 np%AL(jp)%NR_P,npe%AL(jp)%XWRMAX_CF(:),ilu,s%XWORK_WR)
476 IF (isize_lmeb_patch>0)
THEN 479 ycomment=
'MEB: height of vegetation (m)' 482 np%AL(jp)%NR_P,npe%AL(jp)%XH_VEG(:),ilu,s%XWORK_WR)
489 IF (osurf_diag_albedo)
THEN 495 ycomment=
'soil near-infra-red albedo (-)' 498 WHERE (zwork(:,jp)/=
xundef) zwork(:,1) = zwork(:,jp)
500 CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment
505 ycomment=
'soil visible albedo (-)' 508 WHERE (zwork(:,jp)/=
xundef) zwork(:,1) = zwork(:,jp)
510 CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment
515 ycomment=
'soil UV albedo (-)' 518 WHERE (zwork(:,jp)/=
xundef) zwork(:,1) = zwork(:,jp)
520 CALL write_surf(hselect,hprogram,yrecfm,zwork(:,1),iresp,hcomment=ycomment
527 ycomment=
'total near-infra-red albedo (-)' 530 np%AL(jp)%NR_P,npe%AL(jp)%XALBNIR(:),ilu,s%XWORK_WR)
536 ycomment=
'total visible albedo (-)' 539 np%AL(jp)%NR_P,npe%AL(jp)%XALBVIS(:),ilu,s%XWORK_WR)
545 ycomment=
'total UV albedo (-)' 548 np%AL(jp)%NR_P,npe%AL(jp)%XALBUV(:),ilu,s%XWORK_WR)
557 IF (chi%CCH_DRY_DEP==
'WES89' .AND. chi%SVI%NBEQ>0)
THEN 559 ycomment=
'bare soil resistance for SO2 (?)' 562 np%AL(jp)%NR_P,nchi%AL(jp)%XSOILRC_SO2(:),ilu,s%XWORK_WR
566 ycomment=
'bare soil resistance for O3 (?)' 569 np%AL(jp)%NR_P,nchi%AL(jp)%XSOILRC_O3(:),ilu,s%XWORK_WR)
575 IF (lagrip .AND. (io%CPHOTO==
'NIT' .OR. io%CPHOTO==
'NCB') )
THEN 580 ycomment=
'date of seeding (-)' 584 np%AL(jp)%NR_P,npe%AL(jp)%TSEED(:),ilu,s%TDATE_WR)
588 ycomment=
'date of reaping (-)' 592 np%AL(jp)%NR_P,npe%AL(jp)%TREAP(:),ilu,s%TDATE_WR)
600 ycomment=
'flag for irrigation (irrigation if >0.) (-)' 604 np%AL(jp)%NR_P,npe%AL(jp)%XIRRIG(:),ilu,s%XWORK_WR)
612 ycomment=
'water supply during irrigation process (mm)' 616 np%AL(jp)%NR_P,npe%AL(jp)%XWATSUP(:),ilu,s%XWORK_WR)
625 IF (
lhook)
CALL dr_hook(
'WRITE_DIAG_PGD_ISBA_N',1,zhook_handle)
subroutine write_field_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, PFIELD_IN, KSIZE, PWORK_WR)
integer, parameter nundef
subroutine write_diag_pgd_isba_n(DTCO, HSELECT, U, CHI, NCHI, OSU
subroutine end_io_surf_n(HPROGRAM)
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