15 USE modi_read_lecoclimap
18 USE modi_open_aux_io_surf
19 USE modi_close_aux_io_surf
23 USE yomhook
,ONLY : lhook, dr_hook
24 USE parkind1
,ONLY : jprb
33 hfile,hprogram,kluout,hisba,hnat,hfield,kni,klayer, &
34 kpatch,psoilgrid,pdepth,kversion,kwg_layer )
48 USE modi_read_surf_isba_par_n
49 USE modi_convert_cover_isba
50 USE modi_garden_soil_depth
66 TYPE(isba_t
),
INTENT(INOUT) :: i
68 CHARACTER(LEN=28),
INTENT(IN) :: hfile
69 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
70 INTEGER,
INTENT(IN) :: kluout
71 CHARACTER(LEN=3),
INTENT(IN) :: hisba
72 CHARACTER(LEN=3),
INTENT(IN) :: hnat
73 CHARACTER(LEN=7),
INTENT(IN) :: hfield
74 INTEGER,
INTENT(IN) :: kni
75 INTEGER,
INTENT(IN) :: klayer
76 INTEGER,
INTENT(IN) :: kpatch
77 INTEGER,
INTENT(IN) :: kversion
78 REAL,
DIMENSION(:),
INTENT(IN) :: psoilgrid
79 REAL,
DIMENSION(:,:,:),
POINTER :: pdepth
80 INTEGER,
DIMENSION(:,:),
INTENT(OUT):: kwg_layer
85 CHARACTER(LEN=4 ) :: ylvl
86 CHARACTER(LEN=12) :: yrecfm
87 CHARACTER(LEN=16) :: yrecfm2
88 CHARACTER(LEN=100):: ycomment
96 LOGICAL,
DIMENSION(JPCOVER) :: gcover
97 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zcover
98 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zground_depth
99 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwork
100 INTEGER,
DIMENSION(:),
ALLOCATABLE :: zsoilgrid
101 REAL,
DIMENSION(KNI) :: zhveg
102 REAL,
DIMENSION(KNI) :: zlveg
103 REAL,
DIMENSION(KNI) :: znveg
104 REAL,
DIMENSION(KNI) :: zperm
105 CHARACTER(LEN=4) :: yhveg
106 CHARACTER(LEN=4) :: ylveg
107 CHARACTER(LEN=4) :: ynveg
108 LOGICAL :: gecoclimap
109 LOGICAL :: gpar_garden
111 LOGICAL :: gdata_ground_depth, gdata_root_depth
113 REAL(KIND=JPRB) :: zhook_handle
118 IF (lhook) CALL dr_hook(
'MODE_READ_EXTERN:READ_EXTERN_DEPTH',0,zhook_handle)
121 hfile,hprogram,
'FULL ')
124 hprogram,yrecfm,iversion,iresp)
127 hprogram,yrecfm,ibugfix,iresp)
130 IF (hnat==
'NAT')
THEN
132 hfile,hprogram,
'FULL ')
138 hfile,hprogram,
'TOWN ')
140 hprogram,
'PAR_GARDEN',gpar_garden,iresp)
142 gecoclimap = .NOT. gpar_garden
152 IF (hnat==
'NAT'.AND.(iversion>7 .OR. (iversion==7 .AND. ibugfix>3)))
THEN
154 hfile,hprogram,
'NATURE')
157 hprogram,yrecfm,gperm,iresp)
161 hprogram,yrecfm,zperm(:),iresp,hdir=
'A')
166 ALLOCATE(pdepth(kni,klayer,kpatch))
167 pdepth(:,:,:) = xundef
169 kwg_layer(:,:) = nundef
174 hfile,hprogram,
'FULL ')
179 hprogram,
'COVER_LIST ',yrecfm)
181 hprogram,yrecfm,gcover(:),iresp,hdir=
'-')
183 ALLOCATE(zcover(kni,count(gcover)))
186 hprogram,yrecfm,zcover(:,:),gcover(:),iresp,hdir=
'A')
191 hisba,1,zcover,gcover,
' ',hnat,psoilgrid=psoilgrid, &
192 pperm=zperm,pdg=pdepth,kwg_layer=kwg_layer )
200 IF (hnat==
'GRD')
THEN
202 hfile,hprogram,
'TOWN ')
205 hfile,hprogram,
'NATURE')
209 IF (hnat==
'NAT' .AND. (iversion>=7 .OR. .NOT.gecoclimap))
THEN
214 IF (iversion>=7)
THEN
218 hprogram,yrecfm,gdata_dg,iresp,hcomment=ycomment)
223 ALLOCATE(zwork(kni,kpatch))
225 IF (jlayer<10)
WRITE(yrecfm,fmt=
'(A4,I1.1)')
'D_DG',jlayer
226 IF (jlayer>=10)
WRITE(yrecfm,fmt=
'(A4,I2.2)')
'D_DG',jlayer
228 hprogram,yrecfm,kluout,kni,zwork,iresp,iversion,hdir=
'A')
230 pdepth(:,jlayer,jpatch) = zwork(:,jpatch)
237 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=2)
THEN
241 IF (.NOT.gdata_dg .AND. hisba==
"3-L")
THEN
243 yrecfm2=
'L_ROOT_DEPTH'
245 CALL
read_surf(hprogram,yrecfm2,gdata_root_depth,iresp,hcomment=ycomment)
247 IF (gdata_root_depth)
THEN
248 yrecfm2=
'D_ROOT_DEPTH'
250 hprogram,yrecfm2,kluout,kni,pdepth(:,2,:),iresp,iversion,hdir=
'A')
255 yrecfm2=
'L_GROUND_DEPTH'
256 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm2=
'L_GROUND_DPT'
259 hprogram,yrecfm2,gdata_ground_depth,iresp,hcomment=ycomment)
261 IF (gdata_ground_depth)
THEN
263 yrecfm2=
'D_GROUND_DETPH'
264 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm2=
'D_GROUND_DPT'
265 ALLOCATE(zground_depth(kni,kpatch))
267 hprogram,yrecfm2,kluout,kni,zground_depth(:,:),iresp,iversion,hdir=
'A')
269 IF (.NOT.gdata_dg)
THEN
271 IF (hisba==
"2-L")
THEN
273 pdepth(:,2,:) = zground_depth(:,:)
274 pdepth(:,1,:) = xundef
275 WHERE (zground_depth(:,:)/=xundef) pdepth(:,1,:) = 0.01
277 ELSEIF (hisba==
"3-L")
THEN
279 pdepth(:,3,:) = zground_depth(:,:)
280 pdepth(:,1,:) = xundef
281 WHERE (zground_depth(:,:)/=xundef) pdepth(:,1,:) = 0.01
283 ELSEIF (hisba==
"DIF")
THEN
285 ALLOCATE(zsoilgrid(klayer))
287 WRITE(ylvl,
'(I4)') jlayer
288 yrecfm2=
'SOILGRID'//adjustl(ylvl(:len_trim(ylvl)))
289 CALL
read_surf(hprogram,yrecfm,zsoilgrid(jlayer),iresp)
290 pdepth(:,jlayer,:) = zsoilgrid(jlayer)
292 DEALLOCATE(zsoilgrid)
300 IF ( pdepth(jj,jlayer,jpatch) <= zground_depth(jj,jpatch) .AND. zground_depth(jj,jpatch) < xundef ) &
301 kwg_layer(jj,jpatch) = jlayer
305 DEALLOCATE(zground_depth)
311 ELSE IF (hnat==
'GRD' .AND. .NOT.gecoclimap)
THEN
316 hprogram,
'D_TYPE_HVEG',yhveg,iresp)
318 hprogram,
'D_TYPE_LVEG',ylveg,iresp)
320 hprogram,
'D_TYPE_NVEG',ynveg,iresp)
322 hprogram,
'D_FRAC_HVEG',zhveg,iresp,hdir=
'A')
324 hprogram,
'D_FRAC_LVEG',zlveg,iresp,hdir=
'A')
326 hprogram,
'D_FRAC_NVEG',znveg,iresp,hdir=
'A')
328 CALL garden_soil_depth(ynveg,ylveg,yhveg,znveg,zlveg,zhveg,pdepth)
335 IF (lhook) CALL dr_hook(
'MODE_READ_EXTERN:READ_EXTERN_DEPTH',1,zhook_handle)
347 hfile,hfiletype,hfilepgd,hfilepgdtype,&
348 kluout,kni,hfield,hname,pfield,pdepth,okey)
365 USE modi_isba_soc_parameters
377 TYPE(isba_t
),
INTENT(INOUT) :: i
379 CHARACTER(LEN=28),
INTENT(IN) :: hfile
380 CHARACTER(LEN=6),
INTENT(IN) :: hfiletype
381 CHARACTER(LEN=28),
INTENT(IN) :: hfilepgd
382 CHARACTER(LEN=6),
INTENT(IN) :: hfilepgdtype
383 INTEGER,
INTENT(IN) :: kluout
384 INTEGER,
INTENT(IN) :: kni
385 CHARACTER(LEN=7),
INTENT(IN) :: hfield
386 CHARACTER(LEN=*),
INTENT(IN) :: hname
387 REAL,
DIMENSION(:,:,:),
POINTER :: pfield
388 REAL,
DIMENSION(:,:,:),
POINTER :: pdepth
389 LOGICAL,
OPTIONAL,
INTENT(INOUT) :: okey
395 CHARACTER(LEN=12) :: yrecfm
396 CHARACTER(LEN=4) :: ylvl
397 CHARACTER(LEN=3) :: yisba
398 CHARACTER(LEN=3) :: ynat
399 CHARACTER(LEN=4) :: ypedotf
410 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwork
412 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zvar
413 REAL,
DIMENSION(:),
ALLOCATABLE :: zclay
414 REAL,
DIMENSION(:),
ALLOCATABLE :: zsand
415 REAL,
DIMENSION(:),
ALLOCATABLE :: zsoilgrid
416 REAL,
DIMENSION(:),
ALLOCATABLE :: znat
418 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwwilt
419 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwfc
420 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwsat
421 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zpatch
422 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zbcoef
423 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zmpotsat
424 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zhcapsoil
425 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zconddry
426 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zcondsld
427 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zwd0
428 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zaniso
429 REAL,
DIMENSION(:,:),
ALLOCATABLE :: zfracsoc
430 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: zcondsat
432 REAL,
DIMENSION(KNI,2) :: zsoc
434 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: iwg_layer
443 REAL(KIND=JPRB) :: zhook_handle
445 IF (lhook) CALL dr_hook(
'MODE_READ_EXTERN:READ_EXTERN_ISBA',0,zhook_handle)
446 WRITE (kluout,*)
' | Reading ',hfield,
' in externalized file'
451 gteb = (hname(1:3)==
'TWN' .OR. hname(1:3)==
'GD_' .OR. hname(1:3)==
'GR_' &
452 .OR. hname(4:6)==
'GD_' .OR. hname(4:6)==
'GR_')
461 hfilepgd,hfilepgdtype,
'FULL ')
464 hfilepgdtype,yrecfm,iversion,iresp)
467 hfilepgdtype,yrecfm,ibugfix,iresp)
472 hfilepgd,hfilepgdtype,
'TOWN ')
475 hfilepgd,hfilepgdtype,
'NATURE')
480 yrecfm=
'GROUND_LAYER'
483 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_LAYER'
486 hfilepgdtype,yrecfm,ilayer,iresp)
492 yrecfm=
'PATCH_NUMBER'
494 hfilepgdtype,yrecfm,ipatch,iresp)
502 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_ISBA'
505 hfilepgdtype,yrecfm,yisba,iresp)
506 IF(yisba==
'DIF'.AND.present(okey))
THEN
510 IF (iversion>=7)
THEN
517 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_PEDOTF'
520 hfilepgdtype,yrecfm,ypedotf,iresp)
540 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_CLAY'
543 hfilepgdtype,yrecfm,zclay(:),iresp,hdir=
'A')
554 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_SAND'
557 hfilepgdtype,yrecfm,zsand(:),iresp,hdir=
'A')
565 IF ( (.NOT.gteb).AND.(iversion>7.OR.(iversion==7.AND.ibugfix>3)) &
566 .AND.(yisba==
'DIF').AND.(hfield==
'WG '.OR.hfield==
'WGI ') )
THEN
569 hfilepgdtype,yrecfm,gsoc_data,iresp)
573 hfilepgdtype,yrecfm,zsoc(:,1),iresp,hdir=
'A')
576 hfilepgdtype,yrecfm,zsoc(:,2),iresp,hdir=
'A')
577 WHERE(zsoc(:,:)==xundef)zsoc(:,:)=0.0
588 IF(yisba==
'DIF')
THEN
589 ALLOCATE(zsoilgrid(ilayer))
591 IF (iversion>=8)
THEN
593 WRITE(ylvl,
'(I4)') jlayer
594 yrecfm=
'SOILGRID'//adjustl(ylvl(:len_trim(ylvl)))
596 yrecfm=
'GD_SGRID'//adjustl(ylvl(:len_trim(ylvl)))
599 hfilepgdtype,yrecfm,zsoilgrid(jlayer),iresp)
601 ELSEIF (iversion==7 .AND. ibugfix>=2)
THEN
604 yrecfm=
'TWN_SOILGRID'
605 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=3) yrecfm=
'GD_SOILGRID'
608 hfilepgdtype,yrecfm,zsoilgrid,iresp,hdir=
'-')
610 zsoilgrid(1:ilayer) = xoptimgrid(1:ilayer)
613 ALLOCATE(zsoilgrid(0))
616 ALLOCATE(iwg_layer(kni,ipatch))
617 iwg_layer(:,:) = nundef
623 IF (iversion>=7)
THEN
625 CALL
read_surf(hfilepgdtype,
'FRAC_TOWN',znat,iresp,hdir=
'A')
627 CALL
read_surf(hfilepgdtype,
'FRAC_NATURE',znat,iresp,hdir=
'A')
635 IF (.NOT.gteb .AND. hfield==
'TG ' .AND. (yisba==
'2-L' .OR. yisba==
'3-L') )
THEN
639 hfile,hfiletype,
'NATURE')
641 hfilepgdtype,yrecfm,gtemp_arp,iresp)
645 hfilepgdtype,yrecfm,ilayer,iresp)
651 IF ((hfield==
'TG ') .AND. (yisba==
'2-L' .OR. yisba==
'3-L'))
THEN
652 ALLOCATE(pdepth(kni,ilayer,nvegtype))
653 DO jvegtype=1,nvegtype
654 pdepth(:,1,jvegtype) = 0.01
655 pdepth(:,2,jvegtype) = 0.40
656 IF (ilayer==3) pdepth(:,3,jvegtype) = 5.00
659 pdepth(:,3,jvegtype) = 1.0
661 pdepth(:,jlayer,jvegtype) = pdepth(:,jlayer-1,jvegtype)+1.
670 hfilepgd,hfilepgdtype,kluout,yisba,ynat,hfield,kni, &
671 ilayer,ipatch,zsoilgrid,pdepth,iversion,iwg_layer)
674 DEALLOCATE(zsoilgrid)
681 ALLOCATE(zvar(kni,ilayer,ipatch))
682 ALLOCATE(zwork(kni,ipatch))
691 hfile,hfiletype,
'TOWN ')
694 hfile,hfiletype,
'NATURE')
698 IF(yisba==
'2-L'.OR.yisba==
'3-L')
THEN
712 WRITE(ylvl,
'(I4)') jlayer
713 yrecfm=trim(hname)//adjustl(ylvl(:len_trim(ylvl)))
715 hfiletype,yrecfm,zwork(:,:),iresp,hdir=
'A')
717 WHERE (znat(:)==0.) zwork(:,jpatch) = xundef
718 zvar(:,jlayer,jpatch)=zwork(:,jpatch)
724 IF(yisba==
'3-L')
THEN
727 IF(.NOT.gtemp_arp)zvar(:,3,:)=zvar(:,2,:)
729 zvar(:,3,:)=zvar(:,2,:)
741 ALLOCATE(pfield(kni,ilayer,ipatch))
743 pfield(:,:,:) = zvar(:,:,:)
745 IF (hfield==
'WG ' .OR. hfield==
'WGI ')
THEN
749 ALLOCATE (zwfc(kni,ilayer))
750 ALLOCATE (zwwilt(kni,ilayer))
751 ALLOCATE (zwsat(kni,ilayer))
753 zwsat(:,1) =
wsat_func(zclay(:),zsand(:),ypedotf)
754 zwwilt(:,1) =
wwilt_func(zclay(:),zsand(:),ypedotf)
756 zwfc(:,1) =
w33_func(zclay(:),zsand(:),ypedotf)
758 zwfc(:,1) =
wfc_func(zclay(:),zsand(:),ypedotf)
761 zwsat(:,jlayer) = zwsat(:,1)
762 zwfc(:,jlayer) = zwfc(:,1)
763 zwwilt(:,jlayer) = zwwilt(:,1)
771 ALLOCATE(zpatch(kni,ipatch))
774 hfile,hfiletype,
'NATURE')
777 hfiletype,yrecfm,gsoc,iresp)
780 hfiletype,yrecfm,zpatch(:,:),iresp,hdir=
'A')
781 WHERE(zpatch(:,:)==xundef)zpatch(:,:)=0.0
785 ALLOCATE(zbcoef(kni,ilayer))
786 ALLOCATE(zmpotsat(kni,ilayer))
787 ALLOCATE(zhcapsoil(kni,ilayer))
788 ALLOCATE(zconddry(kni,ilayer))
789 ALLOCATE(zcondsld(kni,ilayer))
790 ALLOCATE(zwd0(kni,ilayer))
791 ALLOCATE(zaniso(kni,ilayer))
792 ALLOCATE(zfracsoc(kni,ilayer))
793 ALLOCATE(zcondsat(kni,ilayer,ipatch))
804 zcondsat,zwsat,zhcapsoil,zconddry,zcondsld,&
805 zwfc,zwwilt,zwd0,zaniso,zfracsoc )
809 DEALLOCATE(zhcapsoil)
821 pfield(:,:,:) = xundef
828 iwork=iwg_layer(ji,jpatch)
830 DO jlayer=iwork+1,ilayer
831 zvar(ji,jlayer,jpatch)=zvar(ji,iwork,jpatch)
838 IF (hfield==
'WG ')
THEN
842 IF(zvar(ji,jlayer,jpatch)/=xundef)
THEN
843 zvar(ji,jlayer,jpatch) = max(min(zvar(ji,jlayer,jpatch),zwsat(ji,jlayer)),0.)
845 pfield(ji,jlayer,jpatch) = (zvar(ji,jlayer,jpatch) - zwwilt(ji,jlayer)) / (zwfc(ji,jlayer) - zwwilt(ji,jlayer))
850 ELSE IF (hfield==
'WGI ')
THEN
853 WHERE(zvar(:,jlayer,jpatch)/=xundef)
854 pfield(:,jlayer,jpatch) = zvar(:,jlayer,jpatch) / zwsat(:,jlayer)
867 DEALLOCATE(iwg_layer)
870 IF (lhook) CALL dr_hook(
'MODE_READ_EXTERN:READ_EXTERN_ISBA',1,zhook_handle)
subroutine isba_soc_parameters(HRUNOFF, PPATCH, PDG, PSOC, PBCOEF, PMPOTSAT, PCONDSAT, PWSAT, PHCAPSOIL, PCONDDRY, PCONDSLD, PWFC, PWWILT, PWD0, PANISO, PFRACSOC)
subroutine, public read_surf_cov(HPROGRAM, HREC, PFIELD, OFLAG, KRESP, HCOMMENT, HDIR)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine read_surf_isba_par_n(DTCO, U, I, HPROGRAM, HREC, KLUOUT, KSIZE, PFIELD, KRESP, KVERSION, HCOMMENT, HDIR)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine read_extern_isba(U, DTCO, I, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, KLUOUT, KNI, HFIELD, HNAME, PFIELD, PDEPTH, OKEY)
subroutine read_extern_depth(U, DTCO, I, HFILE, HPROGRAM, KLUOUT, HISBA, HNAT, HFIELD, KNI, KLAYER, KPATCH, PSOILGRID, PDEPTH, KVERSION, KWG_LAYER)
subroutine convert_cover_isba(DTCO, I, HISBA, KDECADE, PCOVER, OCOVER, HPHOTO, HSFTYPE, PVEG, PLAI, PRSMIN, PGAMMA, PWRMAX_CF, PRGL, PCV, PSOILGRID, PPERM, PDG, KWG_LAYER, PDROOT, PDG2, PD_ICE, PZ0, PZ0_O_Z0H, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PEMIS_ECO, PVEGTYPE, PROOTFRAC, PGMES, PBSLAI, PLAIMIN, PSEFOLD, PGC, PDMAX, PF2I, OSTRESS, PH_TREE, PRE25, PCE_NITRO, PCF_NITRO, PCNA_NITRO, TPSEED, TPREAP, PWATSUP, PIRRIG, PGNDLITTER, PLAIGV, PRSMINGV, PGAMMAGV, PWRMAX_CFGV, PRGLGV, PROOTFRACGV, PZ0LITTER, PH_VEG)
subroutine old_name(HPROGRAM, HRECIN, HRECOUT)
subroutine read_lecoclimap(HPROGRAM, OECOCLIMAP)