/[MITgcm]/MITgcm/pkg/fizhi/fizhi_lsm.F
ViewVC logotype

Diff of /MITgcm/pkg/fizhi/fizhi_lsm.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.2 by molod, Fri Jul 16 19:52:21 2004 UTC revision 1.6 by ce107, Thu Jun 16 16:46:12 2005 UTC
# Line 1  Line 1 
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,
# Line 30  C**** Line 31  C****
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),
# Line 49  C**** Line 50  C****
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,
# Line 57  C**** Line 58  C****
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,
# Line 185  C**** Pre-process input arrays as necess Line 186  C**** Pre-process input arrays as necess
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
# Line 204  C      ETURB(CHNO)  = ETURB(CHNO) / ALHX Line 205  C      ETURB(CHNO)  = ETURB(CHNO) / ALHX
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    
# Line 230  C      SMELT(CHNO)  = 0. Line 231  C      SMELT(CHNO)  = 0.
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.
# Line 363  C****         EIRFRC=fraction of total e Line 363  C****         EIRFRC=fraction of total e
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,
# Line 514  C**** Line 513  C****
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****
# Line 534  C**** Add to snow cover.  Melt snow if n Line 533  C**** Add to snow cover.  Melt snow if n
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.
# Line 555  C**** (Time scale TIMFRL for large scale Line 554  C**** (Time scale TIMFRL for large scale
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.
# Line 589  C**** Line 588  C****
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.
# Line 691  C**** Line 690  C****
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
# Line 743  C**** (Note: CHIL is constrained to be > Line 742  C**** (Note: CHIL is constrained to be >
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    
# Line 789  C**** Line 788  C****
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
# Line 839  C**** Line 838  C****
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),
# Line 850  C**** Line 849  C****
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**** -------------------------------------------------------------------
# Line 876  C**** Line 874  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) +
# Line 920  C****            or outweighs any decrea Line 919  C****            or outweighs any decrea
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    
# Line 1108  c  CHANGED THIS: deep layer 2 times deep Line 1107  c  CHANGED THIS: deep layer 2 times deep
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    
# Line 1138  C**** Line 1137  C****
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
# Line 1179  C**** Line 1178  C****
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****
# Line 1218  C**** Line 1217  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****
# Line 1249  C**** Line 1248  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**** -----------------------------------------------------------------
# Line 1272  C**** Line 1271  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
# Line 1297  C**** Line 1296  C****
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    
# Line 1312  c      RSURF = RDC(ChNo) / U2 + 30. / (1 Line 1311  c      RSURF = RDC(ChNo) / U2 + 30. / (1
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
# Line 1352  C**** Line 1351  C****
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 /
# Line 1419  C**** Line 1418  C****
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**** -----------------------------------------------------------------
# Line 1515  C**** Line 1514  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**** -------------------------------------------------
# Line 1569  C**** Line 1568  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),
# Line 1619  C**** Line 1618  C****
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
# Line 1658  C**** Test for limits on water holding c Line 1657  C**** Test for limits on water holding c
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
# Line 1676  C**** Line 1675  C****
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,

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22