6 SUBROUTINE read_pgd_isba_n (CHI, DTCO, DTV, DTZ, GB, IG, ISS, IO, S, K, &
7 UG, U, USS, GCP, SV, HPROGRAM, OLAND_USE, TPDATE_END)
68 USE modd_data_cover_par
, ONLY : jpcover
71 USE modd_isba_par
, ONLY : xoptimgrid
73 USE modi_read_nam_pgd_isba
75 USE modi_init_io_surf_n
76 USE modi_end_io_surf_n
81 USE modi_read_pgd_isba_par_n
82 USE modi_read_pgd_tsz0_par_n
87 USE modi_get_type_dim_n
88 USE modi_read_lecoclimap
94 USE modi_get_surf_mask_n
107 TYPE(
grid_t),
INTENT(INOUT) :: IG
108 TYPE(
sso_t),
INTENT(INOUT) :: ISS
114 TYPE(
sso_t),
INTENT(INOUT) :: USS
116 TYPE(
sv_t),
INTENT(INOUT) :: SV
118 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
119 LOGICAL,
INTENT(IN) :: OLAND_USE
120 TYPE(
date),
INTENT(IN) :: TPDATE_END
125 INTEGER,
DIMENSION(:),
POINTER :: IMASK
127 REAL,
DIMENSION(:,:),
ALLOCATABLE :: ZWORK
129 CHARACTER(LEN=12) :: YRECFM
130 CHARACTER(LEN=4 ) :: YLVL
132 INTEGER :: ISIZE_LMEB_PATCH
137 INTEGER :: IVERSION, IBUGFIX
140 INTEGER :: IGROUND_LAYER
142 CHARACTER(LEN=3) :: YISBA
143 CHARACTER(LEN=4) :: YPEDOTF
144 CHARACTER(LEN=3) :: YPHOTO
146 CHARACTER(LEN=4) :: YALBEDO
148 CHARACTER(LEN=28) :: YSAND
149 CHARACTER(LEN=28) :: YCLAY
150 CHARACTER(LEN=28) :: YSOC_TOP
151 CHARACTER(LEN=28) :: YSOC_SUB
152 CHARACTER(LEN=28) :: YCTI
153 CHARACTER(LEN=28) :: YRUNOFFB
154 CHARACTER(LEN=28) :: YWDRAIN
155 CHARACTER(LEN=28) :: YPERM
156 CHARACTER(LEN=6) :: YSANDFILETYPE
157 CHARACTER(LEN=6) :: YCLAYFILETYPE
158 CHARACTER(LEN=6) :: YSOCFILETYPE
159 CHARACTER(LEN=6) :: YCTIFILETYPE
160 CHARACTER(LEN=6) :: YRUNOFFBFILETYPE
161 CHARACTER(LEN=6) :: YWDRAINFILETYPE
162 CHARACTER(LEN=6) :: YPERMFILETYPE
165 REAL :: XUNIF_SOC_TOP
166 REAL :: XUNIF_SOC_SUB
167 REAL :: XUNIF_RUNOFFB
175 REAL,
DIMENSION(150) :: ZSOILGRID
176 CHARACTER(LEN=28) :: YPH
177 CHARACTER(LEN=28) :: YFERT
178 CHARACTER(LEN=6) :: YPHFILETYPE
179 CHARACTER(LEN=6) :: YFERTFILETYPE
186 REAL(KIND=JPRB) :: ZHOOK_HANDLE
192 IF (
lhook)
CALL dr_hook(
'READ_PGD_ISBA_N',0,zhook_handle)
197 CALL read_surf(hprogram,yrecfm,iversion,iresp)
200 CALL read_surf(hprogram,yrecfm,ibugfix,iresp)
208 CALL read_surf(hprogram,yrecfm,io%CISBA,iresp)
210 IF (iversion>=7)
THEN 215 CALL read_surf(hprogram,yrecfm,io%CPEDOTF,iresp)
224 CALL read_surf(hprogram,yrecfm,io%CPHOTO,iresp)
228 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=2)
THEN 231 CALL read_surf(hprogram,yrecfm,io%LTR_ML,iresp)
237 IF (iversion>8 .OR. iversion==8 .AND. ibugfix>=1)
THEN 240 CALL read_surf(hprogram,yrecfm,io%CALBEDO,iresp)
261 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3)
THEN 264 CALL read_surf(hprogram,yrecfm,io%XRM_PATCH,iresp)
272 yrecfm=
'GROUND_LAYER' 273 CALL read_surf(hprogram,yrecfm,io%NGROUND_LAYER,iresp)
277 IF(io%CISBA==
'DIF')
THEN 278 ALLOCATE(io%XSOILGRID(io%NGROUND_LAYER))
280 IF (iversion>=8)
THEN 281 DO jlayer=1,io%NGROUND_LAYER
282 WRITE(ylvl,
'(I4)') jlayer
283 yrecfm=
'SOILGRID'//adjustl(ylvl(:len_trim(ylvl)))
284 CALL read_surf(hprogram,yrecfm,io%XSOILGRID(jlayer),iresp)
286 ELSEIF (iversion==7 .AND. ibugfix>=2)
THEN 288 CALL read_surf(hprogram,yrecfm,io%XSOILGRID,iresp,hdir=
'-')
290 io%XSOILGRID(1:io%NGROUND_LAYER)=xoptimgrid(1:io%NGROUND_LAYER)
293 ALLOCATE(io%XSOILGRID(0))
298 IF (iversion>=6)
THEN 300 CALL read_surf(hprogram,yrecfm,io%NNBIOMASS,iresp)
302 SELECT CASE (io%CPHOTO)
314 yrecfm=
'PATCH_NUMBER' 315 CALL read_surf(hprogram,yrecfm,io%NPATCH,iresp)
319 ALLOCATE(io%LMEB_PATCH(io%NPATCH))
321 IF (iversion>=8)
THEN 324 CALL read_surf(hprogram,yrecfm,io%LMEB_PATCH(:),iresp,hdir=
'-')
326 isize_lmeb_patch =
count(io%LMEB_PATCH(:))
328 IF (isize_lmeb_patch>0)
THEN 329 yrecfm=
'FORC_MEASURE' 330 CALL read_surf(hprogram,yrecfm,io%LFORC_MEASURE,iresp)
332 CALL read_surf(hprogram,yrecfm,io%LMEB_LITTER,iresp)
334 CALL read_surf(hprogram,yrecfm,io%LMEB_GNDRES,iresp)
336 io%LFORC_MEASURE=.false.
337 io%LMEB_LITTER =.false.
338 io%LMEB_GNDRES =.false.
342 io%LMEB_PATCH(:)=.false.
343 io%LFORC_MEASURE=.false.
344 io%LMEB_LITTER =.false.
345 io%LMEB_GNDRES =.false.
356 ALLOCATE(s%LCOVER(jpcover))
357 ALLOCATE(s%XZS(ig%NDIM))
359 ALLOCATE(ig%XLAT (ig%NDIM))
360 ALLOCATE(ig%XLON (ig%NDIM))
361 ALLOCATE(ig%XMESH_SIZE (ig%NDIM))
363 ALLOCATE(iss%XZ0EFFJPDIR(ig%NDIM))
365 CALL pack_init(dtco, u, ug, hprogram,
'NATURE', ig, s%LCOVER, s%XCOVER,
370 ALLOCATE(k%XCLAY(ig%NDIM,io%NGROUND_LAYER))
372 CALL read_surf(hprogram,yrecfm,k%XCLAY(:,1),iresp)
373 DO jlayer=2,io%NGROUND_LAYER
374 k%XCLAY(:,jlayer) = k%XCLAY(:,1)
379 ALLOCATE(k%XSAND(ig%NDIM,io%NGROUND_LAYER))
381 CALL read_surf(hprogram,yrecfm,k%XSAND(:,1),iresp)
382 DO jlayer=2,io%NGROUND_LAYER
383 k%XSAND(:,jlayer) = k%XSAND(:,1)
388 IF (iversion>7 .OR. (iversion==7 .AND. ibugfix>=3))
THEN 390 CALL read_surf(hprogram,yrecfm,io%LSOCP,iresp)
397 ALLOCATE(s%XSOC (ig%NDIM,io%NGROUND_LAYER))
400 CALL read_surf(hprogram,yrecfm,s%XSOC(:,1),iresp)
402 CALL read_surf(hprogram,yrecfm,s%XSOC(:,2),iresp)
404 DO jlayer=2,io%NGROUND_LAYER
405 s%XSOC (:,jlayer)=s%XSOC (:,2)
410 ALLOCATE(s%XSOC (0,1))
416 IF (iversion>7 .OR. (iversion==7 .AND. ibugfix>=3))
THEN 418 CALL read_surf(hprogram,yrecfm,io%LPERM,iresp)
425 ALLOCATE(k%XPERM (ig%NDIM))
428 CALL read_surf(hprogram,yrecfm,k%XPERM(:),iresp)
432 ALLOCATE(k%XPERM (0))
438 IF (iversion>7 .OR. (iversion==7 .AND. ibugfix>=3))
THEN 440 CALL read_surf(hprogram,yrecfm,io%LNOF,iresp)
445 IF (chi%LCH_NO_FLUX)
THEN 449 ALLOCATE(s%XPH(ig%NDIM))
451 CALL read_surf(hprogram,yrecfm,s%XPH(:),iresp)
453 ALLOCATE(s%XFERT(ig%NDIM))
455 CALL read_surf(hprogram,yrecfm,s%XFERT(:),iresp)
458 CALL abor1_sfx(
"READ_PGD_ISBAn: WITH LCH_NO_FLUX=T, PH AND FERT FIELDS ARE GIVEN AT PGD STEP" 468 ALLOCATE(iss%XAOSIP(ig%NDIM))
469 ALLOCATE(iss%XAOSIM(ig%NDIM))
470 ALLOCATE(iss%XAOSJP(ig%NDIM))
471 ALLOCATE(iss%XAOSJM(ig%NDIM))
472 ALLOCATE(iss%XHO2IP(ig%NDIM))
473 ALLOCATE(iss%XHO2IM(ig%NDIM))
474 ALLOCATE(iss%XHO2JP(ig%NDIM))
475 ALLOCATE(iss%XHO2JM(ig%NDIM))
476 ALLOCATE(iss%XSSO_SLOPE(ig%NDIM))
477 ALLOCATE(iss%XSSO_STDEV(ig%NDIM))
479 CALL pack_sso(uss,hprogram,u%NR_NATURE, iss)
483 ALLOCATE(k%XRUNOFFB(ig%NDIM))
485 CALL read_surf(hprogram,yrecfm,k%XRUNOFFB,iresp)
489 ALLOCATE(k%XWDRAIN(ig%NDIM))
490 IF (iversion<=3)
THEN 494 CALL read_surf(hprogram,yrecfm,k%XWDRAIN,iresp)
499 IF(io%CRUNOFF==
'SGH ' .AND. iversion>=5)
THEN 502 CALL read_surf(hprogram,yrecfm,io%LCTI,iresp)
504 IF (.NOT.io%LCTI)
CALL abor1_sfx(
"READ_PGD_ISBA_n:WITH CRUNOFF=SGH, CTI MAPS MUST BE GIVEN TO PGD" 506 ALLOCATE(s%XTI_MIN(ig%NDIM))
507 ALLOCATE(s%XTI_MAX(ig%NDIM))
508 ALLOCATE(s%XTI_MEAN(ig%NDIM))
509 ALLOCATE(s%XTI_STD(ig%NDIM))
510 ALLOCATE(s%XTI_SKEW(ig%NDIM))
513 CALL read_surf(hprogram,yrecfm,s%XTI_MIN,iresp)
516 CALL read_surf(hprogram,yrecfm,s%XTI_MAX,iresp)
519 CALL read_surf(hprogram,yrecfm,s%XTI_MEAN,iresp)
522 CALL read_surf(hprogram,yrecfm,s%XTI_STD,iresp)
525 CALL read_surf(hprogram,yrecfm,s%XTI_SKEW,iresp)
529 ALLOCATE(s%XTI_MIN(0))
530 ALLOCATE(s%XTI_MAX(0))
531 ALLOCATE(s%XTI_MEAN(0))
532 ALLOCATE(s%XTI_STD(0))
533 ALLOCATE(s%XTI_SKEW(0))
541 IF (chi%LCH_BIO_FLUX)
THEN 542 ALLOCATE(zwork(u%NSIZE_FULL,1))
548 ALLOCATE(imask(ig%NDIM))
551 ALLOCATE(gb%XISOPOT(ig%NDIM))
552 ALLOCATE(gb%XMONOPOT(ig%NDIM))
556 CALL read_surf(hprogram,yrecfm,zwork,iresp)
561 CALL read_surf(hprogram,yrecfm,zwork,iresp)
569 ALLOCATE(gb%XISOPOT (0))
570 ALLOCATE(gb%XMONOPOT(0))
583 IF (
lhook)
CALL dr_hook(
'READ_PGD_ISBA_N',1,zhook_handle)
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine read_pgd_isba_n(CHI, DTCO, DTV, DTZ, GB, IG, ISS, IO,
subroutine pack_init(DTCO, U, UG, HPROGRAM, HSURF, G, OCOVER, PCOV
subroutine read_pgd_isba_par_n(DTCO, U, GCP, DTI, KDIM, IO, HPROG
subroutine read_nam_pgd_isba(HPROGRAM, KPATCH, KGROUND_LAYER,
subroutine read_pgd_tsz0_par_n(DTZ, HPROGRAM)
subroutine abor1_sfx(YTEXT)
subroutine get_surf_mask_n(DTCO, U, HTYPE, KDIM, KMASK, KLU, KLUOUT)
subroutine read_lecoclimap(HPROGRAM, OECOCLIMAP, OECOSG, HDIR)
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine pack_sso(USS, HPROGRAM, KMASK, ISS)
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION