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, &
11 ! VEGETATION PARAMETERS
12 INTEGER :: LUCATS , BARE
13 integer, PARAMETER :: NLUS=50
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
22 INTEGER, PARAMETER :: NSLTYPE=30
24 REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11, &
25 MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
27 ! LSM GENERAL PARAMETERS
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, &
35 CHARACTER*256 :: err_message
41 SUBROUTINE SFLX (FFROZP,ICE,DT,ZLVL,NSOIL,SLDPTH, & !C
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
60 RUNOFF1,RUNOFF2,RUNOFF3, & !O
61 RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL, & !O
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
78 ! CL 4-string character bearing logical meaning
80 ! I OTHER (INPUT) FORCING DATA
81 ! S SURFACE CHARACTERISTICS
82 ! H HISTORY (STATE) VARIABLES
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
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 ! ----------------------------------------------------------------------
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
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
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
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 ! ----------------------------------------------------------------------
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
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
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
195 ! ETT TOTAL PLANT TRANSPIRATION (W m-2)
196 ! ESNOW SUBLIMATION FROM (OR DEPOSITION TO IF <0) SNOWPACK
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
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 ! ----------------------------------------------------------------------
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
247 ! NROOT NUMBER OF ROOT LAYERS, A FUNCTION OF VEG TYPE, DETERMINED
248 ! IN SUBROUTINE REDPRM.
249 ! ----------------------------------------------------------------------
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
268 ! ----------------------------------------------------------------------
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, &
275 REAL, INTENT(INOUT):: COSZ, SOLARDIRECT,ALBEDO,CH,CM, &
276 CMC,SNEQV,SNCOVR,SNOWH,T1,XLAI,SHDFAC,Z0BRD,ALB,&
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, &
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, &
292 RSNOW,SNDENS,SNCOND,SBETA,SN_NEW,SLOPE,SNUP,SALP,SOILWM, &
293 SOILWW,T1V,T24,T2V,TH2V,TOPT,TFREEZ,TSNOW,ZBOT,Z0,PRCPF, &
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 ! ----------------------------------------------------------------------
305 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
318 ZSOIL (KZ) = -3.* FLOAT (KZ)/ FLOAT (NSOIL)
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
325 ! ----------------------------------------------------------------------
327 ZSOIL (1) = - SLDPTH (1)
329 ZSOIL (KZ) = - SLDPTH (KZ) + ZSOIL (KZ -1)
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)
353 ! ----------------------------------------------------------------------
354 ! INITIALIZE PRECIPITATION LOGICALS.
355 ! ----------------------------------------------------------------------
359 ! ----------------------------------------------------------------------
360 ! IF SEA-ICE CASE, ASSIGN DEFAULT WATER-EQUIV SNOW ON TOP
361 ! ----------------------------------------------------------------------
365 ! ----------------------------------------------------------------------
366 ! IF INPUT SNOWPACK IS NONZERO, THEN COMPUTE SNOW DENSITY "SNDENS" AND
367 ! SNOW THERMAL CONDUCTIVITY "SNCOND" (NOTE THAT CSNOW IS A FUNCTION
369 ! ----------------------------------------------------------------------
371 IF (SNEQV == 0.0) THEN
376 SNDENS = SNEQV / SNOWH
377 IF(SNDENS > 1.0) THEN
378 CALL wrf_error_fatal ( 'Physical snow depth is less than snow water equiv.' )
380 CALL CSNOW (SNCOND,SNDENS)
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 ! ----------------------------------------------------------------------
389 ! snow defined when fraction of frozen precip (FFROZP) > 0.5,
390 ! passed in from model microphysics.
391 IF (FFROZP .GT. 0.5) THEN
394 IF (T1 <= TFREEZ) FRZGRA = .TRUE.
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
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 ! ----------------------------------------------------------------------
424 ! ----------------------------------------------------------------------
425 ! DETERMINE SNOWCOVER AND ALBEDO OVER LAND.
426 ! ----------------------------------------------------------------------
427 ! ----------------------------------------------------------------------
428 ! IF SNOW DEPTH=0, SET SNOW FRACTION=0, ALBEDO=SNOW FREE ALBEDO.
429 ! ----------------------------------------------------------------------
431 IF (SNEQV == 0.0) THEN
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)
445 ! ----------------------------------------------------------------------
446 ! SNOW COVER, ALBEDO OVER SEA-ICE
447 ! ----------------------------------------------------------------------
453 ! ----------------------------------------------------------------------
454 ! THERMAL CONDUCTIVITY FOR SEA-ICE CASE
455 ! ----------------------------------------------------------------------
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))
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 ! ----------------------------------------------------------------------
496 DSOIL = - (0.5 * ZSOIL (1))
497 IF (SNEQV == 0.) THEN
498 SSOIL = DF1 * (T1- STC (1) ) / 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
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)
534 ! ----------------------------------------------------------------------
535 ! NEXT CALL ROUTINE SFCDIF TO CALCULATE THE SFC EXCHANGE COEF (CH) FOR
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.
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.
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 ! ----------------------------------------------------------------------
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)
563 ! ----------------------------------------------------------------------
564 ! CALL PENMAN SUBROUTINE TO CALCULATE POTENTIAL EVAPORATION (ETP), AND
565 ! OTHER PARTIAL PRODUCTS AND SUMS SAVE IN COMMON/RITE FOR LATER
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
577 T2V = SFCTMP * (1.0+ 0.61 * Q2 )
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
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)
611 ! ----------------------------------------------------------------------
612 ! NOW DECIDE MAJOR PATHWAY BRANCH TO TAKE DEPENDING ON WHETHER SNOWPACK
614 ! ----------------------------------------------------------------------
616 IF (SNEQV == 0.0) THEN
617 CALL NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, &
618 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
620 SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI, &
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)
630 CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
631 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
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, &
641 ETA_KINEMATIC = ESNOW + ETNS
644 ! Calculate effective mixing ratio at grnd level (skin)
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 ! ----------------------------------------------------------------------
660 ET(K) = ET(K) * 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
670 ! ----------------------------------------------------------------------
671 ! DETERMINE BETA (RATIO OF ACTUAL TO POTENTIAL EVAP)
672 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
698 SOILM = -1.0* SMC (1)* ZSOIL (1)
700 SOILM = SOILM + SMC (K)* (ZSOIL (K -1) - ZSOIL (K))
702 SOILWM = -1.0* (SMCMAX - SMCWLT)* ZSOIL (1)
703 SOILWW = -1.0* (SMC (1) - SMCWLT)* ZSOIL (1)
707 SOILWM = SOILWM + (SMCMAX - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
708 SOILWW = SOILWW + (SMC(K) - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
711 IF (SOILWM .LT. 1.E-6) THEN
716 SOILW = SOILWW / SOILWM
724 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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
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)))
768 ! ISBA FORMULATION (VERSEGHY, 1991; BAKER ET AL., 1990)
769 ! IF (TSNOW.LT.273.16) THEN
770 ! ALBEDO=SNOALB-0.008*DT/86400
772 ! ALBEDO=(SNOALB-0.5)*EXP(-0.24*DT/86400)+0.5
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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
815 ! RSMIN, RSMAX, TOPT, RGL, HS ARE CANOPY STRESS PARAMETERS SET IN
818 ! PC PLANT COEFFICIENT
819 ! RC CANOPY RESISTANCE
820 ! ----------------------------------------------------------------------
823 INTEGER, INTENT(IN) :: NROOT,NSOIL
825 REAL, INTENT(IN) :: CH,DQSDT2,HS,Q2,Q2SAT,RSMIN,RGL,RSMAX, &
826 SFCPRS,SFCTMP,SMCREF,SMCWLT, SOLAR,TOPT,XLAI, &
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 ! ----------------------------------------------------------------------
843 ! ----------------------------------------------------------------------
844 ! CONTRIBUTION DUE TO INCOMING SOLAR RADIATION
845 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
869 GX = (SMC (1) - SMCWLT) / (SMCREF - SMCWLT)
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
882 GX = (SMC (K) - SMCWLT) / (SMCREF - SMCWLT)
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
895 RCSOIL = RCSOIL + PART (K)
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) &
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 ! ----------------------------------------------------------------------
925 ! ----------------------------------------------------------------------
926 ! CALCULATE SNOW TERMAL CONDUCTIVITY
927 ! ----------------------------------------------------------------------
929 REAL, INTENT(IN) :: DSNOW
930 REAL, INTENT(OUT):: SNCOND
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)
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
955 ! double snow thermal conductivity
956 SNCOND = 2.0 * UNIT * C
958 ! ----------------------------------------------------------------------
960 ! ----------------------------------------------------------------------
962 SUBROUTINE DEVAP (EDIR,ETP1,SMC,ZSOIL,SHDFAC,SMCMAX,BEXP, &
963 DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
965 ! ----------------------------------------------------------------------
968 ! ----------------------------------------------------------------------
969 ! CALCULATE DIRECT SOIL EVAPORATION
970 ! ----------------------------------------------------------------------
972 REAL, INTENT(IN) :: ETP1,SMC,BEXP,DKSAT,DWSAT,FXEXP, &
973 SHDFAC,SMCDRY,SMCMAX,ZSOIL,SMCREF,SMCWLT
974 REAL, INTENT(OUT):: EDIR
978 ! ----------------------------------------------------------------------
979 ! DIRECT EVAP A FUNCTION OF RELATIVE SOIL MOISTURE AVAILABILITY, LINEAR
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
990 FX = MAX ( MIN ( FX, 1. ) ,0. )
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, &
1006 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
1007 SMCREF,SHDFAC,CMCMAX, &
1009 EDIR,EC,ET,ETT,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
1011 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1021 INTEGER, INTENT(IN) :: NSOIL, NROOT
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
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 ! ----------------------------------------------------------------------
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)
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)
1061 ETT = ETT + ET ( K )
1063 ! ----------------------------------------------------------------------
1064 ! CALCULATE CANOPY EVAPORATION.
1065 ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR CMC=0.0.
1066 ! ----------------------------------------------------------------------
1068 EC = SHDFAC * ( ( CMC / CMCMAX ) ** CFACTR ) * ETP1
1072 ! ----------------------------------------------------------------------
1073 ! EC SHOULD BE LIMITED BY THE TOTAL AMOUNT OF AVAILABLE WATER ON THE
1074 ! CANOPY. -F.CHEN, 18-OCT-1994
1075 ! ----------------------------------------------------------------------
1077 EC = MIN ( CMC2MS, EC )
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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)
1117 ! FRH2O.........SUPERCOOLED LIQUID WATER CONTENT
1118 ! FREE..........SUPERCOOLED LIQUID WATER CONTENT
1119 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1137 ! ----------------------------------------------------------------------
1138 ! INITIALIZING ITERATIONS COUNTER AND ITERATIVE SOLUTION FLAG.
1139 ! ----------------------------------------------------------------------
1140 IF (BEXP > BLIM) BX = BLIM
1143 ! ----------------------------------------------------------------------
1144 ! IF TEMPERATURE NOT SIGNIFICANTLY BELOW FREEZING (T0), SH2O = SMC
1145 ! ----------------------------------------------------------------------
1148 IF (TKELV > (T0- 1.E-3)) THEN
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 ! ----------------------------------------------------------------------
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.
1170 IF (.NOT.( (NLOG < 10) .AND. (KCOUNT == 0))) goto 1002
1172 DF = ALOG ( ( PSIS * GS / HLICE ) * ( ( 1. + CK * SWL )**2.) * &
1173 ( SMCMAX / (SMC - SWL) )** BX) - ALOG ( - ( &
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 ! ----------------------------------------------------------------------
1193 IF ( DSWL <= ERROR ) THEN
1196 ! ----------------------------------------------------------------------
1198 ! ----------------------------------------------------------------------
1199 ! BOUNDS APPLIED WITHIN DO-BLOCK ARE VALID FOR PHYSICAL SOLUTION.
1200 ! ----------------------------------------------------------------------
1206 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1223 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1243 INTEGER, INTENT(IN) :: NSOIL, VEGTYP
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,&
1266 ! ----------------------------------------------------------------------
1267 ! INITIALIZE LOGICAL FOR SOIL LAYER TEMPERATURE AVERAGING.
1268 ! ----------------------------------------------------------------------
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))&
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) )
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 * &
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)
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
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
1349 ! ----------------------------------------------------------------------
1350 ! THIS ENDS SECTION FOR TOP SOIL LAYER.
1351 ! ----------------------------------------------------------------------
1355 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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))
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)) * &
1399 CALL TBND (STC (K),STC (K +1),ZSOIL,ZBOT,K,NSOIL,TBK1)
1403 ! ----------------------------------------------------------------------
1404 ! SPECIAL CASE OF BOTTOM SOIL LAYER: CALCULATE THERMAL DIFFUSIVITY FOR
1406 ! ----------------------------------------------------------------------
1408 ! ----------------------------------------------------------------------
1409 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU BOTTOM LAYER.
1410 ! ----------------------------------------------------------------------
1411 CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
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 ! ----------------------------------------------------------------------
1430 CALL TBND (STC (K),TBOT,ZSOIL,ZBOT,K,NSOIL,TBK1)
1432 ! ----------------------------------------------------------------------
1433 ! THIS ENDS SPECIAL LOOP FOR BOTTOM LAYER.
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)
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
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
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))
1475 ! ----------------------------------------------------------------------
1477 ! ----------------------------------------------------------------------
1479 SUBROUTINE HRTICE (RHSTS,STC,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
1481 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1492 INTEGER, INTENT(IN) :: NSOIL
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, &
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 ! ----------------------------------------------------------------------
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) )
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 * &
1533 DTSDZ = ( STC (1) - STC (2) ) / ( -0.5 * ZSOIL (2) )
1534 SSOIL = DF1 * ( STC (1) - YY ) / ( 0.5 * ZSOIL (1) * ZZ1 )
1536 ! ----------------------------------------------------------------------
1538 ! ----------------------------------------------------------------------
1539 RHSTS (1) = ( DF1 * DTSDZ - SSOIL ) / ( ZSOIL (1) * HCPCT )
1541 ! ----------------------------------------------------------------------
1542 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
1543 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1565 ! ----------------------------------------------------------------------
1566 ! SET MATRIX COEF, CI TO ZERO.
1567 ! ----------------------------------------------------------------------
1568 DTSDZ2 = (STC (K) - TBOT)/ (.5 * (ZSOIL (K -1) + ZSOIL (K)) &
1571 ! ----------------------------------------------------------------------
1572 ! CALC RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
1573 ! ----------------------------------------------------------------------
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))
1590 ! ----------------------------------------------------------------------
1591 END SUBROUTINE HRTICE
1592 ! ----------------------------------------------------------------------
1594 SUBROUTINE HSTEP (STCOUT,STCIN,RHSTS,DT,NSOIL,AI,BI,CI)
1596 ! ----------------------------------------------------------------------
1598 ! ----------------------------------------------------------------------
1599 ! CALCULATE/UPDATE THE SOIL TEMPERATURE FIELD.
1600 ! ----------------------------------------------------------------------
1602 INTEGER, INTENT(IN) :: NSOIL
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
1613 ! ----------------------------------------------------------------------
1614 ! CREATE FINITE DIFFERENCE VALUES FOR USE IN ROSR12 ROUTINE
1615 ! ----------------------------------------------------------------------
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
1622 ! ----------------------------------------------------------------------
1623 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
1624 ! ----------------------------------------------------------------------
1626 RHSTSin (K) = RHSTS (K)
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 ! ----------------------------------------------------------------------
1639 STCOUT (K) = STCIN (K) + CI (K)
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, &
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 ! ----------------------------------------------------------------------
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
1662 ! ----------------------------------------------------------------------
1665 INTEGER, INTENT(IN) :: ICE, NROOT,NSOIL,VEGTYP
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, &
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
1690 ! ----------------------------------------------------------------------
1691 ! INITIALIZE EVAP TERMS.
1692 ! ----------------------------------------------------------------------
1705 CALL EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
1707 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
1708 SMCREF,SHDFAC,CMCMAX, &
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, &
1715 RUNOFF1,RUNOFF2,RUNOFF3, &
1719 ! ----------------------------------------------------------------------
1720 ! CONVERT MODELED EVAPOTRANSPIRATION FROM M S-1 TO KG M-2 S-1.
1721 ! ----------------------------------------------------------------------
1725 ! ----------------------------------------------------------------------
1726 ! IF ETP < 0, ASSUME DEW FORMS (TRANSFORM ETP1 INTO DEW AND REINITIALIZE
1728 ! ----------------------------------------------------------------------
1732 ! ----------------------------------------------------------------------
1733 ! CONVERT PRCP FROM 'KG M-2 S-1' TO 'M S-1' AND ADD DEW AMOUNT.
1734 ! ----------------------------------------------------------------------
1737 CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
1738 SH2O,SLOPE,KDT,FRZFACT, &
1739 SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
1741 RUNOFF1,RUNOFF2,RUNOFF3, &
1745 ! ----------------------------------------------------------------------
1746 ! CONVERT MODELED EVAPOTRANSPIRATION FROM 'M S-1' TO 'KG M-2 S-1'.
1747 ! ----------------------------------------------------------------------
1748 ! ETA = ETA1 * 1000.0
1751 ! ----------------------------------------------------------------------
1752 ! BASED ON ETP AND E VALUES, DETERMINE BETA
1753 ! ----------------------------------------------------------------------
1755 IF ( ETP <= 0.0 ) THEN
1758 IF ( ETP < 0.0 ) THEN
1765 ! ----------------------------------------------------------------------
1766 ! CONVERT MODELED EVAPOTRANSPIRATION COMPONENTS 'M S-1' TO 'KG M-2 S-1'.
1767 ! ----------------------------------------------------------------------
1771 ET(K) = ET1(K)*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))
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
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
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
1854 ! EMISSI=EMISSI_S ! FOR SNOW
1855 ELCP1=ELCP*LSUBS/LSUBC
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 ! ----------------------------------------------------------------------
1872 IF (.NOT. SNOWNG) THEN
1873 IF (PRCP > 0.0) RR = RR + CPH2O * PRCP / RCH
1875 RR = RR + CPICE * PRCP / RCH
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
1885 FLX2 = - LSUBF * PRCP
1887 ! ----------------------------------------------------------------------
1888 ! FINISH PENMAN EQUATION CALCULATIONS.
1889 ! ----------------------------------------------------------------------
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, &
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)
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 ! ----------------------------------------------------------------------
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
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
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
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
1987 CHARACTER (LEN=4), INTENT(IN):: LLANDUSE, LSOIL
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
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
2002 REAL, INTENT(OUT) :: SLOPE,CZIL,SBETA,FXEXP, &
2003 CSOIL,SALP,FRZX,KDT,CFACTR, &
2005 REAL,DIMENSION(1:NSOIL),INTENT(IN) :: SLDPTH,ZSOIL
2006 REAL,DIMENSION(1:NSOIL),INTENT(OUT):: RTDIS
2007 REAL :: FRZFACT,FRZK,REFDK
2010 ! ----------------------------------------------------------------------
2012 IF (SOILTYP .gt. SLCATS) THEN
2013 CALL wrf_error_fatal ( 'Warning: too many input soil types' )
2015 IF (VEGTYP .gt. LUCATS) THEN
2016 CALL wrf_error_fatal ( 'Warning: too many input landuse types' )
2018 IF (SLOPETYP .gt. SLPCATS) THEN
2019 CALL wrf_error_fatal ( 'Warning: too many input slope types' )
2022 ! ----------------------------------------------------------------------
2023 ! SET-UP SOIL PARAMETERS
2024 ! ----------------------------------------------------------------------
2027 DKSAT = SATDK (SOILTYP)
2028 DWSAT = SATDW (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
2039 ! ----------------------------------------------------------------------
2046 REFKDT = REFKDT_DATA
2047 PTU = 0. ! (not used yet) to satisify intent(out)
2048 KDT = REFKDT * DKSAT / REFDK
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 ! ----------------------------------------------------------------------
2062 CMCMAX = CMCMAX_DATA
2063 CFACTR = CFACTR_DATA
2065 NROOT = NROTBL (VEGTYP)
2066 SNUP = SNUPTBL (VEGTYP)
2067 RSMIN = RSTBL (VEGTYP)
2068 RGL = RGLTBL (VEGTYP)
2070 LAI = LAITBL (VEGTYP)
2072 ALBBRD = ALBTBL(VEGTYP)
2073 Z0BRD = Z0TBL(VEGTYP)
2074 SHDFAC = SHDTBL(VEGTYP)
2077 IF (VEGTYP .eq. BARE) SHDFAC = 0.0
2078 IF (NROOT .gt. NSOIL) THEN
2079 WRITE (err_message,*) 'Error: too many root layers ', &
2081 CALL wrf_error_fatal ( err_message )
2082 ! ----------------------------------------------------------------------
2083 ! CALCULATE ROOT DISTRIBUTION. PRESENT VERSION ASSUMES UNIFORM
2084 ! DISTRIBUTION BASED ON SOIL LAYER DEPTHS.
2085 ! ----------------------------------------------------------------------
2088 RTDIS (I) = - SLDPTH (I)/ ZSOIL (NROOT)
2089 ! ----------------------------------------------------------------------
2090 ! SET-UP SLOPE PARAMETER
2091 ! ----------------------------------------------------------------------
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', &
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, &
2109 END SUBROUTINE REDPRM
2111 SUBROUTINE ROSR12 (P,A,B,C,D,DELTA,NSOIL)
2113 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2133 INTEGER, INTENT(IN) :: NSOIL
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 ! ----------------------------------------------------------------------
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)
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)&
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 ! ----------------------------------------------------------------------
2167 P (KK) = P (KK) * P (KK +1) + DELTA (KK)
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2187 INTEGER, INTENT(IN) :: ICE, NSOIL, VEGTYP
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 ! ----------------------------------------------------------------------
2206 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2215 ! ----------------------------------------------------------------------
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)
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, &
2248 & RUNOFF1,RUNOFF2,RUNOFF3, &
2252 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2263 INTEGER, INTENT(IN) :: NSOIL
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, &
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 ! ----------------------------------------------------------------------
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
2288 ! ----------------------------------------------------------------------
2289 RHSCT = SHDFAC * PRCP1- EC
2292 EXCESS = CMC + TRHSCT
2294 ! ----------------------------------------------------------------------
2295 ! PCPDRP IS THE COMBINED PRCP1 AND DRIP (FROM CMC) THAT GOES INTO THE
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
2305 SICE (I) = SMC (I) - SH2O (I)
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)
2342 SH2OA (K) = (SH2O (K) + SH2OFG (K)) * 0.5
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)
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)
2360 ! ----------------------------------------------------------------------
2361 END SUBROUTINE SMFLX
2362 ! ----------------------------------------------------------------------
2365 SUBROUTINE SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
2367 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2378 REAL, INTENT(IN) :: SNEQV,SNUP,SALP,SNOWH
2379 REAL, INTENT(OUT) :: SNCOVR
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))
2393 ! FORMULATION OF DICKINSON ET AL. 1986
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 ! ----------------------------------------------------------------------
2410 ! ----------------------------------------------------------------------
2411 ! CALCULATE SINK/SOURCE TERM OF THE TERMAL DIFFUSION EQUATION. (SH2O) IS
2412 ! AVAILABLE LIQUED WATER.
2413 ! ----------------------------------------------------------------------
2416 INTEGER, INTENT(IN) :: K,NSOIL
2418 REAL, INTENT(IN) :: BEXP, DT, PSISAT, QTOT, SMC, SMCMAX, &
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, &
2433 DZ = ZSOIL (K -1) - ZSOIL (K)
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
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
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
2491 ! ----------------------------------------------------------------------
2492 END SUBROUTINE SNKSRC
2493 ! ----------------------------------------------------------------------
2495 SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
2496 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
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,&
2507 ! ----------------------------------------------------------------------
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
2513 ! ----------------------------------------------------------------------
2516 INTEGER, INTENT(IN) :: ICE, NROOT, NSOIL,VEGTYP
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, &
2527 REAL, INTENT(OUT) :: DEW,DRIP,EC,EDIR, ETNS, ESNOW,ETT, &
2528 FLX1,FLX3, RUNOFF1,RUNOFF2,RUNOFF3, &
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, &
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, &
2546 ! ----------------------------------------------------------------------
2547 ! EXECUTABLE CODE BEGINS HERE:
2548 ! INITIALIZE EVAP TERMS.
2549 ! ----------------------------------------------------------------------
2551 ! ESNOW [KG M-2 S-1]
2552 ! ESDFLX [KG M-2 S-1] .le. ESNOW
2558 ! ----------------------------------------------------------------------
2564 ! EMISSI_S=0.95 ! For snow
2578 ! ----------------------------------------------------------------------
2579 ! CONVERT POTENTIAL EVAP (ETP) FROM KG M-2 S-1 TO ETP1 IN M S-1
2580 ! ----------------------------------------------------------------------
2581 PRCP1 = PRCPF *0.001
2583 ! ----------------------------------------------------------------------
2584 ! IF ETP<0 (DOWNWARD) THEN DEWFALL (=FROSTFALL IN THIS CASE).
2585 ! ----------------------------------------------------------------------
2587 IF (ETP <= 0.0) THEN
2588 IF(ETP == 0.) BETA = 0.0
2591 ETANRG = ETP*((1.-SNCOVR)*LSUBC + SNCOVR*LSUBS)
2594 IF (SNCOVR < 1.) THEN
2595 CALL EVAPO (ETNS1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
2597 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
2598 SMCREF,SHDFAC,CMCMAX, &
2600 EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS, &
2602 ! ----------------------------------------------------------------------------
2603 EDIR1 = EDIR1* (1. - SNCOVR)
2604 EC1 = EC1* (1. - SNCOVR)
2606 ET1 (K) = ET1 (K)* (1. - SNCOVR)
2608 ETT1 = ETT1*(1.-SNCOVR)
2609 ! ETNS1 = EDIR1+ EC1+ ETT1
2610 ETNS1 = ETNS1*(1.-SNCOVR)
2611 ! ----------------------------------------------------------------------------
2615 ET (K) = ET1 (K)*1000.
2619 ! ----------------------------------------------------------------------
2621 ! end IF (SNCOVR .lt. 1.)
2623 ! end IF (ICE .ne. 1)
2626 ESNOW1 = ESNOW*0.001
2628 ETANRG = ESNOW*LSUBS + ETNS*LSUBC
2629 ! end IF (ETP .le. 0.0)
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 ! ----------------------------------------------------------------------
2640 FLX1 = CPICE * PRCP * (T1- SFCTMP)
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
2650 ! ----------------------------------------------------------------------
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
2673 ! ----------------------------------------------------------------------
2674 ! SUB-FREEZING BLOCK
2675 ! ----------------------------------------------------------------------
2676 T12 = (SFCTMP + T12A + T12B) / DENOM
2677 IF (T12 <= TFREEZ) THEN
2679 SSOIL = DF1 * (T1- STC (1)) / DTOT
2680 ! ESD = MAX (0.0, ESD- ETP2)
2681 ESD = MAX(0.0, ESD-ESNOW2)
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 ! ----------------------------------------------------------------------
2702 T1 = TFREEZ * SNCOVR ** SNOEXP + T12 * (1.0- SNCOVR ** SNOEXP)
2705 ! ----------------------------------------------------------------------
2706 ! IF POTENTIAL EVAP (SUBLIMATION) GREATER THAN DEPTH OF SNOWPACK.
2708 ! SNOWPACK HAS SUBLIMATED AWAY, SET DEPTH TO ZERO.
2709 ! ----------------------------------------------------------------------
2710 SSOIL = DF1 * (T1- STC (1)) / DTOT
2711 IF (ESD-ESNOW2 <= ESDMIN) THEN
2715 ! ----------------------------------------------------------------------
2716 ! SUBLIMATION LESS THAN DEPTH OF SNOWPACK
2717 ! SNOWPACK (ESD) REDUCED BY ESNOW2 (DEPTH OF SUBLIMATED SNOW)
2718 ! ----------------------------------------------------------------------
2722 SEH = RCH * (T1- TH2)
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 ! ----------------------------------------------------------------------
2740 IF (ESD- SNOMLT >= ESDMIN) THEN
2742 ! ----------------------------------------------------------------------
2743 ! SNOWMELT EXCEEDS SNOW DEPTH
2744 ! ----------------------------------------------------------------------
2747 FLX3 = EX *1000.0* LSUBF
2751 ! ----------------------------------------------------------------------
2752 ! END OF 'ESD .LE. ETP2' IF-BLOCK
2753 ! ----------------------------------------------------------------------
2757 ! ----------------------------------------------------------------------
2758 ! END OF 'T12 .LE. TFREEZ' IF-BLOCK
2759 ! ----------------------------------------------------------------------
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
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 ! ----------------------------------------------------------------------
2772 CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
2773 SH2O,SLOPE,KDT,FRZFACT, &
2774 SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
2776 RUNOFF1,RUNOFF2,RUNOFF3, &
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2808 CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
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
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 ! ----------------------------------------------------------------------
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, &
2849 ! ----------------------------------------------------------------------
2850 ! CONVERSION INTO SIMULATION UNITS
2851 ! ----------------------------------------------------------------------
2852 SNOWHC = SNOWH *100.
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
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)
2898 ! PEXP = (1. + PEXP)*BFAC*ESDC/REAL(J+1)
2900 PEXP = (1. + PEXP)* BFAC * ESDCX / REAL (J +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
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
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
2942 SNOWHC = ESDC / SNDENS
2943 SNOWH = SNOWHC *0.01
2945 ! ----------------------------------------------------------------------
2946 END SUBROUTINE SNOWPACK
2947 ! ----------------------------------------------------------------------
2949 SUBROUTINE SNOWZ0 (SNCOVR,Z0, Z0BRD)
2951 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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
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 ! ----------------------------------------------------------------------
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
3005 DSNEW = 0.05+0.0017* (TEMPC +15.)**1.5
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)
3014 SNDENS = (SNOWHC * SNDENS + HNEWC * DSNEW)/ (SNOWHC + HNEWC)
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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, &
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
3071 ! ----------------------------------------------------------------------
3075 IF (SICE (KS) > SICEMAX) SICEMAX = SICE (KS)
3076 ! ----------------------------------------------------------------------
3077 ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF
3078 ! ----------------------------------------------------------------------
3083 ! ----------------------------------------------------------------------
3084 ! MODIFIED BY Q. DUAN, 5/16/94
3085 ! ----------------------------------------------------------------------
3086 ! IF (IOHINF == 1) THEN
3088 IF (PCPDRP /= 0.0) THEN
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)/ &
3103 ! ----------------------------------------------------------------------
3104 ! FROZEN GROUND VERSION:
3105 ! ----------------------------------------------------------------------
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) &
3113 ! ----------------------------------------------------------------------
3114 ! VAL = (1.-EXP(-KDT*SQRT(DT1)))
3115 ! IN BELOW, REMOVE THE SQRT IN ABOVE
3116 ! ----------------------------------------------------------------------
3118 VAL = (1. - EXP ( - KDT * DT1))
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
3129 IF (DICE > 1.E-2) THEN
3130 ACRT = CVFRZ * FRZX / DICE
3138 SUM = SUM + (ACRT ** ( CVFRZ - J)) / FLOAT (K)
3140 FCR = 1. - EXP ( - ACRT) * SUM
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
3152 CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
3154 INFMAX = MAX (INFMAX,WCND)
3156 INFMAX = MIN (INFMAX,PX)
3157 IF (PCPDRP > INFMAX) THEN
3158 RUNOFF1 = PCPDRP - INFMAX
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 ! ----------------------------------------------------------------------
3169 CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
3171 ! ----------------------------------------------------------------------
3172 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
3173 ! ----------------------------------------------------------------------
3174 DDZ = 1. / ( - .5 * ZSOIL (2) )
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 ! ----------------------------------------------------------------------
3183 DSMDZ = ( SH2O (1) - SH2O (2) ) / ( - .5 * ZSOIL (2) )
3184 RHSTT (1) = (WDF * DSMDZ + WCND- PDDUM + EDIR + ET (1))/ ZSOIL (1)
3186 ! ----------------------------------------------------------------------
3188 ! ----------------------------------------------------------------------
3189 SSTT = WDF * DSMDZ + WCND+ EDIR + ET (1)
3191 ! ----------------------------------------------------------------------
3192 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABV PROCESS
3193 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
3207 CALL WDFCND (WDF2,WCND2,MXSMC2,SMCMAX,BEXP,DKSAT,DWSAT, &
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)
3219 CI (K) = - WDF2 * DDZ2 / DENOM2
3222 ! ----------------------------------------------------------------------
3223 ! SLOPE OF BOTTOM LAYER IS INTRODUCED
3224 ! ----------------------------------------------------------------------
3226 ! ----------------------------------------------------------------------
3227 ! RETRIEVE THE SOIL WATER DIFFUSIVITY AND HYDRAULIC CONDUCTIVITY FOR
3229 ! ----------------------------------------------------------------------
3231 CALL WDFCND (WDF2,WCND2,SH2OA (NSOIL),SMCMAX,BEXP,DKSAT,DWSAT, &
3234 ! ----------------------------------------------------------------------
3235 ! CALC A PARTIAL PRODUCT FOR LATER USE IN CALC'NG RHSTT
3236 ! ----------------------------------------------------------------------
3238 ! ----------------------------------------------------------------------
3239 ! SET MATRIX COEF CI TO ZERO
3240 ! ----------------------------------------------------------------------
3243 ! ----------------------------------------------------------------------
3244 ! CALC RHSTT FOR THIS LAYER AFTER CALC'NG ITS NUMERATOR
3245 ! ----------------------------------------------------------------------
3247 NUMER = (WDF2 * DSMDZ2) + SLOPX * WCND2- (WDF * DSMDZ) &
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
3264 IF (K .ne. NSOIL) THEN
3271 ! ----------------------------------------------------------------------
3273 ! ----------------------------------------------------------------------
3275 SUBROUTINE SSTEP (SH2OOUT,SH2OIN,CMC,RHSTT,RHSCT,DT, &
3276 NSOIL,SMCMAX,CMCMAX,RUNOFF3,ZSOIL,SMC,SICE, &
3279 ! ----------------------------------------------------------------------
3281 ! ----------------------------------------------------------------------
3282 ! CALCULATE/UPDATE SOIL MOISTURE CONTENT VALUES AND CANOPY MOISTURE
3284 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
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
3310 ! ----------------------------------------------------------------------
3311 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
3312 ! ----------------------------------------------------------------------
3314 RHSTTin (K) = RHSTT (K)
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 ! ----------------------------------------------------------------------
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
3341 DDZ = - ZSOIL (K) + ZSOIL (KK11)
3343 WPLUS = (STOT - SMCMAX) * DDZ
3347 SMC (K) = MAX ( MIN (STOT,SMCMAX),0.02 )
3348 SH2OOUT (K) = MAX ( (SMC (K) - SICE (K)),0.0)
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
3368 ! ----------------------------------------------------------------------
3369 ! CALCULATE TEMPERATURE ON THE BOUNDARY OF THE LAYER BY INTERPOLATION OF
3370 ! THE MIDDLE LAYER TEMPERATURES
3371 ! ----------------------------------------------------------------------
3373 INTEGER, INTENT(IN) :: NSOIL
3375 REAL, INTENT(IN) :: TB, TU, ZBOT
3376 REAL, INTENT(OUT) :: TBND1
3377 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL
3379 REAL, PARAMETER :: T0 = 273.15
3381 ! ----------------------------------------------------------------------
3382 ! USE SURFACE TEMPERATURE ON THE TOP OF THE FIRST LAYER
3383 ! ----------------------------------------------------------------------
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)
3398 ! ----------------------------------------------------------------------
3399 ! LINEAR INTERPOLATION BETWEEN THE AVERAGE LAYER TEMPERATURES
3400 ! ----------------------------------------------------------------------
3402 TBND1 = TU + (TB - TU)* (ZUP - ZSOIL (K))/ (ZUP - ZB)
3403 ! ----------------------------------------------------------------------
3405 ! ----------------------------------------------------------------------
3408 SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O)
3410 ! ----------------------------------------------------------------------
3412 ! ----------------------------------------------------------------------
3413 ! CALCULATE THERMAL DIFFUSIVITY AND CONDUCTIVITY OF THE SOIL FOR A GIVEN
3415 ! ----------------------------------------------------------------------
3416 ! PETERS-LIDARD APPROACH (PETERS-LIDARD et al., 1998)
3417 ! June 2001 CHANGES: FROZEN SOIL CONDITION.
3418 ! ----------------------------------------------------------------------
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, &
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
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 ! ----------------------------------------------------------------------
3456 ! POROSITY(SOIL TYPE):
3459 ! PARAMETERS W/(M.K)
3460 SATRATIO = SMC / SMCMAX
3463 ! WATER CONDUCTIVITY:
3465 ! THERMAL CONDUCTIVITY OF "OTHER" SOIL COMPONENTS
3466 ! IF (QZ .LE. 0.2) THKO = 3.0
3468 ! QUARTZ' CONDUCTIVITY
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 ** &
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)
3488 IF ( (SH2O + 0.0005) < SMC ) THEN
3491 ! RANGE OF VALIDITY FOR THE KERSTEN NUMBER (AKE)
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
3507 ! THERMAL CONDUCTIVITY
3511 DF = AKE * (THKSAT - THKDRY) + THKDRY
3512 ! ----------------------------------------------------------------------
3513 END SUBROUTINE TDFCND
3514 ! ----------------------------------------------------------------------
3516 SUBROUTINE TMPAVG (TAVG,TUP,TM,TDN,ZSOIL,NSOIL,K)
3518 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
3543 ! ----------------------------------------------------------------------
3544 PARAMETER (T0 = 2.7315E2)
3548 DZ = ZSOIL (K -1) - ZSOIL (K)
3552 IF (TUP .lt. T0) THEN
3553 IF (TM .lt. T0) THEN
3554 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
3563 X0 = (T0- TM) * DZH / (TDN - TM)
3564 TAVG = 0.5 * (TUP * DZH + TM * (DZH + X0) + T0* ( &
3565 & 2.* DZH - X0)) / DZ
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) &
3576 ! ----------------------------------------------------------------------
3577 ! TUP < T0, TM .ge. T0, TDN .ge. T0
3578 ! ----------------------------------------------------------------------
3580 XUP = (T0- TUP) * DZH / (TM - TUP)
3581 TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP)) / DZ
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) &
3593 ! ----------------------------------------------------------------------
3594 ! TUP .ge. T0, TM < T0, TDN .ge. T0
3595 ! ----------------------------------------------------------------------
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 * &
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 ! ----------------------------------------------------------------------
3613 TAVG = (TUP + 2.0* TM + TDN) / 4.0
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, &
3625 ! ----------------------------------------------------------------------
3627 ! ----------------------------------------------------------------------
3628 ! CALCULATE TRANSPIRATION FOR THE VEG CLASS.
3629 ! ----------------------------------------------------------------------
3643 !.....REAL PART(NSOIL)
3656 ! ----------------------------------------------------------------------
3657 ! INITIALIZE PLANT TRANSP TO ZERO FOR ALL SOIL LAYERS.
3658 ! ----------------------------------------------------------------------
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
3668 ! ----------------------------------------------------------------------
3670 IF (CMC .ne. 0.0) THEN
3671 ETP1A = SHDFAC * PC * ETP1 * (1.0- (CMC / CMCMAX) ** CFACTR)
3673 ETP1A = SHDFAC * PC * ETP1
3677 GX (I) = ( SMC (I) - SMCWLT ) / ( SMCREF - SMCWLT )
3678 GX (I) = MAX ( MIN ( GX (I), 1. ), 0. )
3685 RTX = RTDIS (I) + GX (I) - SGX
3686 GX (I) = GX (I) * MAX ( RTX, 0. )
3687 DENOM = DENOM + GX (I)
3690 IF (DENOM .le. 0.0) DENOM = 1.
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 ! ----------------------------------------------------------------------
3710 ! GX = ( SMC(K) - SMCWLT ) / ( SMCREF - SMCWLT )
3711 ! GX = MAX ( MIN ( GX, 1. ), 0. )
3712 ! TEST CANOPY RESISTANCE
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)
3723 ! ----------------------------------------------------------------------
3724 END SUBROUTINE TRANSP
3725 ! ----------------------------------------------------------------------
3727 SUBROUTINE WDFCND (WDF,WCND,SMC,SMCMAX,BEXP,DKSAT,DWSAT, &
3730 ! ----------------------------------------------------------------------
3732 ! ----------------------------------------------------------------------
3733 ! CALCULATE SOIL WATER DIFFUSIVITY AND SOIL HYDRAULIC CONDUCTIVITY.
3734 ! ----------------------------------------------------------------------
3748 ! ----------------------------------------------------------------------
3749 ! CALC THE RATIO OF THE ACTUAL TO THE MAX PSBL SOIL H2O CONTENT
3750 ! ----------------------------------------------------------------------
3752 FACTR1 = 0.2 / SMCMAX
3754 ! ----------------------------------------------------------------------
3755 ! PREP AN EXPNTL COEF AND CALC THE SOIL WATER DIFFUSIVITY
3756 ! ----------------------------------------------------------------------
3757 FACTR2 = SMC / SMCMAX
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
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 ! ----------------------------------------------------------------------
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 ! ----------------------------------------------------------------------
3797 REAL WWST, WWST2, G, VKRM, EXCM, BETA, BTG, ELFC, WOLD, WNEW
3798 REAL PIHF, EPSU2, EPSUST, EPSIT, EPSA, ZTMIN, ZTMAX, HPBL, &
3800 REAL RIC, RRIC, FHNEU, RFC, RFAC, ZZ, PSLMU, PSLMS, PSLHU, &
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
3808 REAL XLU, XLT, XU, XT, PSMZ, SIMM, PSHZ, SIMH, USTARK, RLMN, &
3811 INTEGER ITRMX, ILECH, ITR
3813 & (WWST = 1.2,WWST2 = WWST * WWST,G = 9.8,VKRM = 0.40, &
3815 & ,BETA = 1./270.,BTG = BETA * G,ELFC = VKRM * BTG &
3816 & ,WOLD =.15,WNEW = 1. - WOLD,ITRMX = 05, &
3817 & PIHF = 3.14159265/2.)
3819 & (EPSU2 = 1.E-4,EPSUST = 0.07,EPSIT = 1.E-4,EPSA = 1.E-8 &
3820 & ,ZTMIN = -5.,ZTMAX = 1.,HPBL = 1000.0 &
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) &
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 ! ----------------------------------------------------------------------
3851 ! ----------------------------------------------------------------------
3852 ! ZTFC: RATIO OF ZOH/ZOM LESS OR EQUAL THAN 1
3854 ! CZIL: CONSTANT C IN Zilitinkevich, S. S.1995,:NOTE ABOUT ZT
3855 ! ----------------------------------------------------------------------
3858 ! ----------------------------------------------------------------------
3859 ZILFC = - CZIL * VKRM * SQVISC
3860 ! C.......ZT=Z0*ZTFC
3866 ! ----------------------------------------------------------------------
3867 ! BELJARS CORRECTION OF USTAR
3868 ! ----------------------------------------------------------------------
3869 DU2 = MAX (SFCSPD * SFCSPD,EPSU2)
3870 !cc If statements to avoid TANGENT LINEAR problems near zero
3872 IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
3873 WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
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
3886 ! PRINT*,'ZSLT=',ZSLT
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 ! ----------------------------------------------------------------------
3905 ZETALT = MAX (ZSLT * RLMO,ZTMIN)
3906 RLMO = ZETALT / ZSLT
3907 ZETALU = ZSLU * 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)
3927 ! PRINT*,'------------------------'
3929 SIMM = PSPMU (XLU) - PSMZ + RLOGU
3931 SIMH = PSPHU (XLT) - PSHZ + RLOGT
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
3945 ! ----------------------------------------------------------------------
3947 ! ----------------------------------------------------------------------
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
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
3973 ! ----------------------------------------------------------------------
3974 ! BELJAARS CORRECTION FOR USTAR
3975 ! ----------------------------------------------------------------------
3978 ! ----------------------------------------------------------------------
3979 ! ZILITINKEVITCH FIX FOR ZT
3980 ! ----------------------------------------------------------------------
3981 USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
3983 ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
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.)
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 !-----------------------------------------------------------------------
4006 ! PRINT*,'----------------------------'
4007 ! PRINT*,'SFCDIF OUTPUT ! ! ! ! ! ! ! ! ! ! ! !'
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*,'----------------------------'
4020 ! ----------------------------------------------------------------------
4021 END SUBROUTINE SFCDIF_off
4022 ! ----------------------------------------------------------------------
4024 END MODULE module_sf_noahlsm