6 SUBROUTINE init_top (IO, S, K, NK, NP, KLUOUT, PM )
67 INTEGER,
INTENT(IN) :: KLUOUT
69 REAL,
DIMENSION(:),
INTENT(INOUT) :: PM
77 REAL,
DIMENSION(SIZE(PM)) :: ZD_TOP, ZWSAT_AVG, ZWD0_AVG
80 REAL :: ZXI, ZPHI, ZNU, ZTI_MEAN, ZTI_MIN, ZTI_MAX, ZTI_STD
86 REAL :: ZFTOT, ZYMAX, ZYMIN
87 REAL :: ZGYMAX, ZGYMIN
94 REAL :: ZXSAT_IND, ZYSAT, ZY0, ZDMOY, ZXMOY, ZFMED, ZF0
103 REAL :: ZG, ZGYSAT, ZGY0
108 REAL :: ZD0, ZPAS, ZCOR
112 INTEGER :: IFLG, IFLGST
117 REAL :: ZNO, ZAR, ZTOT
119 REAL :: ZFUP, ZFDOWN, ZQUP, ZQDOWN, ZSLOPEQ, ZWUP, ZWDOWN
121 INTEGER,
DIMENSION (1):: ID
123 INTEGER :: INI, JI, IND, JSI_MIN, JSI_MAX, IPAS, &
125 REAL(KIND=JPRB) :: ZHOOK_HANDLE
140 inl = io%NGROUND_LAYER
141 ipas =
SIZE(s%XTAB_FSAT,2)
153 IF (io%CISBA ==
'DIF')
THEN 160 IF (pk%NSIZE_P == 0 ) cycle
167 zd_top(imask) = zd_top(imask) + pk%XPATCH(ji) * pk%XSOILWGHT
176 zwsat_avg(:)=zwsat_avg(:)/zd_top(:)
177 zwd0_avg(:)=zwd0_avg(:)/zd_top(:)
187 IF (pk%NSIZE_P == 0 ) cycle
193 zd_top(imask)=zd_top(imask) + pk%XRUNOFFD(ji) * pk%XPATCH(ji)
199 zwsat_avg(:) = k%XWSAT(:,1)
200 zwd0_avg(:) = k%XWD0 (:,1)
216 IF(s%XTI_MEAN(ji)==
xundef)
THEN 221 s%XTAB_FSAT(ji,:)=0.0
223 s%XTAB_QTOP(ji,:)=0.0
241 zti_mean=s%XTI_MEAN(ji)
242 zti_min =s%XTI_MIN (ji)
243 zti_max =s%XTI_MAX (ji)
244 zti_std =s%XTI_STD (ji)
245 zti_skew=s%XTI_SKEW(ji)
250 IF(zti_skew<=0.2)
THEN 254 WRITE(kluout,*)
'TI_SKEW is too low or negatif (=',zti_skew,
'),' 255 WRITE(kluout,*)
'then PHI is too big for the grid-cell',ji,
'So,GAMMA(PHI) -> +inf.' 256 WRITE(kluout,*)
'The applied solution is to put TI_SKEW = 0.2' 258 WRITE(kluout,*)
'In addition TI_STD is too low (=',zti_std,
'),' 259 WRITE(kluout,*)
'The applied solution is to put TI_STD = 1.0' 265 zxi = zti_skew*zti_std/
x2 266 zphi = (zti_std/zxi)**
x2 270 zxi = zti_skew*zti_std/
x2 271 zphi = (zti_std/zxi)**
x2 275 znu = zti_mean-zphi*zxi
279 pm(ji) =(zwsat_avg(ji)-zwd0_avg(ji))*zd_top(ji)/
x4 286 zd0 = (zwsat_avg(ji)-zwd0_avg(ji))*zd_top(ji)/pm(ji)
298 zymin = (zti_min-znu)/zxi
299 zymax = (zti_max-znu)/zxi
303 zcor = abs(min(0.0,zymin))
305 zymin = max(0.0,zymin+zcor)
316 CALL dgam(zphi,zymin,10.,zg,zgymin,iflg,iflgst)
321 WRITE(kluout,*)
'GRID-CELL =',ji,
'FLGST= ',iflgst,
'PHI= ',zphi,
'YMIN= ' 322 CALL abor1_sfx(
'INIT_TOP: (1) PROBLEM WITH DGAM FUNCTION')
327 CALL dgam(zphi,zymax,10.,zg,zgymax,iflg,iflgst)
332 WRITE(kluout,*)
'GRID-CELL =',ji,
'FLGST= ',iflgst,
'PHI= ',zphi,
'YMAX= ' 333 CALL abor1_sfx(
'INIT_TOP: (2) PROBLEM WITH DGAM FUNCTION')
342 s%XTAB_WTOP(ji,1) = zwsat_avg(ji)
343 s%XTAB_FSAT(ji,1) = 1.0
344 s%XTAB_QTOP(ji,1) = 0.0
346 s%XTAB_WTOP(ji,ipas) = zwd0_avg(ji)
347 s%XTAB_FSAT(ji,ipas) = 0.0
348 s%XTAB_QTOP(ji,ipas) = 0.0
354 zpas = (zti_max-zti_min)/
REAL(ipas-1)
361 DO ind=jsi_min,jsi_max
381 zxsat_ind=zti_min+
REAL(ind-1)*ZPAS
385 zysat=(zxsat_ind-znu)/zxi
386 zy0 =((zxsat_ind-zd0)-znu)/zxi
390 zysat=max(zymin,min(zysat+zcor,zymax))
391 zy0 =max(zymin,min(zy0 +zcor,zymax))
395 CALL dgam(zphi,zysat,10.,zg,zgysat,iflg,iflgst)
400 WRITE(kluout,*)
'GRID-CELL= ',ji,
'FLGST= ',iflgst,
'PHI= ',zphi
'YSAT= ' 401 CALL abor1_sfx(
'INIT_TOP: (3) PROBLEM WITH DGAM FUNCTION')
406 CALL dgam(zphi,zy0,10.,zg,zgy0,iflg,iflgst)
411 WRITE(kluout,*)
'GRID-CELL= ',ji,
'FLGST= ',iflgst,
'PHI= ',zphi
'Y0= ' 412 CALL abor1_sfx(
'INIT_TOP: (4) PROBLEM WITH DGAM FUNCTION')
417 s%XTAB_FSAT(ji,ind)=max(0.0,(zgymax-zgysat)/zftot)
421 zf0=max(0.0,(zgy0-zgymin)/zftot)
425 zfmed=(1.0-s%XTAB_FSAT(ji,ind)-zf0)
431 zxmoy = znu+zxi*(zphi-zcor+(exp(-zy0)*(zy0**(zphi/
x2))*(zy0**
436 zxmoy =max((zxsat_ind-zd0),min(zxsat_ind,zxmoy))
440 zdmoy = zfmed*(zxsat_ind-zxmoy)+zf0*zd0
446 zdmoy = max(0.0,min(zdmoy,zd0))
450 s%XTAB_WTOP(ji,ind) = zwsat_avg(ji)-(pm(ji)*zdmoy/zd_top(ji))
454 s%XTAB_QTOP(ji,ind) = zfmed*pm(ji)*exp(-zxsat_ind)
468 IF(s%XTAB_WTOP(ji,2)==zwsat_avg(ji))
THEN 470 zfup=s%XTAB_FSAT(ji,1)
471 zwup=s%XTAB_WTOP(ji,1)
472 zqup=s%XTAB_QTOP(ji,1)
474 id(:)=
maxloc(s%XTAB_WTOP(ji,:),s%XTAB_WTOP(ji,:)<zwsat_avg(ji))
476 zfdown=s%XTAB_FSAT(ji,id(1))
477 zwdown=s%XTAB_WTOP(ji,id(1))
478 zqdown=s%XTAB_QTOP(ji,id(1))
480 zslopew=(zwup-zwdown)/(zfup-zfdown)
481 zslopeq=(zqup-zqdown)/(zfup-zfdown)
484 s%XTAB_WTOP(ji,ind)=zwdown+(s%XTAB_FSAT(ji,ind)-zfdown)*zslopew
485 s%XTAB_QTOP(ji,ind)=zqdown+(s%XTAB_FSAT(ji,ind)-zfdown)*zslopeq
492 WHERE(s%XTAB_FSAT(ji,:)<=0.0 )
493 s%XTAB_WTOP(ji,:)=zwd0_avg(ji)
494 s%XTAB_QTOP(ji,:)=0.0
496 WHERE(s%XTAB_WTOP(ji,:)<=zwd0_avg(ji))
497 s%XTAB_FSAT(ji,:)=0.0
498 s%XTAB_QTOP(ji,:)=0.0
503 WRITE(kluout,*)
'-------------------TOPMODEL SUM-UP-------------------------' 504 WRITE(kluout,*)
'Number of grid-cells ',ini,
'Number of Topmodel points',int
506 WRITE(kluout,*)
'Percentage of non TOPMODEL grid-cells',(100.*zno/float
509 WRITE(kluout,*)
'Percentage of arranged (TI-SKE=0.2) grid-cells',(100.*zar
511 WRITE(kluout,*)
'-----------------------------------------------------------' subroutine init_top(IO, S, K, NK, NP, KLUOUT, PM)
subroutine abor1_sfx(YTEXT)
subroutine dgam(PA, PX, PACC, PG, PGSTAR, KFLG, KFLGST)