standard WRF version 3.0.1.1
[wrffire.git] / wrfv2_fire / phys / module_sf_noahlsm.F
blob1adb53638aabddc1385e7fe0b99f9ff54c4f3ccc
1 MODULE module_sf_noahlsm
3   USE module_model_constants
5 !   REAL, PARAMETER    :: CP = 1004.5
6   REAL, PARAMETER      :: RD = 287.04, SIGMA = 5.67E-8,                 &
7                           CPH2O = 4.218E+3,CPICE = 2.106E+3,            &
8                           LSUBF = 3.335E+5,                             &
9                           EMISSI_S = 0.95
11 ! VEGETATION PARAMETERS
12         INTEGER :: LUCATS , BARE
13         integer, PARAMETER :: NLUS=50
14         CHARACTER*4 LUTYPE
15         INTEGER, DIMENSION(1:NLUS) :: NROTBL
16         real, dimension(1:NLUS) ::  SNUPTBL, RSTBL, RGLTBL, HSTBL, LAITBL,        &
17                                     ALBTBL, Z0TBL, SHDTBL, MAXALB
18         REAL ::   TOPT_DATA,CMCMAX_DATA,CFACTR_DATA,RSMAX_DATA
20 ! SOIL PARAMETERS
21         INTEGER :: SLCATS
22         INTEGER, PARAMETER :: NSLTYPE=30
23         CHARACTER*4 SLTYPE
24         REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11,                           &
25         MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
27 ! LSM GENERAL PARAMETERS
28         INTEGER :: SLPCATS
29         INTEGER, PARAMETER :: NSLOPE=30
30         REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
31         REAL ::  SBETA_DATA,FXEXP_DATA,CSOIL_DATA,SALP_DATA,REFDK_DATA,           &
32                  REFKDT_DATA,FRZK_DATA,ZBOT_DATA,  SMLOW_DATA,SMHIGH_DATA,        &
33                         CZIL_DATA
35         CHARACTER*256  :: err_message
38 CONTAINS
41       SUBROUTINE SFLX (FFROZP,ICE,DT,ZLVL,NSOIL,SLDPTH,                 &    !C
42                        LOCAL,                                           &    !L
43                        LLANDUSE, LSOIL,                                 &    !CL
44                        LWDN,SOLDN,SOLNET,SFCPRS,PRCP,SFCTMP,Q2,SFCSPD,  &    !F
45                        COSZ,PRCPRAIN, SOLARDIRECT,                      &    !F
46                        TH2,Q2SAT,DQSDT2,                                &    !I
47                        VEGTYP,SOILTYP,SLOPETYP,SHDFAC,SHDMIN,SHDMAX,    &    !I
48                        ALB, SNOALB,TBOT, Z0BRD, Z0, EMISSI, EMBRD,      &    !S
49                        CMC,T1,STC,SMC,SH2O,SNOWH,SNEQV,ALBEDO,CH,CM,    &    !H
50 ! ----------------------------------------------------------------------
51 ! OUTPUTS, DIAGNOSTICS, PARAMETERS BELOW GENERALLY NOT NECESSARY WHEN
52 ! COUPLED WITH E.G. A NWP MODEL (SUCH AS THE NOAA/NWS/NCEP MESOSCALE ETA
53 ! MODEL).  OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
54 ! ----------------------------------------------------------------------
55                        ETA,SHEAT, ETA_KINEMATIC,FDOWN,                  &    !O
56                        EC,EDIR,ET,ETT,ESNOW,DRIP,DEW,                   &    !O
57                        BETA,ETP,SSOIL,                                  &    !O
58                        FLX1,FLX2,FLX3,                                  &    !O
59                        SNOMLT,SNCOVR,                                   &    !O
60                        RUNOFF1,RUNOFF2,RUNOFF3,                         &    !O
61                        RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL,             &    !O
62                        SOILW,SOILM,Q1,                                  &    !D
63                        SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT)                    !P
64 ! ----------------------------------------------------------------------
65 ! SUBROUTINE SFLX - UNIFIED NOAHLSM VERSION 1.0 JULY 2007
66 ! ----------------------------------------------------------------------
67 ! SUB-DRIVER FOR "Noah LSM" FAMILY OF PHYSICS SUBROUTINES FOR A
68 ! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE SOIL MOISTURE, SOIL
69 ! ICE, SOIL TEMPERATURE, SKIN TEMPERATURE, SNOWPACK WATER CONTENT,
70 ! SNOWDEPTH, AND ALL TERMS OF THE SURFACE ENERGY BALANCE AND SURFACE
71 ! WATER BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF DOWNWARD
72 ! RADIATION AND PRECIP)
73 ! ----------------------------------------------------------------------
74 ! SFLX ARGUMENT LIST KEY:
75 ! ----------------------------------------------------------------------
76 !  C  CONFIGURATION INFORMATION
77 !  L  LOGICAL
78 ! CL  4-string character bearing logical meaning
79 !  F  FORCING DATA
80 !  I  OTHER (INPUT) FORCING DATA
81 !  S  SURFACE CHARACTERISTICS
82 !  H  HISTORY (STATE) VARIABLES
83 !  O  OUTPUT VARIABLES
84 !  D  DIAGNOSTIC OUTPUT
85 !  P  Parameters
86 !  Msic Miscellaneous terms passed from gridded driver
87 ! ----------------------------------------------------------------------
88 ! 1. CONFIGURATION INFORMATION (C):
89 ! ----------------------------------------------------------------------
90 !   ICE        SEA-ICE FLAG  (=1: SEA-ICE, =0: LAND)
91 !   DT         TIMESTEP (SEC) (DT SHOULD NOT EXCEED 3600 SECS, RECOMMEND
92 !                1800 SECS OR LESS)
93 !   ZLVL       HEIGHT (M) ABOVE GROUND OF ATMOSPHERIC FORCING VARIABLES
94 !   NSOIL      NUMBER OF SOIL LAYERS (AT LEAST 2, AND NOT GREATER THAN
95 !                PARAMETER NSOLD SET BELOW)
96 !   SLDPTH     THE THICKNESS OF EACH SOIL LAYER (M)
97 ! ----------------------------------------------------------------------
98 ! 2. LOGICAL:
99 ! ----------------------------------------------------------------------
100 !   LCH       Exchange coefficient (Ch) calculation flag (false: using
101 !                ch-routine SFCDIF; true: Ch is brought in)
102 !   LOCAL      Flag for local-site simulation (where there is no
103 !              maps for albedo, veg fraction, and roughness
104 !             true:  all LSM parameters (inluding albedo, veg fraction and
105 !                    roughness length) will be defined by three tables
106 !   LLANDUSE  (=USGS, using USGS landuse classification)
107 !   LSOIL     (=STAS, using FAO/STATSGO soil texture classification)
108 ! ----------------------------------------------------------------------
109 ! 3. FORCING DATA (F):
110 ! ----------------------------------------------------------------------
111 !   LWDN       LW DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET LONGWAVE)
112 !   SOLDN      SOLAR DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET SOLAR)
113 !   SOLNET     NET DOWNWARD SOLAR RADIATION ((W M-2; POSITIVE)
114 !   SFCPRS     PRESSURE AT HEIGHT ZLVL ABOVE GROUND (PASCALS)
115 !   PRCP       PRECIP RATE (KG M-2 S-1) (NOTE, THIS IS A RATE)
116 !   SFCTMP     AIR TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
117 !   TH2        AIR POTENTIAL TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
118 !   Q2         MIXING RATIO AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
119 !   COSZ       Solar zenith angle (not used for now)
120 !   PRCPRAIN   Liquid-precipitation rate (KG M-2 S-1) (not used)
121 ! SOLARDIRECT  Direct component of downward solar radiation (W M-2) (not used)
122 !   FFROZP     FRACTION OF FROZEN PRECIPITATION
123 ! ----------------------------------------------------------------------
124 ! 4. OTHER FORCING (INPUT) DATA (I):
125 ! ----------------------------------------------------------------------
126 !   SFCSPD     WIND SPEED (M S-1) AT HEIGHT ZLVL ABOVE GROUND
127 !   Q2SAT      SAT SPECIFIC HUMIDITY AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
128 !   DQSDT2     SLOPE OF SAT SPECIFIC HUMIDITY CURVE AT T=SFCTMP
129 !                (KG KG-1 K-1)
130 ! ----------------------------------------------------------------------
131 ! 5. CANOPY/SOIL CHARACTERISTICS (S):
132 ! ----------------------------------------------------------------------
133 !   VEGTYP     VEGETATION TYPE (INTEGER INDEX)
134 !   SOILTYP    SOIL TYPE (INTEGER INDEX)
135 !   SLOPETYP   CLASS OF SFC SLOPE (INTEGER INDEX)
136 !   SHDFAC     AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
137 !                (FRACTION= 0.0-1.0)
138 !   SHDMIN     MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
139 !                (FRACTION= 0.0-1.0) <= SHDFAC
140 !   PTU        PHOTO THERMAL UNIT (PLANT PHENOLOGY FOR ANNUALS/CROPS)
141 !                (NOT YET USED, BUT PASSED TO REDPRM FOR FUTURE USE IN
142 !                VEG PARMS)
143 !   ALB        BACKROUND SNOW-FREE SURFACE ALBEDO (FRACTION), FOR JULIAN
144 !                DAY OF YEAR (USUALLY FROM TEMPORAL INTERPOLATION OF
145 !                MONTHLY MEAN VALUES' CALLING PROG MAY OR MAY NOT
146 !                INCLUDE DIURNAL SUN ANGLE EFFECT)
147 !   SNOALB     UPPER BOUND ON MAXIMUM ALBEDO OVER DEEP SNOW (E.G. FROM
148 !                ROBINSON AND KUKLA, 1985, J. CLIM. & APPL. METEOR.)
149 !   TBOT       BOTTOM SOIL TEMPERATURE (LOCAL YEARLY-MEAN SFC AIR
150 !                TEMPERATURE)
151 !   Z0BRD      Background fixed roughness length (M)
152 !   Z0         Time varying roughness length (M) as function of snow depth
154 !   EMBRD      Background surface emissivity (between 0 and 1)
155 !   EMISSI     Surface emissivity (between 0 and 1)
156 ! ----------------------------------------------------------------------
157 ! 6. HISTORY (STATE) VARIABLES (H):
158 ! ----------------------------------------------------------------------
159 !  CMC         CANOPY MOISTURE CONTENT (M)
160 !  T1          GROUND/CANOPY/SNOWPACK) EFFECTIVE SKIN TEMPERATURE (K)
161 !  STC(NSOIL)  SOIL TEMP (K)
162 !  SMC(NSOIL)  TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
163 !  SH2O(NSOIL) UNFROZEN SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
164 !                NOTE: FROZEN SOIL MOISTURE = SMC - SH2O
165 !  SNOWH       ACTUAL SNOW DEPTH (M)
166 !  SNEQV       LIQUID WATER-EQUIVALENT SNOW DEPTH (M)
167 !                NOTE: SNOW DENSITY = SNEQV/SNOWH
168 !  ALBEDO      SURFACE ALBEDO INCLUDING SNOW EFFECT (UNITLESS FRACTION)
169 !                =SNOW-FREE ALBEDO (ALB) WHEN SNEQV=0, OR
170 !                =FCT(MSNOALB,ALB,VEGTYP,SHDFAC,SHDMIN) WHEN SNEQV>0
171 !  CH          SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
172 !                (M S-1); NOTE: CH IS TECHNICALLY A CONDUCTANCE SINCE
173 !                IT HAS BEEN MULTIPLIED BY WIND SPEED.
174 !  CM          SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM (M S-1); NOTE:
175 !                CM IS TECHNICALLY A CONDUCTANCE SINCE IT HAS BEEN
176 !                MULTIPLIED BY WIND SPEED.
177 ! ----------------------------------------------------------------------
178 ! 7. OUTPUT (O):
179 ! ----------------------------------------------------------------------
180 ! OUTPUT VARIABLES NECESSARY FOR A COUPLED NUMERICAL WEATHER PREDICTION
181 ! MODEL, E.G. NOAA/NWS/NCEP MESOSCALE ETA MODEL.  FOR THIS APPLICATION,
182 ! THE REMAINING OUTPUT/DIAGNOSTIC/PARAMETER BLOCKS BELOW ARE NOT
183 ! NECESSARY.  OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
184 !   ETA        ACTUAL LATENT HEAT FLUX (W m-2: NEGATIVE, IF UP FROM
185 !              SURFACE)
186 !  ETA_KINEMATIC atctual latent heat flux in Kg m-2 s-1
187 !   SHEAT      SENSIBLE HEAT FLUX (W M-2: NEGATIVE, IF UPWARD FROM
188 !              SURFACE)
189 !   FDOWN      Radiation forcing at the surface (W m-2) = SOLDN*(1-alb)+LWDN
190 ! ----------------------------------------------------------------------
191 !   EC         CANOPY WATER EVAPORATION (W m-2)
192 !   EDIR       DIRECT SOIL EVAPORATION (W m-2)
193 !   ET(NSOIL)  PLANT TRANSPIRATION FROM A PARTICULAR ROOT (SOIL) LAYER
194 !                 (W m-2)
195 !   ETT        TOTAL PLANT TRANSPIRATION (W m-2)
196 !   ESNOW      SUBLIMATION FROM (OR DEPOSITION TO IF <0) SNOWPACK
197 !                (W m-2)
198 !   DRIP       THROUGH-FALL OF PRECIP AND/OR DEW IN EXCESS OF CANOPY
199 !                WATER-HOLDING CAPACITY (M)
200 !   DEW        DEWFALL (OR FROSTFALL FOR T<273.15) (M)
201 ! ----------------------------------------------------------------------
202 !   BETA       RATIO OF ACTUAL/POTENTIAL EVAP (DIMENSIONLESS)
203 !   ETP        POTENTIAL EVAPORATION (W m-2)
204 !   SSOIL      SOIL HEAT FLUX (W M-2: NEGATIVE IF DOWNWARD FROM SURFACE)
205 ! ----------------------------------------------------------------------
206 !   FLX1       PRECIP-SNOW SFC (W M-2)
207 !   FLX2       FREEZING RAIN LATENT HEAT FLUX (W M-2)
208 !   FLX3       PHASE-CHANGE HEAT FLUX FROM SNOWMELT (W M-2)
209 ! ----------------------------------------------------------------------
210 !   SNOMLT     SNOW MELT (M) (WATER EQUIVALENT)
211 !   SNCOVR     FRACTIONAL SNOW COVER (UNITLESS FRACTION, 0-1)
212 ! ----------------------------------------------------------------------
213 !   RUNOFF1    SURFACE RUNOFF (M S-1), NOT INFILTRATING THE SURFACE
214 !   RUNOFF2    SUBSURFACE RUNOFF (M S-1), DRAINAGE OUT BOTTOM OF LAST
215 !                SOIL LAYER (BASEFLOW)
216 !   RUNOFF3    NUMERICAL TRUNCTATION IN EXCESS OF POROSITY (SMCMAX)
217 !                FOR A GIVEN SOIL LAYER AT THE END OF A TIME STEP (M S-1).
218 ! Note: the above RUNOFF2 is actually the sum of RUNOFF2 and RUNOFF3
219 ! ----------------------------------------------------------------------
220 !   RC         CANOPY RESISTANCE (S M-1)
221 !   PC         PLANT COEFFICIENT (UNITLESS FRACTION, 0-1) WHERE PC*ETP
222 !                = ACTUAL TRANSP
223 !   XLAI       LEAF AREA INDEX (DIMENSIONLESS)
224 !   RSMIN      MINIMUM CANOPY RESISTANCE (S M-1)
225 !   RCS        INCOMING SOLAR RC FACTOR (DIMENSIONLESS)
226 !   RCT        AIR TEMPERATURE RC FACTOR (DIMENSIONLESS)
227 !   RCQ        ATMOS VAPOR PRESSURE DEFICIT RC FACTOR (DIMENSIONLESS)
228 !   RCSOIL     SOIL MOISTURE RC FACTOR (DIMENSIONLESS)
229 ! ----------------------------------------------------------------------
230 ! 8. DIAGNOSTIC OUTPUT (D):
231 ! ----------------------------------------------------------------------
232 !   SOILW      AVAILABLE SOIL MOISTURE IN ROOT ZONE (UNITLESS FRACTION
233 !              BETWEEN SMCWLT AND SMCMAX)
234 !   SOILM      TOTAL SOIL COLUMN MOISTURE CONTENT (FROZEN+UNFROZEN) (M)
235 !   Q1         Effective mixing ratio at surface (kg kg-1), used for
236 !              diagnosing the mixing ratio at 2 meter for coupled model
237 ! ----------------------------------------------------------------------
238 ! 9. PARAMETERS (P):
239 ! ----------------------------------------------------------------------
240 !   SMCWLT     WILTING POINT (VOLUMETRIC)
241 !   SMCDRY     DRY SOIL MOISTURE THRESHOLD WHERE DIRECT EVAP FRM TOP
242 !                LAYER ENDS (VOLUMETRIC)
243 !   SMCREF     SOIL MOISTURE THRESHOLD WHERE TRANSPIRATION BEGINS TO
244 !                STRESS (VOLUMETRIC)
245 !   SMCMAX     POROSITY, I.E. SATURATED VALUE OF SOIL MOISTURE
246 !                (VOLUMETRIC)
247 !   NROOT      NUMBER OF ROOT LAYERS, A FUNCTION OF VEG TYPE, DETERMINED
248 !              IN SUBROUTINE REDPRM.
249 ! ----------------------------------------------------------------------
252       IMPLICIT NONE
253 ! ----------------------------------------------------------------------
255 ! DECLARATIONS - LOGICAL AND CHARACTERS
256 ! ----------------------------------------------------------------------
257       LOGICAL, INTENT(IN)::  LOCAL
258       LOGICAL            ::  FRZGRA, SNOWNG
259       CHARACTER (LEN=4), INTENT(IN)::  LLANDUSE, LSOIL
261 ! ----------------------------------------------------------------------
262 ! 1. CONFIGURATION INFORMATION (C):
263 ! ----------------------------------------------------------------------
264       INTEGER,INTENT(IN) ::  ICE,NSOIL,SLOPETYP,SOILTYP,VEGTYP
265       INTEGER,INTENT(OUT)::  NROOT
266       INTEGER  KZ, K, iout
268 ! ----------------------------------------------------------------------
269 ! 2. LOGICAL:
270 ! ----------------------------------------------------------------------
271       REAL, INTENT(IN)   :: SHDMIN,SHDMAX,DT,DQSDT2,LWDN,PRCP,PRCPRAIN,     &
272                             Q2,Q2SAT,SFCPRS,SFCSPD,SFCTMP, SNOALB,          &
273                             SOLDN,SOLNET,TBOT,TH2,ZLVL,                            &
274                             EMBRD, FFROZP
275       REAL, INTENT(INOUT):: COSZ, SOLARDIRECT,ALBEDO,CH,CM,                 &
276                             CMC,SNEQV,SNCOVR,SNOWH,T1,XLAI,SHDFAC,Z0BRD,ALB,&
277                             EMISSI
278       REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SLDPTH
279       REAL, DIMENSION(1:NSOIL), INTENT(OUT):: ET
280       REAL, DIMENSION(1:NSOIL), INTENT(INOUT) ::  SH2O, SMC, STC
281       REAL,DIMENSION(1:NSOIL)::   RTDIS, ZSOIL
283       REAL,INTENT(OUT)   :: ETA_KINEMATIC,BETA,DEW,DRIP,EC,EDIR,ESNOW,ETA,  &
284                             ETP,FLX1,FLX2,FLX3,SHEAT,PC,RUNOFF1,RUNOFF2,    &
285                             RUNOFF3,RC,RSMIN,RCQ,RCS,RCSOIL,RCT,SSOIL,      &
286                             SMCDRY,SMCMAX,SMCREF,SMCWLT,SNOMLT, SOILM,      &
287                             SOILW,FDOWN,Q1
288       REAL :: BEXP,CFACTR,CMCMAX,CSOIL,CZIL,DF1,DF1H,DF1A,DKSAT,DWSAT,      &
289               DSOIL,DTOT,ETT,FRCSNO,FRCSOI,EPSCA,F1,FXEXP,FRZX,HS,          &
290               KDT,LVH2O,PRCP1,PSISAT,QUARTZ,R,RCH,REFKDT,RR,RGL,            &
291               RSMAX,                                                        &
292               RSNOW,SNDENS,SNCOND,SBETA,SN_NEW,SLOPE,SNUP,SALP,SOILWM,      &
293               SOILWW,T1V,T24,T2V,TH2V,TOPT,TFREEZ,TSNOW,ZBOT,Z0,PRCPF,      &
294               ETNS,PTU,LSUBS
296 ! ----------------------------------------------------------------------
297 ! DECLARATIONS - PARAMETERS
298 ! ----------------------------------------------------------------------
299       PARAMETER (TFREEZ = 273.15)
300       PARAMETER (LVH2O = 2.501E+6)
301       PARAMETER (LSUBS = 2.83E+6)
302       PARAMETER (R = 287.04)
303 ! ----------------------------------------------------------------------
304 !   INITIALIZATION
305 ! ----------------------------------------------------------------------
306          RUNOFF1 = 0.0
307          RUNOFF2 = 0.0
308          RUNOFF3 = 0.0
309          SNOMLT = 0.0
311 ! ----------------------------------------------------------------------
312 !  THE VARIABLE "ICE" IS A FLAG DENOTING SEA-ICE CASE
313 ! ----------------------------------------------------------------------
314 ! SEA-ICE LAYERS ARE EQUAL THICKNESS AND SUM TO 3 METERS
315 ! ----------------------------------------------------------------------
316          IF (ICE == 1) THEN
317             DO KZ = 1,NSOIL
318                ZSOIL (KZ) = -3.* FLOAT (KZ)/ FLOAT (NSOIL)
319             END DO
321 ! ----------------------------------------------------------------------
322 ! CALCULATE DEPTH (NEGATIVE) BELOW GROUND FROM TOP SKIN SFC TO BOTTOM OF
323 !   EACH SOIL LAYER.  NOTE:  SIGN OF ZSOIL IS NEGATIVE (DENOTING BELOW
324 !   GROUND)
325 ! ----------------------------------------------------------------------
326          ELSE
327             ZSOIL (1) = - SLDPTH (1)
328             DO KZ = 2,NSOIL
329                ZSOIL (KZ) = - SLDPTH (KZ) + ZSOIL (KZ -1)
330             END DO
331 ! ----------------------------------------------------------------------
332 ! NEXT IS CRUCIAL CALL TO SET THE LAND-SURFACE PARAMETERS, INCLUDING
333 ! SOIL-TYPE AND VEG-TYPE DEPENDENT PARAMETERS.
334 ! ----------------------------------------------------------------------
335           CALL REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX,TOPT,   &
336                        REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX,    &
337                          PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT,          &
338                          SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP,      &
339                          RTDIS,SLDPTH,ZSOIL,NROOT,NSOIL,Z0BRD,CZIL,XLAI,   &
340                          CSOIL,ALB,PTU,LLANDUSE,LSOIL,LOCAL)
341          END IF
343 !urban
344          IF(VEGTYP==1)THEN
345               SHDFAC=0.05
346               RSMIN=400.0
347               SMCMAX = 0.45
348               SMCREF = 0.42
349               SMCWLT = 0.40
350               SMCDRY = 0.40
351          ENDIF
353 ! ----------------------------------------------------------------------
354 !  INITIALIZE PRECIPITATION LOGICALS.
355 ! ----------------------------------------------------------------------
356          SNOWNG = .FALSE.
357          FRZGRA = .FALSE.
359 ! ----------------------------------------------------------------------
360 ! IF SEA-ICE CASE, ASSIGN DEFAULT WATER-EQUIV SNOW ON TOP
361 ! ----------------------------------------------------------------------
362          IF (ICE == 1) THEN
363             SNEQV = 0.01
364             SNOWH = 0.05
365 ! ----------------------------------------------------------------------
366 ! IF INPUT SNOWPACK IS NONZERO, THEN COMPUTE SNOW DENSITY "SNDENS" AND
367 !   SNOW THERMAL CONDUCTIVITY "SNCOND" (NOTE THAT CSNOW IS A FUNCTION
368 !   SUBROUTINE)
369 ! ----------------------------------------------------------------------
370          END IF
371          IF (SNEQV == 0.0) THEN
372             SNDENS = 0.0
373             SNOWH = 0.0
374             SNCOND = 1.0
375          ELSE
376             SNDENS = SNEQV / SNOWH
377             IF(SNDENS > 1.0) THEN
378              CALL wrf_error_fatal ( 'Physical snow depth is less than snow water equiv.' )
379             ENDIF
380             CALL CSNOW (SNCOND,SNDENS)
381          END IF
382 ! ----------------------------------------------------------------------
383 ! DETERMINE IF IT'S PRECIPITATING AND WHAT KIND OF PRECIP IT IS.
384 ! IF IT'S PRCPING AND THE AIR TEMP IS COLDER THAN 0 C, IT'S SNOWING!
385 ! IF IT'S PRCPING AND THE AIR TEMP IS WARMER THAN 0 C, BUT THE GRND
386 ! TEMP IS COLDER THAN 0 C, FREEZING RAIN IS PRESUMED TO BE FALLING.
387 ! ----------------------------------------------------------------------
388          IF (PRCP > 0.0) THEN
389 ! snow defined when fraction of frozen precip (FFROZP) > 0.5,
390 ! passed in from model microphysics.
391             IF (FFROZP .GT. 0.5) THEN
392                SNOWNG = .TRUE.
393             ELSE
394                IF (T1 <= TFREEZ) FRZGRA = .TRUE.
395             END IF
396          END IF
397 ! ----------------------------------------------------------------------
398 ! IF EITHER PRCP FLAG IS SET, DETERMINE NEW SNOWFALL (CONVERTING PRCP
399 ! RATE FROM KG M-2 S-1 TO A LIQUID EQUIV SNOW DEPTH IN METERS) AND ADD
400 ! IT TO THE EXISTING SNOWPACK.
401 ! NOTE THAT SINCE ALL PRECIP IS ADDED TO SNOWPACK, NO PRECIP INFILTRATES
402 ! INTO THE SOIL SO THAT PRCP1 IS SET TO ZERO.
403 ! ----------------------------------------------------------------------
404          IF ( (SNOWNG) .OR. (FRZGRA) ) THEN
405             SN_NEW = PRCP * DT * 0.001
406             SNEQV = SNEQV + SN_NEW
407             PRCPF = 0.0
409 ! ----------------------------------------------------------------------
410 ! UPDATE SNOW DENSITY BASED ON NEW SNOWFALL, USING OLD AND NEW SNOW.
411 ! UPDATE SNOW THERMAL CONDUCTIVITY
412 ! ----------------------------------------------------------------------
413             CALL SNOW_NEW (SFCTMP,SN_NEW,SNOWH,SNDENS)
414             CALL CSNOW (SNCOND,SNDENS)
416 ! ----------------------------------------------------------------------
417 ! PRECIP IS LIQUID (RAIN), HENCE SAVE IN THE PRECIP VARIABLE THAT
418 ! LATER CAN WHOLELY OR PARTIALLY INFILTRATE THE SOIL (ALONG WITH
419 ! ANY CANOPY "DRIP" ADDED TO THIS LATER)
420 ! ----------------------------------------------------------------------
421          ELSE
422             PRCPF = PRCP
423          END IF
424 ! ----------------------------------------------------------------------
425 ! DETERMINE SNOWCOVER AND ALBEDO OVER LAND.
426 ! ----------------------------------------------------------------------
427 ! ----------------------------------------------------------------------
428 ! IF SNOW DEPTH=0, SET SNOW FRACTION=0, ALBEDO=SNOW FREE ALBEDO.
429 ! ----------------------------------------------------------------------
430          IF (ICE == 0) THEN
431             IF (SNEQV  == 0.0) THEN
432                SNCOVR = 0.0
433                ALBEDO = ALB
434                EMISSI = EMBRD
435             ELSE
436 ! ----------------------------------------------------------------------
437 ! DETERMINE SNOW FRACTIONAL COVERAGE.
438 ! DETERMINE SURFACE ALBEDO MODIFICATION DUE TO SNOWDEPTH STATE.
439 ! ----------------------------------------------------------------------
440               CALL SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
441 ! limit snow cover fraction to maximum of 0.98
442               SNCOVR = MIN(SNCOVR,0.98)
443               CALL ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,TSNOW,ALBEDO,EMISSI)
444             END IF
445 ! ----------------------------------------------------------------------
446 ! SNOW COVER, ALBEDO OVER SEA-ICE
447 ! ----------------------------------------------------------------------
448          ELSE
449             SNCOVR = 1.0
450             ALBEDO = 0.65
451             EMISSI = EMISSI_S
452          END IF
453 ! ----------------------------------------------------------------------
454 ! THERMAL CONDUCTIVITY FOR SEA-ICE CASE
455 ! ----------------------------------------------------------------------
456          IF (ICE == 1) THEN
457             DF1 = 2.2
458          ELSE
459 ! ----------------------------------------------------------------------
460 ! NEXT CALCULATE THE SUBSURFACE HEAT FLUX, WHICH FIRST REQUIRES
461 ! CALCULATION OF THE THERMAL DIFFUSIVITY.  TREATMENT OF THE
462 ! LATTER FOLLOWS THAT ON PAGES 148-149 FROM "HEAT TRANSFER IN
463 ! COLD CLIMATES", BY V. J. LUNARDINI (PUBLISHED IN 1981
464 ! BY VAN NOSTRAND REINHOLD CO.) I.E. TREATMENT OF TWO CONTIGUOUS
465 ! "PLANE PARALLEL" MEDIUMS (NAMELY HERE THE FIRST SOIL LAYER
466 ! AND THE SNOWPACK LAYER, IF ANY). THIS DIFFUSIVITY TREATMENT
467 ! BEHAVES WELL FOR BOTH ZERO AND NONZERO SNOWPACK, INCLUDING THE
468 ! LIMIT OF VERY THIN SNOWPACK.  THIS TREATMENT ALSO ELIMINATES
469 ! THE NEED TO IMPOSE AN ARBITRARY UPPER BOUND ON SUBSURFACE
470 ! HEAT FLUX WHEN THE SNOWPACK BECOMES EXTREMELY THIN.
471 ! ----------------------------------------------------------------------
472 ! FIRST CALCULATE THERMAL DIFFUSIVITY OF TOP SOIL LAYER, USING
473 ! BOTH THE FROZEN AND LIQUID SOIL MOISTURE, FOLLOWING THE
474 ! SOIL THERMAL DIFFUSIVITY FUNCTION OF PETERS-LIDARD ET AL.
475 ! (1998,JAS, VOL 55, 1209-1224), WHICH REQUIRES THE SPECIFYING
476 ! THE QUARTZ CONTENT OF THE GIVEN SOIL CLASS (SEE ROUTINE REDPRM)
477 ! ----------------------------------------------------------------------
478 ! ----------------------------------------------------------------------
479 ! NEXT ADD SUBSURFACE HEAT FLUX REDUCTION EFFECT FROM THE
480 ! OVERLYING GREEN CANOPY, ADAPTED FROM SECTION 2.1.2 OF
481 ! PETERS-LIDARD ET AL. (1997, JGR, VOL 102(D4))
482 ! ----------------------------------------------------------------------
483             CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
485 !urban
486             IF (VEGTYP==1) DF1=3.24
488             DF1 = DF1 * EXP (SBETA * SHDFAC)
489 ! ----------------------------------------------------------------------
490 ! FINALLY "PLANE PARALLEL" SNOWPACK EFFECT FOLLOWING
491 ! V.J. LINARDINI REFERENCE CITED ABOVE. NOTE THAT DTOT IS
492 ! COMBINED DEPTH OF SNOWDEPTH AND THICKNESS OF FIRST SOIL LAYER
493 ! ----------------------------------------------------------------------
494          END IF
496          DSOIL = - (0.5 * ZSOIL (1))
497          IF (SNEQV == 0.) THEN
498             SSOIL = DF1 * (T1- STC (1) ) / DSOIL
499          ELSE
500             DTOT = SNOWH + DSOIL
501             FRCSNO = SNOWH / DTOT
503 ! 1. HARMONIC MEAN (SERIES FLOW)
504 !        DF1 = (SNCOND*DF1)/(FRCSOI*SNCOND+FRCSNO*DF1)
505             FRCSOI = DSOIL / DTOT
506 ! 2. ARITHMETIC MEAN (PARALLEL FLOW)
507 !        DF1 = FRCSNO*SNCOND + FRCSOI*DF1
508             DF1H = (SNCOND * DF1)/ (FRCSOI * SNCOND+ FRCSNO * DF1)
510 ! 3. GEOMETRIC MEAN (INTERMEDIATE BETWEEN HARMONIC AND ARITHMETIC MEAN)
511 !        DF1 = (SNCOND**FRCSNO)*(DF1**FRCSOI)
512 ! weigh DF by snow fraction
513 !        DF1 = DF1H*SNCOVR + DF1A*(1.0-SNCOVR)
514 !        DF1 = DF1H*SNCOVR + DF1*(1.0-SNCOVR)
515             DF1A = FRCSNO * SNCOND+ FRCSOI * DF1
517 ! ----------------------------------------------------------------------
518 ! CALCULATE SUBSURFACE HEAT FLUX, SSOIL, FROM FINAL THERMAL DIFFUSIVITY
519 ! OF SURFACE MEDIUMS, DF1 ABOVE, AND SKIN TEMPERATURE AND TOP
520 ! MID-LAYER SOIL TEMPERATURE
521 ! ----------------------------------------------------------------------
522             DF1 = DF1A * SNCOVR + DF1* (1.0- SNCOVR)
523             SSOIL = DF1 * (T1- STC (1) ) / DTOT
524          END IF
525 ! ----------------------------------------------------------------------
526 ! DETERMINE SURFACE ROUGHNESS OVER SNOWPACK USING SNOW CONDITION FROM
527 ! THE PREVIOUS TIMESTEP.
528 ! ----------------------------------------------------------------------
529          IF (SNCOVR  > 0. ) THEN
530             CALL SNOWZ0 (SNCOVR,Z0,Z0BRD)
531          ELSE
532             Z0=Z0BRD
533          END IF
534 ! ----------------------------------------------------------------------
535 ! NEXT CALL ROUTINE SFCDIF TO CALCULATE THE SFC EXCHANGE COEF (CH) FOR
536 ! HEAT AND MOISTURE.
538 ! NOTE !!!
539 ! DO NOT CALL SFCDIF UNTIL AFTER ABOVE CALL TO REDPRM, IN CASE
540 ! ALTERNATIVE VALUES OF ROUGHNESS LENGTH (Z0) AND ZILINTINKEVICH COEF
541 ! (CZIL) ARE SET THERE VIA NAMELIST I/O.
543 ! NOTE !!!
544 ! ROUTINE SFCDIF RETURNS A CH THAT REPRESENTS THE WIND SPD TIMES THE
545 ! "ORIGINAL" NONDIMENSIONAL "Ch" TYPICAL IN LITERATURE.  HENCE THE CH
546 ! RETURNED FROM SFCDIF HAS UNITS OF M/S.  THE IMPORTANT COMPANION
547 ! COEFFICIENT OF CH, CARRIED HERE AS "RCH", IS THE CH FROM SFCDIF TIMES
548 ! AIR DENSITY AND PARAMETER "CP".  "RCH" IS COMPUTED IN "CALL PENMAN".
549 ! RCH RATHER THAN CH IS THE COEFF USUALLY INVOKED LATER IN EQNS.
551 ! NOTE !!!
552 ! ----------------------------------------------------------------------
553 ! SFCDIF ALSO RETURNS THE SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM, CM,
554 ! ALSO KNOWN AS THE SURFACE DRAGE COEFFICIENT. Needed as a state variable
555 ! for iterative/implicit solution of CH in SFCDIF
556 ! ----------------------------------------------------------------------
557 !        IF(.NOT.LCH) THEN
558 !          T1V = T1 * (1.0+ 0.61 * Q2)
559 !          TH2V = TH2 * (1.0+ 0.61 * Q2)
560 !          CALL SFCDIF_off (ZLVL,Z0,T1V,TH2V,SFCSPD,CZIL,CM,CH)
561 !        ENDIF
563 ! ----------------------------------------------------------------------
564 ! CALL PENMAN SUBROUTINE TO CALCULATE POTENTIAL EVAPORATION (ETP), AND
565 ! OTHER PARTIAL PRODUCTS AND SUMS SAVE IN COMMON/RITE FOR LATER
566 ! CALCULATIONS.
567 ! ----------------------------------------------------------------------
568 ! ----------------------------------------------------------------------
569 ! CALCULATE TOTAL DOWNWARD RADIATION (SOLAR PLUS LONGWAVE) NEEDED IN
570 ! PENMAN EP SUBROUTINE THAT FOLLOWS
571 ! ----------------------------------------------------------------------
572 !         FDOWN = SOLDN * (1.0- ALBEDO) + LWDN
573          FDOWN =  SOLNET + LWDN
574 ! ----------------------------------------------------------------------
575 ! CALC VIRTUAL TEMPS AND VIRTUAL POTENTIAL TEMPS NEEDED BY SUBROUTINES
576 ! PENMAN.
577          T2V = SFCTMP * (1.0+ 0.61 * Q2 )
579          iout=0
580          if(iout.eq.1) then
581          print*,'before penman'
582          print*,' SFCTMP',SFCTMP,'SFCPRS',SFCPRS,'CH',CH,'T2V',T2V,      &
583        'TH2',TH2,'PRCP',PRCP,'FDOWN',FDOWN,'T24',T24,'SSOIL',SSOIL,      &
584         'Q2',Q2,'Q2SAT',Q2SAT,'ETP',ETP,'RCH',RCH,                       &
585         'EPSCA',EPSCA,'RR',RR  ,'SNOWNG',SNOWNG,'FRZGRA',FRZGRA,           &
586         'DQSDT2',DQSDT2,'FLX2',FLX2,'SNOWH',SNOWH,'SNEQV',SNEQV,         &
587         ' DSOIL',DSOIL,' FRCSNO',FRCSNO,' SNCOVR',SNCOVR,' DTOT',DTOT,   &
588        ' ZSOIL (1)',ZSOIL(1),' DF1',DF1,'T1',T1,' STC1',STC(1),          &
589         'ALBEDO',ALBEDO,'SMC',SMC,'STC',STC,'SH2O',SH2O
590          endif
592          CALL PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL,     &
593                        Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA,          &
594                          DQSDT2,FLX2,EMISSI,SNEQV)
596 ! ----------------------------------------------------------------------
597 ! CALL CANRES TO CALCULATE THE CANOPY RESISTANCE AND CONVERT IT INTO PC
598 ! IF NONZERO GREENNESS FRACTION
599 ! ----------------------------------------------------------------------
601 ! ----------------------------------------------------------------------
602 !  FROZEN GROUND EXTENSION: TOTAL SOIL WATER "SMC" WAS REPLACED
603 !  BY UNFROZEN SOIL WATER "SH2O" IN CALL TO CANRES BELOW
604 ! ----------------------------------------------------------------------
605          IF (SHDFAC > 0.) THEN
606             CALL CANRES (SOLDN,CH,SFCTMP,Q2,SFCPRS,SH2O,ZSOIL,NSOIL,     &
607                           SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2,  &
608                           TOPT,RSMAX,RGL,HS,XLAI,                        &
609                           RCS,RCT,RCQ,RCSOIL,EMISSI)
610          END IF
611 ! ----------------------------------------------------------------------
612 ! NOW DECIDE MAJOR PATHWAY BRANCH TO TAKE DEPENDING ON WHETHER SNOWPACK
613 ! EXISTS OR NOT:
614 ! ----------------------------------------------------------------------
615          ESNOW = 0.0
616          IF (SNEQV  == 0.0) THEN
617             CALL NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT,                  &
618                             SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,           &
619                             SHDFAC,                                      &
620                             SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI,  &
621                             SSOIL,                                       &
622                             STC,EPSCA,BEXP,PC,RCH,RR,CFACTR,             &
623                             SH2O,SLOPE,KDT,FRZX,PSISAT,ZSOIL,            &
624                             DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2,       &
625                             RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS,      &
626                             QUARTZ,FXEXP,CSOIL,                          &
627                             BETA,DRIP,DEW,FLX1,FLX3,VEGTYP)
628             ETA_KINEMATIC = ETA
629          ELSE
630             CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT,    &
631                          SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,              &
632                          SBETA,DF1,                                      &
633                          Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA,  &
634                          SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,SNEQV,SNDENS,&
635                          SNOWH,SH2O,SLOPE,KDT,FRZX,PSISAT,               &
636                          ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1,     &
637                          RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT,    &
638                          ICE,RTDIS,QUARTZ,FXEXP,CSOIL,                   &
639                          BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI, &
640                          VEGTYP)
641             ETA_KINEMATIC =  ESNOW + ETNS
642          END IF
644 !     Calculate effective mixing ratio at grnd level (skin)
646 !     Q1=Q2+ETA*CP/RCH
647      Q1=Q2+ETA_KINEMATIC*CP/RCH
649 ! ----------------------------------------------------------------------
650 ! DETERMINE SENSIBLE HEAT (H) IN ENERGY UNITS (W M-2)
651 ! ----------------------------------------------------------------------
652          SHEAT = - (CH * CP * SFCPRS)/ (R * T2V) * ( TH2- T1 )
654 ! ----------------------------------------------------------------------
655 ! CONVERT EVAP TERMS FROM KINEMATIC (KG M-2 S-1) TO ENERGY UNITS (W M-2)
656 ! ----------------------------------------------------------------------
657       EDIR = EDIR * LVH2O
658       EC = EC * LVH2O
659       DO K=1,4
660       ET(K) = ET(K) * LVH2O
661       ENDDO
662       ETT = ETT * LVH2O
663       ESNOW = ESNOW * LSUBS
664       ETP = ETP*((1.-SNCOVR)*LVH2O + SNCOVR*LSUBS)
665       IF (ETP .GT. 0.) THEN
666          ETA = EDIR + EC + ETT + ESNOW
667       ELSE
668         ETA = ETP
669       ENDIF
670 ! ----------------------------------------------------------------------
671 ! DETERMINE BETA (RATIO OF ACTUAL TO POTENTIAL EVAP)
672 ! ----------------------------------------------------------------------
673       IF (ETP == 0.0) THEN
674         BETA = 0.0
675       ELSE
676         BETA = ETA/ETP
677       ENDIF
679 ! ----------------------------------------------------------------------
680 ! CONVERT THE SIGN OF SOIL HEAT FLUX SO THAT:
681 !   SSOIL>0: WARM THE SURFACE  (NIGHT TIME)
682 !   SSOIL<0: COOL THE SURFACE  (DAY TIME)
683 ! ----------------------------------------------------------------------
684          SSOIL = -1.0* SSOIL
686 ! ----------------------------------------------------------------------
687 !  CONVERT RUNOFF3 (INTERNAL LAYER RUNOFF FROM SUPERSAT) FROM M TO M S-1
688 !  AND ADD TO SUBSURFACE RUNOFF/DRAINAGE/BASEFLOW
689 ! ----------------------------------------------------------------------
690          RUNOFF3 = RUNOFF3/ DT
691          RUNOFF2 = RUNOFF2+ RUNOFF3
693 ! ----------------------------------------------------------------------
694 ! TOTAL COLUMN SOIL MOISTURE IN METERS (SOILM) AND ROOT-ZONE
695 ! SOIL MOISTURE AVAILABILITY (FRACTION) RELATIVE TO POROSITY/SATURATION
696 ! ----------------------------------------------------------------------
697          IF (ICE == 0) THEN
698             SOILM = -1.0* SMC (1)* ZSOIL (1)
699             DO K = 2,NSOIL
700               SOILM = SOILM + SMC (K)* (ZSOIL (K -1) - ZSOIL (K))
701             END DO
702             SOILWM = -1.0* (SMCMAX - SMCWLT)* ZSOIL (1)
703             SOILWW = -1.0* (SMC (1) - SMCWLT)* ZSOIL (1)
705             IF (NROOT >= 2) THEN
706               DO K = 2,NROOT
707                SOILWM = SOILWM + (SMCMAX - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
708                SOILWW = SOILWW + (SMC(K) - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
709               END DO
710             END IF
711             IF (SOILWM .LT. 1.E-6) THEN
712               SOILWM = 0.0
713               SOILW  = 0.0
714               SOILM  = 0.0
715             ELSE
716               SOILW = SOILWW / SOILWM
717             END IF
718          ELSE
719            SOILWM = 0.0
720            SOILW  = 0.0
721            SOILM  = 0.0
722          END IF
724 ! ----------------------------------------------------------------------
725   END SUBROUTINE SFLX
726 ! ----------------------------------------------------------------------
728       SUBROUTINE ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,TSNOW,ALBEDO,EMISSI)
730 ! ----------------------------------------------------------------------
731 ! CALCULATE ALBEDO INCLUDING SNOW EFFECT (0 -> 1)
732 !   ALB     SNOWFREE ALBEDO
733 !   SNOALB  MAXIMUM (DEEP) SNOW ALBEDO
734 !   SHDFAC    AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
735 !   SHDMIN    MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
736 !   SNCOVR  FRACTIONAL SNOW COVER
737 !   ALBEDO  SURFACE ALBEDO INCLUDING SNOW EFFECT
738 !   TSNOW   SNOW SURFACE TEMPERATURE (K)
739 ! ----------------------------------------------------------------------
740       IMPLICIT NONE
742 ! ----------------------------------------------------------------------
743 ! SNOALB IS ARGUMENT REPRESENTING MAXIMUM ALBEDO OVER DEEP SNOW,
744 ! AS PASSED INTO SFLX, AND ADAPTED FROM THE SATELLITE-BASED MAXIMUM
745 ! SNOW ALBEDO FIELDS PROVIDED BY D. ROBINSON AND G. KUKLA
746 ! (1985, JCAM, VOL 24, 402-411)
747 ! ----------------------------------------------------------------------
748       REAL, INTENT(IN)  ::  ALB, SNOALB, EMBRD, SHDFAC, SHDMIN, SNCOVR, TSNOW
749       REAL, INTENT(OUT) ::  ALBEDO, EMISSI
750 ! turn of vegetation effect
751 !      ALBEDO = ALB + (1.0- (SHDFAC - SHDMIN))* SNCOVR * (SNOALB - ALB)
752 !      ALBEDO = (1.0-SNCOVR)*ALB + SNCOVR*SNOALB !this is equivalent to below
753       ALBEDO = ALB + SNCOVR*(SNOALB-ALB)
754       EMISSI = EMBRD + SNCOVR*(EMISSI_S - EMBRD)
756 !     BASE FORMULATION (DICKINSON ET AL., 1986, COGLEY ET AL., 1990)
757 !          IF (TSNOW.LE.263.16) THEN
758 !            ALBEDO=SNOALB
759 !          ELSE
760 !            IF (TSNOW.LT.273.16) THEN
761 !              TM=0.1*(TSNOW-263.16)
762 !              ALBEDO=0.5*((0.9-0.2*(TM**3))+(0.8-0.16*(TM**3)))
763 !            ELSE
764 !              ALBEDO=0.67
765 !            ENDIF
766 !          ENDIF
768 !     ISBA FORMULATION (VERSEGHY, 1991; BAKER ET AL., 1990)
769 !          IF (TSNOW.LT.273.16) THEN
770 !            ALBEDO=SNOALB-0.008*DT/86400
771 !          ELSE
772 !            ALBEDO=(SNOALB-0.5)*EXP(-0.24*DT/86400)+0.5
773 !          ENDIF
775       IF (ALBEDO > SNOALB) ALBEDO = SNOALB
777 ! ----------------------------------------------------------------------
778   END SUBROUTINE ALCALC
779 ! ----------------------------------------------------------------------
781       SUBROUTINE CANRES (SOLAR,CH,SFCTMP,Q2,SFCPRS,SMC,ZSOIL,NSOIL,       &
782                          SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2,    &
783                          TOPT,RSMAX,RGL,HS,XLAI,                          &
784                          RCS,RCT,RCQ,RCSOIL,EMISSI)
786 ! ----------------------------------------------------------------------
787 ! SUBROUTINE CANRES
788 ! ----------------------------------------------------------------------
789 ! CALCULATE CANOPY RESISTANCE WHICH DEPENDS ON INCOMING SOLAR RADIATION,
790 ! AIR TEMPERATURE, ATMOSPHERIC WATER VAPOR PRESSURE DEFICIT AT THE
791 ! LOWEST MODEL LEVEL, AND SOIL MOISTURE (PREFERABLY UNFROZEN SOIL
792 ! MOISTURE RATHER THAN TOTAL)
793 ! ----------------------------------------------------------------------
794 ! SOURCE:  JARVIS (1976), NOILHAN AND PLANTON (1989, MWR), JACQUEMIN AND
795 ! NOILHAN (1990, BLM)
796 ! SEE ALSO:  CHEN ET AL (1996, JGR, VOL 101(D3), 7251-7268), EQNS 12-14
797 ! AND TABLE 2 OF SEC. 3.1.2
798 ! ----------------------------------------------------------------------
799 ! INPUT:
800 !   SOLAR   INCOMING SOLAR RADIATION
801 !   CH      SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
802 !   SFCTMP  AIR TEMPERATURE AT 1ST LEVEL ABOVE GROUND
803 !   Q2      AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
804 !   Q2SAT   SATURATION AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
805 !   DQSDT2  SLOPE OF SATURATION HUMIDITY FUNCTION WRT TEMP
806 !   SFCPRS  SURFACE PRESSURE
807 !   SMC     VOLUMETRIC SOIL MOISTURE
808 !   ZSOIL   SOIL DEPTH (NEGATIVE SIGN, AS IT IS BELOW GROUND)
809 !   NSOIL   NO. OF SOIL LAYERS
810 !   NROOT   NO. OF SOIL LAYERS IN ROOT ZONE (1.LE.NROOT.LE.NSOIL)
811 !   XLAI    LEAF AREA INDEX
812 !   SMCWLT  WILTING POINT
813 !   SMCREF  REFERENCE SOIL MOISTURE (WHERE SOIL WATER DEFICIT STRESS
814 !             SETS IN)
815 ! RSMIN, RSMAX, TOPT, RGL, HS ARE CANOPY STRESS PARAMETERS SET IN
816 !   SURBOUTINE REDPRM
817 ! OUTPUT:
818 !   PC  PLANT COEFFICIENT
819 !   RC  CANOPY RESISTANCE
820 ! ----------------------------------------------------------------------
822       IMPLICIT NONE
823       INTEGER, INTENT(IN) :: NROOT,NSOIL
824       INTEGER  K
825       REAL,    INTENT(IN) :: CH,DQSDT2,HS,Q2,Q2SAT,RSMIN,RGL,RSMAX,        &
826                              SFCPRS,SFCTMP,SMCREF,SMCWLT, SOLAR,TOPT,XLAI, &
827                              EMISSI
828       REAL,DIMENSION(1:NSOIL), INTENT(IN) :: SMC,ZSOIL
829       REAL,    INTENT(OUT):: PC,RC,RCQ,RCS,RCSOIL,RCT
830       REAL                :: DELTA,FF,GX,P,RR
831       REAL, DIMENSION(1:NSOIL) ::  PART
832       REAL, PARAMETER     :: SLV = 2.501000E6
835 ! ----------------------------------------------------------------------
836 ! INITIALIZE CANOPY RESISTANCE MULTIPLIER TERMS.
837 ! ----------------------------------------------------------------------
838       RCS = 0.0
839       RCT = 0.0
840       RCQ = 0.0
841       RCSOIL = 0.0
843 ! ----------------------------------------------------------------------
844 ! CONTRIBUTION DUE TO INCOMING SOLAR RADIATION
845 ! ----------------------------------------------------------------------
846       RC = 0.0
847       FF = 0.55*2.0* SOLAR / (RGL * XLAI)
848       RCS = (FF + RSMIN / RSMAX) / (1.0+ FF)
850 ! ----------------------------------------------------------------------
851 ! CONTRIBUTION DUE TO AIR TEMPERATURE AT FIRST MODEL LEVEL ABOVE GROUND
852 ! RCT EXPRESSION FROM NOILHAN AND PLANTON (1989, MWR).
853 ! ----------------------------------------------------------------------
854       RCS = MAX (RCS,0.0001)
855       RCT = 1.0- 0.0016* ( (TOPT - SFCTMP)**2.0)
857 ! ----------------------------------------------------------------------
858 ! CONTRIBUTION DUE TO VAPOR PRESSURE DEFICIT AT FIRST MODEL LEVEL.
859 ! RCQ EXPRESSION FROM SSIB
860 ! ----------------------------------------------------------------------
861       RCT = MAX (RCT,0.0001)
862       RCQ = 1.0/ (1.0+ HS * (Q2SAT - Q2))
864 ! ----------------------------------------------------------------------
865 ! CONTRIBUTION DUE TO SOIL MOISTURE AVAILABILITY.
866 ! DETERMINE CONTRIBUTION FROM EACH SOIL LAYER, THEN ADD THEM UP.
867 ! ----------------------------------------------------------------------
868       RCQ = MAX (RCQ,0.01)
869       GX = (SMC (1) - SMCWLT) / (SMCREF - SMCWLT)
870       IF (GX  >  1.) GX = 1.
871       IF (GX  <  0.) GX = 0.
873 ! ----------------------------------------------------------------------
874 ! USE SOIL DEPTH AS WEIGHTING FACTOR
875 ! ----------------------------------------------------------------------
876 ! ----------------------------------------------------------------------
877 ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
878 !      PART(1) = RTDIS(1) * GX
879 ! ----------------------------------------------------------------------
880       PART (1) = (ZSOIL (1)/ ZSOIL (NROOT)) * GX
881       DO K = 2,NROOT
882          GX = (SMC (K) - SMCWLT) / (SMCREF - SMCWLT)
883          IF (GX >  1.) GX = 1.
884          IF (GX <  0.) GX = 0.
885 ! ----------------------------------------------------------------------
886 ! USE SOIL DEPTH AS WEIGHTING FACTOR
887 ! ----------------------------------------------------------------------
888 ! ----------------------------------------------------------------------
889 ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
890 !        PART(K) = RTDIS(K) * GX
891 ! ----------------------------------------------------------------------
892          PART (K) = ( (ZSOIL (K) - ZSOIL (K -1))/ ZSOIL (NROOT)) * GX
893       END DO
894       DO K = 1,NROOT
895          RCSOIL = RCSOIL + PART (K)
896       END DO
898 ! ----------------------------------------------------------------------
899 ! DETERMINE CANOPY RESISTANCE DUE TO ALL FACTORS.  CONVERT CANOPY
900 ! RESISTANCE (RC) TO PLANT COEFFICIENT (PC) TO BE USED WITH POTENTIAL
901 ! EVAP IN DETERMINING ACTUAL EVAP.  PC IS DETERMINED BY:
902 !   PC * LINERIZED PENMAN POTENTIAL EVAP =
903 !   PENMAN-MONTEITH ACTUAL EVAPORATION (CONTAINING RC TERM).
904 ! ----------------------------------------------------------------------
905       RCSOIL = MAX (RCSOIL,0.0001)
907       RC = RSMIN / (XLAI * RCS * RCT * RCQ * RCSOIL)
908 !      RR = (4.* SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) + 1.0
909       RR = (4.* EMISSI *SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) &
910              + 1.0
912       DELTA = (SLV / CP)* DQSDT2
914       PC = (RR + DELTA)/ (RR * (1. + RC * CH) + DELTA)
916 ! ----------------------------------------------------------------------
917   END SUBROUTINE CANRES
918 ! ----------------------------------------------------------------------
920       SUBROUTINE CSNOW (SNCOND,DSNOW)
922 ! ----------------------------------------------------------------------
923 ! SUBROUTINE CSNOW
924 ! FUNCTION CSNOW
925 ! ----------------------------------------------------------------------
926 ! CALCULATE SNOW TERMAL CONDUCTIVITY
927 ! ----------------------------------------------------------------------
928       IMPLICIT NONE
929       REAL, INTENT(IN) :: DSNOW
930       REAL, INTENT(OUT):: SNCOND
931       REAL             :: C
932       REAL, PARAMETER  :: UNIT = 0.11631
934 ! ----------------------------------------------------------------------
935 ! SNCOND IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
936 ! CSNOW IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
937 ! BASIC VERSION IS DYACHKOVA EQUATION (1960), FOR RANGE 0.1-0.4
938 ! ----------------------------------------------------------------------
939       C = 0.328*10** (2.25* DSNOW)
940 !      CSNOW=UNIT*C
942 ! ----------------------------------------------------------------------
943 ! DE VAUX EQUATION (1933), IN RANGE 0.1-0.6
944 ! ----------------------------------------------------------------------
945 !      SNCOND=0.0293*(1.+100.*DSNOW**2)
946 !      CSNOW=0.0293*(1.+100.*DSNOW**2)
948 ! ----------------------------------------------------------------------
949 ! E. ANDERSEN FROM FLERCHINGER
950 ! ----------------------------------------------------------------------
951 !      SNCOND=0.021+2.51*DSNOW**2
952 !      CSNOW=0.021+2.51*DSNOW**2
954 !      SNCOND = UNIT * C
955 ! double snow thermal conductivity
956       SNCOND = 2.0 * UNIT * C
958 ! ----------------------------------------------------------------------
959   END SUBROUTINE CSNOW
960 ! ----------------------------------------------------------------------
962       SUBROUTINE DEVAP (EDIR,ETP1,SMC,ZSOIL,SHDFAC,SMCMAX,BEXP,         &
963                         DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
965 ! ----------------------------------------------------------------------
966 ! SUBROUTINE DEVAP
967 ! FUNCTION DEVAP
968 ! ----------------------------------------------------------------------
969 ! CALCULATE DIRECT SOIL EVAPORATION
970 ! ----------------------------------------------------------------------
971       IMPLICIT NONE
972       REAL, INTENT(IN) :: ETP1,SMC,BEXP,DKSAT,DWSAT,FXEXP,              &
973                           SHDFAC,SMCDRY,SMCMAX,ZSOIL,SMCREF,SMCWLT
974       REAL, INTENT(OUT):: EDIR
975       REAL             :: FX, SRATIO
978 ! ----------------------------------------------------------------------
979 ! DIRECT EVAP A FUNCTION OF RELATIVE SOIL MOISTURE AVAILABILITY, LINEAR
980 ! WHEN FXEXP=1.
981 ! ----------------------------------------------------------------------
982 ! ----------------------------------------------------------------------
983 ! FX > 1 REPRESENTS DEMAND CONTROL
984 ! FX < 1 REPRESENTS FLUX CONTROL
985 ! ----------------------------------------------------------------------
987       SRATIO = (SMC - SMCDRY) / (SMCMAX - SMCDRY)
988       IF (SRATIO > 0.) THEN
989         FX = SRATIO**FXEXP
990         FX = MAX ( MIN ( FX, 1. ) ,0. )
991       ELSE
992         FX = 0.
993       ENDIF
995 ! ----------------------------------------------------------------------
996 ! ALLOW FOR THE DIRECT-EVAP-REDUCING EFFECT OF SHADE
997 ! ----------------------------------------------------------------------
998       EDIR = FX * ( 1.0- SHDFAC ) * ETP1
1000 ! ----------------------------------------------------------------------
1001   END SUBROUTINE DEVAP
1002 ! ----------------------------------------------------------------------
1004       SUBROUTINE EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL,               &
1005                          SH2O,                                          &
1006                          SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT,             &
1007                          SMCREF,SHDFAC,CMCMAX,                          &
1008                          SMCDRY,CFACTR,                                 &
1009                          EDIR,EC,ET,ETT,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
1011 ! ----------------------------------------------------------------------
1012 ! SUBROUTINE EVAPO
1013 ! ----------------------------------------------------------------------
1014 ! CALCULATE SOIL MOISTURE FLUX.  THE SOIL MOISTURE CONTENT (SMC - A PER
1015 ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
1016 ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
1017 ! FROZEN GROUND VERSION:  NEW STATES ADDED: SH2O, AND FROZEN GROUND
1018 ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
1019 ! ----------------------------------------------------------------------
1020       IMPLICIT NONE
1021       INTEGER, INTENT(IN)   :: NSOIL, NROOT
1022       INTEGER               :: I,K
1023       REAL,    INTENT(IN)   :: BEXP, CFACTR,CMC,CMCMAX,DKSAT,           &
1024                                  DT,DWSAT,ETP1,FXEXP,PC,Q2,SFCTMP,      &
1025                                  SHDFAC,SMCDRY,SMCMAX,SMCREF,SMCWLT
1026       REAL,    INTENT(OUT)  :: EC,EDIR,ETA1,ETT
1027       REAL                  :: CMC2MS
1028       REAL,DIMENSION(1:NSOIL), INTENT(IN) :: RTDIS, SMC, SH2O, ZSOIL
1029       REAL,DIMENSION(1:NSOIL), INTENT(OUT) :: ET
1031 ! ----------------------------------------------------------------------
1032 ! EXECUTABLE CODE BEGINS HERE IF THE POTENTIAL EVAPOTRANSPIRATION IS
1033 ! GREATER THAN ZERO.
1034 ! ----------------------------------------------------------------------
1035       EDIR = 0.
1036       EC = 0.
1037       ETT = 0.
1038       DO K = 1,NSOIL
1039          ET (K) = 0.
1040       END DO
1042 ! ----------------------------------------------------------------------
1043 ! RETRIEVE DIRECT EVAPORATION FROM SOIL SURFACE.  CALL THIS FUNCTION
1044 ! ONLY IF VEG COVER NOT COMPLETE.
1045 ! FROZEN GROUND VERSION:  SH2O STATES REPLACE SMC STATES.
1046 ! ----------------------------------------------------------------------
1047       IF (ETP1 > 0.0) THEN
1048          IF (SHDFAC <  1.) THEN
1049              CALL DEVAP (EDIR,ETP1,SMC (1),ZSOIL (1),SHDFAC,SMCMAX,      &
1050                          BEXP,DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
1051          END IF
1052 ! ----------------------------------------------------------------------
1053 ! INITIALIZE PLANT TOTAL TRANSPIRATION, RETRIEVE PLANT TRANSPIRATION,
1054 ! AND ACCUMULATE IT FOR ALL SOIL LAYERS.
1055 ! ----------------------------------------------------------------------
1057          IF (SHDFAC > 0.0) THEN
1058             CALL TRANSP (ET,NSOIL,ETP1,SH2O,CMC,ZSOIL,SHDFAC,SMCWLT,     &
1059                           CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT,RTDIS)
1060             DO K = 1,NSOIL
1061                ETT = ETT + ET ( K )
1062             END DO
1063 ! ----------------------------------------------------------------------
1064 ! CALCULATE CANOPY EVAPORATION.
1065 ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR CMC=0.0.
1066 ! ----------------------------------------------------------------------
1067             IF (CMC > 0.0) THEN
1068                EC = SHDFAC * ( ( CMC / CMCMAX ) ** CFACTR ) * ETP1
1069             ELSE
1070                EC = 0.0
1071             END IF
1072 ! ----------------------------------------------------------------------
1073 ! EC SHOULD BE LIMITED BY THE TOTAL AMOUNT OF AVAILABLE WATER ON THE
1074 ! CANOPY.  -F.CHEN, 18-OCT-1994
1075 ! ----------------------------------------------------------------------
1076             CMC2MS = CMC / DT
1077             EC = MIN ( CMC2MS, EC )
1078          END IF
1079       END IF
1080 ! ----------------------------------------------------------------------
1081 ! TOTAL UP EVAP AND TRANSP TYPES TO OBTAIN ACTUAL EVAPOTRANSP
1082 ! ----------------------------------------------------------------------
1083       ETA1 = EDIR + ETT + EC
1085 ! ----------------------------------------------------------------------
1086   END SUBROUTINE EVAPO
1087 ! ----------------------------------------------------------------------
1089       SUBROUTINE FRH2O (FREE,TKELV,SMC,SH2O,SMCMAX,BEXP,PSIS)
1091 ! ----------------------------------------------------------------------
1092 ! SUBROUTINE FRH2O
1093 ! ----------------------------------------------------------------------
1094 ! CALCULATE AMOUNT OF SUPERCOOLED LIQUID SOIL WATER CONTENT IF
1095 ! TEMPERATURE IS BELOW 273.15K (T0).  REQUIRES NEWTON-TYPE ITERATION TO
1096 ! SOLVE THE NONLINEAR IMPLICIT EQUATION GIVEN IN EQN 17 OF KOREN ET AL
1097 ! (1999, JGR, VOL 104(D16), 19569-19585).
1098 ! ----------------------------------------------------------------------
1099 ! NEW VERSION (JUNE 2001): MUCH FASTER AND MORE ACCURATE NEWTON
1100 ! ITERATION ACHIEVED BY FIRST TAKING LOG OF EQN CITED ABOVE -- LESS THAN
1101 ! 4 (TYPICALLY 1 OR 2) ITERATIONS ACHIEVES CONVERGENCE.  ALSO, EXPLICIT
1102 ! 1-STEP SOLUTION OPTION FOR SPECIAL CASE OF PARAMETER CK=0, WHICH
1103 ! REDUCES THE ORIGINAL IMPLICIT EQUATION TO A SIMPLER EXPLICIT FORM,
1104 ! KNOWN AS THE "FLERCHINGER EQN". IMPROVED HANDLING OF SOLUTION IN THE
1105 ! LIMIT OF FREEZING POINT TEMPERATURE T0.
1106 ! ----------------------------------------------------------------------
1107 ! INPUT:
1109 !   TKELV.........TEMPERATURE (Kelvin)
1110 !   SMC...........TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC)
1111 !   SH2O..........LIQUID SOIL MOISTURE CONTENT (VOLUMETRIC)
1112 !   SMCMAX........SATURATION SOIL MOISTURE CONTENT (FROM REDPRM)
1113 !   B.............SOIL TYPE "B" PARAMETER (FROM REDPRM)
1114 !   PSIS..........SATURATED SOIL MATRIC POTENTIAL (FROM REDPRM)
1116 ! OUTPUT:
1117 !   FRH2O.........SUPERCOOLED LIQUID WATER CONTENT
1118 !   FREE..........SUPERCOOLED LIQUID WATER CONTENT
1119 ! ----------------------------------------------------------------------
1120       IMPLICIT NONE
1121       REAL, INTENT(IN)     :: BEXP,PSIS,SH2O,SMC,SMCMAX,TKELV
1122       REAL, INTENT(OUT)    :: FREE
1123       REAL                 :: BX,DENOM,DF,DSWL,FK,SWL,SWLK
1124       INTEGER              :: NLOG,KCOUNT
1125 !      PARAMETER(CK = 0.0)
1126       REAL, PARAMETER      :: CK = 8.0, BLIM = 5.5, ERROR = 0.005,       &
1127                               HLICE = 3.335E5, GS = 9.81,DICE = 920.0,   &
1128                               DH2O = 1000.0, T0 = 273.15
1130 ! ----------------------------------------------------------------------
1131 ! LIMITS ON PARAMETER B: B < 5.5  (use parameter BLIM)
1132 ! SIMULATIONS SHOWED IF B > 5.5 UNFROZEN WATER CONTENT IS
1133 ! NON-REALISTICALLY HIGH AT VERY LOW TEMPERATURES.
1134 ! ----------------------------------------------------------------------
1135       BX = BEXP
1137 ! ----------------------------------------------------------------------
1138 ! INITIALIZING ITERATIONS COUNTER AND ITERATIVE SOLUTION FLAG.
1139 ! ----------------------------------------------------------------------
1140       IF (BEXP >  BLIM) BX = BLIM
1141       NLOG = 0
1143 ! ----------------------------------------------------------------------
1144 !  IF TEMPERATURE NOT SIGNIFICANTLY BELOW FREEZING (T0), SH2O = SMC
1145 ! ----------------------------------------------------------------------
1146       KCOUNT = 0
1147 !      FRH2O = SMC
1148       IF (TKELV > (T0- 1.E-3)) THEN
1149           FREE = SMC
1150       ELSE
1152 ! ----------------------------------------------------------------------
1153 ! OPTION 1: ITERATED SOLUTION FOR NONZERO CK
1154 ! IN KOREN ET AL, JGR, 1999, EQN 17
1155 ! ----------------------------------------------------------------------
1156 ! INITIAL GUESS FOR SWL (frozen content)
1157 ! ----------------------------------------------------------------------
1158          IF (CK /= 0.0) THEN
1159             SWL = SMC - SH2O
1160 ! ----------------------------------------------------------------------
1161 ! KEEP WITHIN BOUNDS.
1162 ! ----------------------------------------------------------------------
1163             IF (SWL > (SMC -0.02)) SWL = SMC -0.02
1165 ! ----------------------------------------------------------------------
1166 !  START OF ITERATIONS
1167 ! ----------------------------------------------------------------------
1168             IF (SWL < 0.) SWL = 0.
1169  1001       Continue
1170               IF (.NOT.( (NLOG < 10) .AND. (KCOUNT == 0)))   goto 1002
1171               NLOG = NLOG +1
1172               DF = ALOG ( ( PSIS * GS / HLICE ) * ( ( 1. + CK * SWL )**2.) * &
1173                    ( SMCMAX / (SMC - SWL) )** BX) - ALOG ( - (               &
1174                    TKELV - T0)/ TKELV)
1175               DENOM = 2. * CK / ( 1. + CK * SWL ) + BX / ( SMC - SWL )
1176               SWLK = SWL - DF / DENOM
1177 ! ----------------------------------------------------------------------
1178 ! BOUNDS USEFUL FOR MATHEMATICAL SOLUTION.
1179 ! ----------------------------------------------------------------------
1180               IF (SWLK > (SMC -0.02)) SWLK = SMC - 0.02
1181               IF (SWLK < 0.) SWLK = 0.
1183 ! ----------------------------------------------------------------------
1184 ! MATHEMATICAL SOLUTION BOUNDS APPLIED.
1185 ! ----------------------------------------------------------------------
1186               DSWL = ABS (SWLK - SWL)
1188 ! ----------------------------------------------------------------------
1189 ! IF MORE THAN 10 ITERATIONS, USE EXPLICIT METHOD (CK=0 APPROX.)
1190 ! WHEN DSWL LESS OR EQ. ERROR, NO MORE ITERATIONS REQUIRED.
1191 ! ----------------------------------------------------------------------
1192               SWL = SWLK
1193               IF ( DSWL <= ERROR ) THEN
1194                     KCOUNT = KCOUNT +1
1195               END IF
1196 ! ----------------------------------------------------------------------
1197 !  END OF ITERATIONS
1198 ! ----------------------------------------------------------------------
1199 ! BOUNDS APPLIED WITHIN DO-BLOCK ARE VALID FOR PHYSICAL SOLUTION.
1200 ! ----------------------------------------------------------------------
1201 !          FRH2O = SMC - SWL
1202            goto 1001
1203  1002   continue
1204            FREE = SMC - SWL
1205          END IF
1206 ! ----------------------------------------------------------------------
1207 ! END OPTION 1
1208 ! ----------------------------------------------------------------------
1209 ! ----------------------------------------------------------------------
1210 ! OPTION 2: EXPLICIT SOLUTION FOR FLERCHINGER EQ. i.e. CK=0
1211 ! IN KOREN ET AL., JGR, 1999, EQN 17
1212 ! APPLY PHYSICAL BOUNDS TO FLERCHINGER SOLUTION
1213 ! ----------------------------------------------------------------------
1214          IF (KCOUNT == 0) THEN
1215              PRINT *,'Flerchinger USEd in NEW version. Iterations=',NLOG
1216                   FK = ( ( (HLICE / (GS * ( - PSIS)))*                    &
1217                        ( (TKELV - T0)/ TKELV))** ( -1/ BX))* SMCMAX
1218 !            FRH2O = MIN (FK, SMC)
1219              IF (FK < 0.02) FK = 0.02
1220              FREE = MIN (FK, SMC)
1221 ! ----------------------------------------------------------------------
1222 ! END OPTION 2
1223 ! ----------------------------------------------------------------------
1224          END IF
1225       END IF
1226 ! ----------------------------------------------------------------------
1227   END SUBROUTINE FRH2O
1228 ! ----------------------------------------------------------------------
1230       SUBROUTINE HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1,          &
1231                        TBOT,ZBOT,PSISAT,SH2O,DT,BEXP,                   &
1232                        F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP)
1234 ! ----------------------------------------------------------------------
1235 ! SUBROUTINE HRT
1236 ! ----------------------------------------------------------------------
1237 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
1238 ! THERMAL DIFFUSION EQUATION.  ALSO TO COMPUTE ( PREPARE ) THE MATRIX
1239 ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
1240 ! ----------------------------------------------------------------------
1241       IMPLICIT NONE
1242       LOGICAL              :: ITAVG
1243       INTEGER, INTENT(IN)  :: NSOIL, VEGTYP
1244       INTEGER              :: I, K
1246       REAL, INTENT(IN)     :: BEXP, CSOIL, DF1, DT,F1,PSISAT,QUARTZ,     &
1247                               SMCMAX ,TBOT,YY,ZZ1, ZBOT
1248       REAL, DIMENSION(1:NSOIL), INTENT(IN)   :: SMC,STC,ZSOIL
1249       REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SH2O
1250       REAL, DIMENSION(1:NSOIL), INTENT(OUT)  :: RHSTS
1251       REAL, DIMENSION(1:NSOIL), INTENT(OUT)  :: AI, BI,CI
1252       REAL                 :: DDZ, DDZ2, DENOM, DF1N, DF1K, DTSDZ,       &
1253                               DTSDZ2,HCPCT,QTOT,SSOIL,SICE,TAVG,TBK,     &
1254                               TBK1,TSNSR,TSURF,CSOIL_LOC
1255       REAL, PARAMETER      :: T0 = 273.15, CAIR = 1004.0, CICE = 2.106E6,&
1256                               CH2O = 4.2E6
1259 !urban
1260         IF(VEGTYP==1) then
1261             CSOIL_LOC=3.0E6
1262         ELSE
1263             CSOIL_LOC=CSOIL
1264         ENDIF
1266 ! ----------------------------------------------------------------------
1267 ! INITIALIZE LOGICAL FOR SOIL LAYER TEMPERATURE AVERAGING.
1268 ! ----------------------------------------------------------------------
1269        ITAVG = .TRUE.
1270 ! ----------------------------------------------------------------------
1271 ! BEGIN SECTION FOR TOP SOIL LAYER
1272 ! ----------------------------------------------------------------------
1273 ! CALC THE HEAT CAPACITY OF THE TOP SOIL LAYER
1274 ! ----------------------------------------------------------------------
1275       HCPCT = SH2O (1)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC (1))&
1276        * CAIR                                                           &
1277               + ( SMC (1) - SH2O (1) )* CICE
1279 ! ----------------------------------------------------------------------
1280 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
1281 ! ----------------------------------------------------------------------
1282       DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
1283       AI (1) = 0.0
1284       CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
1286 ! ----------------------------------------------------------------------
1287 ! CALCULATE THE VERTICAL SOIL TEMP GRADIENT BTWN THE 1ST AND 2ND SOIL
1288 ! LAYERS.  THEN CALCULATE THE SUBSURFACE HEAT FLUX. USE THE TEMP
1289 ! GRADIENT AND SUBSFC HEAT FLUX TO CALC "RIGHT-HAND SIDE TENDENCY
1290 ! TERMS", OR "RHSTS", FOR TOP SOIL LAYER.
1291 ! ----------------------------------------------------------------------
1292       BI (1) = - CI (1) + DF1 / (0.5 * ZSOIL (1) * ZSOIL (1)* HCPCT *    &
1293        ZZ1)
1294       DTSDZ = (STC (1) - STC (2)) / ( -0.5 * ZSOIL (2))
1295       SSOIL = DF1 * (STC (1) - YY) / (0.5 * ZSOIL (1) * ZZ1)
1296 !      RHSTS(1) = (DF1 * DTSDZ - SSOIL) / (ZSOIL(1) * HCPCT)
1297       DENOM = (ZSOIL (1) * HCPCT)
1299 ! ----------------------------------------------------------------------
1300 ! NEXT CAPTURE THE VERTICAL DIFFERENCE OF THE HEAT FLUX AT TOP AND
1301 ! BOTTOM OF FIRST SOIL LAYER FOR USE IN HEAT FLUX CONSTRAINT APPLIED TO
1302 ! POTENTIAL SOIL FREEZING/THAWING IN ROUTINE SNKSRC.
1303 ! ----------------------------------------------------------------------
1304 !      QTOT = SSOIL - DF1*DTSDZ
1305       RHSTS (1) = (DF1 * DTSDZ - SSOIL) / DENOM
1307 ! ----------------------------------------------------------------------
1308 ! CALCULATE FROZEN WATER CONTENT IN 1ST SOIL LAYER.
1309 ! ----------------------------------------------------------------------
1310       QTOT = -1.0* RHSTS (1)* DENOM
1312 ! ----------------------------------------------------------------------
1313 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP):
1314 ! SET TEMP "TSURF" AT TOP OF SOIL COLUMN (FOR USE IN FREEZING SOIL
1315 ! PHYSICS LATER IN FUNCTION SUBROUTINE SNKSRC).  IF SNOWPACK CONTENT IS
1316 ! ZERO, THEN TSURF EXPRESSION BELOW GIVES TSURF = SKIN TEMP.  IF
1317 ! SNOWPACK IS NONZERO (HENCE ARGUMENT ZZ1=1), THEN TSURF EXPRESSION
1318 ! BELOW YIELDS SOIL COLUMN TOP TEMPERATURE UNDER SNOWPACK.  THEN
1319 ! CALCULATE TEMPERATURE AT BOTTOM INTERFACE OF 1ST SOIL LAYER FOR USE
1320 ! LATER IN FUNCTION SUBROUTINE SNKSRC
1321 ! ----------------------------------------------------------------------
1322       SICE = SMC (1) - SH2O (1)
1323       IF (ITAVG) THEN
1324          TSURF = (YY + (ZZ1-1) * STC (1)) / ZZ1
1325 ! ----------------------------------------------------------------------
1326 ! IF FROZEN WATER PRESENT OR ANY OF LAYER-1 MID-POINT OR BOUNDING
1327 ! INTERFACE TEMPERATURES BELOW FREEZING, THEN CALL SNKSRC TO
1328 ! COMPUTE HEAT SOURCE/SINK (AND CHANGE IN FROZEN WATER CONTENT)
1329 ! DUE TO POSSIBLE SOIL WATER PHASE CHANGE
1330 ! ----------------------------------------------------------------------
1331          CALL TBND (STC (1),STC (2),ZSOIL,ZBOT,1,NSOIL,TBK)
1332          IF ( (SICE > 0.) .OR. (STC (1) < T0) .OR.                         &
1333             (TSURF < T0) .OR. (TBK < T0) ) THEN
1334 !          TSNSR = SNKSRC (TAVG,SMC(1),SH2O(1),
1335             CALL TMPAVG (TAVG,TSURF,STC (1),TBK,ZSOIL,NSOIL,1)
1336             CALL SNKSRC (TSNSR,TAVG,SMC (1),SH2O (1),                      &
1337                           ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
1338 !          RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
1339             RHSTS (1) = RHSTS (1) - TSNSR / DENOM
1340          END IF
1341       ELSE
1342 !          TSNSR = SNKSRC (STC(1),SMC(1),SH2O(1),
1343          IF ( (SICE > 0.) .OR. (STC (1) < T0) ) THEN
1344             CALL SNKSRC (TSNSR,STC (1),SMC (1),SH2O (1),                   &
1345                           ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
1346 !          RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
1347             RHSTS (1) = RHSTS (1) - TSNSR / DENOM
1348          END IF
1349 ! ----------------------------------------------------------------------
1350 ! THIS ENDS SECTION FOR TOP SOIL LAYER.
1351 ! ----------------------------------------------------------------------
1352       END IF
1354 ! INITIALIZE DDZ2
1355 ! ----------------------------------------------------------------------
1357       DDZ2 = 0.0
1358       DF1K = DF1
1360 ! ----------------------------------------------------------------------
1361 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
1362 ! (EXCEPT SUBSFC OR "GROUND" HEAT FLUX NOT REPEATED IN LOWER LAYERS)
1363 ! ----------------------------------------------------------------------
1364 ! CALCULATE HEAT CAPACITY FOR THIS SOIL LAYER.
1365 ! ----------------------------------------------------------------------
1366       DO K = 2,NSOIL
1367          HCPCT = SH2O (K)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC (  &
1368                 K))* CAIR + ( SMC (K) - SH2O (K) )* CICE
1369 ! ----------------------------------------------------------------------
1370 ! THIS SECTION FOR LAYER 2 OR GREATER, BUT NOT LAST LAYER.
1371 ! ----------------------------------------------------------------------
1372 ! CALCULATE THERMAL DIFFUSIVITY FOR THIS LAYER.
1373 ! ----------------------------------------------------------------------
1374          IF (K /= NSOIL) THEN
1376 ! ----------------------------------------------------------------------
1377 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER
1378 ! ----------------------------------------------------------------------
1379             CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
1381 !urban
1382        IF(VEGTYP==1) DF1N = 3.24
1384             DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
1386 ! ----------------------------------------------------------------------
1387 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
1388 ! ----------------------------------------------------------------------
1389             DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
1390             DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
1392 ! ----------------------------------------------------------------------
1393 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP):  CALCULATE
1394 ! TEMP AT BOTTOM OF LAYER.
1395 ! ----------------------------------------------------------------------
1396             CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K)) *      &
1397        HCPCT)
1398             IF (ITAVG) THEN
1399                CALL TBND (STC (K),STC (K +1),ZSOIL,ZBOT,K,NSOIL,TBK1)
1400             END IF
1402          ELSE
1403 ! ----------------------------------------------------------------------
1404 ! SPECIAL CASE OF BOTTOM SOIL LAYER:  CALCULATE THERMAL DIFFUSIVITY FOR
1405 ! BOTTOM LAYER.
1406 ! ----------------------------------------------------------------------
1408 ! ----------------------------------------------------------------------
1409 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU BOTTOM LAYER.
1410 ! ----------------------------------------------------------------------
1411             CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
1414 !urban
1415        IF(VEGTYP==1) DF1N = 3.24
1417             DENOM = .5 * (ZSOIL (K -1) + ZSOIL (K)) - ZBOT
1419 ! ----------------------------------------------------------------------
1420 ! SET MATRIX COEF, CI TO ZERO IF BOTTOM LAYER.
1421 ! ----------------------------------------------------------------------
1422             DTSDZ2 = (STC (K) - TBOT) / DENOM
1424 ! ----------------------------------------------------------------------
1425 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP):  CALCULATE
1426 ! TEMP AT BOTTOM OF LAST LAYER.
1427 ! ----------------------------------------------------------------------
1428             CI (K) = 0.
1429             IF (ITAVG) THEN
1430                CALL TBND (STC (K),TBOT,ZSOIL,ZBOT,K,NSOIL,TBK1)
1431             END IF
1432 ! ----------------------------------------------------------------------
1433 ! THIS ENDS SPECIAL LOOP FOR BOTTOM LAYER.
1434          END IF
1435 ! ----------------------------------------------------------------------
1436 ! CALCULATE RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
1437 ! ----------------------------------------------------------------------
1438          DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
1439          RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
1440          QTOT = -1.0* DENOM * RHSTS (K)
1442          SICE = SMC (K) - SH2O (K)
1443          IF (ITAVG) THEN
1444             CALL TMPAVG (TAVG,TBK,STC (K),TBK1,ZSOIL,NSOIL,K)
1445 !            TSNSR = SNKSRC(TAVG,SMC(K),SH2O(K),ZSOIL,NSOIL,
1446             IF ( (SICE > 0.) .OR. (STC (K) < T0) .OR.                   &
1447                (TBK .lt. T0) .OR. (TBK1 .lt. T0) ) THEN
1448                CALL SNKSRC (TSNSR,TAVG,SMC (K),SH2O (K),ZSOIL,NSOIL,    &
1449                              SMCMAX,PSISAT,BEXP,DT,K,QTOT)
1450                RHSTS (K) = RHSTS (K) - TSNSR / DENOM
1451             END IF
1452          ELSE
1453 !            TSNSR = SNKSRC(STC(K),SMC(K),SH2O(K),ZSOIL,NSOIL,
1454             IF ( (SICE > 0.) .OR. (STC (K) < T0) ) THEN
1455                CALL SNKSRC (TSNSR,STC (K),SMC (K),SH2O (K),ZSOIL,NSOIL, &
1456                              SMCMAX,PSISAT,BEXP,DT,K,QTOT)
1457                RHSTS (K) = RHSTS (K) - TSNSR / DENOM
1458             END IF
1459          END IF
1461 ! ----------------------------------------------------------------------
1462 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
1463 ! ----------------------------------------------------------------------
1464          AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
1466 ! ----------------------------------------------------------------------
1467 ! RESET VALUES OF DF1, DTSDZ, DDZ, AND TBK FOR LOOP TO NEXT SOIL LAYER.
1468 ! ----------------------------------------------------------------------
1469          BI (K) = - (AI (K) + CI (K))
1470          TBK = TBK1
1471          DF1K = DF1N
1472          DTSDZ = DTSDZ2
1473          DDZ = DDZ2
1474       END DO
1475 ! ----------------------------------------------------------------------
1476   END SUBROUTINE HRT
1477 ! ----------------------------------------------------------------------
1479       SUBROUTINE HRTICE (RHSTS,STC,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
1481 ! ----------------------------------------------------------------------
1482 ! SUBROUTINE HRTICE
1483 ! ----------------------------------------------------------------------
1484 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
1485 ! THERMAL DIFFUSION EQUATION IN THE CASE OF SEA-ICE PACK.  ALSO TO
1486 ! COMPUTE (PREPARE) THE MATRIX COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX
1487 ! OF THE IMPLICIT TIME SCHEME.
1488 ! ----------------------------------------------------------------------
1489       IMPLICIT NONE
1492       INTEGER, INTENT(IN)    :: NSOIL
1493       INTEGER                :: K
1495       REAL,    INTENT(IN)    :: DF1,YY,ZZ1
1496       REAL, DIMENSION(1:NSOIL), INTENT(OUT):: AI, BI,CI
1497       REAL, DIMENSION(1:NSOIL), INTENT(IN) :: STC, ZSOIL
1498       REAL, DIMENSION(1:NSOIL), INTENT(OUT):: RHSTS
1499       REAL                   :: DDZ,DDZ2,DENOM,DTSDZ,DTSDZ2,SSOIL,       &
1500                                 ZBOT,TBOT
1501       REAL, PARAMETER        :: HCPCT = 1.72396E+6
1503 ! ----------------------------------------------------------------------
1504 ! SET A NOMINAL UNIVERSAL VALUE OF THE SEA-ICE SPECIFIC HEAT CAPACITY,
1505 ! HCPCT = 1880.0*917.0.
1506 ! ----------------------------------------------------------------------
1507       DATA TBOT /271.16/
1509 ! ----------------------------------------------------------------------
1510 ! THE INPUT ARGUMENT DF1 IS A UNIVERSALLY CONSTANT VALUE OF SEA-ICE
1511 ! THERMAL DIFFUSIVITY, SET IN ROUTINE SNOPAC AS DF1 = 2.2.
1512 ! ----------------------------------------------------------------------
1513 ! SET ICE PACK DEPTH.  USE TBOT AS ICE PACK LOWER BOUNDARY TEMPERATURE
1514 ! (THAT OF UNFROZEN SEA WATER AT BOTTOM OF SEA ICE PACK).  ASSUME ICE
1515 ! PACK IS OF N=NSOIL LAYERS SPANNING A UNIFORM CONSTANT ICE PACK
1516 ! THICKNESS AS DEFINED BY ZSOIL(NSOIL) IN ROUTINE SFLX.
1517 ! ----------------------------------------------------------------------
1518 ! ----------------------------------------------------------------------
1519 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
1520 ! ----------------------------------------------------------------------
1521       ZBOT = ZSOIL (NSOIL)
1522       DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
1523       AI (1) = 0.0
1524       CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
1526 ! ----------------------------------------------------------------------
1527 ! CALC THE VERTICAL SOIL TEMP GRADIENT BTWN THE TOP AND 2ND SOIL LAYERS.
1528 ! RECALC/ADJUST THE SOIL HEAT FLUX.  USE THE GRADIENT AND FLUX TO CALC
1529 ! RHSTS FOR THE TOP SOIL LAYER.
1530 ! ----------------------------------------------------------------------
1531       BI (1) = - CI (1) + DF1/ (0.5 * ZSOIL (1) * ZSOIL (1) * HCPCT *    &
1532        ZZ1)
1533       DTSDZ = ( STC (1) - STC (2) ) / ( -0.5 * ZSOIL (2) )
1534       SSOIL = DF1 * ( STC (1) - YY ) / ( 0.5 * ZSOIL (1) * ZZ1 )
1536 ! ----------------------------------------------------------------------
1537 ! INITIALIZE DDZ2
1538 ! ----------------------------------------------------------------------
1539       RHSTS (1) = ( DF1 * DTSDZ - SSOIL ) / ( ZSOIL (1) * HCPCT )
1541 ! ----------------------------------------------------------------------
1542 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
1543 ! ----------------------------------------------------------------------
1544       DDZ2 = 0.0
1545       DO K = 2,NSOIL
1547 ! ----------------------------------------------------------------------
1548 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER.
1549 ! ----------------------------------------------------------------------
1550          IF (K /= NSOIL) THEN
1551             DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
1553 ! ----------------------------------------------------------------------
1554 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT.
1555 ! ----------------------------------------------------------------------
1556             DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
1557             DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
1558             CI (K) = - DF1 * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K))*HCPCT)
1560 ! ----------------------------------------------------------------------
1561 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THE LOWEST LAYER.
1562 ! ----------------------------------------------------------------------
1563          ELSE
1565 ! ----------------------------------------------------------------------
1566 ! SET MATRIX COEF, CI TO ZERO.
1567 ! ----------------------------------------------------------------------
1568             DTSDZ2 = (STC (K) - TBOT)/ (.5 * (ZSOIL (K -1) + ZSOIL (K)) &
1569                      - ZBOT)
1570             CI (K) = 0.
1571 ! ----------------------------------------------------------------------
1572 ! CALC RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
1573 ! ----------------------------------------------------------------------
1574          END IF
1575          DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
1577 ! ----------------------------------------------------------------------
1578 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
1579 ! ----------------------------------------------------------------------
1580          RHSTS (K) = ( DF1 * DTSDZ2- DF1 * DTSDZ ) / DENOM
1581          AI (K) = - DF1 * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
1583 ! ----------------------------------------------------------------------
1584 ! RESET VALUES OF DTSDZ AND DDZ FOR LOOP TO NEXT SOIL LYR.
1585 ! ----------------------------------------------------------------------
1586          BI (K) = - (AI (K) + CI (K))
1587          DTSDZ = DTSDZ2
1588          DDZ = DDZ2
1589       END DO
1590 ! ----------------------------------------------------------------------
1591   END SUBROUTINE HRTICE
1592 ! ----------------------------------------------------------------------
1594       SUBROUTINE HSTEP (STCOUT,STCIN,RHSTS,DT,NSOIL,AI,BI,CI)
1596 ! ----------------------------------------------------------------------
1597 ! SUBROUTINE HSTEP
1598 ! ----------------------------------------------------------------------
1599 ! CALCULATE/UPDATE THE SOIL TEMPERATURE FIELD.
1600 ! ----------------------------------------------------------------------
1601       IMPLICIT NONE
1602       INTEGER, INTENT(IN)  :: NSOIL
1603       INTEGER              :: K
1605       REAL, DIMENSION(1:NSOIL), INTENT(IN):: STCIN
1606       REAL, DIMENSION(1:NSOIL), INTENT(OUT):: STCOUT
1607       REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: RHSTS
1608       REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: AI,BI,CI
1609       REAL, DIMENSION(1:NSOIL) :: RHSTSin
1610       REAL, DIMENSION(1:NSOIL) :: CIin
1611       REAL                 :: DT
1613 ! ----------------------------------------------------------------------
1614 ! CREATE FINITE DIFFERENCE VALUES FOR USE IN ROSR12 ROUTINE
1615 ! ----------------------------------------------------------------------
1616       DO K = 1,NSOIL
1617          RHSTS (K) = RHSTS (K) * DT
1618          AI (K) = AI (K) * DT
1619          BI (K) = 1. + BI (K) * DT
1620          CI (K) = CI (K) * DT
1621       END DO
1622 ! ----------------------------------------------------------------------
1623 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
1624 ! ----------------------------------------------------------------------
1625       DO K = 1,NSOIL
1626          RHSTSin (K) = RHSTS (K)
1627       END DO
1628       DO K = 1,NSOIL
1629          CIin (K) = CI (K)
1630       END DO
1631 ! ----------------------------------------------------------------------
1632 ! SOLVE THE TRI-DIAGONAL MATRIX EQUATION
1633 ! ----------------------------------------------------------------------
1634       CALL ROSR12 (CI,AI,BI,CIin,RHSTSin,RHSTS,NSOIL)
1635 ! ----------------------------------------------------------------------
1636 ! CALC/UPDATE THE SOIL TEMPS USING MATRIX SOLUTION
1637 ! ----------------------------------------------------------------------
1638       DO K = 1,NSOIL
1639          STCOUT (K) = STCIN (K) + CI (K)
1640       END DO
1641 ! ----------------------------------------------------------------------
1642   END SUBROUTINE HSTEP
1643 ! ----------------------------------------------------------------------
1645       SUBROUTINE NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT,                 &
1646                          SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,SHDFAC,      &
1647                          SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI,    &
1648                          SSOIL,                                         &
1649                          STC,EPSCA,BEXP,PC,RCH,RR,CFACTR,               &
1650                          SH2O,SLOPE,KDT,FRZFACT,PSISAT,ZSOIL,           &
1651                          DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2,         &
1652                          RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS,        &
1653                          QUARTZ,FXEXP,CSOIL,                            &
1654                          BETA,DRIP,DEW,FLX1,FLX3,VEGTYP)
1656 ! ----------------------------------------------------------------------
1657 ! SUBROUTINE NOPAC
1658 ! ----------------------------------------------------------------------
1659 ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES AND UPDATE SOIL MOISTURE
1660 ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN NO SNOW PACK IS
1661 ! PRESENT.
1662 ! ----------------------------------------------------------------------
1663       IMPLICIT NONE
1665       INTEGER, INTENT(IN)  :: ICE, NROOT,NSOIL,VEGTYP
1666       INTEGER              :: K
1668       REAL, INTENT(IN)     :: BEXP,CFACTR, CMCMAX,CSOIL,DKSAT,DT,DWSAT, &
1669                               EPSCA,ETP,FDOWN,F1,FXEXP,FRZFACT,KDT,PC,  &
1670                               PRCP,PSISAT,Q2,QUARTZ,RCH,RR,SBETA,SFCTMP,&
1671                               SHDFAC,SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, &
1672                               T24,TBOT,TH2,ZBOT,EMISSI
1673       REAL, INTENT(INOUT)  :: CMC,BETA,T1
1674       REAL, INTENT(OUT)    :: DEW,DRIP,EC,EDIR,ETA,ETT,FLX1,FLX3,       &
1675                               RUNOFF1,RUNOFF2,RUNOFF3,SSOIL
1676       REAL, DIMENSION(1:NSOIL),INTENT(IN)     :: RTDIS,ZSOIL
1677       REAL, DIMENSION(1:NSOIL),INTENT(OUT)    :: ET
1678       REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
1679       REAL, DIMENSION(1:NSOIL) :: ET1
1680       REAL                 :: EC1,EDIR1,ETT1,DF1,ETA1,ETP1,PRCP1,YY,    &
1681                               YYNUM,ZZ1
1683 ! ----------------------------------------------------------------------
1684 ! EXECUTABLE CODE BEGINS HERE:
1685 ! CONVERT ETP Fnd PRCP FROM KG M-2 S-1 TO M S-1 AND INITIALIZE DEW.
1686 ! ----------------------------------------------------------------------
1687       PRCP1 = PRCP * 0.001
1688       ETP1 = ETP * 0.001
1689       DEW = 0.0
1690 ! ----------------------------------------------------------------------
1691 ! INITIALIZE EVAP TERMS.
1692 ! ----------------------------------------------------------------------
1693       EDIR = 0.
1694       EDIR1 = 0.
1695       EC1 = 0.
1696       EC = 0.
1697       DO K = 1,NSOIL
1698         ET(K) = 0.
1699         ET1(K) = 0.
1700       END DO
1701       ETT = 0.
1702       ETT1 = 0.
1704       IF (ETP > 0.0) THEN
1705          CALL EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL,                  &
1706                       SH2O,                                             &
1707                       SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT,                &
1708                       SMCREF,SHDFAC,CMCMAX,                             &
1709                       SMCDRY,CFACTR,                                    &
1710                        EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
1711          CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL,                      &
1712                       SH2O,SLOPE,KDT,FRZFACT,                           &
1713                       SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT,                   &
1714                       SHDFAC,CMCMAX,                                    &
1715                       RUNOFF1,RUNOFF2,RUNOFF3,                          &
1716                       EDIR1,EC1,ET1,                                    &
1717                       DRIP)
1719 ! ----------------------------------------------------------------------
1720 ! CONVERT MODELED EVAPOTRANSPIRATION FROM  M S-1  TO  KG M-2 S-1.
1721 ! ----------------------------------------------------------------------
1723          ETA = ETA1 * 1000.0
1725 ! ----------------------------------------------------------------------
1726 ! IF ETP < 0, ASSUME DEW FORMS (TRANSFORM ETP1 INTO DEW AND REINITIALIZE
1727 ! ETP1 TO ZERO).
1728 ! ----------------------------------------------------------------------
1729       ELSE
1730          DEW = - ETP1
1732 ! ----------------------------------------------------------------------
1733 ! CONVERT PRCP FROM 'KG M-2 S-1' TO 'M S-1' AND ADD DEW AMOUNT.
1734 ! ----------------------------------------------------------------------
1736          PRCP1 = PRCP1+ DEW
1737          CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL,                      &
1738                       SH2O,SLOPE,KDT,FRZFACT,                           &
1739                       SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT,                   &
1740                       SHDFAC,CMCMAX,                                    &
1741                       RUNOFF1,RUNOFF2,RUNOFF3,                          &
1742                       EDIR1,EC1,ET1,                                    &
1743                       DRIP)
1745 ! ----------------------------------------------------------------------
1746 ! CONVERT MODELED EVAPOTRANSPIRATION FROM 'M S-1' TO 'KG M-2 S-1'.
1747 ! ----------------------------------------------------------------------
1748 !         ETA = ETA1 * 1000.0
1749       END IF
1751 ! ----------------------------------------------------------------------
1752 ! BASED ON ETP AND E VALUES, DETERMINE BETA
1753 ! ----------------------------------------------------------------------
1755       IF ( ETP <= 0.0 ) THEN
1756          BETA = 0.0
1757          ETA = ETP
1758          IF ( ETP < 0.0 ) THEN
1759             BETA = 1.0
1760          END IF
1761       ELSE
1762          BETA = ETA / ETP
1763       END IF
1765 ! ----------------------------------------------------------------------
1766 ! CONVERT MODELED EVAPOTRANSPIRATION COMPONENTS 'M S-1' TO 'KG M-2 S-1'.
1767 ! ----------------------------------------------------------------------
1768       EDIR = EDIR1*1000.
1769       EC = EC1*1000.
1770       DO K = 1,NSOIL
1771         ET(K) = ET1(K)*1000.
1772       END DO
1773       ETT = ETT1*1000.
1775 ! ----------------------------------------------------------------------
1776 ! GET SOIL THERMAL DIFFUXIVITY/CONDUCTIVITY FOR TOP SOIL LYR,
1777 ! CALC. ADJUSTED TOP LYR SOIL TEMP AND ADJUSTED SOIL FLUX, THEN
1778 ! CALL SHFLX TO COMPUTE/UPDATE SOIL HEAT FLUX AND SOIL TEMPS.
1779 ! ----------------------------------------------------------------------
1781       CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
1783 !urban
1784       IF (VEGTYP==1) DF1=3.24
1787 ! ----------------------------------------------------------------------
1788 ! VEGETATION GREENNESS FRACTION REDUCTION IN SUBSURFACE HEAT FLUX
1789 ! VIA REDUCTION FACTOR, WHICH IS CONVENIENT TO APPLY HERE TO THERMAL
1790 ! DIFFUSIVITY THAT IS LATER USED IN HRT TO COMPUTE SUB SFC HEAT FLUX
1791 ! (SEE ADDITIONAL COMMENTS ON VEG EFFECT SUB-SFC HEAT FLX IN
1792 ! ROUTINE SFLX)
1793 ! ----------------------------------------------------------------------
1794       DF1 = DF1 * EXP (SBETA * SHDFAC)
1795 ! ----------------------------------------------------------------------
1796 ! COMPUTE INTERMEDIATE TERMS PASSED TO ROUTINE HRT (VIA ROUTINE
1797 ! SHFLX BELOW) FOR USE IN COMPUTING SUBSURFACE HEAT FLUX IN HRT
1798 ! ----------------------------------------------------------------------
1799       YYNUM = FDOWN - EMISSI*SIGMA * T24
1800       YY = SFCTMP + (YYNUM / RCH + TH2- SFCTMP - BETA * EPSCA) / RR
1802       ZZ1 = DF1 / ( -0.5 * ZSOIL (1) * RCH * RR ) + 1.0
1804 !urban
1805       CALL SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL,        &
1806                   TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE,         &
1807                   QUARTZ,CSOIL,VEGTYP)
1809 ! ----------------------------------------------------------------------
1810 ! SET FLX1 AND FLX3 (SNOPACK PHASE CHANGE HEAT FLUXES) TO ZERO SINCE
1811 ! THEY ARE NOT USED HERE IN SNOPAC.  FLX2 (FREEZING RAIN HEAT FLUX) WAS
1812 ! SIMILARLY INITIALIZED IN THE PENMAN ROUTINE.
1813 ! ----------------------------------------------------------------------
1814       FLX1 = 0.0
1815       FLX3 = 0.0
1817 ! ----------------------------------------------------------------------
1818   END SUBROUTINE NOPAC
1819 ! ----------------------------------------------------------------------
1821       SUBROUTINE PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, &
1822      &                   Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA,       &
1823      &                   DQSDT2,FLX2,EMISSI_IN,SNEQV)
1825 ! ----------------------------------------------------------------------
1826 ! SUBROUTINE PENMAN
1827 ! ----------------------------------------------------------------------
1828 ! CALCULATE POTENTIAL EVAPORATION FOR THE CURRENT POINT.  VARIOUS
1829 ! PARTIAL SUMS/PRODUCTS ARE ALSO CALCULATED AND PASSED BACK TO THE
1830 ! CALLING ROUTINE FOR LATER USE.
1831 ! ----------------------------------------------------------------------
1832       IMPLICIT NONE
1833       LOGICAL, INTENT(IN)     :: SNOWNG, FRZGRA
1834       REAL, INTENT(IN)        :: CH, DQSDT2,FDOWN,PRCP,                 &
1835                                  Q2, Q2SAT,SSOIL, SFCPRS, SFCTMP,       &
1836                                  T2V, TH2,EMISSI_IN,SNEQV
1837       REAL, INTENT(OUT)       :: EPSCA,ETP,FLX2,RCH,RR,T24
1838       REAL                    :: A, DELTA, FNET,RAD,RHO,EMISSI,ELCP1,LVS
1840       REAL, PARAMETER      :: ELCP = 2.4888E+3, LSUBC = 2.501000E+6,CP = 1004.6
1841       REAL, PARAMETER      :: LSUBS = 2.83E+6
1843 ! ----------------------------------------------------------------------
1844 ! EXECUTABLE CODE BEGINS HERE:
1845 ! ----------------------------------------------------------------------
1846 ! ----------------------------------------------------------------------
1847 ! PREPARE PARTIAL QUANTITIES FOR PENMAN EQUATION.
1848 ! ----------------------------------------------------------------------
1849         EMISSI=EMISSI_IN
1850       IF(SNEQV == 0.)THEN
1851         ELCP1=ELCP
1852         LVS=LSUBC
1853       ELSE
1854 !        EMISSI=EMISSI_S  ! FOR SNOW
1855         ELCP1=ELCP*LSUBS/LSUBC
1856         LVS=LSUBS
1857       ENDIF
1859       FLX2 = 0.0
1860 !      DELTA = ELCP * DQSDT2
1861       DELTA = ELCP1 * DQSDT2
1862       T24 = SFCTMP * SFCTMP * SFCTMP * SFCTMP
1863 !      RR = T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
1864       RR = EMISSI*T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
1865       RHO = SFCPRS / (RD * T2V)
1867 ! ----------------------------------------------------------------------
1868 ! ADJUST THE PARTIAL SUMS / PRODUCTS WITH THE LATENT HEAT
1869 ! EFFECTS CAUSED BY FALLING PRECIPITATION.
1870 ! ----------------------------------------------------------------------
1871       RCH = RHO * CP * CH
1872       IF (.NOT. SNOWNG) THEN
1873          IF (PRCP >  0.0) RR = RR + CPH2O * PRCP / RCH
1874       ELSE
1875          RR = RR + CPICE * PRCP / RCH
1876       END IF
1878 ! ----------------------------------------------------------------------
1879 ! INCLUDE THE LATENT HEAT EFFECTS OF FRZNG RAIN CONVERTING TO ICE ON
1880 ! IMPACT IN THE CALCULATION OF FLX2 AND FNET.
1881 ! ----------------------------------------------------------------------
1882 !      FNET = FDOWN - SIGMA * T24- SSOIL
1883       FNET = FDOWN -  EMISSI*SIGMA * T24- SSOIL
1884       IF (FRZGRA) THEN
1885          FLX2 = - LSUBF * PRCP
1886          FNET = FNET - FLX2
1887 ! ----------------------------------------------------------------------
1888 ! FINISH PENMAN EQUATION CALCULATIONS.
1889 ! ----------------------------------------------------------------------
1890       END IF
1891       RAD = FNET / RCH + TH2- SFCTMP
1892 !      A = ELCP * (Q2SAT - Q2)
1893       A = ELCP1 * (Q2SAT - Q2)
1894       EPSCA = (A * RR + RAD * DELTA) / (DELTA + RR)
1895 !      ETP = EPSCA * RCH / LSUBC
1896       ETP = EPSCA * RCH / LVS
1898 ! ----------------------------------------------------------------------
1899   END SUBROUTINE PENMAN
1900 ! ----------------------------------------------------------------------
1902       SUBROUTINE REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX,      &
1903                          TOPT,                                             &
1904                          REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX,  &
1905                          PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT,          &
1906                          SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP,      &
1907                          RTDIS,SLDPTH,ZSOIL, NROOT,NSOIL,Z0BRD,CZIL,LAI,   &
1908                          CSOIL,ALBBRD,PTU,LLANDUSE,LSOIL,LOCAL)
1910       IMPLICIT NONE
1911 ! ----------------------------------------------------------------------
1912 ! Internally set (default valuess)
1913 ! all soil and vegetation parameters required for the execusion oF
1914 ! the Noah lsm are defined in VEGPARM.TBL, SOILPARM.TB, and GENPARM.TBL.
1915 ! ----------------------------------------------------------------------
1916 !     Vegetation parameters:
1917 !             ALBBRD: SFC background snow-free albedo
1918 !             CMXTBL: MAX CNPY Capacity
1919 !              Z0BRD: Background roughness length
1920 !             SHDFAC: Green vegetation fraction
1921 !              NROOT: Rooting depth
1922 !              RSMIN: Mimimum stomatal resistance
1923 !              RSMAX: Max. stomatal resistance
1924 !                RGL: Parameters used in radiation stress function
1925 !                 HS: Parameter used in vapor pressure deficit functio
1926 !               TOPT: Optimum transpiration air temperature.
1927 !             CMCMAX: Maximum canopy water capacity
1928 !             CFACTR: Parameter used in the canopy inteception calculation
1929 !               SNUP: Threshold snow depth (in water equivalent m) that
1930 !                     implies 100 percent snow cover
1931 !                LAI: Leaf area index
1933 ! ----------------------------------------------------------------------
1934 !      Soil parameters:
1935 !        SMCMAX: MAX soil moisture content (porosity)
1936 !        SMCREF: Reference soil moisture  (field capacity)
1937 !        SMCWLT: Wilting point soil moisture
1938 !        SMCWLT: Air dry soil moist content limits
1939 !       SSATPSI: SAT (saturation) soil potential
1940 !         DKSAT: SAT soil conductivity
1941 !          BEXP: B parameter
1942 !        SSATDW: SAT soil diffusivity
1943 !           F1: Soil thermal diffusivity/conductivity coef.
1944 !        QUARTZ: Soil quartz content
1945 !  Modified by F. Chen (12/22/97)  to use the STATSGO soil map
1946 !  Modified By F. Chen (01/22/00)  to include PLaya, Lava, and White San
1947 !  Modified By F. Chen (08/05/02)  to include additional parameters for the Noah
1948 ! NOTE: SATDW = BB*SATDK*(SATPSI/MAXSMC)
1949 !         F11 = ALOG10(SATPSI) + BB*ALOG10(MAXSMC) + 2.0
1950 !       REFSMC1=MAXSMC*(5.79E-9/SATDK)**(1/(2*BB+3)) 5.79E-9 m/s= 0.5 mm
1951 !       REFSMC=REFSMC1+1./3.(MAXSMC-REFSMC1)
1952 !       WLTSMC1=MAXSMC*(200./SATPSI)**(-1./BB)    (Wetzel and Chang, 198
1953 !       WLTSMC=WLTSMC1-0.5*WLTSMC1
1954 ! Note: the values for playa is set for it to have a thermal conductivit
1955 ! as sand and to have a hydrulic conductivity as clay
1957 ! ----------------------------------------------------------------------
1958 ! Class parameter 'SLOPETYP' was included to estimate linear reservoir
1959 ! coefficient 'SLOPE' to the baseflow runoff out of the bottom layer.
1960 ! lowest class (slopetyp=0) means highest slope parameter = 1.
1961 ! definition of slopetyp from 'zobler' slope type:
1962 ! slope class  percent slope
1963 ! 1            0-8
1964 ! 2            8-30
1965 ! 3            > 30
1966 ! 4            0-30
1967 ! 5            0-8 & > 30
1968 ! 6            8-30 & > 30
1969 ! 7            0-8, 8-30, > 30
1970 ! 9            GLACIAL ICE
1971 ! BLANK        OCEAN/SEA
1972 !       SLOPE_DATA: linear reservoir coefficient
1973 !       SBETA_DATA: parameter used to caluculate vegetation effect on soil heat
1974 !       FXEXP_DAT:  soil evaporation exponent used in DEVAP
1975 !       CSOIL_DATA: soil heat capacity [J M-3 K-1]
1976 !       SALP_DATA: shape parameter of  distribution function of snow cover
1977 !       REFDK_DATA and REFKDT_DATA: parameters in the surface runoff parameteriz
1978 !       FRZK_DATA: frozen ground parameter
1979 !       ZBOT_DATA: depth[M] of lower boundary soil temperature
1980 !       CZIL_DATA: calculate roughness length of heat
1981 !       SMLOW_DATA and MHIGH_DATA: two soil moisture wilt, soil moisture referen
1982 !                 parameters
1983 ! Set maximum number of soil-, veg-, and slopetyp in data statement.
1984 ! ----------------------------------------------------------------------
1985       INTEGER, PARAMETER     :: MAX_SLOPETYP=30,MAX_SOILTYP=30,MAX_VEGTYP=30
1986       LOGICAL                :: LOCAL
1987       CHARACTER (LEN=4), INTENT(IN)::  LLANDUSE, LSOIL
1989 ! Veg parameters
1990       INTEGER, INTENT(IN)    :: VEGTYP
1991       INTEGER, INTENT(OUT)   :: NROOT
1992       REAL, INTENT(OUT)      :: HS,LAI,RSMIN,RGL,SHDFAC,SNUP,Z0BRD,         &
1993                                 CMCMAX,RSMAX,TOPT,ALBBRD
1994 ! Soil parameters
1995       INTEGER, INTENT(IN)    :: SOILTYP
1996       REAL, INTENT(OUT)      :: BEXP,DKSAT,DWSAT,F1,QUARTZ,SMCDRY,          &
1997                                 SMCMAX,SMCREF,SMCWLT,PSISAT
1998 ! General parameters
1999       INTEGER, INTENT(IN)    :: SLOPETYP,NSOIL
2000       INTEGER                :: I
2002       REAL,    INTENT(OUT)   :: SLOPE,CZIL,SBETA,FXEXP,                     &
2003                                 CSOIL,SALP,FRZX,KDT,CFACTR,      &
2004                                 ZBOT,REFKDT,PTU
2005       REAL,DIMENSION(1:NSOIL),INTENT(IN) :: SLDPTH,ZSOIL
2006       REAL,DIMENSION(1:NSOIL),INTENT(OUT):: RTDIS
2007       REAL                   :: FRZFACT,FRZK,REFDK
2009 !      SAVE
2010 ! ----------------------------------------------------------------------
2012                IF (SOILTYP .gt. SLCATS) THEN
2013                         CALL wrf_error_fatal ( 'Warning: too many input soil types' )
2014                END IF
2015                IF (VEGTYP .gt. LUCATS) THEN
2016                      CALL wrf_error_fatal ( 'Warning: too many input landuse types' )
2017                END IF
2018                IF (SLOPETYP .gt. SLPCATS) THEN
2019                      CALL wrf_error_fatal ( 'Warning: too many input slope types' )
2020                END IF
2022 ! ----------------------------------------------------------------------
2023 !  SET-UP SOIL PARAMETERS
2024 ! ----------------------------------------------------------------------
2025       CSOIL = CSOIL_DATA
2026       BEXP = BB (SOILTYP)
2027       DKSAT = SATDK (SOILTYP)
2028       DWSAT = SATDW (SOILTYP)
2029       F1 = F11 (SOILTYP)
2030       PSISAT = SATPSI (SOILTYP)
2031       QUARTZ = QTZ (SOILTYP)
2032       SMCDRY = DRYSMC (SOILTYP)
2033       SMCMAX = MAXSMC (SOILTYP)
2034       SMCREF = REFSMC (SOILTYP)
2035       SMCWLT = WLTSMC (SOILTYP)
2036 ! ----------------------------------------------------------------------
2037 ! Set-up universal parameters (not dependent on SOILTYP, VEGTYP or
2038 ! SLOPETYP)
2039 ! ----------------------------------------------------------------------
2040       ZBOT = ZBOT_DATA
2041       SALP = SALP_DATA
2042       SBETA = SBETA_DATA
2043       REFDK = REFDK_DATA
2044       FRZK = FRZK_DATA
2045       FXEXP = FXEXP_DATA
2046       REFKDT = REFKDT_DATA
2047       PTU = 0.    ! (not used yet) to satisify intent(out)
2048       KDT = REFKDT * DKSAT / REFDK
2049       CZIL = CZIL_DATA
2050       SLOPE = SLOPE_DATA (SLOPETYP)
2052 ! ----------------------------------------------------------------------
2053 ! TO ADJUST FRZK PARAMETER TO ACTUAL SOIL TYPE: FRZK * FRZFACT
2054 ! ----------------------------------------------------------------------
2055       FRZFACT = (SMCMAX / SMCREF) * (0.412 / 0.468)
2056       FRZX = FRZK * FRZFACT
2058 ! ----------------------------------------------------------------------
2059 ! SET-UP VEGETATION PARAMETERS
2060 ! ----------------------------------------------------------------------
2061       TOPT = TOPT_DATA
2062       CMCMAX = CMCMAX_DATA
2063       CFACTR = CFACTR_DATA
2064       RSMAX = RSMAX_DATA
2065       NROOT = NROTBL (VEGTYP)
2066       SNUP = SNUPTBL (VEGTYP)
2067       RSMIN = RSTBL (VEGTYP)
2068       RGL = RGLTBL (VEGTYP)
2069       HS = HSTBL (VEGTYP)
2070       LAI = LAITBL (VEGTYP)
2071                IF(LOCAL) THEN
2072                  ALBBRD = ALBTBL(VEGTYP)
2073                  Z0BRD = Z0TBL(VEGTYP)
2074                  SHDFAC = SHDTBL(VEGTYP)
2075                ENDIF
2077                IF (VEGTYP .eq. BARE) SHDFAC = 0.0
2078                IF (NROOT .gt. NSOIL) THEN
2079                   WRITE (err_message,*) 'Error: too many root layers ',  &
2080                                                  NSOIL,NROOT
2081                   CALL wrf_error_fatal ( err_message )
2082 ! ----------------------------------------------------------------------
2083 ! CALCULATE ROOT DISTRIBUTION.  PRESENT VERSION ASSUMES UNIFORM
2084 ! DISTRIBUTION BASED ON SOIL LAYER DEPTHS.
2085 ! ----------------------------------------------------------------------
2086                END IF
2087                DO I = 1,NROOT
2088                   RTDIS (I) = - SLDPTH (I)/ ZSOIL (NROOT)
2089 ! ----------------------------------------------------------------------
2090 !  SET-UP SLOPE PARAMETER
2091 ! ----------------------------------------------------------------------
2092                END DO
2094 !        print*,'end of PRMRED'
2095 !       print*,'VEGTYP',VEGTYP,'SOILTYP',SOILTYP,'SLOPETYP',SLOPETYP,    &
2096 !    & 'CFACTR',CFACTR,'CMCMAX',CMCMAX,'RSMAX',RSMAX,'TOPT',TOPT,        &
2097 !    & 'REFKDT',REFKDT,'KDT',KDT,'SBETA',SBETA, 'SHDFAC',SHDFAC,         &
2098 !    &  'RSMIN',RSMIN,'RGL',RGL,'HS',HS,'ZBOT',ZBOT,'FRZX',FRZX,         &
2099 !    &  'PSISAT',PSISAT,'SLOPE',SLOPE,'SNUP',SNUP,'SALP',SALP,'BEXP',    &
2100 !    &   BEXP,                                                           &
2101 !    &  'DKSAT',DKSAT,'DWSAT',DWSAT,                                     &
2102 !    &  'SMCMAX',SMCMAX,'SMCWLT',SMCWLT,'SMCREF',SMCREF,'SMCDRY',SMCDRY, &
2103 !    &  'F1',F1,'QUARTZ',QUARTZ,'FXEXP',FXEXP,                           &
2104 !    &  'RTDIS',RTDIS,'SLDPTH',SLDPTH,'ZSOIL',ZSOIL, 'NROOT',NROOT,      &
2105 !    &  'NSOIL',NSOIL,'Z0',Z0,'CZIL',CZIL,'LAI',LAI,                     &
2106 !    &  'CSOIL',CSOIL,'PTU',PTU,                                         &
2107 !    &  'LOCAL', LOCAL
2109       END  SUBROUTINE REDPRM
2111       SUBROUTINE ROSR12 (P,A,B,C,D,DELTA,NSOIL)
2113 ! ----------------------------------------------------------------------
2114 ! SUBROUTINE ROSR12
2115 ! ----------------------------------------------------------------------
2116 ! INVERT (SOLVE) THE TRI-DIAGONAL MATRIX PROBLEM SHOWN BELOW:
2117 ! ###                                            ### ###  ###   ###  ###
2118 ! #B(1), C(1),  0  ,  0  ,  0  ,   . . .  ,    0   # #      #   #      #
2119 ! #A(2), B(2), C(2),  0  ,  0  ,   . . .  ,    0   # #      #   #      #
2120 ! # 0  , A(3), B(3), C(3),  0  ,   . . .  ,    0   # #      #   # D(3) #
2121 ! # 0  ,  0  , A(4), B(4), C(4),   . . .  ,    0   # # P(4) #   # D(4) #
2122 ! # 0  ,  0  ,  0  , A(5), B(5),   . . .  ,    0   # # P(5) #   # D(5) #
2123 ! # .                                          .   # #  .   # = #   .  #
2124 ! # .                                          .   # #  .   #   #   .  #
2125 ! # .                                          .   # #  .   #   #   .  #
2126 ! # 0  , . . . , 0 , A(M-2), B(M-2), C(M-2),   0   # #P(M-2)#   #D(M-2)#
2127 ! # 0  , . . . , 0 ,   0   , A(M-1), B(M-1), C(M-1)# #P(M-1)#   #D(M-1)#
2128 ! # 0  , . . . , 0 ,   0   ,   0   ,  A(M) ,  B(M) # # P(M) #   # D(M) #
2129 ! ###                                            ### ###  ###   ###  ###
2130 ! ----------------------------------------------------------------------
2131       IMPLICIT NONE
2133       INTEGER, INTENT(IN)   :: NSOIL
2134       INTEGER               :: K, KK
2136       REAL, DIMENSION(1:NSOIL), INTENT(IN):: A, B, D
2137       REAL, DIMENSION(1:NSOIL),INTENT(INOUT):: C,P,DELTA
2139 ! ----------------------------------------------------------------------
2140 ! INITIALIZE EQN COEF C FOR THE LOWEST SOIL LAYER
2141 ! ----------------------------------------------------------------------
2142       C (NSOIL) = 0.0
2143       P (1) = - C (1) / B (1)
2144 ! ----------------------------------------------------------------------
2145 ! SOLVE THE COEFS FOR THE 1ST SOIL LAYER
2146 ! ----------------------------------------------------------------------
2148 ! ----------------------------------------------------------------------
2149 ! SOLVE THE COEFS FOR SOIL LAYERS 2 THRU NSOIL
2150 ! ----------------------------------------------------------------------
2151       DELTA (1) = D (1) / B (1)
2152       DO K = 2,NSOIL
2153          P (K) = - C (K) * ( 1.0 / (B (K) + A (K) * P (K -1)) )
2154          DELTA (K) = (D (K) - A (K)* DELTA (K -1))* (1.0/ (B (K) + A (K)&
2155                     * P (K -1)))
2156       END DO
2157 ! ----------------------------------------------------------------------
2158 ! SET P TO DELTA FOR LOWEST SOIL LAYER
2159 ! ----------------------------------------------------------------------
2160       P (NSOIL) = DELTA (NSOIL)
2162 ! ----------------------------------------------------------------------
2163 ! ADJUST P FOR SOIL LAYERS 2 THRU NSOIL
2164 ! ----------------------------------------------------------------------
2165       DO K = 2,NSOIL
2166          KK = NSOIL - K + 1
2167          P (KK) = P (KK) * P (KK +1) + DELTA (KK)
2168       END DO
2169 ! ----------------------------------------------------------------------
2170   END SUBROUTINE ROSR12
2171 ! ----------------------------------------------------------------------
2174       SUBROUTINE SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL,  &
2175                          TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE,  &
2176                          QUARTZ,CSOIL,VEGTYP)
2178 ! ----------------------------------------------------------------------
2179 ! SUBROUTINE SHFLX
2180 ! ----------------------------------------------------------------------
2181 ! UPDATE THE TEMPERATURE STATE OF THE SOIL COLUMN BASED ON THE THERMAL
2182 ! DIFFUSION EQUATION AND UPDATE THE FROZEN SOIL MOISTURE CONTENT BASED
2183 ! ON THE TEMPERATURE.
2184 ! ----------------------------------------------------------------------
2185       IMPLICIT NONE
2187       INTEGER, INTENT(IN)   :: ICE, NSOIL, VEGTYP
2188       INTEGER               :: I
2190       REAL, INTENT(IN)      :: BEXP,CSOIL,DF1,DT,F1,PSISAT,QUARTZ,     &
2191                                SMCMAX, SMCWLT, TBOT,YY, ZBOT,ZZ1
2192       REAL, INTENT(INOUT)   :: T1
2193       REAL, INTENT(OUT)     :: SSOIL
2194       REAL, DIMENSION(1:NSOIL), INTENT(IN)    :: SMC,ZSOIL
2195       REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O
2196       REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
2197       REAL, DIMENSION(1:NSOIL)             :: AI, BI, CI, STCF,RHSTS
2198       REAL, PARAMETER       :: T0 = 273.15
2200 ! ----------------------------------------------------------------------
2201 ! HRT ROUTINE CALCS THE RIGHT HAND SIDE OF THE SOIL TEMP DIF EQN
2202 ! ----------------------------------------------------------------------
2204 ! ----------------------------------------------------------------------
2205 ! SEA-ICE CASE
2206 ! ----------------------------------------------------------------------
2207       IF (ICE == 1) THEN
2209          CALL HRTICE (RHSTS,STC,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
2211          CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
2213 ! ----------------------------------------------------------------------
2214 ! LAND-MASS CASE
2215 ! ----------------------------------------------------------------------
2216       ELSE
2217          CALL HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1,TBOT,        &
2218                     ZBOT,PSISAT,SH2O,DT,                                &
2219                     BEXP,F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP)
2221          CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
2222       END IF
2223       DO I = 1,NSOIL
2224          STC (I) = STCF (I)
2225       END DO
2227 ! ----------------------------------------------------------------------
2228 ! IN THE NO SNOWPACK CASE (VIA ROUTINE NOPAC BRANCH,) UPDATE THE GRND
2229 ! (SKIN) TEMPERATURE HERE IN RESPONSE TO THE UPDATED SOIL TEMPERATURE
2230 ! PROFILE ABOVE.  (NOTE: INSPECTION OF ROUTINE SNOPAC SHOWS THAT T1
2231 ! BELOW IS A DUMMY VARIABLE ONLY, AS SKIN TEMPERATURE IS UPDATED
2232 ! DIFFERENTLY IN ROUTINE SNOPAC)
2233 ! ----------------------------------------------------------------------
2234 ! ----------------------------------------------------------------------
2235 ! CALCULATE SURFACE SOIL HEAT FLUX
2236 ! ----------------------------------------------------------------------
2237       T1 = (YY + (ZZ1- 1.0) * STC (1)) / ZZ1
2238       SSOIL = DF1 * (STC (1) - T1) / (0.5 * ZSOIL (1))
2240 ! ----------------------------------------------------------------------
2241   END SUBROUTINE SHFLX
2242 ! ----------------------------------------------------------------------
2244       SUBROUTINE SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL,                   &
2245      &                   SH2O,SLOPE,KDT,FRZFACT,                        &
2246      &                   SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT,                &
2247      &                   SHDFAC,CMCMAX,                                 &
2248      &                   RUNOFF1,RUNOFF2,RUNOFF3,                       &
2249      &                   EDIR,EC,ET,                                    &
2250      &                   DRIP)
2252 ! ----------------------------------------------------------------------
2253 ! SUBROUTINE SMFLX
2254 ! ----------------------------------------------------------------------
2255 ! CALCULATE SOIL MOISTURE FLUX.  THE SOIL MOISTURE CONTENT (SMC - A PER
2256 ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
2257 ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
2258 ! FROZEN GROUND VERSION:  NEW STATES ADDED: SH2O, AND FROZEN GROUND
2259 ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
2260 ! ----------------------------------------------------------------------
2261       IMPLICIT NONE
2263       INTEGER, INTENT(IN)   :: NSOIL
2264       INTEGER               :: I,K
2266       REAL, INTENT(IN)      :: BEXP, CMCMAX, DKSAT,DWSAT, DT, EC, EDIR,  &
2267                                KDT, PRCP1, SHDFAC, SLOPE, SMCMAX, SMCWLT
2268       REAL, INTENT(OUT)                      :: DRIP, RUNOFF1, RUNOFF2, RUNOFF3
2269       REAL, INTENT(INOUT)   :: CMC
2270       REAL, DIMENSION(1:NSOIL), INTENT(IN)   :: ET,ZSOIL
2271       REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SMC, SH2O
2272       REAL, DIMENSION(1:NSOIL)             :: AI, BI, CI, STCF,RHSTS, RHSTT, &
2273                                               SICE, SH2OA, SH2OFG
2274       REAL                  :: DUMMY, EXCESS,FRZFACT,PCPDRP,RHSCT,TRHSCT
2276 ! ----------------------------------------------------------------------
2277 ! EXECUTABLE CODE BEGINS HERE.
2278 ! ----------------------------------------------------------------------
2279 ! ----------------------------------------------------------------------
2280 ! COMPUTE THE RIGHT HAND SIDE OF THE CANOPY EQN TERM ( RHSCT )
2281 ! ----------------------------------------------------------------------
2282       DUMMY = 0.
2284 ! ----------------------------------------------------------------------
2285 ! CONVERT RHSCT (A RATE) TO TRHSCT (AN AMOUNT) AND ADD IT TO EXISTING
2286 ! CMC.  IF RESULTING AMT EXCEEDS MAX CAPACITY, IT BECOMES DRIP AND WILL
2287 ! FALL TO THE GRND.
2288 ! ----------------------------------------------------------------------
2289       RHSCT = SHDFAC * PRCP1- EC
2290       DRIP = 0.
2291       TRHSCT = DT * RHSCT
2292       EXCESS = CMC + TRHSCT
2294 ! ----------------------------------------------------------------------
2295 ! PCPDRP IS THE COMBINED PRCP1 AND DRIP (FROM CMC) THAT GOES INTO THE
2296 ! SOIL
2297 ! ----------------------------------------------------------------------
2298       IF (EXCESS > CMCMAX) DRIP = EXCESS - CMCMAX
2299       PCPDRP = (1. - SHDFAC) * PRCP1+ DRIP / DT
2301 ! ----------------------------------------------------------------------
2302 ! STORE ICE CONTENT AT EACH SOIL LAYER BEFORE CALLING SRT and SSTEP
2304       DO I = 1,NSOIL
2305          SICE (I) = SMC (I) - SH2O (I)
2306       END DO
2307 ! ----------------------------------------------------------------------
2308 ! CALL SUBROUTINES SRT AND SSTEP TO SOLVE THE SOIL MOISTURE
2309 ! TENDENCY EQUATIONS.
2310 ! IF THE INFILTRATING PRECIP RATE IS NONTRIVIAL,
2311 !   (WE CONSIDER NONTRIVIAL TO BE A PRECIP TOTAL OVER THE TIME STEP
2312 !    EXCEEDING ONE ONE-THOUSANDTH OF THE WATER HOLDING CAPACITY OF
2313 !    THE FIRST SOIL LAYER)
2314 ! THEN CALL THE SRT/SSTEP SUBROUTINE PAIR TWICE IN THE MANNER OF
2315 !   TIME SCHEME "F" (IMPLICIT STATE, AVERAGED COEFFICIENT)
2316 !   OF SECTION 2 OF KALNAY AND KANAMITSU (1988, MWR, VOL 116,
2317 !   PAGES 1945-1958)TO MINIMIZE 2-DELTA-T OSCILLATIONS IN THE
2318 !   SOIL MOISTURE VALUE OF THE TOP SOIL LAYER THAT CAN ARISE BECAUSE
2319 !   OF THE EXTREME NONLINEAR DEPENDENCE OF THE SOIL HYDRAULIC
2320 !   DIFFUSIVITY COEFFICIENT AND THE HYDRAULIC CONDUCTIVITY ON THE
2321 !   SOIL MOISTURE STATE
2322 ! OTHERWISE CALL THE SRT/SSTEP SUBROUTINE PAIR ONCE IN THE MANNER OF
2323 !   TIME SCHEME "D" (IMPLICIT STATE, EXPLICIT COEFFICIENT)
2324 !   OF SECTION 2 OF KALNAY AND KANAMITSU
2325 ! PCPDRP IS UNITS OF KG/M**2/S OR MM/S, ZSOIL IS NEGATIVE DEPTH IN M
2326 ! ----------------------------------------------------------------------
2327 !      IF ( PCPDRP .GT. 0.0 ) THEN
2329 ! ----------------------------------------------------------------------
2330 ! FROZEN GROUND VERSION:
2331 ! SMC STATES REPLACED BY SH2O STATES IN SRT SUBR.  SH2O & SICE STATES
2332 ! INC&UDED IN SSTEP SUBR.  FROZEN GROUND CORRECTION FACTOR, FRZFACT
2333 ! ADDED.  ALL WATER BALANCE CALCULATIONS USING UNFROZEN WATER
2334 ! ----------------------------------------------------------------------
2335       IF ( (PCPDRP * DT) > (0.001*1000.0* (- ZSOIL (1))* SMCMAX) ) THEN
2336          CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL,          &
2337                     DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1,                    &
2338                     RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2339          CALL SSTEP (SH2OFG,SH2O,DUMMY,RHSTT,RHSCT,DT,NSOIL,SMCMAX,     &
2340                         CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2341          DO K = 1,NSOIL
2342             SH2OA (K) = (SH2O (K) + SH2OFG (K)) * 0.5
2343          END DO
2344          CALL SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP,ZSOIL,         &
2345                     DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1,                    &
2346                     RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2347          CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX,         &
2348                         CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2350       ELSE
2351          CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL,          &
2352                     DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1,                    &
2353                       RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2354          CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX,         &
2355                         CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2356 !      RUNOF = RUNOFF
2358       END IF
2360 ! ----------------------------------------------------------------------
2361   END SUBROUTINE SMFLX
2362 ! ----------------------------------------------------------------------
2365       SUBROUTINE SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
2367 ! ----------------------------------------------------------------------
2368 ! SUBROUTINE SNFRAC
2369 ! ----------------------------------------------------------------------
2370 ! CALCULATE SNOW FRACTION (0 -> 1)
2371 ! SNEQV   SNOW WATER EQUIVALENT (M)
2372 ! SNUP    THRESHOLD SNEQV DEPTH ABOVE WHICH SNCOVR=1
2373 ! SALP    TUNING PARAMETER
2374 ! SNCOVR  FRACTIONAL SNOW COVER
2375 ! ----------------------------------------------------------------------
2376       IMPLICIT NONE
2378       REAL, INTENT(IN)     :: SNEQV,SNUP,SALP,SNOWH
2379       REAL, INTENT(OUT)    :: SNCOVR
2380       REAL                 :: RSNOW, Z0N
2382 ! ----------------------------------------------------------------------
2383 ! SNUP IS VEG-CLASS DEPENDENT SNOWDEPTH THRESHHOLD (SET IN ROUTINE
2384 ! REDPRM) ABOVE WHICH SNOCVR=1.
2385 ! ----------------------------------------------------------------------
2386       IF (SNEQV < SNUP) THEN
2387          RSNOW = SNEQV / SNUP
2388          SNCOVR = 1. - ( EXP ( - SALP * RSNOW) - RSNOW * EXP ( - SALP))
2389       ELSE
2390          SNCOVR = 1.0
2391       END IF
2393 !     FORMULATION OF DICKINSON ET AL. 1986
2394 !     Z0N = 0.035
2396 !        SNCOVR=SNOWH/(SNOWH + 5*Z0N)
2398 !     FORMULATION OF MARSHALL ET AL. 1994
2399 !        SNCOVR=SNEQV/(SNEQV + 2*Z0N)
2401 ! ----------------------------------------------------------------------
2402   END SUBROUTINE SNFRAC
2403 ! ----------------------------------------------------------------------
2405       SUBROUTINE SNKSRC (TSNSR,TAVG,SMC,SH2O,ZSOIL,NSOIL,               &
2406      &                      SMCMAX,PSISAT,BEXP,DT,K,QTOT)
2408 ! ----------------------------------------------------------------------
2409 ! SUBROUTINE SNKSRC
2410 ! ----------------------------------------------------------------------
2411 ! CALCULATE SINK/SOURCE TERM OF THE TERMAL DIFFUSION EQUATION. (SH2O) IS
2412 ! AVAILABLE LIQUED WATER.
2413 ! ----------------------------------------------------------------------
2414       IMPLICIT NONE
2416       INTEGER, INTENT(IN)   :: K,NSOIL
2418       REAL, INTENT(IN)      :: BEXP, DT, PSISAT, QTOT, SMC, SMCMAX,    &
2419                                TAVG
2420       REAL, INTENT(INOUT)   :: SH2O
2422       REAL, DIMENSION(1:NSOIL), INTENT(IN):: ZSOIL
2424       REAL                  :: DF, DZ, DZH, FREE, TSNSR,               &
2425                                TDN, TM, TUP, TZ, X0, XDN, XH2O, XUP
2427       REAL, PARAMETER       :: DH2O = 1.0000E3, HLICE = 3.3350E5,      &
2428                                T0 = 2.7315E2
2430       IF (K == 1) THEN
2431          DZ = - ZSOIL (1)
2432       ELSE
2433          DZ = ZSOIL (K -1) - ZSOIL (K)
2434       END IF
2435 ! ----------------------------------------------------------------------
2436 ! VIA FUNCTION FRH2O, COMPUTE POTENTIAL OR 'EQUILIBRIUM' UNFROZEN
2437 ! SUPERCOOLED FREE WATER FOR GIVEN SOIL TYPE AND SOIL LAYER TEMPERATURE.
2438 ! FUNCTION FRH20 INVOKES EQN (17) FROM V. KOREN ET AL (1999, JGR, VOL.
2439 ! 104, PG 19573).  (ASIDE:  LATTER EQN IN JOURNAL IN CENTIGRADE UNITS.
2440 ! ROUTINE FRH2O USE FORM OF EQN IN KELVIN UNITS.)
2441 ! ----------------------------------------------------------------------
2442 !      FREE = FRH2O(TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
2444 ! ----------------------------------------------------------------------
2445 ! IN NEXT BLOCK OF CODE, INVOKE EQN 18 OF V. KOREN ET AL (1999, JGR,
2446 ! VOL. 104, PG 19573.)  THAT IS, FIRST ESTIMATE THE NEW AMOUNTOF LIQUID
2447 ! WATER, 'XH2O', IMPLIED BY THE SUM OF (1) THE LIQUID WATER AT THE BEGIN
2448 ! OF CURRENT TIME STEP, AND (2) THE FREEZE OF THAW CHANGE IN LIQUID
2449 ! WATER IMPLIED BY THE HEAT FLUX 'QTOT' PASSED IN FROM ROUTINE HRT.
2450 ! SECOND, DETERMINE IF XH2O NEEDS TO BE BOUNDED BY 'FREE' (EQUIL AMT) OR
2451 ! IF 'FREE' NEEDS TO BE BOUNDED BY XH2O.
2452 ! ----------------------------------------------------------------------
2453       CALL FRH2O (FREE,TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
2455 ! ----------------------------------------------------------------------
2456 ! FIRST, IF FREEZING AND REMAINING LIQUID LESS THAN LOWER BOUND, THEN
2457 ! REDUCE EXTENT OF FREEZING, THEREBY LETTING SOME OR ALL OF HEAT FLUX
2458 ! QTOT COOL THE SOIL TEMP LATER IN ROUTINE HRT.
2459 ! ----------------------------------------------------------------------
2460       XH2O = SH2O + QTOT * DT / (DH2O * HLICE * DZ)
2461       IF ( XH2O < SH2O .AND. XH2O < FREE) THEN
2462          IF ( FREE > SH2O ) THEN
2463             XH2O = SH2O
2464          ELSE
2465             XH2O = FREE
2466          END IF
2467       END IF
2468 ! ----------------------------------------------------------------------
2469 ! SECOND, IF THAWING AND THE INCREASE IN LIQUID WATER GREATER THAN UPPER
2470 ! BOUND, THEN REDUCE EXTENT OF THAW, THEREBY LETTING SOME OR ALL OF HEAT
2471 ! FLUX QTOT WARM THE SOIL TEMP LATER IN ROUTINE HRT.
2472 ! ----------------------------------------------------------------------
2473       IF ( XH2O > SH2O .AND. XH2O > FREE ) THEN
2474          IF ( FREE < SH2O ) THEN
2475             XH2O = SH2O
2476          ELSE
2477             XH2O = FREE
2478          END IF
2479       END IF
2481 ! ----------------------------------------------------------------------
2482 ! CALCULATE PHASE-CHANGE HEAT SOURCE/SINK TERM FOR USE IN ROUTINE HRT
2483 ! AND UPDATE LIQUID WATER TO REFLCET FINAL FREEZE/THAW INCREMENT.
2484 ! ----------------------------------------------------------------------
2485 !      SNKSRC = -DH2O*HLICE*DZ*(XH2O-SH2O)/DT
2486       IF (XH2O < 0.) XH2O = 0.
2487       IF (XH2O > SMC) XH2O = SMC
2488       TSNSR = - DH2O * HLICE * DZ * (XH2O - SH2O)/ DT
2489       SH2O = XH2O
2491 ! ----------------------------------------------------------------------
2492   END SUBROUTINE SNKSRC
2493 ! ----------------------------------------------------------------------
2495       SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT,   &
2496                           SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,            &
2497                           SBETA,DF1,                                    &
2498                           Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA,&
2499                          SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,ESD,SNDENS,&
2500                           SNOWH,SH2O,SLOPE,KDT,FRZFACT,PSISAT,          &
2501                           ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1,   &
2502                           RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT,  &
2503                           ICE,RTDIS,QUARTZ,FXEXP,CSOIL,                 &
2504                           BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI,&
2505                           VEGTYP)
2507 ! ----------------------------------------------------------------------
2508 ! SUBROUTINE SNOPAC
2509 ! ----------------------------------------------------------------------
2510 ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES & UPDATE SOIL MOISTURE
2511 ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN A SNOW PACK IS
2512 ! PRESENT.
2513 ! ----------------------------------------------------------------------
2514       IMPLICIT NONE
2516       INTEGER, INTENT(IN)   :: ICE, NROOT, NSOIL,VEGTYP
2517       INTEGER               :: K
2518       LOGICAL, INTENT(IN)   :: SNOWNG
2519       REAL, INTENT(IN)      :: BEXP,CFACTR, CMCMAX,CSOIL,DF1,DKSAT,     &
2520                                DT,DWSAT, EPSCA,ETP,FDOWN,F1,FXEXP,      &
2521                                FRZFACT,KDT,PC, PRCP,PSISAT,Q2,QUARTZ,   &
2522                                RCH,RR,SBETA,SFCPRS, SFCTMP, SHDFAC,     &
2523                                SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, T24,  &
2524                                TBOT,TH2,ZBOT,EMISSI
2525       REAL, INTENT(INOUT)   :: CMC, BETA, ESD,FLX2,PRCPF,SNOWH,SNCOVR,  &
2526                                SNDENS, T1
2527       REAL, INTENT(OUT)     :: DEW,DRIP,EC,EDIR, ETNS, ESNOW,ETT,       &
2528                                FLX1,FLX3, RUNOFF1,RUNOFF2,RUNOFF3,      &
2529                                SSOIL,SNOMLT
2530       REAL, DIMENSION(1:NSOIL),INTENT(IN)     :: RTDIS,ZSOIL
2531       REAL, DIMENSION(1:NSOIL),INTENT(OUT)    :: ET
2532       REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
2533       REAL, DIMENSION(1:NSOIL) :: ET1
2534       REAL                  :: DENOM,DSOIL,DTOT,EC1,EDIR1,ESDFLX,ETA,   &
2535                                ETT1, ESNOW1, ESNOW2, ETA1,ETP1,ETP2,    &
2536                                ETP3, ETNS1, ETANRG, ETAX, EX, FLX3X,    &
2537                                FRCSNO,FRCSOI, PRCP1, QSAT,RSNOW, SEH,   &
2538                                SNCOND,SSOIL1, T11,T12, T12A, T12AX,     &
2539                                T12B, T14, YY, ZZ1
2540 !                               T12B, T14, YY, ZZ1,EMISSI_S
2542       REAL, PARAMETER       :: ESDMIN = 1.E-6, LSUBC = 2.501000E+6,     &
2543                                LSUBS = 2.83E+6, TFREEZ = 273.15,        &
2544                                SNOEXP = 2.0
2546 ! ----------------------------------------------------------------------
2547 ! EXECUTABLE CODE BEGINS HERE:
2548 ! INITIALIZE EVAP TERMS.
2549 ! ----------------------------------------------------------------------
2550 ! conversions:
2551 ! ESNOW [KG M-2 S-1]
2552 ! ESDFLX [KG M-2 S-1] .le. ESNOW
2553 ! ESNOW1 [M S-1]
2554 ! ESNOW2 [M]
2555 ! ETP [KG M-2 S-1]
2556 ! ETP1 [M S-1]
2557 ! ETP2 [M]
2558 ! ----------------------------------------------------------------------
2559       DEW = 0.
2560       EDIR = 0.
2561       EDIR1 = 0.
2562       EC1 = 0.
2563       EC = 0.
2564 !      EMISSI_S=0.95    ! For snow
2566       DO K = 1,NSOIL
2567          ET (K) = 0.
2568          ET1 (K) = 0.
2569       END DO
2570       ETT = 0.
2571       ETT1 = 0.
2572       ETNS = 0.
2573       ETNS1 = 0.
2574       ESNOW = 0.
2575       ESNOW1 = 0.
2576       ESNOW2 = 0.
2578 ! ----------------------------------------------------------------------
2579 ! CONVERT POTENTIAL EVAP (ETP) FROM KG M-2 S-1 TO ETP1 IN M S-1
2580 ! ----------------------------------------------------------------------
2581       PRCP1 = PRCPF *0.001
2582       ETP1 = ETP * 0.001
2583 ! ----------------------------------------------------------------------
2584 ! IF ETP<0 (DOWNWARD) THEN DEWFALL (=FROSTFALL IN THIS CASE).
2585 ! ----------------------------------------------------------------------
2586       BETA = 1.0
2587       IF (ETP <= 0.0) THEN
2588         IF(ETP == 0.) BETA = 0.0
2589          DEW = -ETP1
2590          ESNOW2 = ETP1*DT
2591          ETANRG = ETP*((1.-SNCOVR)*LSUBC + SNCOVR*LSUBS)
2592       ELSE
2593          IF (ICE /=  1) THEN
2594              IF (SNCOVR <  1.) THEN
2595                CALL EVAPO (ETNS1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL,           &
2596                             SH2O,                                       &
2597                             SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT,          &
2598                             SMCREF,SHDFAC,CMCMAX,                       &
2599                             SMCDRY,CFACTR,                              &
2600                             EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS,   &
2601                             FXEXP)
2602 ! ----------------------------------------------------------------------------
2603                EDIR1 = EDIR1* (1. - SNCOVR)
2604                EC1 = EC1* (1. - SNCOVR)
2605                DO K = 1,NSOIL
2606                   ET1 (K) = ET1 (K)* (1. - SNCOVR)
2607                END DO
2608                ETT1 = ETT1*(1.-SNCOVR)
2609 !               ETNS1 = EDIR1+ EC1+ ETT1
2610                ETNS1 = ETNS1*(1.-SNCOVR)
2611 ! ----------------------------------------------------------------------------
2612                EDIR = EDIR1*1000.
2613                EC = EC1*1000.
2614                DO K = 1,NSOIL
2615                   ET (K) = ET1 (K)*1000.
2616                END DO
2617                ETT = ETT1*1000.
2618                ETNS = ETNS1*1000.
2619 ! ----------------------------------------------------------------------
2621 !   end IF (SNCOVR .lt. 1.)
2622             END IF
2623 !   end IF (ICE .ne. 1)
2624          END IF
2625          ESNOW = ETP*SNCOVR
2626          ESNOW1 = ESNOW*0.001
2627          ESNOW2 = ESNOW1*DT
2628          ETANRG = ESNOW*LSUBS + ETNS*LSUBC
2629 !   end IF (ETP .le. 0.0)
2630       END IF
2632 ! ----------------------------------------------------------------------
2633 ! IF PRECIP IS FALLING, CALCULATE HEAT FLUX FROM SNOW SFC TO NEWLY
2634 ! ACCUMULATING PRECIP.  NOTE THAT THIS REFLECTS THE FLUX APPROPRIATE FOR
2635 ! THE NOT-YET-UPDATED SKIN TEMPERATURE (T1).  ASSUMES TEMPERATURE OF THE
2636 ! SNOWFALL STRIKING THE GROUND IS =SFCTMP (LOWEST MODEL LEVEL AIR TEMP).
2637 ! ----------------------------------------------------------------------
2638       FLX1 = 0.0
2639       IF (SNOWNG) THEN
2640          FLX1 = CPICE * PRCP * (T1- SFCTMP)
2641       ELSE
2642          IF (PRCP >  0.0) FLX1 = CPH2O * PRCP * (T1- SFCTMP)
2643 ! ----------------------------------------------------------------------
2644 ! CALCULATE AN 'EFFECTIVE SNOW-GRND SFC TEMP' (T12) BASED ON HEAT FLUXES
2645 ! BETWEEN THE SNOW PACK AND THE SOIL AND ON NET RADIATION.
2646 ! INCLUDE FLX1 (PRECIP-SNOW SFC) AND FLX2 (FREEZING RAIN LATENT HEAT)
2647 ! FLUXES.  FLX1 FROM ABOVE, FLX2 BROUGHT IN VIA COMMOM BLOCK RITE.
2648 ! FLX2 REFLECTS FREEZING RAIN LATENT HEAT FLUX USING T1 CALCULATED IN
2649 ! PENMAN.
2650 ! ----------------------------------------------------------------------
2651       END IF
2652       DSOIL = - (0.5 * ZSOIL (1))
2653       DTOT = SNOWH + DSOIL
2654       DENOM = 1.0+ DF1 / (DTOT * RR * RCH)
2655 ! surface emissivity weighted by snow cover fraction
2656 !      T12A = ( (FDOWN - FLX1 - FLX2 -                                   &
2657 !     &       ((SNCOVR*EMISSI_S)+EMISSI*(1.0-SNCOVR))*SIGMA *T24)/RCH    &
2658 !     &       + TH2 - SFCTMP - ETANRG/RCH ) / RR
2659       T12A = ( (FDOWN - FLX1- FLX2- EMISSI * SIGMA * T24)/ RCH                    &
2660                 + TH2- SFCTMP - ETANRG / RCH ) / RR
2662       T12B = DF1 * STC (1) / (DTOT * RR * RCH)
2664 ! ----------------------------------------------------------------------
2665 ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS AT OR BELOW FREEZING, NO SNOW
2666 ! MELT WILL OCCUR.  SET THE SKIN TEMP TO THIS EFFECTIVE TEMP.  REDUCE
2667 ! (BY SUBLIMINATION ) OR INCREASE (BY FROST) THE DEPTH OF THE SNOWPACK,
2668 ! DEPENDING ON SIGN OF ETP.
2669 ! UPDATE SOIL HEAT FLUX (SSOIL) USING NEW SKIN TEMPERATURE (T1)
2670 ! SINCE NO SNOWMELT, SET ACCUMULATED SNOWMELT TO ZERO, SET 'EFFECTIVE'
2671 ! PRECIP FROM SNOWMELT TO ZERO, SET PHASE-CHANGE HEAT FLUX FROM SNOWMELT
2672 ! TO ZERO.
2673 ! ----------------------------------------------------------------------
2674 ! SUB-FREEZING BLOCK
2675 ! ----------------------------------------------------------------------
2676       T12 = (SFCTMP + T12A + T12B) / DENOM
2677       IF (T12 <=  TFREEZ) THEN
2678          T1 = T12
2679          SSOIL = DF1 * (T1- STC (1)) / DTOT
2680 !        ESD = MAX (0.0, ESD- ETP2)
2681          ESD = MAX(0.0, ESD-ESNOW2)
2682          FLX3 = 0.0
2683          EX = 0.0
2685          SNOMLT = 0.0
2686 ! ----------------------------------------------------------------------
2687 ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS ABOVE FREEZING, SNOW MELT
2688 ! WILL OCCUR.  CALL THE SNOW MELT RATE,EX AND AMT, SNOMLT.  REVISE THE
2689 ! EFFECTIVE SNOW DEPTH.  REVISE THE SKIN TEMP BECAUSE IT WOULD HAVE CHGD
2690 ! DUE TO THE LATENT HEAT RELEASED BY THE MELTING. CALC THE LATENT HEAT
2691 ! RELEASED, FLX3. SET THE EFFECTIVE PRECIP, PRCP1 TO THE SNOW MELT RATE,
2692 ! EX FOR USE IN SMFLX.  ADJUSTMENT TO T1 TO ACCOUNT FOR SNOW PATCHES.
2693 ! CALCULATE QSAT VALID AT FREEZING POINT.  NOTE THAT ESAT (SATURATION
2694 ! VAPOR PRESSURE) VALUE OF 6.11E+2 USED HERE IS THAT VALID AT FRZZING
2695 ! POINT.  NOTE THAT ETP FROM CALL PENMAN IN SFLX IS IGNORED HERE IN
2696 ! FAVOR OF BULK ETP OVER 'OPEN WATER' AT FREEZING TEMP.
2697 ! UPDATE SOIL HEAT FLUX (S) USING NEW SKIN TEMPERATURE (T1)
2698 ! ----------------------------------------------------------------------
2699 ! ABOVE FREEZING BLOCK
2700 ! ----------------------------------------------------------------------
2701       ELSE
2702          T1 = TFREEZ * SNCOVR ** SNOEXP + T12 * (1.0- SNCOVR ** SNOEXP)
2703          BETA = 1.0
2705 ! ----------------------------------------------------------------------
2706 ! IF POTENTIAL EVAP (SUBLIMATION) GREATER THAN DEPTH OF SNOWPACK.
2707 ! BETA<1
2708 ! SNOWPACK HAS SUBLIMATED AWAY, SET DEPTH TO ZERO.
2709 ! ----------------------------------------------------------------------
2710          SSOIL = DF1 * (T1- STC (1)) / DTOT
2711          IF (ESD-ESNOW2 <= ESDMIN) THEN
2712             ESD = 0.0
2713             EX = 0.0
2714             SNOMLT = 0.0
2715 ! ----------------------------------------------------------------------
2716 ! SUBLIMATION LESS THAN DEPTH OF SNOWPACK
2717 ! SNOWPACK (ESD) REDUCED BY ESNOW2 (DEPTH OF SUBLIMATED SNOW)
2718 ! ----------------------------------------------------------------------
2719          ELSE
2720             ESD = ESD-ESNOW2
2721             ETP3 = ETP * LSUBC
2722             SEH = RCH * (T1- TH2)
2723             T14 = T1* T1
2724             T14 = T14* T14
2725 !           FLX3 = FDOWN - FLX1 - FLX2 -                                 &
2726 !                  ((SNCOVR*EMISSI_S)+EMISSI*(1-SNCOVR))*SIGMA*T14 -     &
2727 !                    SSOIL - SEH - ETANRG
2728             FLX3 = FDOWN - FLX1- FLX2- EMISSI*SIGMA * T14- SSOIL - SEH - ETANRG
2729             IF (FLX3 <= 0.0) FLX3 = 0.0
2730 ! ----------------------------------------------------------------------
2731 ! SNOWMELT REDUCTION DEPENDING ON SNOW COVER
2732 ! ----------------------------------------------------------------------
2733             EX = FLX3*0.001/ LSUBF
2735 ! ----------------------------------------------------------------------
2736 ! ESDMIN REPRESENTS A SNOWPACK DEPTH THRESHOLD VALUE BELOW WHICH WE
2737 ! CHOOSE NOT TO RETAIN ANY SNOWPACK, AND INSTEAD INCLUDE IT IN SNOWMELT.
2738 ! ----------------------------------------------------------------------
2739             SNOMLT = EX * DT
2740             IF (ESD- SNOMLT >=  ESDMIN) THEN
2741                ESD = ESD- SNOMLT
2742 ! ----------------------------------------------------------------------
2743 ! SNOWMELT EXCEEDS SNOW DEPTH
2744 ! ----------------------------------------------------------------------
2745             ELSE
2746                EX = ESD / DT
2747                FLX3 = EX *1000.0* LSUBF
2748                SNOMLT = ESD
2750                ESD = 0.0
2751 ! ----------------------------------------------------------------------
2752 ! END OF 'ESD .LE. ETP2' IF-BLOCK
2753 ! ----------------------------------------------------------------------
2754             END IF
2755          END IF
2757 ! ----------------------------------------------------------------------
2758 ! END OF 'T12 .LE. TFREEZ' IF-BLOCK
2759 ! ----------------------------------------------------------------------
2760          PRCP1 = PRCP1+ EX
2762 ! ----------------------------------------------------------------------
2763 ! SET THE EFFECTIVE POTNL EVAPOTRANSP (ETP1) TO ZERO SINCE THIS IS SNOW
2764 ! CASE, SO SURFACE EVAP NOT CALCULATED FROM EDIR, EC, OR ETT IN SMFLX
2765 ! (BELOW).
2766 ! IF SEAICE (ICE=1) SKIP CALL TO SMFLX.
2767 ! SMFLX RETURNS UPDATED SOIL MOISTURE VALUES.  IN THIS, THE SNOW PACK
2768 ! CASE, ETA1 IS NOT USED IN CALCULATION OF EVAP.
2769 ! ----------------------------------------------------------------------
2770       END IF
2771       IF (ICE /=  1) THEN
2772          CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL,                      &
2773                       SH2O,SLOPE,KDT,FRZFACT,                           &
2774                       SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT,                   &
2775                       SHDFAC,CMCMAX,                                    &
2776                       RUNOFF1,RUNOFF2,RUNOFF3,                          &
2777                       EDIR1,EC1,ET1,                                    &
2778                       DRIP)
2779 ! ----------------------------------------------------------------------
2780 ! BEFORE CALL SHFLX IN THIS SNOWPACK CASE, SET ZZ1 AND YY ARGUMENTS TO
2781 ! SPECIAL VALUES THAT ENSURE THAT GROUND HEAT FLUX CALCULATED IN SHFLX
2782 ! MATCHES THAT ALREADY COMPUTER FOR BELOW THE SNOWPACK, THUS THE SFC
2783 ! HEAT FLUX TO BE COMPUTED IN SHFLX WILL EFFECTIVELY BE THE FLUX AT THE
2784 ! SNOW TOP SURFACE.  T11 IS A DUMMY ARGUEMENT SO WE WILL NOT USE THE
2785 ! SKIN TEMP VALUE AS REVISED BY SHFLX.
2786 ! ----------------------------------------------------------------------
2787       END IF
2788       ZZ1 = 1.0
2789       YY = STC (1) -0.5* SSOIL * ZSOIL (1)* ZZ1/ DF1
2791 ! ----------------------------------------------------------------------
2792 ! SHFLX WILL CALC/UPDATE THE SOIL TEMPS.  NOTE:  THE SUB-SFC HEAT FLUX
2793 ! (SSOIL1) AND THE SKIN TEMP (T11) OUTPUT FROM THIS SHFLX CALL ARE NOT
2794 ! USED  IN ANY SUBSEQUENT CALCULATIONS. RATHER, THEY ARE DUMMY VARIABLES
2795 ! HERE IN THE SNOPAC CASE, SINCE THE SKIN TEMP AND SUB-SFC HEAT FLUX ARE
2796 ! UPDATED INSTEAD NEAR THE BEGINNING OF THE CALL TO SNOPAC.
2797 ! ----------------------------------------------------------------------
2798       T11 = T1
2799       CALL SHFLX (SSOIL1,STC,SMC,SMCMAX,NSOIL,T11,DT,YY,ZZ1,ZSOIL,      &
2800                    TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE,        &
2801                    QUARTZ,CSOIL,VEGTYP)
2803 ! ----------------------------------------------------------------------
2804 ! SNOW DEPTH AND DENSITY ADJUSTMENT BASED ON SNOW COMPACTION.  YY IS
2805 ! ASSUMED TO BE THE SOIL TEMPERTURE AT THE TOP OF THE SOIL COLUMN.
2806 ! ----------------------------------------------------------------------
2807       IF (ESD >  0.) THEN
2808          CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
2809       ELSE
2810          ESD = 0.
2811          SNOWH = 0.
2812          SNDENS = 0.
2813          SNCOND = 1.
2814         SNCOVR = 0.
2815       END IF
2816 ! ----------------------------------------------------------------------
2817   END SUBROUTINE SNOPAC
2818 ! ----------------------------------------------------------------------
2821       SUBROUTINE SNOWPACK (ESD,DTSEC,SNOWH,SNDENS,TSNOW,TSOIL)
2823 ! ----------------------------------------------------------------------
2824 ! SUBROUTINE SNOWPACK
2825 ! ----------------------------------------------------------------------
2826 ! CALCULATE COMPACTION OF SNOWPACK UNDER CONDITIONS OF INCREASING SNOW
2827 ! DENSITY, AS OBTAINED FROM AN APPROXIMATE SOLUTION OF E. ANDERSON'S
2828 ! DIFFERENTIAL EQUATION (3.29), NOAA TECHNICAL REPORT NWS 19, BY VICTOR
2829 ! KOREN, 03/25/95.
2830 ! ----------------------------------------------------------------------
2831 ! ESD     WATER EQUIVALENT OF SNOW (M)
2832 ! DTSEC   TIME STEP (SEC)
2833 ! SNOWH   SNOW DEPTH (M)
2834 ! SNDENS  SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
2835 ! TSNOW   SNOW SURFACE TEMPERATURE (K)
2836 ! TSOIL   SOIL SURFACE TEMPERATURE (K)
2838 ! SUBROUTINE WILL RETURN NEW VALUES OF SNOWH AND SNDENS
2839 ! ----------------------------------------------------------------------
2840       IMPLICIT NONE
2842       INTEGER                :: IPOL, J
2843       REAL, INTENT(IN)       :: ESD, DTSEC,TSNOW,TSOIL
2844       REAL, INTENT(INOUT)    :: SNOWH, SNDENS
2845       REAL                   :: BFAC,DSX,DTHR,DW,SNOWHC,PEXP,           &
2846                                 TAVGC,TSNOWC,TSOILC,ESDC,ESDCX
2847       REAL, PARAMETER        :: C1 = 0.01, C2 = 21.0, G = 9.81,         &
2848                                 KN = 4000.0
2849 ! ----------------------------------------------------------------------
2850 ! CONVERSION INTO SIMULATION UNITS
2851 ! ----------------------------------------------------------------------
2852       SNOWHC = SNOWH *100.
2853       ESDC = ESD *100.
2854       DTHR = DTSEC /3600.
2855       TSNOWC = TSNOW -273.15
2856       TSOILC = TSOIL -273.15
2858 ! ----------------------------------------------------------------------
2859 ! CALCULATING OF AVERAGE TEMPERATURE OF SNOW PACK
2860 ! ----------------------------------------------------------------------
2861 ! ----------------------------------------------------------------------
2862 ! CALCULATING OF SNOW DEPTH AND DENSITY AS A RESULT OF COMPACTION
2863 !  SNDENS=DS0*(EXP(BFAC*ESD)-1.)/(BFAC*ESD)
2864 !  BFAC=DTHR*C1*EXP(0.08*TAVGC-C2*DS0)
2865 ! NOTE: BFAC*ESD IN SNDENS EQN ABOVE HAS TO BE CAREFULLY TREATED
2866 ! NUMERICALLY BELOW:
2867 !   C1 IS THE FRACTIONAL INCREASE IN DENSITY (1/(CM*HR))
2868 !   C2 IS A CONSTANT (CM3/G) KOJIMA ESTIMATED AS 21 CMS/G
2869 ! ----------------------------------------------------------------------
2870       TAVGC = 0.5* (TSNOWC + TSOILC)
2871       IF (ESDC >  1.E-2) THEN
2872          ESDCX = ESDC
2873       ELSE
2874          ESDCX = 1.E-2
2875       END IF
2877 !      DSX = SNDENS*((DEXP(BFAC*ESDC)-1.)/(BFAC*ESDC))
2878 ! ----------------------------------------------------------------------
2879 ! THE FUNCTION OF THE FORM (e**x-1)/x IMBEDDED IN ABOVE EXPRESSION
2880 ! FOR DSX WAS CAUSING NUMERICAL DIFFICULTIES WHEN THE DENOMINATOR "x"
2881 ! (I.E. BFAC*ESDC) BECAME ZERO OR APPROACHED ZERO (DESPITE THE FACT THAT
2882 ! THE ANALYTICAL FUNCTION (e**x-1)/x HAS A WELL DEFINED LIMIT AS
2883 ! "x" APPROACHES ZERO), HENCE BELOW WE REPLACE THE (e**x-1)/x
2884 ! EXPRESSION WITH AN EQUIVALENT, NUMERICALLY WELL-BEHAVED
2885 ! POLYNOMIAL EXPANSION.
2887 ! NUMBER OF TERMS OF POLYNOMIAL EXPANSION, AND HENCE ITS ACCURACY,
2888 ! IS GOVERNED BY ITERATION LIMIT "IPOL".
2889 !      IPOL GREATER THAN 9 ONLY MAKES A DIFFERENCE ON DOUBLE
2890 !            PRECISION (RELATIVE ERRORS GIVEN IN PERCENT %).
2891 !       IPOL=9, FOR REL.ERROR <~ 1.6 E-6 % (8 SIGNIFICANT DIGITS)
2892 !       IPOL=8, FOR REL.ERROR <~ 1.8 E-5 % (7 SIGNIFICANT DIGITS)
2893 !       IPOL=7, FOR REL.ERROR <~ 1.8 E-4 % ...
2894 ! ----------------------------------------------------------------------
2895       BFAC = DTHR * C1* EXP (0.08* TAVGC - C2* SNDENS)
2896       IPOL = 4
2897       PEXP = 0.
2898 !        PEXP = (1. + PEXP)*BFAC*ESDC/REAL(J+1)
2899       DO J = IPOL,1, -1
2900          PEXP = (1. + PEXP)* BFAC * ESDCX / REAL (J +1)
2901       END DO
2903       PEXP = PEXP + 1.
2904 ! ----------------------------------------------------------------------
2905 ! ABOVE LINE ENDS POLYNOMIAL SUBSTITUTION
2906 ! ----------------------------------------------------------------------
2907 !     END OF KOREAN FORMULATION
2909 !     BASE FORMULATION (COGLEY ET AL., 1990)
2910 !     CONVERT DENSITY FROM G/CM3 TO KG/M3
2911 !       DSM=SNDENS*1000.0
2913 !       DSX=DSM+DTSEC*0.5*DSM*G*ESD/
2914 !    &      (1E7*EXP(-0.02*DSM+KN/(TAVGC+273.16)-14.643))
2916 !  &   CONVERT DENSITY FROM KG/M3 TO G/CM3
2917 !       DSX=DSX/1000.0
2919 !     END OF COGLEY ET AL. FORMULATION
2921 ! ----------------------------------------------------------------------
2922 ! SET UPPER/LOWER LIMIT ON SNOW DENSITY
2923 ! ----------------------------------------------------------------------
2924       DSX = SNDENS * (PEXP)
2925       IF (DSX > 0.40) DSX = 0.40
2926       IF (DSX < 0.05) DSX = 0.05
2927 ! ----------------------------------------------------------------------
2928 ! UPDATE OF SNOW DEPTH AND DENSITY DEPENDING ON LIQUID WATER DURING
2929 ! SNOWMELT.  ASSUMED THAT 13% OF LIQUID WATER CAN BE STORED IN SNOW PER
2930 ! DAY DURING SNOWMELT TILL SNOW DENSITY 0.40.
2931 ! ----------------------------------------------------------------------
2932       SNDENS = DSX
2933       IF (TSNOWC >=  0.) THEN
2934          DW = 0.13* DTHR /24.
2935          SNDENS = SNDENS * (1. - DW) + DW
2936          IF (SNDENS >=  0.40) SNDENS = 0.40
2937 ! ----------------------------------------------------------------------
2938 ! CALCULATE SNOW DEPTH (CM) FROM SNOW WATER EQUIVALENT AND SNOW DENSITY.
2939 ! CHANGE SNOW DEPTH UNITS TO METERS
2940 ! ----------------------------------------------------------------------
2941       END IF
2942       SNOWHC = ESDC / SNDENS
2943       SNOWH = SNOWHC *0.01
2945 ! ----------------------------------------------------------------------
2946   END SUBROUTINE SNOWPACK
2947 ! ----------------------------------------------------------------------
2949       SUBROUTINE SNOWZ0 (SNCOVR,Z0, Z0BRD)
2951 ! ----------------------------------------------------------------------
2952 ! SUBROUTINE SNOWZ0
2953 ! ----------------------------------------------------------------------
2954 ! CALCULATE TOTAL ROUGHNESS LENGTH OVER SNOW
2955 ! SNCOVR  FRACTIONAL SNOW COVER
2956 ! Z0      ROUGHNESS LENGTH (m)
2957 ! Z0S     SNOW ROUGHNESS LENGTH:=0.001 (m)
2958 ! ----------------------------------------------------------------------
2959       IMPLICIT NONE
2960       REAL, INTENT(IN)        :: SNCOVR, Z0BRD
2961       REAL, INTENT(OUT)       :: Z0
2962       REAL, PARAMETER         :: Z0S=0.001
2964 !m      Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0S
2965       Z0 =  Z0BRD
2966 ! ----------------------------------------------------------------------
2967   END SUBROUTINE SNOWZ0
2968 ! ----------------------------------------------------------------------
2971       SUBROUTINE SNOW_NEW (TEMP,NEWSN,SNOWH,SNDENS)
2973 ! ----------------------------------------------------------------------
2974 ! SUBROUTINE SNOW_NEW
2975 ! ----------------------------------------------------------------------
2976 ! CALCULATE SNOW DEPTH AND DENSITITY TO ACCOUNT FOR THE NEW SNOWFALL.
2977 ! NEW VALUES OF SNOW DEPTH & DENSITY RETURNED.
2979 ! TEMP    AIR TEMPERATURE (K)
2980 ! NEWSN   NEW SNOWFALL (M)
2981 ! SNOWH   SNOW DEPTH (M)
2982 ! SNDENS  SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
2983 ! ----------------------------------------------------------------------
2984       IMPLICIT NONE
2985       REAL, INTENT(IN)        :: NEWSN, TEMP
2986       REAL, INTENT(INOUT)     :: SNDENS, SNOWH
2987       REAL                    :: DSNEW, HNEWC, SNOWHC,NEWSNC,TEMPC
2989 ! ----------------------------------------------------------------------
2990 ! CONVERSION INTO SIMULATION UNITS
2991 ! ----------------------------------------------------------------------
2992       SNOWHC = SNOWH *100.
2993       NEWSNC = NEWSN *100.
2995 ! ----------------------------------------------------------------------
2996 ! CALCULATING NEW SNOWFALL DENSITY DEPENDING ON TEMPERATURE
2997 ! EQUATION FROM GOTTLIB L. 'A GENERAL RUNOFF MODEL FOR SNOWCOVERED
2998 ! AND GLACIERIZED BASIN', 6TH NORDIC HYDROLOGICAL CONFERENCE,
2999 ! VEMADOLEN, SWEDEN, 1980, 172-177PP.
3000 !-----------------------------------------------------------------------
3001       TEMPC = TEMP -273.15
3002       IF (TEMPC <=  -15.) THEN
3003          DSNEW = 0.05
3004       ELSE
3005          DSNEW = 0.05+0.0017* (TEMPC +15.)**1.5
3006       END IF
3007 ! ----------------------------------------------------------------------
3008 ! ADJUSTMENT OF SNOW DENSITY DEPENDING ON NEW SNOWFALL
3009 ! ----------------------------------------------------------------------
3010       HNEWC = NEWSNC / DSNEW
3011       IF (SNOWHC + HNEWC .LT. 1.0E-3) THEN
3012          SNDENS = MAX(DSNEW,SNDENS)
3013       ELSE
3014          SNDENS = (SNOWHC * SNDENS + HNEWC * DSNEW)/ (SNOWHC + HNEWC)
3015       ENDIF
3016       SNOWHC = SNOWHC + HNEWC
3017       SNOWH = SNOWHC *0.01
3019 ! ----------------------------------------------------------------------
3020   END SUBROUTINE SNOW_NEW
3021 ! ----------------------------------------------------------------------
3023       SUBROUTINE SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP,            &
3024                        ZSOIL,DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1,           &
3025                        RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZX,SICE,AI,BI,CI)
3027 ! ----------------------------------------------------------------------
3028 ! SUBROUTINE SRT
3029 ! ----------------------------------------------------------------------
3030 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
3031 ! WATER DIFFUSION EQUATION.  ALSO TO COMPUTE ( PREPARE ) THE MATRIX
3032 ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
3033 ! ----------------------------------------------------------------------
3034       IMPLICIT NONE
3035       INTEGER, INTENT(IN)       :: NSOIL
3036       INTEGER                   :: IALP1, IOHINF, J, JJ,  K, KS
3037       REAL, INTENT(IN)          :: BEXP, DKSAT, DT, DWSAT, EDIR, FRZX,  &
3038                                    KDT, PCPDRP, SLOPE, SMCMAX, SMCWLT
3039       REAL, INTENT(OUT)         :: RUNOFF1, RUNOFF2
3040       REAL, DIMENSION(1:NSOIL), INTENT(IN)   :: ET, SH2O, SH2OA, SICE,  &
3041                                                 ZSOIL
3042       REAL, DIMENSION(1:NSOIL), INTENT(OUT)  :: RHSTT
3043       REAL, DIMENSION(1:NSOIL), INTENT(OUT)  :: AI, BI, CI
3044       REAL, DIMENSION(1:NSOIL)  :: DMAX
3045       REAL                      :: ACRT, DD, DDT, DDZ, DDZ2, DENOM,     &
3046                                    DENOM2,DICE, DSMDZ, DSMDZ2, DT1,     &
3047                                    FCR,INFMAX,MXSMC,MXSMC2,NUMER,PDDUM, &
3048                                    PX, SICEMAX,SLOPX, SMCAV, SSTT,      &
3049                                    SUM, VAL, WCND, WCND2, WDF, WDF2
3050       INTEGER, PARAMETER        :: CVFRZ = 3
3052 ! ----------------------------------------------------------------------
3053 ! FROZEN GROUND VERSION:
3054 ! REFERENCE FROZEN GROUND PARAMETER, CVFRZ, IS A SHAPE PARAMETER OF
3055 ! AREAL DISTRIBUTION FUNCTION OF SOIL ICE CONTENT WHICH EQUALS 1/CV.
3056 ! CV IS A COEFFICIENT OF SPATIAL VARIATION OF SOIL ICE CONTENT.  BASED
3057 ! ON FIELD DATA CV DEPENDS ON AREAL MEAN OF FROZEN DEPTH, AND IT CLOSE
3058 ! TO CONSTANT = 0.6 IF AREAL MEAN FROZEN DEPTH IS ABOVE 20 CM.  THAT IS
3059 ! WHY PARAMETER CVFRZ = 3 (INT{1/0.6*0.6}).
3060 ! CURRENT LOGIC DOESN'T ALLOW CVFRZ BE BIGGER THAN 3
3061 ! ----------------------------------------------------------------------
3063 ! ----------------------------------------------------------------------
3064 ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF.  INCLUDE THE
3065 ! INFILTRATION FORMULE FROM SCHAAKE AND KOREN MODEL.
3066 ! MODIFIED BY Q DUAN
3067 ! ----------------------------------------------------------------------
3068 ! ----------------------------------------------------------------------
3069 ! LET SICEMAX BE THE GREATEST, IF ANY, FROZEN WATER CONTENT WITHIN SOIL
3070 ! LAYERS.
3071 ! ----------------------------------------------------------------------
3072       IOHINF = 1
3073       SICEMAX = 0.0
3074       DO KS = 1,NSOIL
3075          IF (SICE (KS) >  SICEMAX) SICEMAX = SICE (KS)
3076 ! ----------------------------------------------------------------------
3077 ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF
3078 ! ----------------------------------------------------------------------
3079       END DO
3080       PDDUM = PCPDRP
3081       RUNOFF1 = 0.0
3083 ! ----------------------------------------------------------------------
3084 ! MODIFIED BY Q. DUAN, 5/16/94
3085 ! ----------------------------------------------------------------------
3086 !        IF (IOHINF == 1) THEN
3088       IF (PCPDRP /=  0.0) THEN
3089          DT1 = DT /86400.
3090          SMCAV = SMCMAX - SMCWLT
3092 ! ----------------------------------------------------------------------
3093 ! FROZEN GROUND VERSION:
3094 ! ----------------------------------------------------------------------
3095          DMAX (1)= - ZSOIL (1)* SMCAV
3097          DICE = - ZSOIL (1) * SICE (1)
3098          DMAX (1)= DMAX (1)* (1.0- (SH2OA (1) + SICE (1) - SMCWLT)/      &
3099                     SMCAV)
3101          DD = DMAX (1)
3103 ! ----------------------------------------------------------------------
3104 ! FROZEN GROUND VERSION:
3105 ! ----------------------------------------------------------------------
3106          DO KS = 2,NSOIL
3108             DICE = DICE+ ( ZSOIL (KS -1) - ZSOIL (KS) ) * SICE (KS)
3109             DMAX (KS) = (ZSOIL (KS -1) - ZSOIL (KS))* SMCAV
3110             DMAX (KS) = DMAX (KS)* (1.0- (SH2OA (KS) + SICE (KS)        &
3111                         - SMCWLT)/ SMCAV)
3112             DD = DD+ DMAX (KS)
3113 ! ----------------------------------------------------------------------
3114 ! VAL = (1.-EXP(-KDT*SQRT(DT1)))
3115 ! IN BELOW, REMOVE THE SQRT IN ABOVE
3116 ! ----------------------------------------------------------------------
3117          END DO
3118          VAL = (1. - EXP ( - KDT * DT1))
3119          DDT = DD * VAL
3120          PX = PCPDRP * DT
3121          IF (PX <  0.0) PX = 0.0
3123 ! ----------------------------------------------------------------------
3124 ! FROZEN GROUND VERSION:
3125 ! REDUCTION OF INFILTRATION BASED ON FROZEN GROUND PARAMETERS
3126 ! ----------------------------------------------------------------------
3127          INFMAX = (PX * (DDT / (PX + DDT)))/ DT
3128          FCR = 1.
3129          IF (DICE >  1.E-2) THEN
3130             ACRT = CVFRZ * FRZX / DICE
3131             SUM = 1.
3132             IALP1 = CVFRZ - 1
3133             DO J = 1,IALP1
3134                K = 1
3135                DO JJ = J +1,IALP1
3136                   K = K * JJ
3137                END DO
3138                SUM = SUM + (ACRT ** ( CVFRZ - J)) / FLOAT (K)
3139             END DO
3140             FCR = 1. - EXP ( - ACRT) * SUM
3141          END IF
3143 ! ----------------------------------------------------------------------
3144 ! CORRECTION OF INFILTRATION LIMITATION:
3145 ! IF INFMAX .LE. HYDROLIC CONDUCTIVITY ASSIGN INFMAX THE VALUE OF
3146 ! HYDROLIC CONDUCTIVITY
3147 ! ----------------------------------------------------------------------
3148 !         MXSMC = MAX ( SH2OA(1), SH2OA(2) )
3149          INFMAX = INFMAX * FCR
3151          MXSMC = SH2OA (1)
3152          CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT,           &
3153                          SICEMAX)
3154          INFMAX = MAX (INFMAX,WCND)
3156          INFMAX = MIN (INFMAX,PX)
3157          IF (PCPDRP >  INFMAX) THEN
3158             RUNOFF1 = PCPDRP - INFMAX
3159             PDDUM = INFMAX
3160          END IF
3161 ! ----------------------------------------------------------------------
3162 ! TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN LINE
3163 ! BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
3164 ! 'MXSMC = MAX(SH2OA(1), SH2OA(2))'
3165 ! ----------------------------------------------------------------------
3166       END IF
3168       MXSMC = SH2OA (1)
3169       CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT,              &
3170                     SICEMAX)
3171 ! ----------------------------------------------------------------------
3172 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
3173 ! ----------------------------------------------------------------------
3174       DDZ = 1. / ( - .5 * ZSOIL (2) )
3175       AI (1) = 0.0
3176       BI (1) = WDF * DDZ / ( - ZSOIL (1) )
3178 ! ----------------------------------------------------------------------
3179 ! CALC RHSTT FOR THE TOP LAYER AFTER CALC'NG THE VERTICAL SOIL MOISTURE
3180 ! GRADIENT BTWN THE TOP AND NEXT TO TOP LAYERS.
3181 ! ----------------------------------------------------------------------
3182       CI (1) = - BI (1)
3183       DSMDZ = ( SH2O (1) - SH2O (2) ) / ( - .5 * ZSOIL (2) )
3184       RHSTT (1) = (WDF * DSMDZ + WCND- PDDUM + EDIR + ET (1))/ ZSOIL (1)
3186 ! ----------------------------------------------------------------------
3187 ! INITIALIZE DDZ2
3188 ! ----------------------------------------------------------------------
3189       SSTT = WDF * DSMDZ + WCND+ EDIR + ET (1)
3191 ! ----------------------------------------------------------------------
3192 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABV PROCESS
3193 ! ----------------------------------------------------------------------
3194       DDZ2 = 0.0
3195       DO K = 2,NSOIL
3196          DENOM2 = (ZSOIL (K -1) - ZSOIL (K))
3197          IF (K /= NSOIL) THEN
3199 ! ----------------------------------------------------------------------
3200 ! AGAIN, TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN
3201 ! LINE BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
3202 ! 'MXSMC2 = MAX (SH2OA(K), SH2OA(K+1))'
3203 ! ----------------------------------------------------------------------
3204             SLOPX = 1.
3206             MXSMC2 = SH2OA (K)
3207             CALL WDFCND (WDF2,WCND2,MXSMC2,SMCMAX,BEXP,DKSAT,DWSAT,     &
3208                           SICEMAX)
3209 ! -----------------------------------------------------------------------
3210 ! CALC SOME PARTIAL PRODUCTS FOR LATER USE IN CALC'NG RHSTT
3211 ! ----------------------------------------------------------------------
3212             DENOM = (ZSOIL (K -1) - ZSOIL (K +1))
3214 ! ----------------------------------------------------------------------
3215 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
3216 ! ----------------------------------------------------------------------
3217             DSMDZ2 = (SH2O (K) - SH2O (K +1)) / (DENOM * 0.5)
3218             DDZ2 = 2.0 / DENOM
3219             CI (K) = - WDF2 * DDZ2 / DENOM2
3221          ELSE
3222 ! ----------------------------------------------------------------------
3223 ! SLOPE OF BOTTOM LAYER IS INTRODUCED
3224 ! ----------------------------------------------------------------------
3226 ! ----------------------------------------------------------------------
3227 ! RETRIEVE THE SOIL WATER DIFFUSIVITY AND HYDRAULIC CONDUCTIVITY FOR
3228 ! THIS LAYER
3229 ! ----------------------------------------------------------------------
3230             SLOPX = SLOPE
3231           CALL WDFCND (WDF2,WCND2,SH2OA (NSOIL),SMCMAX,BEXP,DKSAT,DWSAT,     &
3232                             SICEMAX)
3234 ! ----------------------------------------------------------------------
3235 ! CALC A PARTIAL PRODUCT FOR LATER USE IN CALC'NG RHSTT
3236 ! ----------------------------------------------------------------------
3238 ! ----------------------------------------------------------------------
3239 ! SET MATRIX COEF CI TO ZERO
3240 ! ----------------------------------------------------------------------
3241             DSMDZ2 = 0.0
3242             CI (K) = 0.0
3243 ! ----------------------------------------------------------------------
3244 ! CALC RHSTT FOR THIS LAYER AFTER CALC'NG ITS NUMERATOR
3245 ! ----------------------------------------------------------------------
3246          END IF
3247          NUMER = (WDF2 * DSMDZ2) + SLOPX * WCND2- (WDF * DSMDZ)         &
3248                  - WCND+ ET (K)
3250 ! ----------------------------------------------------------------------
3251 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER
3252 ! ----------------------------------------------------------------------
3253          RHSTT (K) = NUMER / ( - DENOM2)
3254          AI (K) = - WDF * DDZ / DENOM2
3256 ! ----------------------------------------------------------------------
3257 ! RESET VALUES OF WDF, WCND, DSMDZ, AND DDZ FOR LOOP TO NEXT LYR
3258 ! RUNOFF2:  SUB-SURFACE OR BASEFLOW RUNOFF
3259 ! ----------------------------------------------------------------------
3260          BI (K) = - ( AI (K) + CI (K) )
3261          IF (K .eq. NSOIL) THEN
3262             RUNOFF2 = SLOPX * WCND2
3263          END IF
3264          IF (K .ne. NSOIL) THEN
3265             WDF = WDF2
3266             WCND = WCND2
3267             DSMDZ = DSMDZ2
3268             DDZ = DDZ2
3269          END IF
3270       END DO
3271 ! ----------------------------------------------------------------------
3272   END SUBROUTINE SRT
3273 ! ----------------------------------------------------------------------
3275       SUBROUTINE SSTEP (SH2OOUT,SH2OIN,CMC,RHSTT,RHSCT,DT,              &
3276                         NSOIL,SMCMAX,CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,     &
3277                         AI,BI,CI)
3279 ! ----------------------------------------------------------------------
3280 ! SUBROUTINE SSTEP
3281 ! ----------------------------------------------------------------------
3282 ! CALCULATE/UPDATE SOIL MOISTURE CONTENT VALUES AND CANOPY MOISTURE
3283 ! CONTENT VALUES.
3284 ! ----------------------------------------------------------------------
3285       IMPLICIT NONE
3286       INTEGER, INTENT(IN)       :: NSOIL
3287       INTEGER                   :: I, K, KK11
3289       REAL, INTENT(IN)          :: CMCMAX, DT, SMCMAX
3290       REAL, INTENT(OUT)         :: RUNOFF3
3291       REAL, INTENT(INOUT)       :: CMC
3292       REAL, DIMENSION(1:NSOIL), INTENT(IN)     :: SH2OIN, SICE, ZSOIL
3293       REAL, DIMENSION(1:NSOIL), INTENT(OUT)    :: SH2OOUT
3294       REAL, DIMENSION(1:NSOIL), INTENT(INOUT)  :: RHSTT, SMC
3295       REAL, DIMENSION(1:NSOIL), INTENT(INOUT)  :: AI, BI, CI
3296       REAL, DIMENSION(1:NSOIL)  :: RHSTTin
3297       REAL, DIMENSION(1:NSOIL)  :: CIin
3298       REAL                      :: DDZ, RHSCT, STOT, WPLUS
3300 ! ----------------------------------------------------------------------
3301 ! CREATE 'AMOUNT' VALUES OF VARIABLES TO BE INPUT TO THE
3302 ! TRI-DIAGONAL MATRIX ROUTINE.
3303 ! ----------------------------------------------------------------------
3304       DO K = 1,NSOIL
3305          RHSTT (K) = RHSTT (K) * DT
3306          AI (K) = AI (K) * DT
3307          BI (K) = 1. + BI (K) * DT
3308          CI (K) = CI (K) * DT
3309       END DO
3310 ! ----------------------------------------------------------------------
3311 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
3312 ! ----------------------------------------------------------------------
3313       DO K = 1,NSOIL
3314          RHSTTin (K) = RHSTT (K)
3315       END DO
3316       DO K = 1,NSOIL
3317          CIin (K) = CI (K)
3318       END DO
3319 ! ----------------------------------------------------------------------
3320 ! CALL ROSR12 TO SOLVE THE TRI-DIAGONAL MATRIX
3321 ! ----------------------------------------------------------------------
3322       CALL ROSR12 (CI,AI,BI,CIin,RHSTTin,RHSTT,NSOIL)
3323 ! ----------------------------------------------------------------------
3324 ! SUM THE PREVIOUS SMC VALUE AND THE MATRIX SOLUTION TO GET A
3325 ! NEW VALUE.  MIN ALLOWABLE VALUE OF SMC WILL BE 0.02.
3326 ! RUNOFF3: RUNOFF WITHIN SOIL LAYERS
3327 ! ----------------------------------------------------------------------
3328       WPLUS = 0.0
3329       RUNOFF3 = 0.
3331       DDZ = - ZSOIL (1)
3332       DO K = 1,NSOIL
3333          IF (K /= 1) DDZ = ZSOIL (K - 1) - ZSOIL (K)
3334          SH2OOUT (K) = SH2OIN (K) + CI (K) + WPLUS / DDZ
3335          STOT = SH2OOUT (K) + SICE (K)
3336          IF (STOT > SMCMAX) THEN
3337             IF (K .eq. 1) THEN
3338                DDZ = - ZSOIL (1)
3339             ELSE
3340                KK11 = K - 1
3341                DDZ = - ZSOIL (K) + ZSOIL (KK11)
3342             END IF
3343             WPLUS = (STOT - SMCMAX) * DDZ
3344          ELSE
3345             WPLUS = 0.
3346          END IF
3347          SMC (K) = MAX ( MIN (STOT,SMCMAX),0.02 )
3348          SH2OOUT (K) = MAX ( (SMC (K) - SICE (K)),0.0)
3349       END DO
3351 ! ----------------------------------------------------------------------
3352 ! UPDATE CANOPY WATER CONTENT/INTERCEPTION (CMC).  CONVERT RHSCT TO
3353 ! AN 'AMOUNT' VALUE AND ADD TO PREVIOUS CMC VALUE TO GET NEW CMC.
3354 ! ----------------------------------------------------------------------
3355       RUNOFF3 = WPLUS
3356       CMC = CMC + DT * RHSCT
3357       IF (CMC < 1.E-20) CMC = 0.0
3358       CMC = MIN (CMC,CMCMAX)
3360 ! ----------------------------------------------------------------------
3361   END SUBROUTINE SSTEP
3362 ! ----------------------------------------------------------------------
3364       SUBROUTINE TBND (TU,TB,ZSOIL,ZBOT,K,NSOIL,TBND1)
3366 ! ----------------------------------------------------------------------
3367 ! SUBROUTINE TBND
3368 ! ----------------------------------------------------------------------
3369 ! CALCULATE TEMPERATURE ON THE BOUNDARY OF THE LAYER BY INTERPOLATION OF
3370 ! THE MIDDLE LAYER TEMPERATURES
3371 ! ----------------------------------------------------------------------
3372       IMPLICIT NONE
3373       INTEGER, INTENT(IN)       :: NSOIL
3374       INTEGER                   :: K
3375       REAL, INTENT(IN)          :: TB, TU, ZBOT
3376       REAL, INTENT(OUT)         :: TBND1
3377       REAL, DIMENSION(1:NSOIL), INTENT(IN)   :: ZSOIL
3378       REAL                      :: ZB, ZUP
3379       REAL, PARAMETER           :: T0 = 273.15
3381 ! ----------------------------------------------------------------------
3382 ! USE SURFACE TEMPERATURE ON THE TOP OF THE FIRST LAYER
3383 ! ----------------------------------------------------------------------
3384      IF (K == 1) THEN
3385          ZUP = 0.
3386       ELSE
3387          ZUP = ZSOIL (K -1)
3388       END IF
3389 ! ----------------------------------------------------------------------
3390 ! USE DEPTH OF THE CONSTANT BOTTOM TEMPERATURE WHEN INTERPOLATE
3391 ! TEMPERATURE INTO THE LAST LAYER BOUNDARY
3392 ! ----------------------------------------------------------------------
3393       IF (K ==  NSOIL) THEN
3394          ZB = 2.* ZBOT - ZSOIL (K)
3395       ELSE
3396          ZB = ZSOIL (K +1)
3397       END IF
3398 ! ----------------------------------------------------------------------
3399 ! LINEAR INTERPOLATION BETWEEN THE AVERAGE LAYER TEMPERATURES
3400 ! ----------------------------------------------------------------------
3402       TBND1 = TU + (TB - TU)* (ZUP - ZSOIL (K))/ (ZUP - ZB)
3403 ! ----------------------------------------------------------------------
3404   END SUBROUTINE TBND
3405 ! ----------------------------------------------------------------------
3408       SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O)
3410 ! ----------------------------------------------------------------------
3411 ! SUBROUTINE TDFCND
3412 ! ----------------------------------------------------------------------
3413 ! CALCULATE THERMAL DIFFUSIVITY AND CONDUCTIVITY OF THE SOIL FOR A GIVEN
3414 ! POINT AND TIME.
3415 ! ----------------------------------------------------------------------
3416 ! PETERS-LIDARD APPROACH (PETERS-LIDARD et al., 1998)
3417 ! June 2001 CHANGES: FROZEN SOIL CONDITION.
3418 ! ----------------------------------------------------------------------
3419       IMPLICIT NONE
3420       REAL, INTENT(IN)          :: QZ,  SMC, SMCMAX, SH2O
3421       REAL, INTENT(OUT)         :: DF
3422       REAL                      :: AKE, GAMMD, THKDRY, THKICE, THKO,    &
3423                                    THKQTZ,THKSAT,THKS,THKW,SATRATIO,XU, &
3424                                    XUNFROZ
3426 ! ----------------------------------------------------------------------
3427 ! WE NOW GET QUARTZ AS AN INPUT ARGUMENT (SET IN ROUTINE REDPRM):
3428 !      DATA QUARTZ /0.82, 0.10, 0.25, 0.60, 0.52,
3429 !     &             0.35, 0.60, 0.40, 0.82/
3430 ! ----------------------------------------------------------------------
3431 ! IF THE SOIL HAS ANY MOISTURE CONTENT COMPUTE A PARTIAL SUM/PRODUCT
3432 ! OTHERWISE USE A CONSTANT VALUE WHICH WORKS WELL WITH MOST SOILS
3433 ! ----------------------------------------------------------------------
3434 !  THKW ......WATER THERMAL CONDUCTIVITY
3435 !  THKQTZ ....THERMAL CONDUCTIVITY FOR QUARTZ
3436 !  THKO ......THERMAL CONDUCTIVITY FOR OTHER SOIL COMPONENTS
3437 !  THKS ......THERMAL CONDUCTIVITY FOR THE SOLIDS COMBINED(QUARTZ+OTHER)
3438 !  THKICE ....ICE THERMAL CONDUCTIVITY
3439 !  SMCMAX ....POROSITY (= SMCMAX)
3440 !  QZ .........QUARTZ CONTENT (SOIL TYPE DEPENDENT)
3441 ! ----------------------------------------------------------------------
3442 ! USE AS IN PETERS-LIDARD, 1998 (MODIF. FROM JOHANSEN, 1975).
3444 !                                  PABLO GRUNMANN, 08/17/98
3445 ! REFS.:
3446 !      FAROUKI, O.T.,1986: THERMAL PROPERTIES OF SOILS. SERIES ON ROCK
3447 !              AND SOIL MECHANICS, VOL. 11, TRANS TECH, 136 PP.
3448 !      JOHANSEN, O., 1975: THERMAL CONDUCTIVITY OF SOILS. PH.D. THESIS,
3449 !              UNIVERSITY OF TRONDHEIM,
3450 !      PETERS-LIDARD, C. D., ET AL., 1998: THE EFFECT OF SOIL THERMAL
3451 !              CONDUCTIVITY PARAMETERIZATION ON SURFACE ENERGY FLUXES
3452 !              AND TEMPERATURES. JOURNAL OF THE ATMOSPHERIC SCIENCES,
3453 !              VOL. 55, PP. 1209-1224.
3454 ! ----------------------------------------------------------------------
3455 ! NEEDS PARAMETERS
3456 ! POROSITY(SOIL TYPE):
3457 !      POROS = SMCMAX
3458 ! SATURATION RATIO:
3459 ! PARAMETERS  W/(M.K)
3460       SATRATIO = SMC / SMCMAX
3461 ! ICE CONDUCTIVITY:
3462       THKICE = 2.2
3463 ! WATER CONDUCTIVITY:
3464       THKW = 0.57
3465 ! THERMAL CONDUCTIVITY OF "OTHER" SOIL COMPONENTS
3466 !      IF (QZ .LE. 0.2) THKO = 3.0
3467       THKO = 2.0
3468 ! QUARTZ' CONDUCTIVITY
3469       THKQTZ = 7.7
3470 ! SOLIDS' CONDUCTIVITY
3471       THKS = (THKQTZ ** QZ)* (THKO ** (1. - QZ))
3473 ! UNFROZEN FRACTION (FROM 1., i.e., 100%LIQUID, TO 0. (100% FROZEN))
3474       XUNFROZ = SH2O / SMC
3475 ! UNFROZEN VOLUME FOR SATURATION (POROSITY*XUNFROZ)
3476       XU = XUNFROZ * SMCMAX
3478 ! SATURATED THERMAL CONDUCTIVITY
3479       THKSAT = THKS ** (1. - SMCMAX)* THKICE ** (SMCMAX - XU)* THKW **   &
3480          (XU)
3482 ! DRY DENSITY IN KG/M3
3483       GAMMD = (1. - SMCMAX)*2700.
3485 ! DRY THERMAL CONDUCTIVITY IN W.M-1.K-1
3486       THKDRY = (0.135* GAMMD+ 64.7)/ (2700. - 0.947* GAMMD)
3487 ! FROZEN
3488       IF ( (SH2O + 0.0005) <  SMC ) THEN
3489          AKE = SATRATIO
3490 ! UNFROZEN
3491 ! RANGE OF VALIDITY FOR THE KERSTEN NUMBER (AKE)
3492       ELSE
3494 ! KERSTEN NUMBER (USING "FINE" FORMULA, VALID FOR SOILS CONTAINING AT
3495 ! LEAST 5% OF PARTICLES WITH DIAMETER LESS THAN 2.E-6 METERS.)
3496 ! (FOR "COARSE" FORMULA, SEE PETERS-LIDARD ET AL., 1998).
3498          IF ( SATRATIO >  0.1 ) THEN
3500             AKE = LOG10 (SATRATIO) + 1.0
3502 ! USE K = KDRY
3503          ELSE
3505             AKE = 0.0
3506          END IF
3507 !  THERMAL CONDUCTIVITY
3509       END IF
3511       DF = AKE * (THKSAT - THKDRY) + THKDRY
3512 ! ----------------------------------------------------------------------
3513   END SUBROUTINE TDFCND
3514 ! ----------------------------------------------------------------------
3516       SUBROUTINE TMPAVG (TAVG,TUP,TM,TDN,ZSOIL,NSOIL,K)
3518 ! ----------------------------------------------------------------------
3519 ! SUBROUTINE TMPAVG
3520 ! ----------------------------------------------------------------------
3521 ! CALCULATE SOIL LAYER AVERAGE TEMPERATURE (TAVG) IN FREEZING/THAWING
3522 ! LAYER USING UP, DOWN, AND MIDDLE LAYER TEMPERATURES (TUP, TDN, TM),
3523 ! WHERE TUP IS AT TOP BOUNDARY OF LAYER, TDN IS AT BOTTOM BOUNDARY OF
3524 ! LAYER.  TM IS LAYER PROGNOSTIC STATE TEMPERATURE.
3525 ! ----------------------------------------------------------------------
3526       IMPLICIT NONE
3527       INTEGER  K
3529       INTEGER  NSOIL
3530       REAL     DZ
3531       REAL     DZH
3532       REAL     T0
3533       REAL     TAVG
3534       REAL     TDN
3535       REAL     TM
3536       REAL     TUP
3537       REAL     X0
3538       REAL     XDN
3539       REAL     XUP
3541       REAL     ZSOIL (NSOIL)
3543 ! ----------------------------------------------------------------------
3544       PARAMETER (T0 = 2.7315E2)
3545       IF (K .eq. 1) THEN
3546          DZ = - ZSOIL (1)
3547       ELSE
3548          DZ = ZSOIL (K -1) - ZSOIL (K)
3549       END IF
3551       DZH = DZ *0.5
3552       IF (TUP .lt. T0) THEN
3553          IF (TM .lt. T0) THEN
3554 ! ----------------------------------------------------------------------
3555 ! TUP, TM, TDN < T0
3556 ! ----------------------------------------------------------------------
3557             IF (TDN .lt. T0) THEN
3558                TAVG = (TUP + 2.0* TM + TDN)/ 4.0
3559 ! ----------------------------------------------------------------------
3560 ! TUP & TM < T0,  TDN .ge. T0
3561 ! ----------------------------------------------------------------------
3562             ELSE
3563                X0 = (T0- TM) * DZH / (TDN - TM)
3564                TAVG = 0.5 * (TUP * DZH + TM * (DZH + X0) + T0* (        &
3565      &               2.* DZH - X0)) / DZ
3566             END IF
3567          ELSE
3568 ! ----------------------------------------------------------------------
3569 ! TUP < T0, TM .ge. T0, TDN < T0
3570 ! ----------------------------------------------------------------------
3571             IF (TDN .lt. T0) THEN
3572                XUP = (T0- TUP) * DZH / (TM - TUP)
3573                XDN = DZH - (T0- TM) * DZH / (TDN - TM)
3574                TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP - XDN)       &
3575      &                + TDN * XDN) / DZ
3576 ! ----------------------------------------------------------------------
3577 ! TUP < T0, TM .ge. T0, TDN .ge. T0
3578 ! ----------------------------------------------------------------------
3579             ELSE
3580                XUP = (T0- TUP) * DZH / (TM - TUP)
3581                TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP)) / DZ
3582             END IF
3583          END IF
3584       ELSE
3585          IF (TM .lt. T0) THEN
3586 ! ----------------------------------------------------------------------
3587 ! TUP .ge. T0, TM < T0, TDN < T0
3588 ! ----------------------------------------------------------------------
3589             IF (TDN .lt. T0) THEN
3590                XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
3591                TAVG = 0.5 * (T0* (DZ - XUP) + TM * (DZH + XUP)          &
3592      &                + TDN * DZH) / DZ
3593 ! ----------------------------------------------------------------------
3594 ! TUP .ge. T0, TM < T0, TDN .ge. T0
3595 ! ----------------------------------------------------------------------
3596             ELSE
3597                XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
3598                XDN = (T0- TM) * DZH / (TDN - TM)
3599                TAVG = 0.5 * (T0* (2.* DZ - XUP - XDN) + TM *            &
3600      & (XUP + XDN)) / DZ
3601             END IF
3602          ELSE
3603 ! ----------------------------------------------------------------------
3604 ! TUP .ge. T0, TM .ge. T0, TDN < T0
3605 ! ----------------------------------------------------------------------
3606             IF (TDN .lt. T0) THEN
3607                XDN = DZH - (T0- TM) * DZH / (TDN - TM)
3608                TAVG = (T0* (DZ - XDN) +0.5* (T0+ TDN)* XDN) / DZ
3609 ! ----------------------------------------------------------------------
3610 ! TUP .ge. T0, TM .ge. T0, TDN .ge. T0
3611 ! ----------------------------------------------------------------------
3612             ELSE
3613                TAVG = (TUP + 2.0* TM + TDN) / 4.0
3614             END IF
3615          END IF
3616       END IF
3617 ! ----------------------------------------------------------------------
3618   END SUBROUTINE TMPAVG
3619 ! ----------------------------------------------------------------------
3621       SUBROUTINE TRANSP (ET,NSOIL,ETP1,SMC,CMC,ZSOIL,SHDFAC,SMCWLT,     &
3622      &                      CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT,    &
3623      &                      RTDIS)
3625 ! ----------------------------------------------------------------------
3626 ! SUBROUTINE TRANSP
3627 ! ----------------------------------------------------------------------
3628 ! CALCULATE TRANSPIRATION FOR THE VEG CLASS.
3629 ! ----------------------------------------------------------------------
3630       IMPLICIT NONE
3631       INTEGER  I
3632       INTEGER  K
3633       INTEGER  NSOIL
3635       INTEGER  NROOT
3636       REAL     CFACTR
3637       REAL     CMC
3638       REAL     CMCMAX
3639       REAL     DENOM
3640       REAL     ET (NSOIL)
3641       REAL     ETP1
3642       REAL     ETP1A
3643 !.....REAL PART(NSOIL)
3644       REAL     GX (NROOT)
3645       REAL     PC
3646       REAL     Q2
3647       REAL     RTDIS (NSOIL)
3648       REAL     RTX
3649       REAL     SFCTMP
3650       REAL     SGX
3651       REAL     SHDFAC
3652       REAL     SMC (NSOIL)
3653       REAL     SMCREF
3654       REAL     SMCWLT
3656 ! ----------------------------------------------------------------------
3657 ! INITIALIZE PLANT TRANSP TO ZERO FOR ALL SOIL LAYERS.
3658 ! ----------------------------------------------------------------------
3659       REAL     ZSOIL (NSOIL)
3660       DO K = 1,NSOIL
3661          ET (K) = 0.
3662 ! ----------------------------------------------------------------------
3663 ! CALCULATE AN 'ADJUSTED' POTENTIAL TRANSPIRATION
3664 ! IF STATEMENT BELOW TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
3665 ! NOTE: GX AND OTHER TERMS BELOW REDISTRIBUTE TRANSPIRATION BY LAYER,
3666 ! ET(K), AS A FUNCTION OF SOIL MOISTURE AVAILABILITY, WHILE PRESERVING
3667 ! TOTAL ETP1A.
3668 ! ----------------------------------------------------------------------
3669       END DO
3670       IF (CMC .ne. 0.0) THEN
3671          ETP1A = SHDFAC * PC * ETP1 * (1.0- (CMC / CMCMAX) ** CFACTR)
3672       ELSE
3673          ETP1A = SHDFAC * PC * ETP1
3674       END IF
3675       SGX = 0.0
3676       DO I = 1,NROOT
3677          GX (I) = ( SMC (I) - SMCWLT ) / ( SMCREF - SMCWLT )
3678          GX (I) = MAX ( MIN ( GX (I), 1. ), 0. )
3679          SGX = SGX + GX (I)
3680       END DO
3682       SGX = SGX / NROOT
3683       DENOM = 0.
3684       DO I = 1,NROOT
3685          RTX = RTDIS (I) + GX (I) - SGX
3686          GX (I) = GX (I) * MAX ( RTX, 0. )
3687          DENOM = DENOM + GX (I)
3688       END DO
3690       IF (DENOM .le. 0.0) DENOM = 1.
3691       DO I = 1,NROOT
3692          ET (I) = ETP1A * GX (I) / DENOM
3693 ! ----------------------------------------------------------------------
3694 ! ABOVE CODE ASSUMES A VERTICALLY UNIFORM ROOT DISTRIBUTION
3695 ! CODE BELOW TESTS A VARIABLE ROOT DISTRIBUTION
3696 ! ----------------------------------------------------------------------
3697 !      ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * GX * ETP1A
3698 !      ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * ETP1A
3699 ! ----------------------------------------------------------------------
3700 ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
3701 ! ----------------------------------------------------------------------
3702 !      ET(1) = RTDIS(1) * ETP1A
3703 !      ET(1) = ETP1A * PART(1)
3704 ! ----------------------------------------------------------------------
3705 ! LOOP DOWN THRU THE SOIL LAYERS REPEATING THE OPERATION ABOVE,
3706 ! BUT USING THE THICKNESS OF THE SOIL LAYER (RATHER THAN THE
3707 ! ABSOLUTE DEPTH OF EACH LAYER) IN THE FINAL CALCULATION.
3708 ! ----------------------------------------------------------------------
3709 !      DO K = 2,NROOT
3710 !        GX = ( SMC(K) - SMCWLT ) / ( SMCREF - SMCWLT )
3711 !        GX = MAX ( MIN ( GX, 1. ), 0. )
3712 ! TEST CANOPY RESISTANCE
3713 !        GX = 1.0
3714 !        ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*GX*ETP1A
3715 !        ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*ETP1A
3716 ! ----------------------------------------------------------------------
3717 ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
3718 ! ----------------------------------------------------------------------
3719 !        ET(K) = RTDIS(K) * ETP1A
3720 !        ET(K) = ETP1A*PART(K)
3721 !      END DO
3722       END DO
3723 ! ----------------------------------------------------------------------
3724   END SUBROUTINE TRANSP
3725 ! ----------------------------------------------------------------------
3727       SUBROUTINE WDFCND (WDF,WCND,SMC,SMCMAX,BEXP,DKSAT,DWSAT,          &
3728      &                      SICEMAX)
3730 ! ----------------------------------------------------------------------
3731 ! SUBROUTINE WDFCND
3732 ! ----------------------------------------------------------------------
3733 ! CALCULATE SOIL WATER DIFFUSIVITY AND SOIL HYDRAULIC CONDUCTIVITY.
3734 ! ----------------------------------------------------------------------
3735       IMPLICIT NONE
3736       REAL     BEXP
3737       REAL     DKSAT
3738       REAL     DWSAT
3739       REAL     EXPON
3740       REAL     FACTR1
3741       REAL     FACTR2
3742       REAL     SICEMAX
3743       REAL     SMC
3744       REAL     SMCMAX
3745       REAL     VKwgt
3746       REAL     WCND
3748 ! ----------------------------------------------------------------------
3749 !     CALC THE RATIO OF THE ACTUAL TO THE MAX PSBL SOIL H2O CONTENT
3750 ! ----------------------------------------------------------------------
3751       REAL     WDF
3752       FACTR1 = 0.2 / SMCMAX
3754 ! ----------------------------------------------------------------------
3755 ! PREP AN EXPNTL COEF AND CALC THE SOIL WATER DIFFUSIVITY
3756 ! ----------------------------------------------------------------------
3757       FACTR2 = SMC / SMCMAX
3758       EXPON = BEXP + 2.0
3760 ! ----------------------------------------------------------------------
3761 ! FROZEN SOIL HYDRAULIC DIFFUSIVITY.  VERY SENSITIVE TO THE VERTICAL
3762 ! GRADIENT OF UNFROZEN WATER. THE LATTER GRADIENT CAN BECOME VERY
3763 ! EXTREME IN FREEZING/THAWING SITUATIONS, AND GIVEN THE RELATIVELY
3764 ! FEW AND THICK SOIL LAYERS, THIS GRADIENT SUFFERES SERIOUS
3765 ! TRUNCTION ERRORS YIELDING ERRONEOUSLY HIGH VERTICAL TRANSPORTS OF
3766 ! UNFROZEN WATER IN BOTH DIRECTIONS FROM HUGE HYDRAULIC DIFFUSIVITY.
3767 ! THEREFORE, WE FOUND WE HAD TO ARBITRARILY CONSTRAIN WDF
3768 ! --
3769 ! VERSION D_10CM: ........  FACTR1 = 0.2/SMCMAX
3770 ! WEIGHTED APPROACH...................... PABLO GRUNMANN, 28_SEP_1999.
3771 ! ----------------------------------------------------------------------
3772       WDF = DWSAT * FACTR2 ** EXPON
3773       IF (SICEMAX .gt. 0.0) THEN
3774          VKWGT = 1./ (1. + (500.* SICEMAX)**3.)
3775          WDF = VKWGT * WDF + (1. - VKWGT)* DWSAT * FACTR1** EXPON
3776 ! ----------------------------------------------------------------------
3777 ! RESET THE EXPNTL COEF AND CALC THE HYDRAULIC CONDUCTIVITY
3778 ! ----------------------------------------------------------------------
3779       END IF
3780       EXPON = (2.0 * BEXP) + 3.0
3781       WCND = DKSAT * FACTR2 ** EXPON
3783 ! ----------------------------------------------------------------------
3784   END SUBROUTINE WDFCND
3785 ! ----------------------------------------------------------------------
3787       SUBROUTINE SFCDIF_off (ZLM,Z0,THZ0,THLM,SFCSPD,CZIL,AKMS,AKHS)
3789 ! ----------------------------------------------------------------------
3790 ! SUBROUTINE SFCDIF (renamed SFCDIF_off to avoid clash with Eta PBL)
3791 ! ----------------------------------------------------------------------
3792 ! CALCULATE SURFACE LAYER EXCHANGE COEFFICIENTS VIA ITERATIVE PROCESS.
3793 ! SEE CHEN ET AL (1997, BLM)
3794 ! ----------------------------------------------------------------------
3796       IMPLICIT NONE
3797       REAL     WWST, WWST2, G, VKRM, EXCM, BETA, BTG, ELFC, WOLD, WNEW
3798       REAL     PIHF, EPSU2, EPSUST, EPSIT, EPSA, ZTMIN, ZTMAX, HPBL,     &
3799      & SQVISC
3800       REAL     RIC, RRIC, FHNEU, RFC, RFAC, ZZ, PSLMU, PSLMS, PSLHU,     &
3801      & PSLHS
3802       REAL     XX, PSPMU, YY, PSPMS, PSPHU, PSPHS, ZLM, Z0, THZ0, THLM
3803       REAL     SFCSPD, CZIL, AKMS, AKHS, ZILFC, ZU, ZT, RDZ, CXCH
3804       REAL     DTHV, DU2, BTGH, WSTAR2, USTAR, ZSLU, ZSLT, RLOGU, RLOGT
3805       REAL     RLMO, ZETALT, ZETALU, ZETAU, ZETAT, XLU4, XLT4, XU4, XT4
3806 !CC   ......REAL ZTFC
3808       REAL     XLU, XLT, XU, XT, PSMZ, SIMM, PSHZ, SIMH, USTARK, RLMN,  &
3809      &         RLMA
3811       INTEGER  ITRMX, ILECH, ITR
3812       PARAMETER                                                         &
3813      &        (WWST = 1.2,WWST2 = WWST * WWST,G = 9.8,VKRM = 0.40,      &
3814      &         EXCM = 0.001                                             &
3815      &        ,BETA = 1./270.,BTG = BETA * G,ELFC = VKRM * BTG          &
3816      &                  ,WOLD =.15,WNEW = 1. - WOLD,ITRMX = 05,         &
3817      &                   PIHF = 3.14159265/2.)
3818       PARAMETER                                                         &
3819      &         (EPSU2 = 1.E-4,EPSUST = 0.07,EPSIT = 1.E-4,EPSA = 1.E-8  &
3820      &         ,ZTMIN = -5.,ZTMAX = 1.,HPBL = 1000.0                    &
3821      &          ,SQVISC = 258.2)
3822       PARAMETER                                                         &
3823      &       (RIC = 0.183,RRIC = 1.0/ RIC,FHNEU = 0.8,RFC = 0.191       &
3824      &        ,RFAC = RIC / (FHNEU * RFC * RFC))
3826 ! ----------------------------------------------------------------------
3827 ! NOTE: THE TWO CODE BLOCKS BELOW DEFINE FUNCTIONS
3828 ! ----------------------------------------------------------------------
3829 ! LECH'S SURFACE FUNCTIONS
3830 ! ----------------------------------------------------------------------
3831       PSLMU (ZZ)= -0.96* log (1.0-4.5* ZZ)
3832       PSLMS (ZZ)= ZZ * RRIC -2.076* (1. -1./ (ZZ +1.))
3833       PSLHU (ZZ)= -0.96* log (1.0-4.5* ZZ)
3835 ! ----------------------------------------------------------------------
3836 ! PAULSON'S SURFACE FUNCTIONS
3837 ! ----------------------------------------------------------------------
3838       PSLHS (ZZ)= ZZ * RFAC -2.076* (1. -1./ (ZZ +1.))
3839       PSPMU (XX)= -2.* log ( (XX +1.)*0.5) - log ( (XX * XX +1.)*0.5)   &
3840      &        +2.* ATAN (XX)                                            &
3841      &- PIHF
3842       PSPMS (YY)= 5.* YY
3843       PSPHU (XX)= -2.* log ( (XX * XX +1.)*0.5)
3845 ! ----------------------------------------------------------------------
3846 ! THIS ROUTINE SFCDIF CAN HANDLE BOTH OVER OPEN WATER (SEA, OCEAN) AND
3847 ! OVER SOLID SURFACE (LAND, SEA-ICE).
3848 ! ----------------------------------------------------------------------
3849       PSPHS (YY)= 5.* YY
3851 ! ----------------------------------------------------------------------
3852 !     ZTFC: RATIO OF ZOH/ZOM  LESS OR EQUAL THAN 1
3853 !     C......ZTFC=0.1
3854 !     CZIL: CONSTANT C IN Zilitinkevich, S. S.1995,:NOTE ABOUT ZT
3855 ! ----------------------------------------------------------------------
3856       ILECH = 0
3858 ! ----------------------------------------------------------------------
3859       ZILFC = - CZIL * VKRM * SQVISC
3860 !     C.......ZT=Z0*ZTFC
3861       ZU = Z0
3862       RDZ = 1./ ZLM
3863       CXCH = EXCM * RDZ
3864       DTHV = THLM - THZ0
3866 ! ----------------------------------------------------------------------
3867 ! BELJARS CORRECTION OF USTAR
3868 ! ----------------------------------------------------------------------
3869       DU2 = MAX (SFCSPD * SFCSPD,EPSU2)
3870 !cc   If statements to avoid TANGENT LINEAR problems near zero
3871       BTGH = BTG * HPBL
3872       IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
3873          WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
3874       ELSE
3875          WSTAR2 = 0.0
3876       END IF
3878 ! ----------------------------------------------------------------------
3879 ! ZILITINKEVITCH APPROACH FOR ZT
3880 ! ----------------------------------------------------------------------
3881       USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
3883 ! ----------------------------------------------------------------------
3884       ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
3885       ZSLU = ZLM + ZU
3886 !     PRINT*,'ZSLT=',ZSLT
3887 !     PRINT*,'ZLM=',ZLM
3888 !     PRINT*,'ZT=',ZT
3890       ZSLT = ZLM + ZT
3891       RLOGU = log (ZSLU / ZU)
3893       RLOGT = log (ZSLT / ZT)
3894 !     PRINT*,'RLMO=',RLMO
3895 !     PRINT*,'ELFC=',ELFC
3896 !     PRINT*,'AKHS=',AKHS
3897 !     PRINT*,'DTHV=',DTHV
3898 !     PRINT*,'USTAR=',USTAR
3900       RLMO = ELFC * AKHS * DTHV / USTAR **3
3901 ! ----------------------------------------------------------------------
3902 ! 1./MONIN-OBUKKHOV LENGTH-SCALE
3903 ! ----------------------------------------------------------------------
3904       DO ITR = 1,ITRMX
3905          ZETALT = MAX (ZSLT * RLMO,ZTMIN)
3906          RLMO = ZETALT / ZSLT
3907          ZETALU = ZSLU * RLMO
3908          ZETAU = ZU * RLMO
3910          ZETAT = ZT * RLMO
3911          IF (ILECH .eq. 0) THEN
3912             IF (RLMO .lt. 0.)THEN
3913                XLU4 = 1. -16.* ZETALU
3914                XLT4 = 1. -16.* ZETALT
3915                XU4 = 1. -16.* ZETAU
3917                XT4 = 1. -16.* ZETAT
3918                XLU = SQRT (SQRT (XLU4))
3919                XLT = SQRT (SQRT (XLT4))
3920                XU = SQRT (SQRT (XU4))
3922                XT = SQRT (SQRT (XT4))
3923 !     PRINT*,'-----------1------------'
3924 !     PRINT*,'PSMZ=',PSMZ
3925 !     PRINT*,'PSPMU(ZETAU)=',PSPMU(ZETAU)
3926 !     PRINT*,'XU=',XU
3927 !     PRINT*,'------------------------'
3928                PSMZ = PSPMU (XU)
3929                SIMM = PSPMU (XLU) - PSMZ + RLOGU
3930                PSHZ = PSPHU (XT)
3931                SIMH = PSPHU (XLT) - PSHZ + RLOGT
3932             ELSE
3933                ZETALU = MIN (ZETALU,ZTMAX)
3934                ZETALT = MIN (ZETALT,ZTMAX)
3935 !     PRINT*,'-----------2------------'
3936 !     PRINT*,'PSMZ=',PSMZ
3937 !     PRINT*,'PSPMS(ZETAU)=',PSPMS(ZETAU)
3938 !     PRINT*,'ZETAU=',ZETAU
3939 !     PRINT*,'------------------------'
3940                PSMZ = PSPMS (ZETAU)
3941                SIMM = PSPMS (ZETALU) - PSMZ + RLOGU
3942                PSHZ = PSPHS (ZETAT)
3943                SIMH = PSPHS (ZETALT) - PSHZ + RLOGT
3944             END IF
3945 ! ----------------------------------------------------------------------
3946 ! LECH'S FUNCTIONS
3947 ! ----------------------------------------------------------------------
3948          ELSE
3949             IF (RLMO .lt. 0.)THEN
3950 !     PRINT*,'-----------3------------'
3951 !     PRINT*,'PSMZ=',PSMZ
3952 !     PRINT*,'PSLMU(ZETAU)=',PSLMU(ZETAU)
3953 !     PRINT*,'ZETAU=',ZETAU
3954 !     PRINT*,'------------------------'
3955                PSMZ = PSLMU (ZETAU)
3956                SIMM = PSLMU (ZETALU) - PSMZ + RLOGU
3957                PSHZ = PSLHU (ZETAT)
3958                SIMH = PSLHU (ZETALT) - PSHZ + RLOGT
3959             ELSE
3960                ZETALU = MIN (ZETALU,ZTMAX)
3962                ZETALT = MIN (ZETALT,ZTMAX)
3963 !     PRINT*,'-----------4------------'
3964 !     PRINT*,'PSMZ=',PSMZ
3965 !     PRINT*,'PSLMS(ZETAU)=',PSLMS(ZETAU)
3966 !     PRINT*,'ZETAU=',ZETAU
3967 !     PRINT*,'------------------------'
3968                PSMZ = PSLMS (ZETAU)
3969                SIMM = PSLMS (ZETALU) - PSMZ + RLOGU
3970                PSHZ = PSLHS (ZETAT)
3971                SIMH = PSLHS (ZETALT) - PSHZ + RLOGT
3972             END IF
3973 ! ----------------------------------------------------------------------
3974 ! BELJAARS CORRECTION FOR USTAR
3975 ! ----------------------------------------------------------------------
3976          END IF
3978 ! ----------------------------------------------------------------------
3979 ! ZILITINKEVITCH FIX FOR ZT
3980 ! ----------------------------------------------------------------------
3981          USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
3983          ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
3984          ZSLT = ZLM + ZT
3985 !-----------------------------------------------------------------------
3986          RLOGT = log (ZSLT / ZT)
3987          USTARK = USTAR * VKRM
3988          AKMS = MAX (USTARK / SIMM,CXCH)
3989 !-----------------------------------------------------------------------
3990 ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
3991 !-----------------------------------------------------------------------
3992          AKHS = MAX (USTARK / SIMH,CXCH)
3993          IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
3994             WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
3995          ELSE
3996             WSTAR2 = 0.0
3997          END IF
3998 !-----------------------------------------------------------------------
3999          RLMN = ELFC * AKHS * DTHV / USTAR **3
4000 !-----------------------------------------------------------------------
4001 !     IF(ABS((RLMN-RLMO)/RLMA).LT.EPSIT)    GO TO 110
4002 !-----------------------------------------------------------------------
4003          RLMA = RLMO * WOLD+ RLMN * WNEW
4004 !-----------------------------------------------------------------------
4005          RLMO = RLMA
4006 !     PRINT*,'----------------------------'
4007 !     PRINT*,'SFCDIF OUTPUT !  ! ! ! ! ! ! ! !  !   !    !'
4009 !     PRINT*,'ZLM=',ZLM
4010 !     PRINT*,'Z0=',Z0
4011 !     PRINT*,'THZ0=',THZ0
4012 !     PRINT*,'THLM=',THLM
4013 !     PRINT*,'SFCSPD=',SFCSPD
4014 !     PRINT*,'CZIL=',CZIL
4015 !     PRINT*,'AKMS=',AKMS
4016 !     PRINT*,'AKHS=',AKHS
4017 !     PRINT*,'----------------------------'
4019       END DO
4020 ! ----------------------------------------------------------------------
4021   END SUBROUTINE SFCDIF_off
4022 ! ----------------------------------------------------------------------
4024 END MODULE module_sf_noahlsm