6 SUBROUTINE pgd_isba (DTCO, DTI, DGU, IG, I, UG, U, USS, &
70 USE modi_read_nam_pgd_isba
71 USE modi_read_nam_pgd_isba_meb
77 USE modi_get_surf_size_n
78 USE modi_pack_pgd_isba
80 USE modi_write_cover_tex_isba
81 USE modi_write_cover_tex_isba_par
82 USE modi_pgd_topo_index
83 USE modi_open_namelist
84 USE modi_close_namelist
90 USE modi_init_io_surf_n
91 USE modi_end_io_surf_n
103 USE yomhook
,ONLY : lhook, dr_hook
104 USE parkind1
,ONLY : jprb
117 TYPE(isba_grid_t
),
INTENT(INOUT) :: ig
118 TYPE(isba_t
),
INTENT(INOUT) :: i
123 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
124 LOGICAL,
INTENT(IN) :: oecoclimap
135 REAL,
DIMENSION(NL) :: zaosip
136 REAL,
DIMENSION(NL) :: zaosim
137 REAL,
DIMENSION(NL) :: zaosjp
138 REAL,
DIMENSION(NL) :: zaosjm
139 REAL,
DIMENSION(NL) :: zho2ip
140 REAL,
DIMENSION(NL) :: zho2im
141 REAL,
DIMENSION(NL) :: zho2jp
142 REAL,
DIMENSION(NL) :: zho2jm
143 REAL,
DIMENSION(NL) :: zsso_slope
153 INTEGER :: iground_layer
154 CHARACTER(LEN=3) :: yisba
155 CHARACTER(LEN=4) :: ypedotf
156 CHARACTER(LEN=3) :: yphoto
159 CHARACTER(LEN=28) :: ysand
160 CHARACTER(LEN=28) :: yclay
161 CHARACTER(LEN=28) :: ysoc_top
162 CHARACTER(LEN=28) :: ysoc_sub
163 CHARACTER(LEN=28) :: ycti
164 CHARACTER(LEN=28) :: yrunoffb
165 CHARACTER(LEN=28) :: ywdrain
166 CHARACTER(LEN=28) :: yperm
167 CHARACTER(LEN=28) :: ygw
168 CHARACTER(LEN=6) :: ysandfiletype
169 CHARACTER(LEN=6) :: yclayfiletype
170 CHARACTER(LEN=6) :: ysocfiletype
171 CHARACTER(LEN=6) :: yctifiletype
172 CHARACTER(LEN=6) :: yrunoffbfiletype
173 CHARACTER(LEN=6) :: ywdrainfiletype
174 CHARACTER(LEN=6) :: ypermfiletype
175 CHARACTER(LEN=6) :: ygwfiletype
178 REAL :: xunif_soc_top
179 REAL :: xunif_soc_sub
180 REAL :: xunif_runoffb
190 REAL,
DIMENSION(150) :: zsoilgrid
191 CHARACTER(LEN=28) :: yph
192 CHARACTER(LEN=28) :: yfert
193 CHARACTER(LEN=6) :: yphfiletype
194 CHARACTER(LEN=6) :: yfertfiletype
197 LOGICAL,
DIMENSION(19) :: gmeb_patch
198 LOGICAL,
DIMENSION(19) :: gmeb_patch_rec
200 REAL(KIND=JPRB) :: zhook_handle
204 IF (lhook) CALL dr_hook(
'PGD_ISBA',0,zhook_handle)
214 yisba, ypedotf, yphoto, gtr_ml, zrm_patch, &
215 yclay, yclayfiletype, xunif_clay, limp_clay, &
216 ysand, ysandfiletype, xunif_sand, limp_sand, &
217 ysoc_top, ysoc_sub, ysocfiletype, xunif_soc_top, &
218 xunif_soc_sub, limp_soc, ycti, yctifiletype, limp_cti, &
219 yperm, ypermfiletype, xunif_perm, limp_perm, gmeb, &
220 ygw, ygwfiletype, xunif_gw, limp_gw, &
221 yrunoffb, yrunoffbfiletype, xunif_runoffb, &
222 ywdrain, ywdrainfiletype , xunif_wdrain, zsoilgrid, &
223 yph, yphfiletype, xunif_ph, yfert, yfertfiletype, &
227 i%NGROUND_LAYER = iground_layer
232 i%XRM_PATCH = max(min(zrm_patch,1.),0.)
240 IF (i%NPATCH<1 .OR. i%NPATCH>nvegtype)
THEN
241 WRITE(iluout,*)
'*****************************************'
242 WRITE(iluout,*)
'* Number of patch must be between 1 and ', nvegtype
243 WRITE(iluout,*)
'* You have chosen NPATCH = ', i%NPATCH
244 WRITE(iluout,*)
'*****************************************'
245 CALL
abor1_sfx(
'PGD_ISBA: NPATCH MUST BE BETWEEN 1 AND NVEGTYPE')
248 ALLOCATE(i%LMEB_PATCH(i%NPATCH))
250 i%LMEB_PATCH(:) = .false.
251 i%LFORC_MEASURE = .false.
252 i%LMEB_LITTER = .false.
253 i%LMEB_GNDRES = .false.
267 gmeb_patch_rec(:)=.false.
269 IF(i%NPATCH==1 .AND. gmeb_patch(1))
THEN
270 WRITE(iluout,*)
'*****************************************'
271 WRITE(iluout,*)
'* WARNING!'
272 WRITE(iluout,*)
'* Using MEB for one patch only is not recommended.'
273 WRITE(iluout,*)
'* LMEB_PATCH(1) has been set to .FALSE.'
274 WRITE(iluout,*)
'*****************************************'
275 ELSEIF(i%NPATCH>=2 .AND. i%NPATCH<=6)
THEN
276 gmeb_patch_rec(2)=.true.
277 ELSEIF(i%NPATCH>=7 .AND. i%NPATCH<=8)
THEN
278 gmeb_patch_rec(3)=.true.
279 ELSEIF(i%NPATCH==9)
THEN
280 gmeb_patch_rec(3:4)=(/.true.,.true./)
281 ELSEIF(i%NPATCH==10)
THEN
282 gmeb_patch_rec(3:5)=(/.true.,.true.,.true./)
283 ELSEIF(i%NPATCH>=11 .AND. i%NPATCH<=12)
THEN
284 gmeb_patch_rec(4:6)=(/.true.,.true.,.true./)
285 ELSEIF(i%NPATCH==19)
THEN
286 gmeb_patch_rec(4:6)=(/.true.,.true.,.true./)
287 gmeb_patch_rec(13:17)=(/.true.,.true.,.true.,.true.,.true./)
290 IF(count(.NOT.gmeb_patch_rec(:) .AND. gmeb_patch(:))>0)
THEN
291 WRITE(iluout,*)
'*****************************************'
292 WRITE(iluout,*)
'* WARNING!'
293 WRITE(iluout,*)
'* Using MEB for non-tree patches is not yet recommended.'
294 WRITE(iluout,*)
'* Therefor, LMEB_PATCH for non-tree patches has been set to .FALSE.'
295 WRITE(iluout,*)
'* The final LMEB_PATCH vector becomes:'
296 WRITE(iluout,*) gmeb_patch(1:i%NPATCH).AND.gmeb_patch_rec(1:i%NPATCH)
297 WRITE(iluout,*)
'*****************************************'
299 gmeb_patch(:)=gmeb_patch(:).AND.gmeb_patch_rec(:)
301 i%LMEB_PATCH(1:i%NPATCH) = gmeb_patch(1:i%NPATCH)
303 IF (i%LMEB_LITTER)
THEN
304 i%LMEB_GNDRES = .false.
316 CALL
test_nam_var_surf(iluout,
'CPHOTO',i%CPHOTO,
'NON',
'AGS',
'LAI',
'AST',
'LST',
'NIT',
'NCB')
318 SELECT CASE (i%CISBA)
324 WRITE(iluout,*)
'*****************************************'
325 WRITE(iluout,*)
'* With option CISBA = ',i%CISBA,
' *'
326 WRITE(iluout,*)
'* the number of soil layers is set to 2 *'
327 WRITE(iluout,*)
'* Pedo transfert function = CH78 *'
328 WRITE(iluout,*)
'*****************************************'
334 WRITE(iluout,*)
'*****************************************'
335 WRITE(iluout,*)
'* With option CISBA = ',i%CISBA,
' *'
336 WRITE(iluout,*)
'* the number of soil layers is set to 3 *'
337 WRITE(iluout,*)
'* Pedo transfert function = CH78 *'
338 WRITE(iluout,*)
'*****************************************'
342 IF(i%NGROUND_LAYER==nundef)
THEN
344 i%NGROUND_LAYER=noptimlayer
346 WRITE(iluout,*)
'****************************************'
347 WRITE(iluout,*)
'* Number of ground layer not specified *'
348 WRITE(iluout,*)
'****************************************'
349 CALL
abor1_sfx(
'PGD_ISBA: NGROUND_LAYER MUST BE DONE IN NAM_ISBA')
353 ALLOCATE(i%XSOILGRID(i%NGROUND_LAYER))
354 i%XSOILGRID(:)=xundef
355 i%XSOILGRID(:)=zsoilgrid(1:i%NGROUND_LAYER)
356 IF (all(zsoilgrid(:)==xundef))
THEN
357 IF(oecoclimap) i%XSOILGRID(1:i%NGROUND_LAYER)=xoptimgrid(1:i%NGROUND_LAYER)
358 ELSEIF (count(i%XSOILGRID/=xundef)/=i%NGROUND_LAYER)
THEN
359 WRITE(iluout,*)
'********************************************************'
360 WRITE(iluout,*)
'* Soil grid reference values /= number of ground layer *'
361 WRITE(iluout,*)
'********************************************************'
362 CALL
abor1_sfx(
'PGD_ISBA: XSOILGRID must be coherent with NGROUND_LAYER in NAM_ISBA')
363 ELSEIF (i%XSOILGRID(1).GT.0.01)
THEN
364 CALL
abor1_sfx(
'PGD_ISBA: First layer of XSOILGRID must be lower than 1cm')
367 WRITE(iluout,*)
'*****************************************'
368 WRITE(iluout,*)
'* Option CISBA = ',i%CISBA
369 WRITE(iluout,*)
'* Pedo transfert function = ',i%CPEDOTF
370 WRITE(iluout,*)
'* Number of soil layers = ',i%NGROUND_LAYER
372 WRITE(iluout,*)
'* Soil layers grid (m) = ',i%XSOILGRID(1:i%NGROUND_LAYER)
374 WRITE(iluout,*)
'*****************************************'
378 SELECT CASE (i%CPHOTO)
379 CASE (
'AGS',
'LAI',
'AST',
'LST')
386 WRITE(iluout,*)
'*****************************************'
387 WRITE(iluout,*)
'* With option CPHOTO = ',i%CPHOTO,
' *'
388 WRITE(iluout,*)
'* the number of biomass pools is set to ', i%NNBIOMASS
389 WRITE(iluout,*)
'*****************************************'
391 IF ( i%CPHOTO/=
'NON' .AND. i%NPATCH/=12 .AND. i%NPATCH/=19 )
THEN
392 WRITE(iluout,*)
'*****************************************'
393 WRITE(iluout,*)
'* With option CPHOTO = ', i%CPHOTO
394 WRITE(iluout,*)
'* Number of patch must be equal to 12 or 19'
395 WRITE(iluout,*)
'* But you have chosen NPATCH = ', i%NPATCH
396 WRITE(iluout,*)
'*****************************************'
397 CALL
abor1_sfx(
'PGD_ISBA: CPHOTO='//i%CPHOTO//
' REQUIRES NPATCH=12 or 19')
400 IF ( i%CPHOTO==
'NON' .AND. i%LTR_ML .AND. .NOT. gmeb)
THEN
401 WRITE(iluout,*)
'*****************************************'
402 WRITE(iluout,*)
'* With option CPHOTO == NON '
403 WRITE(iluout,*)
'* And With MEB = F '
404 WRITE(iluout,*)
'* New radiative transfert TR_ML '
405 WRITE(iluout,*)
'* cant be used '
406 WRITE(iluout,*)
'*****************************************'
407 CALL
abor1_sfx(
'PGD_ISBA: WITH CPHOTO= NON LTR_ML MUST BE FALSE')
418 ALLOCATE(i%LCOVER (jpcover))
419 ALLOCATE(i%XZS (ilu))
420 ALLOCATE(ig%XLAT (ilu))
421 ALLOCATE(ig%XLON (ilu))
422 ALLOCATE(ig%XMESH_SIZE (ilu))
423 ALLOCATE(i%XZ0EFFJPDIR(ilu))
426 hprogram,
'NATURE', &
427 ig%CGRID, ig%XGRID_PAR, &
428 i%LCOVER, i%XCOVER, i%XZS, &
429 ig%XLAT, ig%XLON, ig%XMESH_SIZE, i%XZ0EFFJPDIR )
437 hprogram,nl,zaosip,zaosim,zaosjp,zaosjm,zho2ip,zho2im,zho2jp,zho2jm)
439 hprogram,nl,zsso_slope)
443 zaosip, zaosim, zaosjp, zaosjm, &
444 zho2ip, zho2im, zho2jp, zho2jm, &
453 hprogram,ilu,ycti,yctifiletype,limp_cti)
462 ALLOCATE(i%XSAND(ilu,i%NGROUND_LAYER))
466 IF(ysandfiletype==
'NETCDF')
THEN
467 CALL
abor1_sfx(
'Use another format than netcdf for sand input file with LIMP_SAND')
470 cfilein = adjustl(adjustr(ysand)//
'.txt')
473 cfilein_fa = adjustl(adjustr(ysand)//
'.fa')
476 cfilein_lfi = adjustl(ysand)
479 ysandfiletype,
'NATURE',
'ISBA ',
'READ ')
483 ysandfiletype,
'SAND',i%XSAND(:,1),iresp)
489 hprogram,
'sand fraction',
'NAT',ysand,ysandfiletype,xunif_sand,i%XSAND(:,1))
492 DO jlayer=1,i%NGROUND_LAYER
493 i%XSAND(:,jlayer) = i%XSAND(:,1)
500 ALLOCATE(i%XCLAY(ilu,i%NGROUND_LAYER))
504 IF(yclayfiletype==
'NETCDF')
THEN
505 CALL
abor1_sfx(
'Use another format than netcdf for clay input file with LIMP_CLAY')
508 cfilein = adjustl(adjustr(yclay)//
'.txt')
511 cfilein_fa = adjustl(adjustr(yclay)//
'.fa')
514 cfilein_lfi = adjustl(yclay)
517 yclayfiletype,
'NATURE',
'ISBA ',
'READ ')
521 yclayfiletype,
'CLAY',i%XCLAY(:,1),iresp)
527 hprogram,
'clay fraction',
'NAT',yclay,yclayfiletype,xunif_clay,i%XCLAY(:,1))
530 DO jlayer=1,i%NGROUND_LAYER
531 i%XCLAY(:,jlayer) = i%XCLAY(:,1)
539 IF(len_trim(ysocfiletype)/=0.OR.(xunif_soc_top/=xundef.AND.xunif_soc_sub/=xundef))
THEN
541 ALLOCATE(i%XSOC(ilu,i%NGROUND_LAYER))
545 IF((len_trim(ysoc_top)==0.AND.len_trim(ysoc_sub)/=0).OR.(len_trim(ysoc_top)/=0.AND.len_trim(ysoc_sub)==0))
THEN
547 WRITE(iluout,*)
'***********************************************************'
548 WRITE(iluout,*)
'* Error in soil organic carbon preparation *'
549 WRITE(iluout,*)
'* If used, sub and top soil input file must be given *'
550 WRITE(iluout,*)
'***********************************************************'
552 CALL
abor1_sfx(
'PGD_ISBA: TOP AND SUB SOC INPUT FILE REQUIRED')
559 IF(ysocfiletype==
'NETCDF')
THEN
560 CALL
abor1_sfx(
'Use another format than netcdf for organic carbon input file with LIMP_SOC')
563 cfilein = adjustl(adjustr(ysoc_top)//
'.txt')
566 cfilein_fa = adjustl(adjustr(ysoc_top)//
'.fa')
569 cfilein_lfi = adjustl(ysoc_top)
572 ysocfiletype,
'NATURE',
'ISBA ',
'READ ')
576 ysocfiletype,
'SOC_TOP',i%XSOC(:,1),iresp)
582 IF(ysocfiletype==
'NETCDF')
THEN
583 CALL
abor1_sfx(
'Use another format than netcdf for organic carbon input file with LIMP_SOC')
586 cfilein = adjustl(adjustr(ysoc_sub)//
'.txt')
589 cfilein_fa = adjustl(adjustr(ysoc_sub)//
'.fa')
592 cfilein_lfi = adjustl(ysoc_sub)
595 ysocfiletype,
'NATURE',
'ISBA ',
'READ ')
599 ysocfiletype,
'SOC_SUB',i%XSOC(:,2),iresp)
605 hprogram,
'organic carbon',
'NAT',ysoc_top,ysocfiletype,xunif_soc_top,i%XSOC(:,1))
607 hprogram,
'organic carbon',
'NAT',ysoc_sub,ysocfiletype,xunif_soc_sub,i%XSOC(:,2))
610 DO jlayer=2,i%NGROUND_LAYER
611 i%XSOC(:,jlayer) = i%XSOC(:,2)
617 ALLOCATE(i%XSOC(0,0))
624 IF(len_trim(yperm)/=0.OR.xunif_perm/=xundef)
THEN
626 ALLOCATE(i%XPERM(ilu))
632 IF(ypermfiletype==
'NETCDF')
THEN
633 CALL
abor1_sfx(
'Use another format than netcdf for permafrost input file with LIMP_PERM')
636 cfilein = adjustl(adjustr(yperm)//
'.txt')
639 cfilein_fa = adjustl(adjustr(yperm)//
'.fa')
642 cfilein_lfi = adjustl(yperm)
645 ypermfiletype,
'NATURE',
'ISBA ',
'READ ')
649 ypermfiletype,
'PERM',i%XPERM(:),iresp)
654 hprogram,
'permafrost mask',
'NAT',yperm,ypermfiletype,xunif_perm,i%XPERM(:))
667 IF(len_trim(ygw)/=0.OR.xunif_gw/=xundef)
THEN
675 IF(ygwfiletype==
'NETCDF')
THEN
676 CALL
abor1_sfx(
'Use another format than netcdf for groundwater input file with LIMP_GW')
679 cfilein = adjustl(adjustr(ygw)//
'.txt')
682 cfilein_fa = adjustl(adjustr(ygw)//
'.fa')
685 cfilein_lfi = adjustl(ygw)
688 ygwfiletype,
'NATURE',
'ISBA ',
'READ ')
692 ygwfiletype,
'GW',i%XGW(:),iresp)
697 hprogram,
'Groundwater bassin',
'NAT',ygw,ygwfiletype,xunif_gw,i%XGW(:))
712 IF((len_trim(yphfiletype)/=0.OR.xunif_ph/=xundef) .AND. (len_trim(yfertfiletype)/=0.OR.xunif_fert/=xundef))
THEN
715 ALLOCATE(i%XFERT(ilu))
720 hprogram,
'pH value',
'NAT',yph,yphfiletype,xunif_ph,i%XPH(:))
722 hprogram,
'fertilisation',
'NAT',yfert,yfertfiletype,xunif_fert,i%XFERT(:))
731 ALLOCATE(i%XRUNOFFB(ilu))
733 hprogram,
'subgrid runoff',
'NAT',yrunoffb,yrunoffbfiletype,xunif_runoffb,i%XRUNOFFB(:))
740 ALLOCATE(i%XWDRAIN(ilu))
742 hprogram,
'subgrid drainage',
'NAT',ywdrain,ywdrainfiletype,xunif_wdrain,i%XWDRAIN(:))
749 i%LECOCLIMAP = oecoclimap
765 CALL write_cover_tex_isba(i%NPATCH,i%NGROUND_LAYER,i%CISBA)
767 i%NPATCH,i%NGROUND_LAYER,i%CISBA,i%CPHOTO,i%XSOILGRID)
769 IF (lhook) CALL dr_hook(
'PGD_ISBA',1,zhook_handle)
subroutine get_surf_size_n(DTCO, U, HTYPE, KL)
subroutine pack_pgd(DTCO, U, HPROGRAM, HSURF, HGRID, PGRID_PAR, OCOVER, PCOVER, PZS, PLAT, PLON, PMESH_SIZE, PDIR)
subroutine read_nam_pgd_isba(HPROGRAM, KPATCH, KGROUND_LAYER, HISBA, HPEDOTF, HPHOTO, OTR_ML, PRM_PATCH, HCLAY, HCLAYFILETYPE, PUNIF_CLAY, OIMP_CLAY, HSAND, HSANDFILETYPE, PUNIF_SAND, OIMP_SAND, HSOC_TOP, HSOC_SUB, HSOCFILETYPE, PUNIF_SOC_TOP, PUNIF_SOC_SUB, OIMP_SOC, HCTI, HCTIFILETYPE, OIMP_CTI, HPERM, HPERMFILETYPE, PUNIF_PERM, OIMP_PERM, OMEB, HGW, HGWFILETYPE, PUNIF_GW, OIMP_GW, HRUNOFFB, HRUNOFFBFILETYPE, PUNIF_RUNOFFB, HWDRAIN, HWDRAINFILETYPE, PUNIF_WDRAIN, PSOILGRID, HPH, HPHFILETYPE, PUNIF_PH, HFERT, HFERTFILETYPE, PUNIF_FERT)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine get_aos_n(USS, HPROGRAM, KI, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM)
subroutine pgd_topd(I, UG, U, USS, HPROGRAM)
subroutine write_cover_tex_isba_par(DTCO, I, KPATCH, KLAYER, HISBA, HPHOTO, PSOILGRID)
subroutine pgd_field(DTCO, UG, U, USS, HPROGRAM, HFIELD, HAREA, HFILE, HFILETYPE, PUNIF, PFIELD, OPRESENT)
subroutine pgd_topo_index(DGU, DTCO, UG, U, USS, I, HPROGRAM, KLU, HCTI, HCTIFILETYPE, OIMP_CTI)
subroutine pgd_isba(DTCO, DTI, DGU, IG, I, UG, U, USS, HPROGRAM, OECOCLIMAP)
subroutine abor1_sfx(YTEXT)
subroutine get_sso_n(USS, HPROGRAM, KI, PSSO_SLOPE)
subroutine end_io_surf_n(HPROGRAM)
subroutine read_nam_pgd_isba_meb(HPROGRAM, KLUOUT, OMEB_PATCH, OFORC_MEASURE, OMEB_LITTER, OMEB_GNDRES)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine pack_pgd_isba(DTCO, IG, I, U, HPROGRAM, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PSSO_SLOPE)
subroutine pgd_isba_par(DTCO, DGU, UG, U, USS, DTI, I, IG, HPROGRAM)