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

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

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


Revision 1.7 - (hide annotations) (download)
Fri Jun 17 16:51:24 2005 UTC (19 years ago) by ce107
Branch: MAIN
CVS Tags: checkpoint58l_post, checkpoint57t_post, checkpoint57o_post, checkpoint58e_post, checkpoint57v_post, checkpoint58u_post, checkpoint58w_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint60, checkpoint61, checkpoint62, checkpoint58r_post, checkpoint57i_post, checkpoint57y_post, checkpoint58n_post, checkpoint58x_post, checkpoint58t_post, checkpoint58h_post, checkpoint57y_pre, checkpoint58q_post, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint58j_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j, checkpoint57r_post, checkpoint59, checkpoint58, checkpoint58f_post, checkpoint57x_post, checkpoint57n_post, checkpoint58d_post, checkpoint58c_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint58a_post, checkpoint58i_post, checkpoint57q_post, checkpoint58g_post, checkpoint58o_post, checkpoint57z_post, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint58p_post, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint57j_post, checkpoint61z, checkpoint61x, checkpoint61y, checkpoint58b_post, checkpoint58m_post, checkpoint57l_post
Changes since 1.6: +9 -5 lines
Fixed length of lines with _d 0 additions to 72 chars

1 ce107 1.7 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/fizhi_lsm.F,v 1.6 2005/06/16 16:46:12 ce107 Exp $
2 molod 1.2 C $Name: $
3    
4 molod 1.4 #include "FIZHI_OPTIONS.h"
5 molod 1.1 SUBROUTINE TILE (
6     I NCH, DTSTEP, ITYP, TRAINL,TRAINC, TSNOW, UM,
7     I ETURB, DEDQA, DEDTC, HSTURB, DHSDQA, DHSDTC,
8     I TM, QM, CD, SUNANG, PARDIR, PARDIF,
9     I SWNET, HLWDWN, PSUR, ZLAI, GREEN, Z2,
10     I SQSCAT, RSOIL1, RSOIL2, RDC, U2FAC,
11     I QSATTC, DQSDTC, ALWRAD, BLWRAD,
12     U TC, TD, QA, SWET1, SWET2, SWET3, CAPAC, SNOW,
13     O EVAP, SHFLUX, RUNOFF, BOMB,
14     O EINT, ESOI, EVEG, ESNO, SMELT, HLATN,
15     O HLWUP,GDRAIN,RUNSRF,FWSOIL,
16     O STRDG1, STRDG2, STRDG3, STRDG4,
17     O STRDG5, STRDG6, STRDG7, STRDG8, STRDG9
18     & )
19    
20     C SCCS VERSION @(#)lsm.f 1.2 11/3/92
21    
22     C****
23     C**** This subroutine computes the outgoing fluxes of sensible and
24     C**** latent heat from the land surface and updates the surface prognostic
25     C**** variables.
26     C****
27     IMPLICIT NONE
28     C
29     C****
30 molod 1.2 #include "sibber.h"
31 molod 1.1 C****
32     INTEGER NCH
33     INTEGER ITYP(NCH)
34 molod 1.4 _RL DTSTEP, TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), UM(NCH),
35 molod 1.1 & ETURB(NCH), DEDQA(NCH), HSTURB(NCH), DHSDTC(NCH),
36     & TM (NCH), CD(NCH), SUNANG(NCH), DHSDQA(NCH),
37     & QM (NCH), PARDIR(NCH), PARDIF(NCH), SWNET(NCH),
38     & HLWDWN(NCH), PSUR(NCH), ZLAI(NCH), GREEN(NCH),
39     & Z2(NCH), SQSCAT(NCH), DEDTC(NCH)
40 molod 1.4 _RL RSOIL1(NCH), RSOIL2(NCH), RDC(NCH), U2FAC(NCH),
41 molod 1.1 & QSATTC(NCH), DQSDTC(NCH), ALWRAD(NCH), BLWRAD(NCH),
42     & TC(NCH), TD(NCH), QA(NCH), BOMB(NCH),
43     & SWET1(NCH), SWET2(NCH), SWET3(NCH), CAPAC(NCH),
44     & SNOW(NCH), EVAP(NCH), SHFLUX(NCH), RUNOFF(NCH)
45 molod 1.4 _RL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH),
46 molod 1.1 & STRDG1(NCH), STRDG2(NCH), STRDG3(NCH), STRDG4(NCH),
47     & STRDG5(NCH), STRDG6(NCH), STRDG7(NCH), STRDG8(NCH),
48     & STRDG9(NCH),
49     & SMELT(NCH), HLATN(NCH), HLWUP(NCH), GDRAIN(NCH),
50     & RUNSRF(NCH), FWSOIL(NCH)
51     C****
52     INTEGER ChNo
53 molod 1.4 _RL SWET(nch,NLAY), VGPSAT(NTYPS), VGCSAT (NTYPS),
54 molod 1.1 & VGZDEP(NLAY,NTYPS), VGSLOP(NTYPS), DELTC,
55     & DELEA, VGPH1(NTYPS), VGPH2(NTYPS),
56     & VGRPLN(NTYPS), CSOIL0(NTYPS), WSOI12,
57     & VGBEE(NTYPS), DELZ12(NTYPS),
58 molod 1.2 & DELZ23(NTYPS)
59 molod 1.1 C****
60    
61 molod 1.4 _RL PHLAY(nch,NLAY), AKLAY(nch,NLAY), SWET12(nch),
62 molod 1.1 & CSOIL(nch),
63     & RCUN(nch), VPDSTR(nch), ESATTX(nch),
64     & VPDSTX(nch), VGBEEX(nch)
65 molod 1.4 _RL EMAXRT(nch), VGWMAX(NLAY,NTYPS), FTEMP(nch),
66 molod 1.1 & PHR(nch), SOILCO(nch), RC(nch),
67     & EAX(nch), TX(nch), RCX(nch),
68     & DRCDTC(nch), SATCAP(nch), PAR(nch),
69     & PDIR(nch), DUMMY(nch)
70 molod 1.4 _RL FTEMPX(nch), DRCDEA(nch), VGPSAX(nch), VGCSAX(nch),
71 molod 1.1 & VGZDEX(NLAY,nch), VGSLOX(nch), VGPH1X(nch),
72     & VGPH2X(nch), VGRPLX(nch)
73 molod 1.4 _RL DEDEA(nch), DHSDEA(nch), EM(nch), ESATTC(nch),
74 molod 1.1 & DESDTC(nch), EA(nch), RA(nch), ALHX(nch),
75     & WETEQ1(nch), WETEQ2(nch),
76     & RX1(nch), RX2(nch), SNWFRC(nch), POTFRC(nch),
77     & ESNFRC(nch), EIRFRC(nch), FCAN(nch), EPFRC,
78     & DEFCIT, EADJST, RTBS
79 molod 1.4 _RL cmpbug
80 molod 1.1
81     C****
82     DATA VGWMAX /8.4, 621.6, 840.0,
83     2 8.4, 621.6, 840.0,
84     3 8.4, 621.6, 840.0,
85     4 8.4, 197.4, 420.0,
86     5 8.704, 204.5, 435.2,
87     6 8.4, 71.4, 420.0,
88     7 4.000, 4.000, 130.56,
89     8 4.000, 4.000, 130.56,
90     9 8.704, 73.984, 130.56,
91     1 4.000, 4.000, 130.56
92     & /
93     DATA VGBEE / 4., 4., 4., 4., 1.69, 4.,
94     & 4., 1.69, 1.69, 1.69/
95     C DATA VGBEE / 7., 7., 7., 7., 1.69, 7.,
96     C & 7., 1.69, 1.69, 1.69/
97     c DATA VGBEE / 4., 4., 4., 4., 0.95, 4.,
98     c & 4., 0.95, 0.95, 0.95/
99     C DATA VGBEE /7, 7, 7, 7, 2, 7, 7, 4, 2, 4/
100     DATA VGPSAT/ -0.281, -0.281, -0.281, -0.281,
101     5 -0.073, -0.281, -0.281, -0.073,
102     9 -0.073 , -0.073/
103     C DATA VGPSAT/ -0.086, -0.086, -0.086, -0.086,
104     C 5 -0.073, -0.086, -0.086, -0.073,
105     C 9 -0.073 , -0.073/
106     c DATA VGPSAT/ -0.281, -0.281, -0.281, -0.281,
107     c 5 -0.014, -0.281, -0.281, -0.014,
108     c 9 -0.014 , -0.014/
109     c DATA VGCSAT / 0.00002, 0.00002, 0.00002, 0.00002,
110     c 5 0.0000583, 0.00002, 0.00002, 0.0000583,
111     c 9 0.0000583, 0.0000583
112     c & /
113     DATA VGCSAT / 0.0000012, 0.0000012, 0.0000012, 0.0000012,
114     5 0.0000583, 0.0000012, 0.0000012, 0.0000583,
115     9 0.0000583, 0.0000583
116     & /
117     C**** - - - - - - - -
118     C**** THE FOLLOWING 3 VARIABLES MUST MAINTAIN CONSISTENT VALUES. ZDEP12(N) =
119     C**** (VGZDEP(1,N)+VGZDEP(2,N))/2. ; SIMILARLY FOR ZDEP23(N).
120     C****
121     DATA VGZDEP /.02, 1.48, 2.00,
122     2 .02, 1.48, 2.00,
123     3 .02, 1.48, 2.00,
124     4 .02, .47, 1.00,
125     5 .02, .47, 1.00,
126     6 .02, .17, 1.00,
127     7 .0092, .0092, .30,
128     8 .0092, .0092, .30,
129     9 .02, .17, .30,
130     1 .0092, .0092, .30
131     & /
132     DATA DELZ12 / 0.75, 0.75, 0.75, 0.245, 0.245, 0.095, 0.0092,
133     8 0.0092, 0.095, 0.0092 /
134     DATA DELZ23 / 1.74, 1.74, 1.74, 0.735, 0.735, 0.585, 0.155,
135     8 0.155, 0.235, 0.155 /
136     C**** - - - - - - - -
137     DATA VGSLOP / .1736, .1736, .1736, .1736,
138     5 1.000, .1736, .1736, 1.000,
139     & 1.000 , 1.000 /
140     c DATA VGSLOP / .1736, .1736, .1736, .1736,
141     c 5 .0872, .1736, .1736, .0872,
142     c & .0872 , .0872 /
143     c DATA VGSLOP / 1., 1., 1., 1., 1., 1., 1., 1., 1.,1./
144     DATA VGPH1 / -100., -190., -200., -120.,
145     5 -200., -200., -200., -10.,
146     9 -10., -10. /
147     DATA VGPH2 / -500., -250., -250., -230.,
148     5 -400., -400., -250., -100.,
149     9 -100., -100. /
150     DATA VGRPLN /0.245E+09, 0.245E+09, 0.245E+09, 0.250E+09,
151     5 0.250E+09, 0.250E+09, 0.245E+09, 0.1E+09,
152     9 0.1E+09, 0.100E+09 /
153     C****
154     DATA DELTC /0.01/, DELEA /0.001/
155    
156     c Note: SNWMID & CSOIL0 parameters modified from (Koster/Suarez)
157     c to obtain improved albedo, radswg, and annual/diurnal cycle (L.Takacs 2/17/00)
158     c ------------------------------------------------------------------------------------
159     DATA CSOIL0 /175000.,175000.,175000.,175000.,175000.,
160     . 175000.,175000.,120000.,175000., 70000./
161 molod 1.2 #include "snwmid.h"
162 molod 1.1
163     C****
164     C**** ---------------------------------------------------------------------
165     C****
166     CFPP$ EXPAND (TMPFAC, RCANOP, SOIL, WUPDAT, SMFAC)
167     C****
168     C**** Expand data as specified by ITYP into arrays of size NCH.
169     C****
170     DO 50 ChNo = 1, NCH
171     BOMB(CHNO) = 0.
172     VGBEEX(ChNo) = VGBEE(ITYP(ChNo))
173     VGPSAX(ChNo) = VGPSAT(ITYP(ChNo))
174     VGCSAX(ChNo) = VGCSAT(ITYP(ChNo))
175     VGZDEX(SFCLY ,ChNo) = VGZDEP(SFCLY ,ITYP(ChNo))
176     VGZDEX(ROOTLY,ChNo) = VGZDEP(ROOTLY,ITYP(ChNo))
177     VGZDEX(RECHLY,ChNo) = VGZDEP(RECHLY,ITYP(ChNo))
178     VGSLOX(ChNo) = VGSLOP(ITYP(ChNo))
179     VGPH1X(ChNo) = VGPH1(ITYP(ChNo))
180     VGPH2X(ChNo) = VGPH2(ITYP(ChNo))
181     VGRPLX(ChNo) = VGRPLN(ITYP(ChNo))
182     50 CONTINUE
183    
184     C****
185     C**** Pre-process input arrays as necessary:
186    
187     DO 100 ChNo = 1, NCH
188    
189 ce107 1.6 DEDQA(CHNO) = MAX( DEDQA(CHNO), 500. _d 0/ALHE )
190     DEDTC(CHNO) = MAX( DEDTC(CHNO), 0. _d 0)
191     DHSDQA(CHNO) = MAX( DHSDQA(CHNO), 0. _d 0)
192     DHSDTC(CHNO) = MAX( DHSDTC(CHNO), -10. _d 0)
193 molod 1.1
194     EM(CHNO) = QM(CHNO) * PSUR(CHNO) / EPSILON
195     EA(CHNO) = QA(CHNO) * PSUR(CHNO) / EPSILON
196     ESATTC(CHNO) = QSATTC(CHNO) * PSUR(CHNO) / EPSILON
197     DESDTC(CHNO) = DQSDTC(CHNO) * PSUR(CHNO) / EPSILON
198     C DEDEA(CHNO) = DEDQA(CHNO) * EPSILON / ( PSUR(CHNO) * ALHX(CHNO) )
199     DEDEA(CHNO) = DEDQA(CHNO) * EPSILON / PSUR(CHNO)
200     DHSDEA(CHNO) = DHSDQA(CHNO) * EPSILON / PSUR(CHNO)
201     C DEDTC(CHNO) = DEDTC(CHNO) / ALHX(CHNO)
202     C ETURB(CHNO) = ETURB(CHNO) / ALHX(CHNO)
203     PAR(CHNO) = (PARDIR(CHNO) + PARDIF(CHNO) + 1.E-20)
204     PDIR(CHNO) = PARDIR(CHNO) / PAR(CHNO)
205     RA(CHNO) = ONE / ( CD(CHNO) * UM(CHNO) )
206     SATCAP(ChNo) = 0.1 * ZLAI(ChNo)
207     CSOIL(CHNO) = CSOIL0(ITYP(ChNo))
208 ce107 1.6 SWET(ChNo,SFCLY ) = max( min(SWET1(ChNo),1. _d 0), 0. _d 0)
209     SWET(ChNo,ROOTLY) = max( min(SWET2(ChNo),1. _d 0), 0. _d 0)
210     SWET(ChNo,RECHLY) = max( min(SWET3(ChNo),1. _d 0), 0. _d 0)
211     CAPAC(CHNO) = max( min(CAPAC(ChNo),SATCAP(CHNO)), 0. _d 0)
212 molod 1.1 C****
213    
214     SNWFRC(CHNO) = SNOW(CHNO) / ( SNOW(CHNO) + SNWMID(ITYP(CHNO)) )
215 ce107 1.6 FCAN(CHNO) = MIN( 1. _d 0, MAX(0. _d 0,CAPAC(ChNo)/SATCAP(ChNo)) )
216 molod 1.1 POTFRC(CHNO)=1.-(1.-SNWFRC(CHNO))*(1.-FCAN(CHNO))
217    
218    
219     WSOI12=SWET(ChNo,SFCLY ) * VGWMAX(SFCLY ,ITYP(ChNo)) +
220     & SWET(ChNo,ROOTLY) * VGWMAX(ROOTLY,ITYP(ChNo))
221     SWET12(ChNo) = WSOI12 /
222     & (VGWMAX(SFCLY,ITYP(ChNo)) + VGWMAX(ROOTLY,ITYP(ChNo)))
223    
224     EMAXRT(CHNO) = ( SNOW(CHNO) + CAPAC(CHNO) + WSOI12 ) / DTSTEP
225    
226     C****
227     RUNOFF(CHNO) = 0.
228     RUNSRF(CHNO) = 0.
229     C**** (SMELT is zeroed in FLUXES)
230     C SMELT(CHNO) = 0.
231     FWSOIL(CHNO) = 0.
232     100 CONTINUE
233    
234     C****
235     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
236     C**** STEP 1: COMPUTE EFFECTIVE RESISTANCE RC FOR ENERGY BALANCE.
237     C**** (RCUNST computes the unstressed resistance,
238     C**** VPDFAC computes the vapor pressure deficit stress term,
239     C**** TMPFAC computes the temperature stress term,
240     C**** SOIL computes soil moisture potentials and conds.,
241     C**** SMFAC computes rc given a leaf water potential stress,
242     C**** RSURFP computes rc given a parallel resist. from the
243     C**** surface,
244     C**** RCANOP computes rc corrected for snow and interception.)
245     C****
246    
247     CALL RCUNST (
248     I NCH, ITYP, SUNANG, SQSCAT, PDIR,
249     I PAR, ZLAI, GREEN,
250     O RCUN
251     & )
252    
253     CALL VPDFAC (
254     I NCH, ITYP, ESATTC, EA,
255     O VPDSTR
256     & )
257    
258     CALL TMPFAC (
259     I NCH, ITYP, TC,
260     O FTEMP
261     & )
262    
263     CALL SOIL (
264     I NCH, ITYP, SWET12, VGBEEX, VGPSAX, VGCSAX, DELZ12,
265     O PHR, SOILCO, DUMMY
266     & )
267    
268     cmpbug=0.
269    
270     CALL SMFAC (
271     I NCH, ITYP, ESATTC, EA, PHR, SOILCO, RCUN,
272     I VPDSTR, FTEMP, TC, PSUR, Z2, RSOIL1, RSOIL2,
273     I VGPH1X, VGPH2X, VGRPLX,
274     O RC
275     & )
276    
277     CALL RSURFP (
278     I NCH, UM, U2FAC, Z2, RDC, SWET(1,SFCLY),
279     I ESATTC, EA,
280     U RC,
281     O RX1, RX2
282     & )
283    
284     CALL RCANOP (
285     I NCH, CAPAC, SNOW, SATCAP, RA, ETURB, SNWFRC,
286     I POTFRC,
287     U RC
288     & )
289    
290     C****
291     C**** - - - - - - - - - - - - - -
292     C****
293     C**** Compute DRC/DT and DRC/DEA using temperature, v.p. perturbations:
294     C****
295    
296     DO 120 ChNo = 1, NCH
297     TX(ChNo) = TC(ChNo) + DELTC
298     ESATTX(ChNo) = ESATTC(ChNo) + DESDTC(CHNO) * DELTC
299     EAX(ChNo) = EA(ChNo) + DELEA
300     120 CONTINUE
301     C****
302     C**** temperature:
303     CALL VPDFAC (NCH, ITYP, ESATTX, EA, VPDSTX)
304     CALL TMPFAC (NCH, ITYP, TX, FTEMPX)
305     CALL SMFAC (
306     I NCH, ITYP, ESATTX, EA, PHR, SOILCO, RCUN,
307     I VPDSTX, FTEMPX, TX, PSUR, Z2, RSOIL1, RSOIL2,
308     I VGPH1X, VGPH2X, VGRPLX,
309     O RCX
310     & )
311     CALL RSURFP (NCH, UM, U2FAC, Z2, RDC, SWET(1,SFCLY),
312     I ESATTX, EA,
313     & RCX,
314     O DUMMY,DUMMY
315     & )
316     CALL RCANOP (NCH, CAPAC, SNOW, SATCAP, RA, ETURB, SNWFRC,
317     & POTFRC, RCX)
318     C****
319     DO 125 ChNo = 1, NCH
320     DRCDTC(ChNo) = (RCX(ChNo) - RC(ChNo)) / DELTC
321     125 CONTINUE
322     C****
323     C**** vapor pressure:
324     CALL VPDFAC (NCH, ITYP, ESATTC, EAX, VPDSTX)
325     CALL SMFAC (
326     I NCH, ITYP, ESATTC, EAX, PHR, SOILCO, RCUN,
327     I VPDSTX, FTEMP, TC, PSUR, Z2, RSOIL1, RSOIL2,
328     I VGPH1X, VGPH2X, VGRPLX,
329     O RCX
330     & )
331     CALL RSURFP (NCH, UM, U2FAC, Z2, RDC, SWET(1,SFCLY),
332     I ESATTC, EAX,
333     & RCX,
334     O DUMMY,DUMMY
335     & )
336     CALL RCANOP (NCH, CAPAC, SNOW, SATCAP, RA, ETURB, SNWFRC,
337     & POTFRC, RCX)
338     C****
339     DO 150 ChNo = 1, NCH
340     DRCDEA(ChNo) = (RCX(ChNo) - RC(ChNo)) / DELEA
341     150 CONTINUE
342     C****
343    
344     C****
345     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
346     C**** STEP 2: Solve the energy balance at the surface.
347     C****
348     C****
349     C**** Determine effective latent heat of vaporization based on
350     C**** assumed fractional coverage of snow. This requires the
351     C**** determination of the fractions of moisture taken from the various
352     C**** reservoirs:
353     C**** ESNFRC=fraction of total evap. coming from snow
354     C**** EIRFRC=fraction of total evap. coming from interception res.
355    
356     DO 200 CHNO=1,NCH
357     RTBS=RX1(CHNO)*RX2(CHNO)/(RX1(CHNO)+RX2(CHNO))
358     EPFRC=POTFRC(CHNO) * ( RA(CHNO) + RTBS ) /
359     & ( RA(CHNO) + POTFRC(CHNO)*RTBS )
360     ESNFRC(CHNO)=EPFRC*SNWFRC(CHNO)/
361     & (SNWFRC(CHNO)+FCAN(CHNO)+1.E-20)
362     EIRFRC(CHNO)=EPFRC*FCAN(CHNO)/(SNWFRC(CHNO)+FCAN(CHNO)+1.E-20)
363     ALHX(CHNO) = (1.-ESNFRC(CHNO))*ALHE + ESNFRC(CHNO)*ALHS
364     200 CONTINUE
365    
366     CALL FLUXES (
367     I NCH, ITYP, DTSTEP, ESATTC, DESDTC, ALHX,
368     I ETURB, DEDEA, DEDTC, HSTURB, DHSDEA, DHSDTC,
369     I RC, DRCDEA, DRCDTC,
370     I SWNET, HLWDWN, ALWRAD, BLWRAD, ESNFRC,
371 molod 1.2 I TM, EM, CSOIL, PSUR, EMAXRT, VGWMAX,
372 molod 1.1 U TC, TD, EA, SWET, SNOW,
373     O RUNOFF, EVAP, SHFLUX, SMELT, HLWUP, BOMB,STRDG1,
374     O STRDG2, STRDG3, STRDG4, STRDG5, STRDG6, STRDG7,
375     O STRDG8, STRDG9
376     & )
377     c****
378     C****
379     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
380     C**** STEP 3: Update the water quantities in the soil and in the
381     C**** interception reservoir.
382     C**** (WUPDAT reduces moisture contents using calculated
383     C**** evap.,
384     C**** GWATER computes darcian flux of water between soil
385     C**** layers.)
386     C****
387    
388     CALL WUPDAT (
389     I NCH, ITYP, DTSTEP,
390     I EVAP, SATCAP, VGWMAX, TC, RA, RC,
391     I RX1, RX2,ESNFRC,EIRFRC,
392     U CAPAC, SNOW, SWET, RUNOFF,
393     O EINT, ESOI, EVEG, ESNO, RUNSRF,FWSOIL
394     & )
395    
396     C****
397     C**** Correct any energy balance inconsistency.
398     C****
399     DO 300 CHNO=1,NCH
400     IF(EVAP(CHNO) .GT. 0.) THEN
401     EADJST=(ESNO(CHNO)/DTSTEP) - ESNFRC(CHNO)*EVAP(CHNO)
402     SHFLUX(CHNO)=SHFLUX(CHNO)-EADJST*(ALHS-ALHE)
403     ENDIF
404     300 CONTINUE
405    
406    
407    
408     CALL SOIL (
409     I NCH, ITYP, SWET (1, SFCLY), VGBEEX,
410     I VGPSAX, VGCSAX, DELZ12,
411     O PHLAY(1,SFCLY), AKLAY(1,SFCLY), DUMMY
412     & )
413     CALL SOIL (
414     I NCH, ITYP, SWET(1,ROOTLY), VGBEEX,
415     I VGPSAX, VGCSAX, DELZ12,
416     O PHLAY(1,ROOTLY), AKLAY(1,ROOTLY), WETEQ1
417     & )
418     CALL SOIL (
419     I NCH, ITYP, SWET(1,RECHLY), VGBEEX,
420     I VGPSAX, VGCSAX, DELZ23,
421     O PHLAY(1,RECHLY), AKLAY(1,RECHLY), WETEQ2
422     & )
423    
424     CALL GWATER (
425     I NCH, ITYP, VGWMAX, PHLAY, AKLAY, TC, DTSTEP,
426     I VGZDEX, VGSLOX, WETEQ1, WETEQ2,
427     I VGPSAX, VGCSAX,
428     U SWET, RUNOFF, GDRAIN
429     & )
430    
431     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
432     C****
433     C**** STEP 4: Allow precipitation to fill interception reservoir
434     C**** and top soil layer
435     C****
436    
437     CALL SOIL (
438     I NCH, ITYP, SWET(1,ROOTLY), VGBEEX,
439     I VGPSAX, VGCSAX, DELZ12,
440     O PHLAY(1,ROOTLY), AKLAY(1,ROOTLY), WETEQ1
441     & )
442    
443     CALL INTERC (
444     I NCH, ITYP, DTSTEP, TRAINL, TRAINC, TSNOW, SATCAP,
445     I VGWMAX, CSOIL, WETEQ1,
446     U TC, CAPAC, SNOW, SWET, RUNOFF, RUNSRF,
447     & SMELT, FWSOIL
448     & )
449    
450    
451     C****
452     C****
453     C**** Process data for return to GCM:
454    
455     DO 2000 ChNo = 1, NCH
456     QA(CHNO) = EA(CHNO) * EPSILON / PSUR(CHNO)
457     C DEDTC(CHNO) = DEDTC(CHNO) * ALHX(CHNO)
458     C ETURB(CHNO) = ETURB(CHNO) * ALHX(CHNO)
459     HLATN (CHNO) = EVAP (CHNO) * ALHX(CHNO)
460     SWET1(ChNo) = SWET(ChNo,SFCLY)
461     SWET2(ChNo) = SWET(ChNo,ROOTLY)
462     SWET3(ChNo) = SWET(ChNo,RECHLY)
463    
464     IF(SWET1(ChNo).LT.1.E-10) SWET1(CHNO) = 0.0
465     IF(SWET2(ChNo).LT.1.E-10) SWET2(CHNO) = 0.0
466     IF(SWET3(ChNo).LT.1.E-10) SWET3(CHNO) = 0.0
467     IF(CAPAC(ChNo).LT.1.E-10) CAPAC(CHNO) = 0.0
468     IF(SNOW (ChNo).LT.1.E-10) SNOW (CHNO) = 0.0
469     IF(RUNOFF(ChNo).LT.1.E-10) RUNOFF(CHNO) = 0.0
470    
471     EINT(CHNO) = EINT(CHNO) * ALHE / DTSTEP
472     ESOI(CHNO) = ESOI(CHNO) * ALHE / DTSTEP
473     EVEG(CHNO) = EVEG(CHNO) * ALHE / DTSTEP
474     ESNO(CHNO) = ESNO(CHNO) * ALHS / DTSTEP
475    
476     DEFCIT = EVAP(CHNO) * ( RC(CHNO) + RA(CHNO) )
477     CCOOMMSTRDG1(CHNO) = DEFCIT / RA(CHNO)
478     CCOOMMSTRDG2(CHNO) = DEFCIT / ( RA(CHNO) + RCUN(CHNO) )
479     CCOOMMSTRDG3(CHNO) = DEFCIT / ( RA(CHNO) + RCUN(CHNO)/VPDSTR(CHNO) )
480     CCOOMMSTRDG4(CHNO) = DEFCIT / ( RA(CHNO) +
481     CCOOMM RCUN(CHNO)/(VPDSTR(CHNO)*FTEMP(CHNO)) )
482    
483     2000 CONTINUE
484     C****
485    
486     RETURN
487     END
488     C****
489     C**** [ END CHIP ]
490     C****
491     C**** -----------------------------------------------------------------
492     C**** /////////////////////////////////////////////////////////////////
493     C**** -----------------------------------------------------------------
494     C****
495     C**** [ BEGIN INTERC ]
496     C****
497     SUBROUTINE INTERC (
498     I NCH, ITYP, DTSTEP, TRAINL, TRAINC,
499     I TSNOW, SATCAP, WMAX, CSOIL, WETEQ1,
500     U TC, CAPAC, SNOW, SWET1, RUNOFF, RUNSRF,
501     U SMELT, FWSOIL
502     & )
503     C****
504     C**** This routine uses the precipitation forcing to determine
505     C**** changes in interception, snowcover, and soil moisture storage.
506     C****
507     C**** Note: In this formulation, rain that falls on frozen ground
508     C**** runs-off, rather than freezes.
509     C****
510     IMPLICIT NONE
511     C****
512 molod 1.2 #include "sibber.h"
513 molod 1.1 C****
514     INTEGER NCH
515     INTEGER ITYP(NCH), ChNo
516 molod 1.4 _RL TRAINL(NCH), TRAINC(NCH), TSNOW(NCH), SATCAP(NCH),
517 molod 1.1 & WMAX(NLAY,NTYPS), TC(NCH), CSOIL(NCH), CAPAC(NCH),
518     & SNOW(NCH), SWET1(NCH), RUNOFF(NCH), SMELT(NCH),
519     & RUNSRF(NCH), FWSOIL(NCH), WETEQ1(NCH), WETINT
520 molod 1.4 _RL DTSTEP, SNOWM, WATADD, CAVAIL, THRUC, WRUNC, WRUNL,
521 molod 1.1 & TIMFRL, TIMFRC, FWETL, FWETC, THRU1, THRU2, THRUL, XTCORR,
522     & WETFRC
523     C****
524     C DATA FWET0 /0.30/
525     DATA FWETL /1.00/, FWETC /0.20/, TIMFRL/1.00/, TIMFRC/0.125/
526     C****
527     C**** ------------------------------------------------------------------
528     C**** Loop over chips:
529     DO 100 ChNo = 1, NCH
530     C****
531     C**** Add to snow cover. Melt snow if necessary.
532     SNOW(ChNo) = SNOW(ChNo) + TSNOW(ChNo)*DTSTEP
533     SNOWM = 0.
534     IF( SNOW(CHNO).GT.0. .AND. TC(CHNO).GT.TF ) THEN
535     SNOWM = MIN( SNOW(ChNo),
536 ce107 1.6 & MAX( 0. _d 0, (TC(ChNo)-TF)*CSOIL(ChNo)/ALHM ) )
537 molod 1.1 IF( SNOWM .EQ. SNOW(CHNO) ) THEN
538     TC(ChNo) = TC(ChNo) - SNOWM * ALHM / CSOIL(ChNo)
539     SNOW(CHNO)=0.
540     ELSE
541     TC(CHNO)=TF
542     SNOW(ChNo) = SNOW(ChNo) - SNOWM
543     ENDIF
544     SMELT(CHNO)=SMELT(CHNO)+SNOWM/DTSTEP
545     ENDIF
546     C****
547     C**** =======================================================
548     C****
549     C**** Load interception reservoir. STEP 1: Large scale condensation.
550     C****
551     C**** Determine XTCORR, the fraction of a storm that falls on a previously
552     C**** wet surface due to the time correlation of precipitation position.
553     C**** (Time scale TIMFRL for large scale storms set to one for FWETL=1
554     C**** to reflect the effective loss of "position memory" when storm
555     C**** covers entire grid square.)
556    
557 ce107 1.7 XTCORR= (1.-TIMFRL) * MIN( 1. _d 0,(CAPAC(CHNO)/SATCAP(CHNO))/
558     $ FWETL )
559 molod 1.1
560     C****
561     C**** Fill interception reservoir with precipitation.
562     C**** THRU1 is first calculated as the amount falling through the
563     C**** canopy under the assumption that all rain falls randomly.
564     C**** only a fraction 1-XTCORR falls randomly, though, so the result
565     C**** is multiplied by 1-XTCORR.
566     C****
567     WATADD = TRAINL(ChNo)*DTSTEP + SMELT(CHNO)*DTSTEP
568     CAVAIL = ( SATCAP(CHNO) - CAPAC(CHNO) ) * FWETL
569     WETINT = CAPAC(CHNO)/SATCAP(CHNO)
570     IF( WATADD*(1.-WETINT) .LT. CAVAIL ) THEN
571     THRU1 = WATADD*WETINT
572     ELSE
573     THRU1 = (WATADD - CAVAIL)
574     ENDIF
575     THRU1=THRU1*(1.-XTCORR)
576    
577     C**** THRU2 is the amount that falls immediately through the canopy due
578     C**** to 'position memory'.
579    
580     THRU2=XTCORR*WATADD
581    
582     THRUL=THRU1+THRU2
583     CAPAC(CHNO)=CAPAC(CHNO)+WATADD-THRU1-THRU2
584     C****
585     C**** ---------------------------------------------------
586     C****
587     C**** STEP 2: Moist convective precipitation.
588     C****
589     C**** Determine XTCORR, the fraction of a storm that falls on a previously
590     C**** wet surface due to the time correlation of precipitation position.
591    
592 ce107 1.7 XTCORR= (1.-TIMFRC) * MIN( 1. _d 0,(CAPAC(CHNO)/SATCAP(CHNO))/
593     $ FWETC )
594 molod 1.1
595     C****
596     C**** Fill interception reservoir with precipitation.
597     C**** THRU1 is first calculated as the amount falling through the
598     C**** canopy under the assumption that all rain falls randomly.
599     C**** only a fraction 1-XTCORR falls randomly, though, so the result
600     C**** is multiplied by 1-XTCORR.
601     C****
602     WATADD = TRAINC(ChNo)*DTSTEP
603     CAVAIL = ( SATCAP(CHNO) - CAPAC(CHNO) ) * FWETC
604     WETINT = CAPAC(CHNO)/SATCAP(CHNO)
605     IF( WATADD*(1.-WETINT) .LT. CAVAIL ) THEN
606     THRU1 = WATADD*WETINT
607     ELSE
608     THRU1 = (WATADD - CAVAIL)
609     ENDIF
610     THRU1=THRU1*(1.-XTCORR)
611    
612     C**** THRU2 is the amount that falls immediately through the canopy due
613     C**** to 'position memory'.
614    
615     THRU2=XTCORR*WATADD
616    
617     THRUC=THRU1+THRU2
618     CAPAC(CHNO)=CAPAC(CHNO)+WATADD-THRU1-THRU2
619     C****
620     C***** =================================================================
621     C****
622     C**** Add precipitation moisture to soil, generate runoff. if
623     C**** temperature is below freezing, all precipitation runs off.
624     C****
625     C**** STEP 1: Large scale condensation:
626     C****
627     IF(SWET1(CHNO).GT.WETEQ1(CHNO) .AND. WETEQ1(CHNO).NE.1.) THEN
628     WETFRC=(SWET1(CHNO)-WETEQ1(CHNO))/(1.-WETEQ1(CHNO))
629     ELSE
630     WETFRC=0.
631     ENDIF
632    
633     CAVAIL = ( 1.-WETFRC)*FWETL*WMAX(1,ITYP(ChNo))*(1-WETEQ1(CHNO))
634     IF ( THRUL * (1-WETFRC) .LT. CAVAIL ) THEN
635     WRUNL = THRUL * WETFRC
636     SWET1(ChNo) = SWET1(ChNo)
637     * + THRUL * ( 1. - WETFRC) / WMAX(1,ITYP(ChNo))
638     ELSE
639     WRUNL = THRUL - CAVAIL
640     SWET1(CHNO) = SWET1(CHNO) + CAVAIL / WMAX(1,ITYP(ChNo))
641     ENDIF
642     C****
643    
644     C**** STEP 2: Moist convective precipitation:
645     C****
646     IF(SWET1(CHNO).GT.WETEQ1(CHNO) .AND. WETEQ1(CHNO).NE.1.) THEN
647     WETFRC=(SWET1(CHNO)-WETEQ1(CHNO))/(1.-WETEQ1(CHNO))
648     ELSE
649     WETFRC=0.
650     ENDIF
651    
652     CAVAIL = (1.-WETFRC)*FWETC*WMAX(1,ITYP(ChNo))*(1-WETEQ1(CHNO))
653     IF ( THRUC * (1-WETFRC) .LT. CAVAIL ) THEN
654     WRUNC = THRUC * WETFRC
655     SWET1(ChNo) = SWET1(ChNo)
656     * + THRUC * ( 1. - WETFRC) / WMAX(1,ITYP(ChNo))
657     ELSE
658     WRUNC = THRUC - CAVAIL
659     SWET1(CHNO) = SWET1(CHNO) + CAVAIL / WMAX(1,ITYP(ChNo))
660     ENDIF
661     C****
662     RUNOFF(ChNo) = RUNOFF(ChNo) + (WRUNC+WRUNL)/DTSTEP
663     RUNSRF(ChNo) = RUNSRF(ChNo) + (WRUNC+WRUNL)/DTSTEP
664     FWSOIL(CHNO) = FWSOIL(CHNO) + (THRUC+THRUL-WRUNC-WRUNL)/DTSTEP
665     C****
666     100 CONTINUE
667     C****
668     RETURN
669     END
670     C****
671     C**** [ END INTERC ]
672     C****
673     C**** -----------------------------------------------------------------
674     C**** /////////////////////////////////////////////////////////////////
675     C**** -----------------------------------------------------------------
676     C****
677     C**** [ BEGIN RCUNST ]
678     C****
679     SUBROUTINE RCUNST (
680     I NCH, ITYP, SUNANG, SQSCAT, PDIR,
681     I PAR, ZLAI, GREEN,
682     O RCUN
683     & )
684     C****
685     C**** This subroutine calculates the unstressed canopy resistance.
686     C**** (p. 1353, Sellers 1985.) Extinction coefficients are computed first.
687     C****
688     IMPLICIT NONE
689     C****
690 molod 1.2 #include "sibber.h"
691 molod 1.1 C****
692     INTEGER NCH
693     INTEGER ITYP(NCH), ChNo
694    
695 molod 1.4 _RL SUNANG(NCH), PDIR(NCH), PAR(NCH), ZLAI(NCH),
696 molod 1.1 & SQSCAT(NCH), GREEN(NCH), RCUN(NCH)
697    
698 molod 1.4 _RL VGCHIL(NTYPS), VGZMEW(NTYPS),
699 molod 1.1 & VGRST1(NTYPS), VGRST2(NTYPS), VGRST3(NTYPS)
700    
701 molod 1.4 _RL RHO4, EXTK1, EXTK2,
702 molod 1.1 & RCINV, GAMMA, EKAT, DUM1,
703     & DUM2, DUM3, AA, BB,
704     & ZK, CC
705    
706    
707     DATA VGCHIL / 0.1, 0.25, 0.01, -0.3,
708     5 0.01, 0.20, 0.0, 0.0,
709     9 0.0, 0.0 /
710    
711     DATA VGZMEW/ 0.9809, 0.9638, 0.9980, 1.0773,
712     5 0.9980, 0.9676, 1.000, 1.000,
713     9 1.000, 1.0000 /
714    
715     DATA VGRST1 / 2335.9, 9802.2, 2869.7, 2582.0,
716     5 93989.4, 9802.2, 0.0, 0.0,
717     9 0.0 , 0.0/
718    
719     DATA VGRST2 / 0.0, 10.6, 3.7, 1.1,
720     5 0.01, 10.6, 0.0, 0.0,
721     9 0.0 , 0.0/
722    
723     DATA VGRST3 / 153.5, 180.0, 233.0, 110.0,
724     5 855.0, 180.0, 1.0, 1.0,
725     9 1.0, 1.0 /
726    
727    
728    
729    
730     DO 100 ChNo = 1, NCH
731    
732     C**** First compute optical parameters.
733     C**** (Note: CHIL is constrained to be >= 0.01, as in SiB calcs.)
734    
735     AA = 0.5 - (0.633 + 0.330*VGCHIL(ITYP(ChNo)))*VGCHIL(ITYP(ChNo))
736     BB = 0.877 * ( ONE - 2.*AA )
737     CC = ( AA + BB*SUNANG(ChNo) ) / SUNANG(ChNo)
738    
739     EXTK1 = CC * SQSCAT(ChNo)
740     EXTK2 = (ONE / VGZMEW(ITYP(ChNo))) * SQSCAT(ChNo)
741    
742     DUM1 = PDIR(ChNo) * CC
743     DUM2 = (ONE-PDIR(ChNo)) * ( BB*(ONE/3.+PIE/4.) + AA*1.5 )
744    
745     C**** Bound extinction coefficient by 50./ZLAI:
746    
747 ce107 1.6 ZK = PDIR(ChNo) *MIN( EXTK1, 50. _d 0/ZLAI(ChNo) ) +
748     & (ONE-PDIR(ChNo))*MIN( EXTK2, 50. _d 0/ZLAI(ChNo) )
749 molod 1.1
750     C**** Now compute unstressed canopy resistance:
751    
752     GAMMA = VGRST1(ITYP(ChNo)) / VGRST3(ITYP(ChNo)) +
753     & VGRST2(ITYP(ChNo))
754    
755     EKAT = EXP( ZK*ZLAI(ChNo) )
756     RHO4 = GAMMA / (PAR(ChNo) * (DUM1 + DUM2))
757    
758     DUM1 = (VGRST2(ITYP(ChNo)) - GAMMA) / (GAMMA + 1.E-20)
759     DUM2 = (RHO4 * EKAT + ONE) / (RHO4 + ONE)
760     DUM3 = ZK * VGRST3(ITYP(ChNo))
761     RCINV = ( DUM1*LOG(DUM2) + ZK*ZLAI(ChNo) ) / DUM3
762    
763     RCUN(ChNo) = ONE / (RCINV * GREEN(ChNo) + 1.E-10)
764    
765     100 CONTINUE
766    
767    
768     RETURN
769     END
770     C****
771     C**** [ END RCUNST ]
772     C****
773     C**** -----------------------------------------------------------------
774     C**** /////////////////////////////////////////////////////////////////
775     C**** -----------------------------------------------------------------
776     C****
777     C**** [ BEGIN SOIL ]
778     C****
779     SUBROUTINE SOIL (
780     I NCH, ITYP, WET, VGBEEX, VGPSAX, VGCSAX, DELZ,
781     O PHR, SOILCO, WETEQ
782     & )
783     C****
784     C**** This subroutine returns soil moisture potential and conductivity.
785    
786     IMPLICIT NONE
787     C****
788 molod 1.2 #include "sibber.h"
789 molod 1.1 C****
790     INTEGER NCH
791     INTEGER ITYP(NCH), ChNo
792    
793 molod 1.4 _RL WET(NCH), PHR(NCH), SOILCO(NCH), VGPSAX(NCH),
794 molod 1.1 & VGCSAX(NCH), VGBEEX(NCH), DELZ(NTYPS), WETEQ(NCH),
795     & WEXPB, WET0, PHEQ
796    
797     DO 100 ChNo = 1, NCH
798    
799 ce107 1.6 WET0 = MAX(WET(CHNO),0.01 _d 0)
800 molod 1.1 WEXPB = WET0**VGBEEX(ChNo)
801    
802     PHR(ChNo) = VGPSAX(ChNo) / WEXPB
803     SOILCO(ChNo) = VGCSAX(ChNo) * WEXPB * WEXPB * WET0 * WET0 * WET0
804    
805     PHEQ = PHR(CHNO) - DELZ(ITYP(CHNO))
806     WETEQ(CHNO) = ( PHEQ/VGPSAX(CHNO) ) ** ( -1/VGBEEX(CHNO) )
807    
808     100 CONTINUE
809    
810     RETURN
811     END
812     C****
813     C**** [ END SOIL ]
814     C****
815     C**** -----------------------------------------------------------------
816     C**** /////////////////////////////////////////////////////////////////
817     C**** -----------------------------------------------------------------
818     C****
819     C**** [ BEGIN FLUXES ]
820     C****
821     SUBROUTINE FLUXES (
822     I NCH, ITYP, DTSTEP, ESATTC, DESDTC, ALHX,
823     I ETURB, DEDEA, DEDTC, HSTURB, DHSDEA, DHSDTC,
824     I RC, DRCDEA, DRCDTC,
825     I SWNET, HLWDWN, ALWRAD, BLWRAD, ESNFRC,
826     I TM, EM, CSOIL, PSUR, EMAXRT, WMAX,
827     U TC, TD, EA, SWET1, SNOW,
828     O RUNOFF, EVAP, SHFLUX, SMELT, HLWUP, BOMB, STRDG1,
829     O STRDG2, STRDG3, STRDG4, STRDG5, STRDG6, STRDG7,
830     O STRDG8, STRDG9
831     & )
832     C****
833     C**** This subroutine computes the fluxes of latent and sensible heat
834     C**** from the surface through an energy balance calculation.
835     C****
836     IMPLICIT NONE
837     C****
838 molod 1.2 #include "sibber.h"
839 molod 1.1 C****
840     INTEGER NCH
841     INTEGER ITYP(NCH), ChNo
842    
843 molod 1.4 _RL DTSTEP, ESATTC(NCH), DESDTC(NCH), ALHX(NCH),
844 molod 1.1 & ETURB(NCH), DEDEA(NCH), DEDTC(NCH),
845     & HSTURB(NCH), DHSDEA(NCH), DHSDTC(NCH),
846     & RC(NCH), DRCDEA(NCH), DRCDTC(NCH),
847     & SWNET(NCH), HLWDWN(NCH), ALWRAD(NCH), BLWRAD(NCH),
848     & TM(NCH), EM(NCH), CSOIL(NCH), PSUR(NCH),
849     & EMAXRT(NCH), WMAX(NLAY,NTYPS),
850     & TC(NCH), TD(NCH), EA(NCH), ESNFRC(NCH),
851     & SWET1(NCH,NLAY), SNOW(NCH),
852     & RUNOFF(NCH), EVAP(NCH), SHFLUX(NCH), SMELT(NCH),
853     & HLWUP(NCH), BOMB(NCH)
854 molod 1.4 _RL STRDG1(NCH),STRDG2(NCH),STRDG3(NCH),STRDG4(NCH)
855     _RL STRDG5(NCH),STRDG6(NCH),STRDG7(NCH),STRDG8(NCH)
856     _RL STRDG9(NCH)
857 molod 1.1
858 molod 1.4 _RL HLWTC, CDEEPS, Q0, RHOAIR, CONST, DHLWTC,
859 molod 1.1 & EPLANT, A11, A12, A21, A22, F0,
860     & DEA, DTC, SNLEFT, Q0X, Q0SNOW,
861     & EANEW, ESATNW, EHARMN, DETERM, DENOM
862    
863 molod 1.3 LOGICAL CHOKE
864 molod 1.4 _RL deepfac(ntyps)
865 molod 1.1 DATA deepfac /1.,1.,1.,1.,1.,1.,1.,1.,1.,1./
866     C****
867     C**** -------------------------------------------------------------------
868    
869     DO 200 ChNo = 1, NCH
870     C****
871     HLWTC = ALWRAD(CHNO) + BLWRAD(CHNO) * TC(CHNO)
872     CDEEPS = PIE * CSOIL(ChNo) * 2. / 86400.
873     RHOAIR = PSUR(ChNo) * 100. / (RGAS * TC(ChNo))
874     CONST = RHOAIR * EPSILON / PSUR(ChNo)
875     DHLWTC = BLWRAD(CHNO)
876     C****
877     C**** Compute matrix elements A11, A22, AND Q0 (energy balance equation).
878     C****
879 molod 1.5
880 molod 1.1 A11 = CSOIL(ChNo)/DTSTEP +
881     & DHLWTC +
882     & DHSDTC(ChNo) +
883     & ALHX(CHNO)*DEDTC(ChNo) +
884     & CDEEPS
885     A12 = DHSDEA(ChNo) + ALHX(CHNO) * DEDEA(ChNo)
886     Q0 = SWNET(ChNo) +
887     & HLWDWN(ChNo) -
888     & HLWTC -
889     & HSTURB(ChNo) -
890     & ALHX(CHNO) * ETURB(ChNo) -
891     & CDEEPS * (TC(ChNo) - TD(ChNo))
892    
893     STRDG3(ChNo)=Q0/A11
894     STRDG4(ChNo)=(SWNET(ChNo)+HLWDWN(ChNo)-HLWTC)/A11
895     STRDG5(ChNo)=HSTURB(ChNo)/A11
896     STRDG6(ChNo)=ALHX(CHNO)*ETURB(ChNo)/A11
897     STRDG7(ChNo)=CDEEPS*(TC(ChNo) - TD(ChNo))/A11
898     STRDG9(ChNo)=A11
899    
900     C****
901     C**** Compute matrix elements A21, A22, and F0 (canopy water budget
902     C**** equation) and solve for fluxes. Three cases are considered:
903     C****
904     C**** 1. Standard case: RC>0.
905     C**** 2. RC = 0. Can only occur if CIR is full or ETURB is negative.
906     C****
907     CHOKE = .TRUE.
908    
909     IF( RC(CHNO) .GT. 0.) THEN
910     EPLANT = CONST * (ESATTC(ChNo) - EA(ChNo)) / RC(ChNo)
911     IF(EPLANT*ETURB(ChNo).GE.0.) THEN
912     EHARMN = 2.*EPLANT*ETURB(CHNO) / (EPLANT + ETURB(ChNo))
913     ELSE
914     EHARMN=0.
915     ENDIF
916     C****
917     C**** Some limitations to A21 and A22 are applied:
918     C**** we assume that the increase in plant evaporation
919     C**** due to an increase in either TC or EA balances
920     C**** or outweighs any decrease due to RC changes.
921     C****
922    
923     A21 = -DEDTC(ChNo)*RC(ChNo) +
924 ce107 1.6 & max(0. _d 0, CONST*DESDTC(ChNo) - EHARMN*DRCDTC(ChNo) )
925 molod 1.1 A22 = -( RC(ChNo)*DEDEA(ChNo) +
926 ce107 1.6 & max( 0. _d 0, CONST + EHARMN*DRCDEA(ChNo) ) )
927 molod 1.1
928     F0 = RC(ChNo) * (ETURB(ChNo) - EPLANT)
929 ce107 1.6 DETERM = MIN( A12*A21/(A11*A22) - 1., -0.1 _d 0)
930 molod 1.1 DEA = ( Q0*A21 - A11*F0 ) / ( DETERM * A11*A22 )
931     DTC = ( Q0 - A12*DEA ) / A11
932    
933     STRDG1(ChNo)=DTC
934     STRDG2(ChNo)=DEA
935     STRDG8(ChNo)=-A12*DEA/A11
936    
937     EVAP(ChNo) = ETURB(ChNo) + DEDEA(ChNo)*DEA + DEDTC(ChNo)*DTC
938     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
939     & DHSDTC(ChNo)*DTC
940     DENOM = DETERM * A11*A22
941     ELSE
942     CHOKE = .FALSE.
943     A21 = -DESDTC(ChNo)
944     A22 = 1.
945     F0 = ESATTC(ChNo) - EA(ChNo)
946     DEA = ( Q0*A21 - A11*F0 ) / ( A12*A21 - A11*A22 )
947     DTC = ( Q0 - A12*DEA ) / A11
948    
949     STRDG1(ChNo)=DTC
950     STRDG2(ChNo)=DEA
951     STRDG8(ChNo)=-A12*DEA/A11
952    
953     EVAP(ChNo) = ETURB(ChNo) + DEDEA(ChNo)*DEA + DEDTC(ChNo)*DTC
954     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
955     & DHSDTC(ChNo)*DTC
956     DENOM = A12 * A21 - A11*A22
957     ENDIF
958    
959    
960     C**** - - - - - - - - - - - - - - - - - - - -
961     C**** Account for snowmelt, if necessary.
962     C**** - - - - - - - - - - - - - - - - - - - -
963     SMELT(CHNO)=0.
964     SNLEFT=SNOW(CHNO)-EVAP(CHNO)*DTSTEP*ESNFRC(CHNO)
965     IF(TC(CHNO)+DTC .GT. TF .AND. SNLEFT.GT.0.) THEN
966    
967     C**** First re-calculate energy balance under assumption that all
968     C**** snow is melted.
969    
970     Q0X=Q0-ALHM*SNLEFT/DTSTEP
971     SMELT(CHNO)=SNLEFT/DTSTEP
972    
973     DEA = ( Q0X*A21 - A11*F0 ) / DENOM
974     DTC = ( Q0X - A12*DEA ) / A11
975    
976     C**** If TC+DTC is now less than TF, too much snow has melted. Now
977     C**** solve for balance assuming only some of the snow has melted.
978     C**** Set TC to TF.
979    
980     IF(TC(CHNO)+DTC .LT. TF) THEN
981     DTC=TF-TC(CHNO)
982     DEA=(F0-A21*DTC)/A22
983     Q0SNOW=A11*DTC+A12*DEA
984     SMELT(CHNO)=(Q0-Q0SNOW)/ALHM
985     ENDIF
986    
987     STRDG1(ChNo)=DTC
988     STRDG2(ChNo)=DEA
989     STRDG8(ChNo)=-A12*DEA/A11
990    
991     EVAP(ChNo) = ETURB(ChNo) + DEDEA(ChNo)*DEA +
992     & DEDTC(ChNo)*DTC
993     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
994     & DHSDTC(ChNo)*DTC
995    
996     ENDIF
997    
998     C**** - - - - - - - - - - - - - - - - - - - - - - -
999     C**** Adjustments
1000    
1001     C**** 1. Adjust deltas and fluxes if all available water evaporates
1002     C**** during time step:
1003     C****
1004     IF( EVAP(CHNO) .GT. EMAXRT(CHNO) ) THEN
1005     CHOKE = .FALSE.
1006     DEA = EM(CHNO) - EA(CHNO)
1007     DTC =
1008 molod 1.2 & (Q0 + ALHX(CHNO)*(ETURB(ChNo)-EMAXRT(CHNO)) - DHSDEA(CHNO)*DEA)
1009 molod 1.1 & / ( A11 - ALHX(CHNO)*DEDTC(ChNo) )
1010    
1011     STRDG1(ChNo)=DTC
1012     STRDG2(ChNo)=DEA
1013     STRDG8(ChNo)=0.
1014    
1015     EVAP(CHNO) = EMAXRT(CHNO)
1016     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
1017     & DHSDTC(ChNo)*DTC
1018     SMELT(CHNO)=0.
1019     ENDIF
1020     C****
1021     C**** Adjust DEA and DTC if solutions were pathological:
1022     C****
1023     ESATNW = ESATTC(CHNO)+DESDTC(CHNO)*DTC
1024     EANEW = EA(CHNO) + DEA
1025    
1026    
1027    
1028     C**** 2. Pathological cases.
1029    
1030     C**** Case 1: EVAP is positive in presence of negative gradient.
1031     C**** Case 2: EVAP and ETURB have opposite sign, implying that
1032     C**** "virtual effects" derivatives are meaningless and thus that we
1033     C**** don't know the proper tendency terms.
1034     C**** In both cases, assume zero evaporation for the time step.
1035    
1036     C IF( ( EVAP(CHNO) .LT. 0. .AND. EM(CHNO).LT.ESATNW )
1037     C & .OR. ( EVAP(CHNO)*ETURB(CHNO) .LT. 0. ) ) THEN
1038     IF( EVAP(CHNO) .LT. 0. .AND. EM(CHNO).LT.ESATNW ) THEN
1039     CHOKE = .FALSE.
1040     DEA = EM(CHNO) - EA(CHNO)
1041     DTC = ( Q0 + ALHX(CHNO)*ETURB(ChNo) - DHSDEA(CHNO)*DEA ) /
1042     & ( A11 - ALHX(CHNO)*DEDTC(ChNo) )
1043    
1044     STRDG1(ChNo)=DTC
1045     STRDG2(ChNo)=DEA
1046     STRDG8(ChNo)=0.
1047    
1048     EVAP(CHNO) = 0.
1049     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
1050     & DHSDTC(ChNo)*DTC
1051    
1052     IF(TC(CHNO)+DTC .GT. TF .AND. SNOW(CHNO).GT.0.) THEN
1053     Q0X=Q0-ALHM*SNOW(CHNO)/DTSTEP
1054     SMELT(CHNO)=SNOW(CHNO)/DTSTEP
1055     DTC = ( Q0X + ALHX(CHNO)*ETURB(ChNo) - DHSDEA(CHNO)*DEA ) /
1056     & ( A11 - ALHX(CHNO)*DEDTC(ChNo) )
1057     IF(TC(CHNO)+DTC .LT. TF) THEN
1058     DTC=TF-TC(CHNO)
1059     Q0SNOW=A11*DTC+A12*DEA
1060     SMELT(CHNO)=(Q0-Q0SNOW)/ALHM
1061     ENDIF
1062     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
1063     & DHSDTC(ChNo)*DTC
1064     ENDIF
1065     ENDIF
1066    
1067    
1068    
1069     C**** 3. Exceesive dea change: apply "choke".
1070    
1071     IF( CHOKE .AND. ABS(DEA) .GT. 0.5*EA(CHNO) ) THEN
1072     DEA = SIGN(.5*EA(CHNO),DEA)
1073     DTC = ( Q0 - A12*DEA ) / A11
1074    
1075     STRDG1(ChNo)=DTC
1076     STRDG2(ChNo)=DEA
1077     STRDG8(ChNo)=-A12*DEA/A11
1078    
1079     EVAP(ChNo) = ETURB(ChNo) + DEDEA(ChNo)*DEA + DEDTC(ChNo)*DTC
1080     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
1081     & DHSDTC(ChNo)*DTC
1082     IF(TC(CHNO)+DTC .GT. TF .AND. SNOW(CHNO).GT.0.) THEN
1083     SNLEFT=SNOW(CHNO)-EVAP(CHNO)*DTSTEP*ESNFRC(CHNO)
1084     Q0X=Q0-ALHM*SNLEFT/DTSTEP
1085     SMELT(CHNO)=SNLEFT/DTSTEP
1086     DTC = ( Q0X - A12*DEA ) / A11
1087     IF(TC(CHNO)+DTC .LT. TF) THEN
1088     DTC=TF-TC(CHNO)
1089     Q0SNOW=A11*DTC+A12*DEA
1090     SMELT(CHNO)=(Q0-Q0SNOW)/ALHM
1091     ENDIF
1092     EVAP(ChNo) = ETURB(ChNo) + DEDEA(ChNo)*DEA + DEDTC(ChNo)*DTC
1093     SHFLUX(ChNo) = HSTURB(ChNo) + DHSDEA(ChNo)*DEA +
1094     & DHSDTC(ChNo)*DTC
1095     ENDIF
1096     ENDIF
1097    
1098     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1099    
1100     TC(ChNo) = TC(ChNo) + DTC
1101     EA(ChNo) = EA(ChNo) + DEA
1102     TD(ChNo) = TD(ChNo) +
1103     c CHANGED THIS: deep layer 2 times deeper
1104     & DTSTEP * CDEEPS * (TC(ChNo) - TD(ChNo)) /
1105     . (CSOIL(ChNo)*67.73*deepfac(ityp(ChNo)))
1106     HLWUP(CHNO) = HLWTC + DHLWTC*DTC
1107    
1108     SNOW(CHNO)=SNOW(CHNO)-SMELT(CHNO)*DTSTEP
1109    
1110     C**** Make sure EA remains positive
1111    
1112 ce107 1.6 EA(CHNO) = MAX(EA(CHNO), 0.0 _d 0)
1113 molod 1.1
1114     200 CONTINUE
1115    
1116    
1117    
1118     RETURN
1119     END
1120     C****
1121     C**** [ END FLUXES ]
1122     C****
1123     C**** -----------------------------------------------------------------
1124     C**** /////////////////////////////////////////////////////////////////
1125     C**** -----------------------------------------------------------------
1126     C****
1127     C**** [ BEGIN VPDFAC ]
1128     C****
1129     SUBROUTINE VPDFAC (
1130     I NCH, ITYP, ESATTC, EA,
1131     O VPDSTR
1132     & )
1133     C****
1134     C**** This subroutine computes the vapor pressure deficit stress.
1135     C****
1136     IMPLICIT NONE
1137     C****
1138 molod 1.2 #include "sibber.h"
1139 molod 1.1 C****
1140     INTEGER NCH
1141     INTEGER ITYP(NCH), ChNo
1142 molod 1.4 _RL ESATTC(NCH), EA(NCH), VPDSTR(NCH)
1143     c _RL VGDFAC(NTYPS)
1144 molod 1.1 C****
1145 molod 1.3 c DATA VGDFAC / .0273, .0357, .0310, .0238,
1146     c 5 .0275, .0275, 0., 0.,
1147     c 9 0., 0. /
1148 molod 1.1 C****
1149     C**** -----------------------------------------------------------------
1150    
1151     DO 100 ChNo = 1, NCH
1152     C****
1153     c VPDSTR(ChNo) = 1. - (ESATTC(ChNo)-EA(ChNo)) * VGDFAC(ITYP(ChNo))
1154 ce107 1.6 c VPDSTR (ChNo) = MIN( 1. _d 0, MAX( VPDSTR(ChNo), 1. _d -10 ) )
1155 molod 1.1 VPDSTR(CHNO) = 1.
1156     C****
1157     100 CONTINUE
1158     C****
1159     RETURN
1160     END
1161     C****
1162     C**** [ END VPDFAC ]
1163     C****
1164     C**** -----------------------------------------------------------------
1165     C**** /////////////////////////////////////////////////////////////////
1166     C**** -----------------------------------------------------------------
1167     C****
1168     C**** [ BEGIN TMPFAC ]
1169     C****
1170     SUBROUTINE TMPFAC (
1171     I NCH, ITYP, TC,
1172     O FTEMP
1173     & )
1174     C****
1175     C**** Compute temperature stress factor.
1176     C****
1177     IMPLICIT NONE
1178     C****
1179 molod 1.2 #include "sibber.h"
1180 molod 1.1 C****
1181     INTEGER NCH
1182     INTEGER ITYP(NCH), ChNo, TypPtr
1183 molod 1.4 _RL TC(NCH), FTEMP(NCH)
1184     _RL VGTLL(MemFac*NTYPS), VGTU(MemFac*NTYPS),
1185 molod 1.1 & VGTCF1(MemFac*NTYPS), VGTCF2(MemFac*NTYPS),
1186     & VGTCF3(MemFac*NTYPS)
1187     C****
1188     DATA VGTLL /MemFac*273., MemFac*273., MemFac*268., MemFac*283.,
1189     5 MemFac*283., MemFac*273., MemFac* 0., MemFac* 0.,
1190     9 MemFac* 0., MemFac* 0. /
1191     DATA VGTU /MemFac*318., MemFac*318., MemFac*313., MemFac*328.,
1192     5 MemFac*323., MemFac*323., MemFac* 0., MemFac* 0.,
1193     9 MemFac* 0. , MemFac* 0./
1194     DATA VGTCF1 / MemFac*-1.43549E-06, MemFac*-6.83584E-07,
1195     3 MemFac* 1.67699E-07, MemFac*-1.43465E-06,
1196     5 MemFac*-2.76097E-06, MemFac*-1.58094E-07,
1197     7 MemFac* 0., MemFac* 0.,
1198     9 MemFac* 0. , MemFac* 0./
1199     DATA VGTCF2 / MemFac* 7.95859E-04, MemFac* 3.72064E-04,
1200     3 MemFac*-7.65944E-05, MemFac* 8.24060E-04,
1201     5 MemFac* 1.57617E-03, MemFac* 8.44847E-05,
1202     7 MemFac* 0., MemFac* 0.,
1203     9 MemFac* 0. , MemFac* 0./
1204     DATA VGTCF3 / MemFac*-1.11575E-01, MemFac*-5.21533E-02,
1205     3 MemFac* 6.14960E-03, MemFac*-1.19602E-01,
1206     5 MemFac*-2.26109E-01, MemFac*-1.27272E-02,
1207     7 MemFac* 0., MemFac* 0.,
1208     9 MemFac* 0. , MemFac* 0./
1209     C****
1210     C**** ----------------------------------------------------------------
1211    
1212     DO 100 ChNo = 1, NCH
1213     C****
1214     TypPtr = MOD(ChNo,MemFac) + (ITYP(ChNo)-1)*MemFac + 1
1215     FTEMP(ChNo) = (TC(ChNo) - VGTLL(TypPtr)) *
1216     & (TC(ChNo) - VGTU(TypPtr)) *
1217     & ( VGTCF1(TypPtr)*TC(ChNo)*TC(ChNo) +
1218     & VGTCF2(TypPtr)*TC(ChNo) +
1219     & VGTCF3(TypPtr) )
1220     IF ( TC(ChNo) .LE. VGTLL(TypPtr) .OR. TC(ChNo) .GE. VGTU(TypPtr) )
1221     & FTEMP (ChNo) = 1.E-10
1222 ce107 1.6 FTEMP(CHNO) = MIN( 1. _d 0, MAX( FTEMP(ChNo), 1. _d -10 ) )
1223 molod 1.1 C****
1224     100 CONTINUE
1225     C****
1226     RETURN
1227     END
1228     C****
1229     C**** [ END TMPFAC ]
1230     C****
1231     C**** -----------------------------------------------------------------
1232     C**** /////////////////////////////////////////////////////////////////
1233     C**** -----------------------------------------------------------------
1234     C****
1235     C**** [ BEGIN SMFAC ]
1236     C****
1237     SUBROUTINE SMFAC (
1238     I NCH, ITYP, ESATTC, EA, PHR, SOILCO,
1239     I RCUN, VPDSTR, FTEMP, TC, PSUR, Z2,
1240     I RSOIL1, RSOIL2, VGPH1X, VGPH2X, VGRPLX,
1241     O RC
1242     & )
1243     C****
1244     C**** This subroutine estimates RC after computing the
1245     C**** leaf water potential stress.
1246     C****
1247     IMPLICIT NONE
1248     C****
1249 molod 1.2 #include "sibber.h"
1250 molod 1.1 C****
1251     INTEGER NCH
1252     INTEGER ITYP(NCH), ChNo
1253 molod 1.4 _RL ESATTC(NCH), EA(NCH), PHR(NCH), SOILCO(NCH),
1254 molod 1.1 & RCUN(NCH), VPDSTR(NCH), FTEMP(NCH), TC(NCH),
1255     & PSUR(NCH), Z2(NCH), RSOIL1(NCH), RSOIL2(NCH),
1256     & VGPH1X(NCH), VGPH2X(NCH), VGRPLX(NCH), RC(NCH)
1257 molod 1.4 _RL RCUNTD, RHOAIR, CONST, DEF, D12, DR2,
1258 molod 1.1 & RSOIL, R0, EEST, RSTFAC
1259     C****
1260     C**** -----------------------------------------------------------------
1261    
1262     DO 100 ChNo = 1, NCH
1263     C****
1264     RCUNTD = RCUN(ChNo) / ( VPDSTR(ChNo)*FTEMP(ChNo) )
1265     RHOAIR = PSUR(ChNo) * 100. / ( RGAS*TC(ChNo) )
1266    
1267     C****
1268     CONST = RHOAIR * EPSILON / PSUR(ChNo)
1269     DEF = ( ESATTC(ChNo) - EA(ChNo) ) * CONST
1270     D12 = VGPH1X(ChNo) - VGPH2X(ChNo)
1271     DR2 = PHR(ChNo) - Z2(ChNo) - VGPH2X(ChNo)
1272     RSOIL = RSOIL1(ChNo) + RSOIL2(ChNo)/SOILCO(ChNo)
1273     R0 = ( VGRPLX(ChNo) + RSOIL ) / RHOW
1274     EEST = DEF*DR2 / ( RCUNTD*D12 + DEF*R0 )
1275     RSTFAC = ( DR2 - R0*EEST ) / D12
1276 ce107 1.6 RSTFAC = MIN( 1. _d 0, MAX( 0.001 _d 0, RSTFAC ) )
1277 molod 1.1 RC(ChNo) = RCUNTD / RSTFAC
1278     C****
1279     100 CONTINUE
1280     C****
1281     RETURN
1282     END
1283     C****
1284     C**** [ END SMFAC ]
1285     C****
1286     C**** -----------------------------------------------------------------
1287     C**** /////////////////////////////////////////////////////////////////
1288     C**** -----------------------------------------------------------------
1289     C****
1290     C**** [ BEGIN RSURFP ]
1291     C****
1292     SUBROUTINE RSURFP (
1293     I NCH, UM, U2FAC, Z2, RDC, WET, ESATTC, EA,
1294     U RC,
1295     O RX1, RX2
1296     & )
1297     C****
1298     IMPLICIT NONE
1299     INTEGER NCH
1300     INTEGER ChNo
1301 molod 1.4 _RL UM(NCH), U2FAC(NCH), Z2(NCH), RDC(NCH),
1302 molod 1.1 & WET(NCH), ESATTC(NCH), EA(NCH),
1303     & RC(NCH), RX1(NCH), RX2(NCH)
1304 molod 1.4 _RL U2, RSURF, HESAT
1305 molod 1.1 C****
1306     C**** -----------------------------------------------------------------
1307    
1308     DO 100 ChNo = 1, NCH
1309     C****
1310     U2 = UM(ChNo) * U2FAC(ChNo)
1311     c RSURF = RDC(ChNo) / U2 + 30. / (1.E-20 + WET(ChNo))
1312     RSURF = RDC(ChNo) / U2 + 26. + 6. / (1.E-20 + WET(ChNo))**2
1313    
1314     C**** Account for subsaturated humidity at soil surface:
1315     C****
1316 ce107 1.6 HESAT = ESATTC(CHNO) * MIN( 1. _d 0, WET(CHNO)*2. _d 0)
1317 molod 1.1 IF( EA(CHNO) .LT. HESAT ) THEN
1318     RSURF=RSURF*( 1. + (ESATTC(CHNO)-HESAT)/(HESAT-EA(CHNO)) )
1319     ELSE
1320     RSURF=1.E10
1321     ENDIF
1322    
1323    
1324     RX1(CHNO)=RC(CHNO)
1325     RX2(CHNO)=RSURF
1326    
1327     RC(ChNo) = RC(CHNO) * RSURF / ( RC(ChNo) + RSURF )
1328     C****
1329     100 CONTINUE
1330     C****
1331     RETURN
1332     END
1333     C****
1334     C**** [ END RSURFP ]
1335     C****
1336     C**** -----------------------------------------------------------------
1337     C**** /////////////////////////////////////////////////////////////////
1338     C**** -----------------------------------------------------------------
1339     C****
1340     C**** [ BEGIN RCANOP ]
1341     C****
1342     SUBROUTINE RCANOP (
1343     I NCH, CAPAC, SNOW, SATCAP, RA, ETURB, SNWFRC,
1344     I POTFRC,
1345     U RC
1346     & )
1347     C****
1348     C**** The effective latent heat resistance RC depends on the quantity
1349     C**** of interception reservoir water and the snow cover. POTFRC
1350     C**** is the fraction of the tile from which potential evaporation
1351     C**** occurs.
1352     C****
1353     IMPLICIT NONE
1354     INTEGER NCH
1355     INTEGER ChNo
1356 molod 1.4 _RL CAPAC(NCH), SNOW(NCH), SATCAP(NCH), RA(NCH), ETURB(NCH),
1357 molod 1.1 & RC(NCH), SNWFRC(NCH), POTFRC(NCH)
1358 molod 1.4 _RL ETCRIT,RAMPFC
1359 molod 1.1
1360     C**** (Note: ETCRIT arbitrarily set to ~-5 W/m2, or -2.e-6 mm/sec.)
1361     DATA ETCRIT/ -2.E-6 /
1362     C****
1363     C**** -----------------------------------------------------------------
1364    
1365     DO 100 ChNo = 1, NCH
1366    
1367     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1368     C**** Case 1: Vegetation present (SATCAP GT .001). Potential evap. from
1369     c**** both interception reservoir and snow.
1370    
1371     IF(SATCAP(CHNO).GT..001) THEN
1372     RC(ChNo)=RC(ChNo)*(1.-POTFRC(CHNO))/
1373     & ( 1.+POTFRC(CHNO)*RC(ChNo)/RA(ChNo) )
1374     ENDIF
1375    
1376     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1377     C**** Case 2: Vegetation absent (SATCAP LE .001). Potential evap. from
1378     c**** snow only.
1379    
1380     IF(SATCAP(CHNO) .LE. .001) THEN
1381     RC(ChNo)=RC(ChNo)*(1.-SNWFRC(CHNO))/
1382     & ( 1.+SNWFRC(CHNO)*RC(ChNo)/RA(ChNo) )
1383     ENDIF
1384    
1385     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1386     C**** Assume RC=0 for condensation (dew).
1387     C**** RAMPFC is used to ensure continuity in RC.
1388    
1389     RAMPFC=ETURB(CHNO)/ETCRIT
1390     IF ( RAMPFC .GE. 0. ) RC(CHNO) = RC(CHNO)*(1.-RAMPFC)
1391     IF ( RAMPFC .GT. 1. ) RC(ChNo) = 0.
1392     C****
1393     100 CONTINUE
1394     C****
1395     RETURN
1396     END
1397     C****
1398     C**** [ END RCANOP ]
1399     C****
1400     C**** -----------------------------------------------------------------
1401     C**** /////////////////////////////////////////////////////////////////
1402     C**** -----------------------------------------------------------------
1403     C****
1404     C***** [ BEGIN WUPDAT ]
1405     C****
1406     SUBROUTINE WUPDAT (
1407     I NCH, ITYP, DTSTEP,
1408     I EVAP, SATCAP, VGWMAX, TC, RA, RC,
1409     I RX1, RX2,ESNFRC,EIRFRC,
1410     U CAPAC, SNOW, SWET, RUNOFF,
1411     O EINT, ESOI, EVEG, ESNO, RUNSRF, FWSOIL
1412     & )
1413     C****
1414     C**** This subroutine allows evapotranspiration to adjust the water
1415     C**** contents of the interception reservoir and the soil layers.
1416     C****
1417     IMPLICIT NONE
1418     C****
1419 molod 1.2 #include "sibber.h"
1420 molod 1.1 C****
1421     INTEGER NCH
1422     INTEGER ITYP(NCH), ChNo
1423 molod 1.4 _RL EVAP(NCH), SATCAP(NCH), VGWMAX(NLAY,NTYPS),
1424 molod 1.1 & TC(NCH), RA(NCH), RC(NCH),
1425     & CAPAC(NCH), SNOW(NCH), SWET(nch,NLAY),
1426     & RUNOFF(NCH), RX1(NCH),
1427     & RX2(NCH), RUNSRF(NCH), FWSOIL(NCH),
1428     & ESNFRC(NCH), EIRFRC(NCH)
1429 molod 1.4 _RL EINT(NCH), ESOI(NCH), EVEG(NCH), ESNO(NCH)
1430     _RL DTSTEP, EGRO, FWS, THRU, DEWRUN,
1431 molod 1.1 & WTOTAL,WLAY1,WLAY2,ELAY1,ELAY2,EGROI
1432     C****
1433     C**** -----------------------------------------------------------------
1434    
1435     DO 100 ChNo = 1, NCH
1436     C****
1437     C**** Partition evap between interception, snow, and ground reservoirs.
1438     C****
1439     WLAY1 = SWET(ChNo,SFCLY) * VGWMAX(SFCLY,ITYP(ChNo))
1440     WLAY2 = SWET(ChNo,ROOTLY) * VGWMAX(ROOTLY,ITYP(ChNo))
1441     WTOTAL = WLAY1 + WLAY2
1442     C****
1443     ESNO(CHNO)=ESNFRC(CHNO)*EVAP(CHNO)*DTSTEP
1444     EINT(CHNO)=EIRFRC(CHNO)*EVAP(CHNO)*DTSTEP
1445     EGRO = EVAP(CHNO)*DTSTEP - ESNO(CHNO) - EINT(CHNO)
1446    
1447     C**** Ensure that individual capacities are not exceeded.
1448    
1449     IF(ESNO(CHNO) .GT. SNOW(CHNO)) THEN
1450     EINT(CHNO)=EINT(CHNO)+(ESNO(CHNO)-SNOW(CHNO))
1451     ESNO(CHNO)=SNOW(CHNO)
1452     ENDIF
1453     EGROI=EGRO+EINT(CHNO)
1454     IF(EGROI .GT. CAPAC(CHNO)+WTOTAL) THEN
1455     ESNO(CHNO)=ESNO(CHNO)+EGROI-(CAPAC(CHNO)+WTOTAL)
1456     EGROI=CAPAC(CHNO)+WTOTAL
1457     ENDIF
1458    
1459     EINT(CHNO)=EGROI-EGRO
1460     IF(EINT(CHNO) .GT. CAPAC(CHNO)) THEN
1461     EGRO=EGRO+EINT(CHNO)-CAPAC(CHNO)
1462     EINT(CHNO)=CAPAC(CHNO)
1463     ENDIF
1464     IF(EGRO .GT. WTOTAL) THEN
1465     EINT(CHNO)=EINT(CHNO)+EGRO-WTOTAL
1466     EGRO=WTOTAL
1467     ENDIF
1468     C****
1469     C**** Separate egro into surface-evaporation/transpiration components:
1470     C****
1471     IF( RX1(CHNO)+RX2(CHNO) .NE. 0. ) THEN
1472     ESOI(CHNO)=EGRO*RX1(CHNO)/(RX1(CHNO)+RX2(CHNO))
1473     EVEG(CHNO)=EGRO - ESOI(CHNO)
1474     ELSE
1475     ESOI(CHNO)=EGRO/2.
1476     EVEG(CHNO)=EGRO/2.
1477     ENDIF
1478     C****
1479     C**** Translate ESOI and EVEG into evaporation fluxes from layers 1 and 2:
1480     C****
1481     IF( WTOTAL .GT. 0. ) THEN
1482     FWS = EVEG(CHNO) / WTOTAL
1483     ELSE
1484     FWS = 1.
1485     ENDIF
1486     ELAY1 = WLAY1*FWS + ESOI(CHNO)
1487     ELAY2 = WLAY2*FWS
1488     C****
1489     C**** Ensure that enough soil water is available in each layer:
1490     C****
1491     IF( ELAY1 .GT. WLAY1 ) THEN
1492     ELAY2 = ELAY2 + (ELAY1 - WLAY1)
1493     ELAY1 = WLAY1
1494     ENDIF
1495     IF( ELAY2 .GT. WLAY2 ) THEN
1496     ELAY1 = ELAY1 + (ELAY2 - WLAY2)
1497     ELAY2 = WLAY2
1498     ENDIF
1499    
1500     C**** Special case for condensation:
1501     IF(EVAP(CHNO) .LT. 0.) THEN
1502     EINT(CHNO)=(1.-ESNFRC(CHNO))*EVAP(CHNO)*DTSTEP
1503     ELAY1=0.
1504     ELAY2=0.
1505     ESOI(CHNO)=0.
1506     EVEG(CHNO)=0.
1507     ESNO(CHNO)=ESNFRC(CHNO)*EVAP(CHNO)*DTSTEP
1508     ENDIF
1509    
1510     C****
1511     C**** Remove moisture from reservoirs:
1512     C****
1513     SNOW(ChNo) = SNOW(ChNo) - ESNO(CHNO)
1514     CAPAC(ChNo) = CAPAC(ChNo) - EINT(CHNO)
1515     SWET(ChNo,SFCLY) = (WLAY1 - ELAY1) / VGWMAX(SFCLY,ITYP(ChNo))
1516     SWET(ChNo,ROOTLY) = (WLAY2 - ELAY2) / VGWMAX(ROOTLY,ITYP(CHNO))
1517     C****
1518     C**** Ensure against numerical precision problems:
1519 ce107 1.7 SWET(ChNo,SFCLY) = MIN( 1. _d 0, MAX( 0. _d 0, SWET(ChNo,SFCLY) )
1520     $ )
1521     SWET(ChNo,ROOTLY) = MIN( 1. _d 0, MAX( 0. _d 0, SWET(ChNo,ROOTLY)
1522     $ ) )
1523 molod 1.1 C****
1524     C****
1525     C**** -------------------------------------------------
1526     C**** DEWFALL:
1527     C****
1528     C**** If dewfall adds to cir, insure that it doesn't fill
1529     C**** beyond capacity. If resulting throughfall adds to top soil layer,
1530     C**** insure that it also doesn't fill beyond capacity.
1531     C****
1532     IF( CAPAC(ChNo) .GT. SATCAP(ChNo) ) THEN
1533     THRU = CAPAC(ChNo) - SATCAP(ChNo)
1534     CAPAC(ChNo) = SATCAP(ChNo)
1535     SWET(ChNo,SFCLY) = SWET(ChNo,SFCLY) +
1536     & THRU / VGWMAX(SFCLY,ITYP(ChNo))
1537     DEWRUN=0.
1538     IF ( SWET(ChNo,SFCLY) .GT. 1. ) THEN
1539     DEWRUN = ( SWET(ChNo,SFCLY) - 1. ) * VGWMAX(SFCLY,ITYP(ChNo))
1540     SWET(ChNo,SFCLY) = 1.
1541     RUNOFF(ChNo) = RUNOFF(ChNo) + DEWRUN/DTSTEP
1542     RUNSRF(ChNo) = RUNSRF(ChNo) + DEWRUN/DTSTEP
1543     ENDIF
1544     FWSOIL(CHNO) = FWSOIL(CHNO) + (THRU-DEWRUN)/DTSTEP
1545     ENDIF
1546     C****
1547     100 CONTINUE
1548     C****
1549     RETURN
1550     END
1551     C****
1552     C**** [ END WUPDAT ]
1553     C****
1554     C**** -----------------------------------------------------------------
1555     C**** /////////////////////////////////////////////////////////////////
1556     C**** -----------------------------------------------------------------
1557     C****
1558     C**** [ BEGIN GWATER ]
1559     C****
1560     SUBROUTINE GWATER (
1561     I NCH, ITYP, WSMAX, PHLAY, AKLAY, TC,
1562     I DTSTEP, VGZDEX, VGSLOX, WETEQ1, WETEQ2,
1563     I PHSAT, AKSAT,
1564     U SWET, RUNOFF, GDRAIN
1565     & )
1566     C****
1567     C**** This subroutine computes diffusion between soil layers.
1568     C****
1569     IMPLICIT NONE
1570     C****
1571 molod 1.2 #include "sibber.h"
1572 molod 1.1 C****
1573     INTEGER NCH
1574     INTEGER ITYP(NCH), ChNo
1575 molod 1.4 _RL VGSLOX(NCH), RUNOFF(NCH), GDRAIN(NCH)
1576     _RL ZDEP12, AKAVE, GWFLUX, ZDEP23, HALFMX, DHDZ,
1577 molod 1.1 & FAREA, TFM2, FRAMP
1578    
1579 molod 1.4 _RL WSMAX(NLAY,NTYPS), PHLAY(nch,NLAY),
1580 molod 1.1 & AKLAY(nch,NLAY), TC(NCH),
1581     & DTSTEP, SWET(nch,NLAY),
1582     & VGZDEX(NLAY,nch), WETEQ1(NCH), WETEQ2(NCH),
1583     & PHSAT(NCH), AKSAT(NCH)
1584    
1585     C****
1586     C**** ----------------------------------------------------------------
1587    
1588     DO 100 ChNo = 1, NCH
1589     C****
1590     C**** Diffusion between layer 1 and 2:
1591     ZDEP12 = VGZDEX(SFCLY,ChNo) + VGZDEX(ROOTLY,ChNo)
1592     IF( SWET(CHNO,SFCLY) .GT. WETEQ1(CHNO) ) THEN
1593     FAREA=(SWET(CHNO,SFCLY) - WETEQ1(CHNO)) / (1. - WETEQ1(CHNO))
1594     DHDZ = 1. + 2.*(PHSAT(CHNO)-PHLAY(CHNO,ROOTLY))/ZDEP12
1595     AKAVE = AKSAT(CHNO)
1596     ELSE
1597     FAREA = 1.
1598     DHDZ = 1. + 2.*(PHLAY(ChNo,SFCLY)-PHLAY(ChNo,ROOTLY))/ZDEP12
1599     AKAVE = AKLAY(ChNo,ROOTLY)
1600     ENDIF
1601     C****
1602     GWFLUX = 1000. * DTSTEP * AKAVE * DHDZ * FAREA
1603     C****
1604     C**** Test for limits on water holding capacity.
1605     C****
1606     HALFMX=0.5*ABS( SWET(CHNO,SFCLY)-WETEQ1(CHNO) )
1607     & * WSMAX(SFCLY,ITYP(CHNO))
1608     IF (GWFLUX .GE. 0.) THEN
1609     GWFLUX = MIN( GWFLUX,
1610     & SWET(ChNo,SFCLY) * WSMAX(SFCLY,ITYP(ChNo)) )
1611     GWFLUX = MIN( GWFLUX, WSMAX(ROOTLY,ITYP(ChNo)) -
1612     & SWET(ChNo,ROOTLY) * WSMAX(ROOTLY,ITYP(ChNo)) )
1613     GWFLUX = MIN( GWFLUX, HALFMX )
1614     ELSE
1615     GWFLUX = -MIN( ABS(GWFLUX),
1616     & SWET(ChNo,ROOTLY) * WSMAX(ROOTLY,ITYP(ChNo)) )
1617     GWFLUX = -MIN( ABS(GWFLUX), WSMAX(SFCLY,ITYP(ChNo)) -
1618     & SWET(ChNo,SFCLY) * WSMAX(SFCLY,ITYP(ChNo)) )
1619     GWFLUX = -MIN( ABS(GWFLUX), HALFMX )
1620     ENDIF
1621     C****
1622     C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING):
1623     TFM2=TF-2.
1624     FRAMP=(TC(CHNO)-TFM2)/2.
1625 ce107 1.6 FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) )
1626 molod 1.1 GWFLUX=GWFLUX*FRAMP
1627     C****
1628     C**** Update water contents
1629     SWET(ChNo,SFCLY) = SWET(ChNo,SFCLY) -
1630     & GWFLUX / WSMAX(SFCLY,ITYP(ChNo))
1631     SWET(ChNo,ROOTLY) = SWET(ChNo,ROOTLY) +
1632     & GWFLUX / WSMAX(ROOTLY,ITYP(ChNo))
1633     C****
1634     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1635     C**** Diffusion between root and recharge layers:
1636     ZDEP23 = VGZDEX(ROOTLY,ChNo) + VGZDEX(RECHLY,ChNo)
1637     DHDZ=1. + 2. * (PHLAY(ChNo,ROOTLY) - PHLAY(ChNo,RECHLY)) / ZDEP23
1638     IF(DHDZ.GE.0.) THEN
1639     AKAVE = AKLAY(ChNo,ROOTLY)
1640     ELSE
1641     AKAVE = AKLAY(ChNo,RECHLY)
1642     ENDIF
1643     GWFLUX = 1000. * DTSTEP * AKAVE * DHDZ
1644     C****
1645     C**** Test for limits on water holding capacity:
1646     HALFMX=0.5*ABS( SWET(CHNO,ROOTLY)-WETEQ2(CHNO) )
1647     & * WSMAX(ROOTLY,ITYP(CHNO))
1648     IF (GWFLUX .GE. 0.) THEN
1649     GWFLUX = MIN( GWFLUX,
1650     & SWET(ChNo,ROOTLY) * WSMAX(ROOTLY,ITYP(ChNo)) )
1651     GWFLUX = MIN( GWFLUX, WSMAX(RECHLY,ITYP(ChNo)) -
1652     & SWET(ChNo,RECHLY) * WSMAX(RECHLY,ITYP(ChNo)) )
1653     GWFLUX = MIN( GWFLUX, HALFMX )
1654     ELSE
1655     GWFLUX = -MIN( ABS(GWFLUX),
1656     & SWET(ChNo,RECHLY) * WSMAX(RECHLY,ITYP(ChNo)) )
1657     GWFLUX = -MIN( ABS(GWFLUX), WSMAX(ROOTLY,ITYP(ChNo)) -
1658     & SWET(ChNo,ROOTLY) * WSMAX(ROOTLY,ITYP(ChNo)) )
1659     GWFLUX = -MIN( ABS(GWFLUX), HALFMX )
1660     ENDIF
1661     C****
1662     C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING):
1663     FRAMP=(TC(CHNO)-TFM2)/2.
1664 ce107 1.6 FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) )
1665 molod 1.1 GWFLUX=GWFLUX*FRAMP
1666     C****
1667     C**** Update water contents
1668     SWET(ChNo,ROOTLY) = SWET(ChNo,ROOTLY) -
1669     & GWFLUX / WSMAX(ROOTLY,ITYP(ChNo))
1670     SWET(ChNo,RECHLY) = SWET(ChNo,RECHLY) +
1671     & GWFLUX / WSMAX(RECHLY,ITYP(ChNo))
1672     GDRAIN(CHNO)=GWFLUX/DTSTEP
1673     C****
1674     C**** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1675     C**** Flux of moisture out of lower soil layer to water table
1676     C**** (approximation to SiB)
1677     C****
1678     GWFLUX = VGSLOX(ChNo) * AKLAY(ChNo,RECHLY) * 1000. * DTSTEP
1679    
1680     C**** Prevent diffusion when ground is frozen (INCLUDE RAMPING):
1681     FRAMP=(TC(CHNO)-TFM2)/2.
1682 ce107 1.6 FRAMP=MIN(1. _d 0, MAX(0. _d 0,FRAMP) )
1683 molod 1.1 GWFLUX=GWFLUX*FRAMP
1684    
1685     GWFLUX = MIN( GWFLUX,
1686     & SWET(ChNo,RECHLY) * WSMAX(RECHLY,ITYP(ChNo)) )
1687     SWET(ChNo,RECHLY) = SWET(ChNo,RECHLY) -
1688     & GWFLUX / WSMAX(RECHLY,ITYP(ChNo))
1689     C****
1690     RUNOFF (ChNo) = RUNOFF (ChNo) + GWFLUX/DTSTEP
1691     C****
1692     100 CONTINUE
1693     C****
1694     RETURN
1695     END
1696     C****
1697     C**** [ END GWATER ]
1698    

  ViewVC Help
Powered by ViewVC 1.1.22