1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
|
#include "FIZHI_OPTIONS.h" |
5 |
SUBROUTINE TILE ( |
SUBROUTINE TILE ( |
6 |
I NCH, DTSTEP, ITYP, TRAINL,TRAINC, TSNOW, UM, |
I NCH, DTSTEP, ITYP, TRAINL,TRAINC, TSNOW, UM, |
7 |
I ETURB, DEDQA, DEDTC, HSTURB, DHSDQA, DHSDTC, |
I ETURB, DEDQA, DEDTC, HSTURB, DHSDQA, DHSDTC, |
31 |
C**** |
C**** |
32 |
INTEGER NCH |
INTEGER NCH |
33 |
INTEGER ITYP(NCH) |
INTEGER ITYP(NCH) |
34 |
REAL DTSTEP, TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), UM(NCH), |
_RL DTSTEP, TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), UM(NCH), |
35 |
& ETURB(NCH), DEDQA(NCH), HSTURB(NCH), DHSDTC(NCH), |
& ETURB(NCH), DEDQA(NCH), HSTURB(NCH), DHSDTC(NCH), |
36 |
& TM (NCH), CD(NCH), SUNANG(NCH), DHSDQA(NCH), |
& TM (NCH), CD(NCH), SUNANG(NCH), DHSDQA(NCH), |
37 |
& QM (NCH), PARDIR(NCH), PARDIF(NCH), SWNET(NCH), |
& QM (NCH), PARDIR(NCH), PARDIF(NCH), SWNET(NCH), |
38 |
& HLWDWN(NCH), PSUR(NCH), ZLAI(NCH), GREEN(NCH), |
& HLWDWN(NCH), PSUR(NCH), ZLAI(NCH), GREEN(NCH), |
39 |
& Z2(NCH), SQSCAT(NCH), DEDTC(NCH) |
& Z2(NCH), SQSCAT(NCH), DEDTC(NCH) |
40 |
REAL RSOIL1(NCH), RSOIL2(NCH), RDC(NCH), U2FAC(NCH), |
_RL RSOIL1(NCH), RSOIL2(NCH), RDC(NCH), U2FAC(NCH), |
41 |
& QSATTC(NCH), DQSDTC(NCH), ALWRAD(NCH), BLWRAD(NCH), |
& QSATTC(NCH), DQSDTC(NCH), ALWRAD(NCH), BLWRAD(NCH), |
42 |
& TC(NCH), TD(NCH), QA(NCH), BOMB(NCH), |
& TC(NCH), TD(NCH), QA(NCH), BOMB(NCH), |
43 |
& SWET1(NCH), SWET2(NCH), SWET3(NCH), CAPAC(NCH), |
& SWET1(NCH), SWET2(NCH), SWET3(NCH), CAPAC(NCH), |
44 |
& SNOW(NCH), EVAP(NCH), SHFLUX(NCH), RUNOFF(NCH) |
& SNOW(NCH), EVAP(NCH), SHFLUX(NCH), RUNOFF(NCH) |
45 |
REAL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH), |
_RL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH), |
46 |
& STRDG1(NCH), STRDG2(NCH), STRDG3(NCH), STRDG4(NCH), |
& STRDG1(NCH), STRDG2(NCH), STRDG3(NCH), STRDG4(NCH), |
47 |
& STRDG5(NCH), STRDG6(NCH), STRDG7(NCH), STRDG8(NCH), |
& STRDG5(NCH), STRDG6(NCH), STRDG7(NCH), STRDG8(NCH), |
48 |
& STRDG9(NCH), |
& STRDG9(NCH), |
50 |
& RUNSRF(NCH), FWSOIL(NCH) |
& RUNSRF(NCH), FWSOIL(NCH) |
51 |
C**** |
C**** |
52 |
INTEGER ChNo |
INTEGER ChNo |
53 |
REAL SWET(nch,NLAY), VGPSAT(NTYPS), VGCSAT (NTYPS), |
_RL SWET(nch,NLAY), VGPSAT(NTYPS), VGCSAT (NTYPS), |
54 |
& VGZDEP(NLAY,NTYPS), VGSLOP(NTYPS), DELTC, |
& VGZDEP(NLAY,NTYPS), VGSLOP(NTYPS), DELTC, |
55 |
& DELEA, VGPH1(NTYPS), VGPH2(NTYPS), |
& DELEA, VGPH1(NTYPS), VGPH2(NTYPS), |
56 |
& VGRPLN(NTYPS), CSOIL0(NTYPS), WSOI12, |
& VGRPLN(NTYPS), CSOIL0(NTYPS), WSOI12, |
58 |
& DELZ23(NTYPS) |
& DELZ23(NTYPS) |
59 |
C**** |
C**** |
60 |
|
|
61 |
REAL PHLAY(nch,NLAY), AKLAY(nch,NLAY), SWET12(nch), |
_RL PHLAY(nch,NLAY), AKLAY(nch,NLAY), SWET12(nch), |
62 |
& CSOIL(nch), |
& CSOIL(nch), |
63 |
& RCUN(nch), VPDSTR(nch), ESATTX(nch), |
& RCUN(nch), VPDSTR(nch), ESATTX(nch), |
64 |
& VPDSTX(nch), VGBEEX(nch) |
& VPDSTX(nch), VGBEEX(nch) |
65 |
REAL EMAXRT(nch), VGWMAX(NLAY,NTYPS), FTEMP(nch), |
_RL EMAXRT(nch), VGWMAX(NLAY,NTYPS), FTEMP(nch), |
66 |
& PHR(nch), SOILCO(nch), RC(nch), |
& PHR(nch), SOILCO(nch), RC(nch), |
67 |
& EAX(nch), TX(nch), RCX(nch), |
& EAX(nch), TX(nch), RCX(nch), |
68 |
& DRCDTC(nch), SATCAP(nch), PAR(nch), |
& DRCDTC(nch), SATCAP(nch), PAR(nch), |
69 |
& PDIR(nch), DUMMY(nch) |
& PDIR(nch), DUMMY(nch) |
70 |
REAL FTEMPX(nch), DRCDEA(nch), VGPSAX(nch), VGCSAX(nch), |
_RL FTEMPX(nch), DRCDEA(nch), VGPSAX(nch), VGCSAX(nch), |
71 |
& VGZDEX(NLAY,nch), VGSLOX(nch), VGPH1X(nch), |
& VGZDEX(NLAY,nch), VGSLOX(nch), VGPH1X(nch), |
72 |
& VGPH2X(nch), VGRPLX(nch) |
& VGPH2X(nch), VGRPLX(nch) |
73 |
REAL DEDEA(nch), DHSDEA(nch), EM(nch), ESATTC(nch), |
_RL DEDEA(nch), DHSDEA(nch), EM(nch), ESATTC(nch), |
74 |
& DESDTC(nch), EA(nch), RA(nch), ALHX(nch), |
& DESDTC(nch), EA(nch), RA(nch), ALHX(nch), |
75 |
& WETEQ1(nch), WETEQ2(nch), |
& WETEQ1(nch), WETEQ2(nch), |
76 |
& RX1(nch), RX2(nch), SNWFRC(nch), POTFRC(nch), |
& RX1(nch), RX2(nch), SNWFRC(nch), POTFRC(nch), |
77 |
& ESNFRC(nch), EIRFRC(nch), FCAN(nch), EPFRC, |
& ESNFRC(nch), EIRFRC(nch), FCAN(nch), EPFRC, |
78 |
& DEFCIT, EADJST, RTBS |
& DEFCIT, EADJST, RTBS |
79 |
real cmpbug |
_RL cmpbug |
80 |
|
|
81 |
C**** |
C**** |
82 |
DATA VGWMAX /8.4, 621.6, 840.0, |
DATA VGWMAX /8.4, 621.6, 840.0, |
186 |
|
|
187 |
DO 100 ChNo = 1, NCH |
DO 100 ChNo = 1, NCH |
188 |
|
|
189 |
DEDQA(CHNO) = MAX( DEDQA(CHNO), 500./ALHE ) |
DEDQA(CHNO) = MAX( DEDQA(CHNO), 500. _d 0/ALHE ) |
190 |
DEDTC(CHNO) = MAX( DEDTC(CHNO), 0. ) |
DEDTC(CHNO) = MAX( DEDTC(CHNO), 0. _d 0) |
191 |
DHSDQA(CHNO) = MAX( DHSDQA(CHNO), 0. ) |
DHSDQA(CHNO) = MAX( DHSDQA(CHNO), 0. _d 0) |
192 |
DHSDTC(CHNO) = MAX( DHSDTC(CHNO), -10. ) |
DHSDTC(CHNO) = MAX( DHSDTC(CHNO), -10. _d 0) |
193 |
|
|
194 |
EM(CHNO) = QM(CHNO) * PSUR(CHNO) / EPSILON |
EM(CHNO) = QM(CHNO) * PSUR(CHNO) / EPSILON |
195 |
EA(CHNO) = QA(CHNO) * PSUR(CHNO) / EPSILON |
EA(CHNO) = QA(CHNO) * PSUR(CHNO) / EPSILON |
205 |
RA(CHNO) = ONE / ( CD(CHNO) * UM(CHNO) ) |
RA(CHNO) = ONE / ( CD(CHNO) * UM(CHNO) ) |
206 |
SATCAP(ChNo) = 0.1 * ZLAI(ChNo) |
SATCAP(ChNo) = 0.1 * ZLAI(ChNo) |
207 |
CSOIL(CHNO) = CSOIL0(ITYP(ChNo)) |
CSOIL(CHNO) = CSOIL0(ITYP(ChNo)) |
208 |
SWET(ChNo,SFCLY ) = max( min(SWET1(ChNo),1.), 0.) |
SWET(ChNo,SFCLY ) = max( min(SWET1(ChNo),1. _d 0), 0. _d 0) |
209 |
SWET(ChNo,ROOTLY) = max( min(SWET2(ChNo),1.), 0.) |
SWET(ChNo,ROOTLY) = max( min(SWET2(ChNo),1. _d 0), 0. _d 0) |
210 |
SWET(ChNo,RECHLY) = max( min(SWET3(ChNo),1.), 0.) |
SWET(ChNo,RECHLY) = max( min(SWET3(ChNo),1. _d 0), 0. _d 0) |
211 |
CAPAC(CHNO) = max( min(CAPAC(ChNo),SATCAP(CHNO)), 0.) |
CAPAC(CHNO) = max( min(CAPAC(ChNo),SATCAP(CHNO)), 0. _d 0) |
212 |
C**** |
C**** |
213 |
|
|
214 |
SNWFRC(CHNO) = SNOW(CHNO) / ( SNOW(CHNO) + SNWMID(ITYP(CHNO)) ) |
SNWFRC(CHNO) = SNOW(CHNO) / ( SNOW(CHNO) + SNWMID(ITYP(CHNO)) ) |
215 |
FCAN(CHNO) = MIN( 1., MAX(0.,CAPAC(ChNo)/SATCAP(ChNo)) ) |
FCAN(CHNO) = MIN( 1. _d 0, MAX(0. _d 0,CAPAC(ChNo)/SATCAP(ChNo)) ) |
216 |
POTFRC(CHNO)=1.-(1.-SNWFRC(CHNO))*(1.-FCAN(CHNO)) |
POTFRC(CHNO)=1.-(1.-SNWFRC(CHNO))*(1.-FCAN(CHNO)) |
217 |
|
|
218 |
|
|
231 |
FWSOIL(CHNO) = 0. |
FWSOIL(CHNO) = 0. |
232 |
100 CONTINUE |
100 CONTINUE |
233 |
|
|
|
|
|
234 |
C**** |
C**** |
235 |
C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
236 |
C**** STEP 1: COMPUTE EFFECTIVE RESISTANCE RC FOR ENERGY BALANCE. |
C**** STEP 1: COMPUTE EFFECTIVE RESISTANCE RC FOR ENERGY BALANCE. |
363 |
ALHX(CHNO) = (1.-ESNFRC(CHNO))*ALHE + ESNFRC(CHNO)*ALHS |
ALHX(CHNO) = (1.-ESNFRC(CHNO))*ALHE + ESNFRC(CHNO)*ALHS |
364 |
200 CONTINUE |
200 CONTINUE |
365 |
|
|
|
|
|
366 |
CALL FLUXES ( |
CALL FLUXES ( |
367 |
I NCH, ITYP, DTSTEP, ESATTC, DESDTC, ALHX, |
I NCH, ITYP, DTSTEP, ESATTC, DESDTC, ALHX, |
368 |
I ETURB, DEDEA, DEDTC, HSTURB, DHSDEA, DHSDTC, |
I ETURB, DEDEA, DEDTC, HSTURB, DHSDEA, DHSDTC, |
513 |
C**** |
C**** |
514 |
INTEGER NCH |
INTEGER NCH |
515 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
516 |
REAL TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), SATCAP(NCH), |
_RL TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), SATCAP(NCH), |
517 |
& WMAX(NLAY,NTYPS), TC(NCH), CSOIL(NCH), CAPAC(NCH), |
& WMAX(NLAY,NTYPS), TC(NCH), CSOIL(NCH), CAPAC(NCH), |
518 |
& SNOW(NCH), SWET1(NCH), RUNOFF(NCH), SMELT(NCH), |
& SNOW(NCH), SWET1(NCH), RUNOFF(NCH), SMELT(NCH), |
519 |
& RUNSRF(NCH), FWSOIL(NCH), WETEQ1(NCH), WETINT |
& RUNSRF(NCH), FWSOIL(NCH), WETEQ1(NCH), WETINT |
520 |
REAL DTSTEP, SNOWM, WATADD, CAVAIL, THRUC, WRUNC, WRUNL, |
_RL DTSTEP, SNOWM, WATADD, CAVAIL, THRUC, WRUNC, WRUNL, |
521 |
& TIMFRL, TIMFRC, FWETL, FWETC, THRU1, THRU2, THRUL, XTCORR, |
& TIMFRL, TIMFRC, FWETL, FWETC, THRU1, THRU2, THRUL, XTCORR, |
522 |
& WETFRC |
& WETFRC |
523 |
C**** |
C**** |
533 |
SNOWM = 0. |
SNOWM = 0. |
534 |
IF( SNOW(CHNO).GT.0. .AND. TC(CHNO).GT.TF ) THEN |
IF( SNOW(CHNO).GT.0. .AND. TC(CHNO).GT.TF ) THEN |
535 |
SNOWM = MIN( SNOW(ChNo), |
SNOWM = MIN( SNOW(ChNo), |
536 |
& MAX( 0., (TC(ChNo)-TF)*CSOIL(ChNo)/ALHM ) ) |
& MAX( 0. _d 0, (TC(ChNo)-TF)*CSOIL(ChNo)/ALHM ) ) |
537 |
IF( SNOWM .EQ. SNOW(CHNO) ) THEN |
IF( SNOWM .EQ. SNOW(CHNO) ) THEN |
538 |
TC(ChNo) = TC(ChNo) - SNOWM * ALHM / CSOIL(ChNo) |
TC(ChNo) = TC(ChNo) - SNOWM * ALHM / CSOIL(ChNo) |
539 |
SNOW(CHNO)=0. |
SNOW(CHNO)=0. |
554 |
C**** to reflect the effective loss of "position memory" when storm |
C**** to reflect the effective loss of "position memory" when storm |
555 |
C**** covers entire grid square.) |
C**** covers entire grid square.) |
556 |
|
|
557 |
XTCORR= (1.-TIMFRL) * MIN( 1.,(CAPAC(CHNO)/SATCAP(CHNO))/FWETL ) |
XTCORR= (1.-TIMFRL) * MIN( 1. _d 0,(CAPAC(CHNO)/SATCAP(CHNO))/FWETL ) |
558 |
|
|
559 |
C**** |
C**** |
560 |
C**** Fill interception reservoir with precipitation. |
C**** Fill interception reservoir with precipitation. |
588 |
C**** Determine XTCORR, the fraction of a storm that falls on a previously |
C**** Determine XTCORR, the fraction of a storm that falls on a previously |
589 |
C**** wet surface due to the time correlation of precipitation position. |
C**** wet surface due to the time correlation of precipitation position. |
590 |
|
|
591 |
XTCORR= (1.-TIMFRC) * MIN( 1.,(CAPAC(CHNO)/SATCAP(CHNO))/FWETC ) |
XTCORR= (1.-TIMFRC) * MIN( 1. _d 0,(CAPAC(CHNO)/SATCAP(CHNO))/FWETC ) |
592 |
|
|
593 |
C**** |
C**** |
594 |
C**** Fill interception reservoir with precipitation. |
C**** Fill interception reservoir with precipitation. |
690 |
INTEGER NCH |
INTEGER NCH |
691 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
692 |
|
|
693 |
REAL SUNANG(NCH), PDIR(NCH), PAR(NCH), ZLAI(NCH), |
_RL SUNANG(NCH), PDIR(NCH), PAR(NCH), ZLAI(NCH), |
694 |
& SQSCAT(NCH), GREEN(NCH), RCUN(NCH) |
& SQSCAT(NCH), GREEN(NCH), RCUN(NCH) |
695 |
|
|
696 |
REAL VGCHIL(NTYPS), VGZMEW(NTYPS), |
_RL VGCHIL(NTYPS), VGZMEW(NTYPS), |
697 |
& VGRST1(NTYPS), VGRST2(NTYPS), VGRST3(NTYPS) |
& VGRST1(NTYPS), VGRST2(NTYPS), VGRST3(NTYPS) |
698 |
|
|
699 |
REAL RHO4, EXTK1, EXTK2, |
_RL RHO4, EXTK1, EXTK2, |
700 |
& RCINV, GAMMA, EKAT, DUM1, |
& RCINV, GAMMA, EKAT, DUM1, |
701 |
& DUM2, DUM3, AA, BB, |
& DUM2, DUM3, AA, BB, |
702 |
& ZK, CC |
& ZK, CC |
742 |
|
|
743 |
C**** Bound extinction coefficient by 50./ZLAI: |
C**** Bound extinction coefficient by 50./ZLAI: |
744 |
|
|
745 |
ZK = PDIR(ChNo) *MIN( EXTK1, 50./ZLAI(ChNo) ) + |
ZK = PDIR(ChNo) *MIN( EXTK1, 50. _d 0/ZLAI(ChNo) ) + |
746 |
& (ONE-PDIR(ChNo))*MIN( EXTK2, 50./ZLAI(ChNo) ) |
& (ONE-PDIR(ChNo))*MIN( EXTK2, 50. _d 0/ZLAI(ChNo) ) |
747 |
|
|
748 |
C**** Now compute unstressed canopy resistance: |
C**** Now compute unstressed canopy resistance: |
749 |
|
|
788 |
INTEGER NCH |
INTEGER NCH |
789 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
790 |
|
|
791 |
REAL WET(NCH), PHR(NCH), SOILCO(NCH), VGPSAX(NCH), |
_RL WET(NCH), PHR(NCH), SOILCO(NCH), VGPSAX(NCH), |
792 |
& VGCSAX(NCH), VGBEEX(NCH), DELZ(NTYPS), WETEQ(NCH), |
& VGCSAX(NCH), VGBEEX(NCH), DELZ(NTYPS), WETEQ(NCH), |
793 |
& WEXPB, WET0, PHEQ |
& WEXPB, WET0, PHEQ |
794 |
|
|
795 |
DO 100 ChNo = 1, NCH |
DO 100 ChNo = 1, NCH |
796 |
|
|
797 |
WET0 = MAX(WET(CHNO),0.01) |
WET0 = MAX(WET(CHNO),0.01 _d 0) |
798 |
WEXPB = WET0**VGBEEX(ChNo) |
WEXPB = WET0**VGBEEX(ChNo) |
799 |
|
|
800 |
PHR(ChNo) = VGPSAX(ChNo) / WEXPB |
PHR(ChNo) = VGPSAX(ChNo) / WEXPB |
838 |
INTEGER NCH |
INTEGER NCH |
839 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
840 |
|
|
841 |
REAL DTSTEP, ESATTC(NCH), DESDTC(NCH), ALHX(NCH), |
_RL DTSTEP, ESATTC(NCH), DESDTC(NCH), ALHX(NCH), |
842 |
& ETURB(NCH), DEDEA(NCH), DEDTC(NCH), |
& ETURB(NCH), DEDEA(NCH), DEDTC(NCH), |
843 |
& HSTURB(NCH), DHSDEA(NCH), DHSDTC(NCH), |
& HSTURB(NCH), DHSDEA(NCH), DHSDTC(NCH), |
844 |
& RC(NCH), DRCDEA(NCH), DRCDTC(NCH), |
& RC(NCH), DRCDEA(NCH), DRCDTC(NCH), |
849 |
& SWET1(NCH,NLAY), SNOW(NCH), |
& SWET1(NCH,NLAY), SNOW(NCH), |
850 |
& RUNOFF(NCH), EVAP(NCH), SHFLUX(NCH), SMELT(NCH), |
& RUNOFF(NCH), EVAP(NCH), SHFLUX(NCH), SMELT(NCH), |
851 |
& HLWUP(NCH), BOMB(NCH) |
& HLWUP(NCH), BOMB(NCH) |
852 |
REAL STRDG1(NCH),STRDG2(NCH),STRDG3(NCH),STRDG4(NCH) |
_RL STRDG1(NCH),STRDG2(NCH),STRDG3(NCH),STRDG4(NCH) |
853 |
REAL STRDG5(NCH),STRDG6(NCH),STRDG7(NCH),STRDG8(NCH) |
_RL STRDG5(NCH),STRDG6(NCH),STRDG7(NCH),STRDG8(NCH) |
854 |
REAL STRDG9(NCH) |
_RL STRDG9(NCH) |
855 |
|
|
856 |
REAL HLWTC, CDEEPS, Q0, RHOAIR, CONST, DHLWTC, |
_RL HLWTC, CDEEPS, Q0, RHOAIR, CONST, DHLWTC, |
857 |
& EPLANT, A11, A12, A21, A22, F0, |
& EPLANT, A11, A12, A21, A22, F0, |
858 |
& DEA, DTC, SNLEFT, Q0X, Q0SNOW, |
& DEA, DTC, SNLEFT, Q0X, Q0SNOW, |
859 |
& EANEW, ESATNW, EHARMN, DETERM, DENOM |
& EANEW, ESATNW, EHARMN, DETERM, DENOM |
860 |
|
|
861 |
LOGICAL DEBUG, CHOKE |
LOGICAL CHOKE |
862 |
DATA DEBUG /.FALSE./ |
_RL deepfac(ntyps) |
|
real deepfac(ntyps) |
|
863 |
DATA deepfac /1.,1.,1.,1.,1.,1.,1.,1.,1.,1./ |
DATA deepfac /1.,1.,1.,1.,1.,1.,1.,1.,1.,1./ |
864 |
C**** |
C**** |
865 |
C**** ------------------------------------------------------------------- |
C**** ------------------------------------------------------------------- |
874 |
C**** |
C**** |
875 |
C**** Compute matrix elements A11, A22, AND Q0 (energy balance equation). |
C**** Compute matrix elements A11, A22, AND Q0 (energy balance equation). |
876 |
C**** |
C**** |
877 |
|
|
878 |
A11 = CSOIL(ChNo)/DTSTEP + |
A11 = CSOIL(ChNo)/DTSTEP + |
879 |
& DHLWTC + |
& DHLWTC + |
880 |
& DHSDTC(ChNo) + |
& DHSDTC(ChNo) + |
919 |
C**** |
C**** |
920 |
|
|
921 |
A21 = -DEDTC(ChNo)*RC(ChNo) + |
A21 = -DEDTC(ChNo)*RC(ChNo) + |
922 |
& max(0., CONST*DESDTC(ChNo) - EHARMN*DRCDTC(ChNo) ) |
& max(0. _d 0, CONST*DESDTC(ChNo) - EHARMN*DRCDTC(ChNo) ) |
923 |
A22 = -( RC(ChNo)*DEDEA(ChNo) + |
A22 = -( RC(ChNo)*DEDEA(ChNo) + |
924 |
& max( 0., CONST + EHARMN*DRCDEA(ChNo) ) ) |
& max( 0. _d 0, CONST + EHARMN*DRCDEA(ChNo) ) ) |
925 |
|
|
926 |
F0 = RC(ChNo) * (ETURB(ChNo) - EPLANT) |
F0 = RC(ChNo) * (ETURB(ChNo) - EPLANT) |
927 |
DETERM = MIN( A12*A21/(A11*A22) - 1., -0.1 ) |
DETERM = MIN( A12*A21/(A11*A22) - 1., -0.1 _d 0) |
928 |
DEA = ( Q0*A21 - A11*F0 ) / ( DETERM * A11*A22 ) |
DEA = ( Q0*A21 - A11*F0 ) / ( DETERM * A11*A22 ) |
929 |
DTC = ( Q0 - A12*DEA ) / A11 |
DTC = ( Q0 - A12*DEA ) / A11 |
930 |
|
|
1107 |
|
|
1108 |
C**** Make sure EA remains positive |
C**** Make sure EA remains positive |
1109 |
|
|
1110 |
EA(CHNO) = MAX(EA(CHNO), 0.0) |
EA(CHNO) = MAX(EA(CHNO), 0.0 _d 0) |
1111 |
|
|
1112 |
200 CONTINUE |
200 CONTINUE |
1113 |
|
|
1137 |
C**** |
C**** |
1138 |
INTEGER NCH |
INTEGER NCH |
1139 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
1140 |
REAL ESATTC(NCH), EA(NCH), VPDSTR(NCH) |
_RL ESATTC(NCH), EA(NCH), VPDSTR(NCH) |
1141 |
REAL VGDFAC(NTYPS) |
c _RL VGDFAC(NTYPS) |
1142 |
C**** |
C**** |
1143 |
DATA VGDFAC / .0273, .0357, .0310, .0238, |
c DATA VGDFAC / .0273, .0357, .0310, .0238, |
1144 |
5 .0275, .0275, 0., 0., |
c 5 .0275, .0275, 0., 0., |
1145 |
9 0., 0. / |
c 9 0., 0. / |
1146 |
C**** |
C**** |
1147 |
C**** ----------------------------------------------------------------- |
C**** ----------------------------------------------------------------- |
1148 |
|
|
1149 |
DO 100 ChNo = 1, NCH |
DO 100 ChNo = 1, NCH |
1150 |
C**** |
C**** |
1151 |
c VPDSTR(ChNo) = 1. - (ESATTC(ChNo)-EA(ChNo)) * VGDFAC(ITYP(ChNo)) |
c VPDSTR(ChNo) = 1. - (ESATTC(ChNo)-EA(ChNo)) * VGDFAC(ITYP(ChNo)) |
1152 |
c VPDSTR (ChNo) = MIN( 1., MAX( VPDSTR(ChNo), 1.E-10 ) ) |
c VPDSTR (ChNo) = MIN( 1. _d 0, MAX( VPDSTR(ChNo), 1. _d -10 ) ) |
1153 |
VPDSTR(CHNO) = 1. |
VPDSTR(CHNO) = 1. |
1154 |
C**** |
C**** |
1155 |
100 CONTINUE |
100 CONTINUE |
1178 |
C**** |
C**** |
1179 |
INTEGER NCH |
INTEGER NCH |
1180 |
INTEGER ITYP(NCH), ChNo, TypPtr |
INTEGER ITYP(NCH), ChNo, TypPtr |
1181 |
REAL TC(NCH), FTEMP(NCH) |
_RL TC(NCH), FTEMP(NCH) |
1182 |
REAL VGTLL(MemFac*NTYPS), VGTU(MemFac*NTYPS), |
_RL VGTLL(MemFac*NTYPS), VGTU(MemFac*NTYPS), |
1183 |
& VGTCF1(MemFac*NTYPS), VGTCF2(MemFac*NTYPS), |
& VGTCF1(MemFac*NTYPS), VGTCF2(MemFac*NTYPS), |
1184 |
& VGTCF3(MemFac*NTYPS) |
& VGTCF3(MemFac*NTYPS) |
1185 |
C**** |
C**** |
1217 |
& VGTCF3(TypPtr) ) |
& VGTCF3(TypPtr) ) |
1218 |
IF ( TC(ChNo) .LE. VGTLL(TypPtr) .OR. TC(ChNo) .GE. VGTU(TypPtr) ) |
IF ( TC(ChNo) .LE. VGTLL(TypPtr) .OR. TC(ChNo) .GE. VGTU(TypPtr) ) |
1219 |
& FTEMP (ChNo) = 1.E-10 |
& FTEMP (ChNo) = 1.E-10 |
1220 |
FTEMP(CHNO) = MIN( 1., MAX( FTEMP(ChNo), 1.E-10 ) ) |
FTEMP(CHNO) = MIN( 1. _d 0, MAX( FTEMP(ChNo), 1. _d -10 ) ) |
1221 |
C**** |
C**** |
1222 |
100 CONTINUE |
100 CONTINUE |
1223 |
C**** |
C**** |
1248 |
C**** |
C**** |
1249 |
INTEGER NCH |
INTEGER NCH |
1250 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
1251 |
REAL ESATTC(NCH), EA(NCH), PHR(NCH), SOILCO(NCH), |
_RL ESATTC(NCH), EA(NCH), PHR(NCH), SOILCO(NCH), |
1252 |
& RCUN(NCH), VPDSTR(NCH), FTEMP(NCH), TC(NCH), |
& RCUN(NCH), VPDSTR(NCH), FTEMP(NCH), TC(NCH), |
1253 |
& PSUR(NCH), Z2(NCH), RSOIL1(NCH), RSOIL2(NCH), |
& PSUR(NCH), Z2(NCH), RSOIL1(NCH), RSOIL2(NCH), |
1254 |
& VGPH1X(NCH), VGPH2X(NCH), VGRPLX(NCH), RC(NCH) |
& VGPH1X(NCH), VGPH2X(NCH), VGRPLX(NCH), RC(NCH) |
1255 |
REAL RCUNTD, RHOAIR, CONST, DEF, D12, DR2, |
_RL RCUNTD, RHOAIR, CONST, DEF, D12, DR2, |
1256 |
& RSOIL, R0, EEST, RSTFAC |
& RSOIL, R0, EEST, RSTFAC |
1257 |
C**** |
C**** |
1258 |
C**** ----------------------------------------------------------------- |
C**** ----------------------------------------------------------------- |
1271 |
R0 = ( VGRPLX(ChNo) + RSOIL ) / RHOW |
R0 = ( VGRPLX(ChNo) + RSOIL ) / RHOW |
1272 |
EEST = DEF*DR2 / ( RCUNTD*D12 + DEF*R0 ) |
EEST = DEF*DR2 / ( RCUNTD*D12 + DEF*R0 ) |
1273 |
RSTFAC = ( DR2 - R0*EEST ) / D12 |
RSTFAC = ( DR2 - R0*EEST ) / D12 |
1274 |
RSTFAC = MIN( 1., MAX( 0.001, RSTFAC ) ) |
RSTFAC = MIN( 1. _d 0, MAX( 0.001 _d 0, RSTFAC ) ) |
1275 |
RC(ChNo) = RCUNTD / RSTFAC |
RC(ChNo) = RCUNTD / RSTFAC |
1276 |
C**** |
C**** |
1277 |
100 CONTINUE |
100 CONTINUE |
1296 |
IMPLICIT NONE |
IMPLICIT NONE |
1297 |
INTEGER NCH |
INTEGER NCH |
1298 |
INTEGER ChNo |
INTEGER ChNo |
1299 |
REAL UM(NCH), U2FAC(NCH), Z2(NCH), RDC(NCH), |
_RL UM(NCH), U2FAC(NCH), Z2(NCH), RDC(NCH), |
1300 |
& WET(NCH), ESATTC(NCH), EA(NCH), |
& WET(NCH), ESATTC(NCH), EA(NCH), |
1301 |
& RC(NCH), RX1(NCH), RX2(NCH) |
& RC(NCH), RX1(NCH), RX2(NCH) |
1302 |
REAL U2, RSURF, HESAT |
_RL U2, RSURF, HESAT |
1303 |
C**** |
C**** |
1304 |
C**** ----------------------------------------------------------------- |
C**** ----------------------------------------------------------------- |
1305 |
|
|
1311 |
|
|
1312 |
C**** Account for subsaturated humidity at soil surface: |
C**** Account for subsaturated humidity at soil surface: |
1313 |
C**** |
C**** |
1314 |
HESAT = ESATTC(CHNO) * MIN( 1., WET(CHNO)*2. ) |
HESAT = ESATTC(CHNO) * MIN( 1. _d 0, WET(CHNO)*2. _d 0) |
1315 |
IF( EA(CHNO) .LT. HESAT ) THEN |
IF( EA(CHNO) .LT. HESAT ) THEN |
1316 |
RSURF=RSURF*( 1. + (ESATTC(CHNO)-HESAT)/(HESAT-EA(CHNO)) ) |
RSURF=RSURF*( 1. + (ESATTC(CHNO)-HESAT)/(HESAT-EA(CHNO)) ) |
1317 |
ELSE |
ELSE |
1351 |
IMPLICIT NONE |
IMPLICIT NONE |
1352 |
INTEGER NCH |
INTEGER NCH |
1353 |
INTEGER ChNo |
INTEGER ChNo |
1354 |
REAL CAPAC(NCH), SNOW(NCH), SATCAP(NCH), RA(NCH), ETURB(NCH), |
_RL CAPAC(NCH), SNOW(NCH), SATCAP(NCH), RA(NCH), ETURB(NCH), |
1355 |
& RC(NCH), SNWFRC(NCH), POTFRC(NCH) |
& RC(NCH), SNWFRC(NCH), POTFRC(NCH) |
1356 |
REAL ETCRIT,RAMPFC |
_RL ETCRIT,RAMPFC |
1357 |
|
|
1358 |
C**** (Note: ETCRIT arbitrarily set to ~-5 W/m2, or -2.e-6 mm/sec.) |
C**** (Note: ETCRIT arbitrarily set to ~-5 W/m2, or -2.e-6 mm/sec.) |
1359 |
DATA ETCRIT/ -2.E-6 / |
DATA ETCRIT/ -2.E-6 / |
1418 |
C**** |
C**** |
1419 |
INTEGER NCH |
INTEGER NCH |
1420 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
1421 |
REAL EVAP(NCH), SATCAP(NCH), VGWMAX(NLAY,NTYPS), |
_RL EVAP(NCH), SATCAP(NCH), VGWMAX(NLAY,NTYPS), |
1422 |
& TC(NCH), RA(NCH), RC(NCH), |
& TC(NCH), RA(NCH), RC(NCH), |
1423 |
& CAPAC(NCH), SNOW(NCH), SWET(nch,NLAY), |
& CAPAC(NCH), SNOW(NCH), SWET(nch,NLAY), |
1424 |
& RUNOFF(NCH), RX1(NCH), |
& RUNOFF(NCH), RX1(NCH), |
1425 |
& RX2(NCH), RUNSRF(NCH), FWSOIL(NCH), |
& RX2(NCH), RUNSRF(NCH), FWSOIL(NCH), |
1426 |
& ESNFRC(NCH), EIRFRC(NCH) |
& ESNFRC(NCH), EIRFRC(NCH) |
1427 |
REAL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH) |
_RL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH) |
1428 |
REAL DTSTEP, EGRO, FWS, THRU, DEWRUN, |
_RL DTSTEP, EGRO, FWS, THRU, DEWRUN, |
1429 |
& WTOTAL,WLAY1,WLAY2,ELAY1,ELAY2,EGROI |
& WTOTAL,WLAY1,WLAY2,ELAY1,ELAY2,EGROI |
1430 |
C**** |
C**** |
1431 |
C**** ----------------------------------------------------------------- |
C**** ----------------------------------------------------------------- |
1514 |
SWET(ChNo,ROOTLY) = (WLAY2 - ELAY2) / VGWMAX(ROOTLY,ITYP(CHNO)) |
SWET(ChNo,ROOTLY) = (WLAY2 - ELAY2) / VGWMAX(ROOTLY,ITYP(CHNO)) |
1515 |
C**** |
C**** |
1516 |
C**** Ensure against numerical precision problems: |
C**** Ensure against numerical precision problems: |
1517 |
SWET(ChNo,SFCLY) = MIN( 1., MAX( 0., SWET(ChNo,SFCLY) ) ) |
SWET(ChNo,SFCLY) = MIN( 1. _d 0, MAX( 0. _d 0, SWET(ChNo,SFCLY) ) ) |
1518 |
SWET(ChNo,ROOTLY) = MIN( 1., MAX( 0., SWET(ChNo,ROOTLY) ) ) |
SWET(ChNo,ROOTLY) = MIN( 1. _d 0, MAX( 0. _d 0, SWET(ChNo,ROOTLY) ) ) |
1519 |
C**** |
C**** |
1520 |
C**** |
C**** |
1521 |
C**** ------------------------------------------------- |
C**** ------------------------------------------------- |
1568 |
C**** |
C**** |
1569 |
INTEGER NCH |
INTEGER NCH |
1570 |
INTEGER ITYP(NCH), ChNo |
INTEGER ITYP(NCH), ChNo |
1571 |
REAL VGSLOX(NCH), RUNOFF(NCH), GDRAIN(NCH) |
_RL VGSLOX(NCH), RUNOFF(NCH), GDRAIN(NCH) |
1572 |
REAL ZDEP12, AKAVE, GWFLUX, ZDEP23, HALFMX, DHDZ, |
_RL ZDEP12, AKAVE, GWFLUX, ZDEP23, HALFMX, DHDZ, |
1573 |
& FAREA, TFM2, FRAMP |
& FAREA, TFM2, FRAMP |
1574 |
|
|
1575 |
REAL WSMAX(NLAY,NTYPS), PHLAY(nch,NLAY), |
_RL WSMAX(NLAY,NTYPS), PHLAY(nch,NLAY), |
1576 |
& AKLAY(nch,NLAY), TC(NCH), |
& AKLAY(nch,NLAY), TC(NCH), |
1577 |
& DTSTEP, SWET(nch,NLAY), |
& DTSTEP, SWET(nch,NLAY), |
1578 |
& VGZDEX(NLAY,nch), WETEQ1(NCH), WETEQ2(NCH), |
& VGZDEX(NLAY,nch), WETEQ1(NCH), WETEQ2(NCH), |
1618 |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
1619 |
TFM2=TF-2. |
TFM2=TF-2. |
1620 |
FRAMP=(TC(CHNO)-TFM2)/2. |
FRAMP=(TC(CHNO)-TFM2)/2. |
1621 |
FRAMP=MIN(1., MAX(0.,FRAMP) ) |
FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) ) |
1622 |
GWFLUX=GWFLUX*FRAMP |
GWFLUX=GWFLUX*FRAMP |
1623 |
C**** |
C**** |
1624 |
C**** Update water contents |
C**** Update water contents |
1657 |
C**** |
C**** |
1658 |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
1659 |
FRAMP=(TC(CHNO)-TFM2)/2. |
FRAMP=(TC(CHNO)-TFM2)/2. |
1660 |
FRAMP=MIN(1., MAX(0.,FRAMP) ) |
FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) ) |
1661 |
GWFLUX=GWFLUX*FRAMP |
GWFLUX=GWFLUX*FRAMP |
1662 |
C**** |
C**** |
1663 |
C**** Update water contents |
C**** Update water contents |
1675 |
|
|
1676 |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING): |
1677 |
FRAMP=(TC(CHNO)-TFM2)/2. |
FRAMP=(TC(CHNO)-TFM2)/2. |
1678 |
FRAMP=MIN(1., MAX(0.,FRAMP) ) |
FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) ) |
1679 |
GWFLUX=GWFLUX*FRAMP |
GWFLUX=GWFLUX*FRAMP |
1680 |
|
|
1681 |
GWFLUX = MIN( GWFLUX, |
GWFLUX = MIN( GWFLUX, |