1 MODULE module_sf_noahlsm
2 USE module_model_constants
4 ! REAL, PARAMETER :: CP = 1004.5
5 REAL, PARAMETER :: RD = 287.04, SIGMA = 5.67E-8, &
6 CPH2O = 4.218E+3,CPICE = 2.106E+3, &
10 ! VEGETATION PARAMETERS
11 INTEGER :: LUCATS , BARE
13 integer, PARAMETER :: NLUS=50
14 CHARACTER(LEN=256) LUTYPE
15 INTEGER, DIMENSION(1:NLUS) :: NROTBL
16 real, dimension(1:NLUS) :: SNUPTBL, RSTBL, RGLTBL, HSTBL, &
18 EMISSMINTBL, EMISSMAXTBL, &
19 LAIMINTBL, LAIMAXTBL, &
21 ALBEDOMINTBL, ALBEDOMAXTBL
22 REAL :: TOPT_DATA,CMCMAX_DATA,CFACTR_DATA,RSMAX_DATA
26 INTEGER, PARAMETER :: NSLTYPE=30
27 CHARACTER(LEN=256) SLTYPE
28 REAL, DIMENSION (1:NSLTYPE) :: BB,DRYSMC,F11, &
29 MAXSMC, REFSMC,SATPSI,SATDK,SATDW, WLTSMC,QTZ
31 ! LSM GENERAL PARAMETERS
33 INTEGER, PARAMETER :: NSLOPE=30
34 REAL, DIMENSION (1:NSLOPE) :: SLOPE_DATA
35 REAL :: SBETA_DATA,FXEXP_DATA,CSOIL_DATA,SALP_DATA,REFDK_DATA, &
36 REFKDT_DATA,FRZK_DATA,ZBOT_DATA, SMLOW_DATA,SMHIGH_DATA, &
40 CHARACTER*256 :: err_message
46 SUBROUTINE SFLX (FFROZP,ICE,ISURBAN,DT,ZLVL,NSOIL,SLDPTH, & !C
48 LLANDUSE, LSOIL, & !CL
49 LWDN,SOLDN,SOLNET,SFCPRS,PRCP,SFCTMP,Q2,SFCSPD, & !F
50 COSZ,PRCPRAIN, SOLARDIRECT, & !F
51 TH2,Q2SAT,DQSDT2, & !I
52 VEGTYP,SOILTYP,SLOPETYP,SHDFAC,SHDMIN,SHDMAX, & !I
53 ALB, SNOALB,TBOT, Z0BRD, Z0, EMISSI, EMBRD, & !S
54 CMC,T1,STC,SMC,SH2O,SNOWH,SNEQV,ALBEDO,CH,CM, & !H
55 ! ----------------------------------------------------------------------
56 ! OUTPUTS, DIAGNOSTICS, PARAMETERS BELOW GENERALLY NOT NECESSARY WHEN
57 ! COUPLED WITH E.G. A NWP MODEL (SUCH AS THE NOAA/NWS/NCEP MESOSCALE ETA
58 ! MODEL). OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
59 ! ----------------------------------------------------------------------
60 ETA,SHEAT, ETA_KINEMATIC,FDOWN, & !O
61 EC,EDIR,ET,ETT,ESNOW,DRIP,DEW, & !O
65 RUNOFF1,RUNOFF2,RUNOFF3, & !O
66 RC,PC,RSMIN,XLAI,RCS,RCT,RCQ,RCSOIL, & !O
71 SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT) !P
72 ! ----------------------------------------------------------------------
73 ! SUBROUTINE SFLX - UNIFIED NOAHLSM VERSION 1.0 JULY 2007
74 ! ----------------------------------------------------------------------
75 ! SUB-DRIVER FOR "Noah LSM" FAMILY OF PHYSICS SUBROUTINES FOR A
76 ! SOIL/VEG/SNOWPACK LAND-SURFACE MODEL TO UPDATE SOIL MOISTURE, SOIL
77 ! ICE, SOIL TEMPERATURE, SKIN TEMPERATURE, SNOWPACK WATER CONTENT,
78 ! SNOWDEPTH, AND ALL TERMS OF THE SURFACE ENERGY BALANCE AND SURFACE
79 ! WATER BALANCE (EXCLUDING INPUT ATMOSPHERIC FORCINGS OF DOWNWARD
80 ! RADIATION AND PRECIP)
81 ! ----------------------------------------------------------------------
82 ! SFLX ARGUMENT LIST KEY:
83 ! ----------------------------------------------------------------------
84 ! C CONFIGURATION INFORMATION
86 ! CL 4-string character bearing logical meaning
88 ! I OTHER (INPUT) FORCING DATA
89 ! S SURFACE CHARACTERISTICS
90 ! H HISTORY (STATE) VARIABLES
94 ! Msic Miscellaneous terms passed from gridded driver
95 ! ----------------------------------------------------------------------
96 ! 1. CONFIGURATION INFORMATION (C):
97 ! ----------------------------------------------------------------------
98 ! ICE SEA-ICE FLAG (=1: SEA-ICE, =0: LAND (NO ICE), --1 LAND-ICE).
99 ! DT TIMESTEP (SEC) (DT SHOULD NOT EXCEED 3600 SECS, RECOMMEND
101 ! ZLVL HEIGHT (M) ABOVE GROUND OF ATMOSPHERIC FORCING VARIABLES
102 ! NSOIL NUMBER OF SOIL LAYERS (AT LEAST 2, AND NOT GREATER THAN
103 ! PARAMETER NSOLD SET BELOW)
104 ! SLDPTH THE THICKNESS OF EACH SOIL LAYER (M)
105 ! ----------------------------------------------------------------------
107 ! ----------------------------------------------------------------------
108 ! LCH Exchange coefficient (Ch) calculation flag (false: using
109 ! ch-routine SFCDIF; true: Ch is brought in)
110 ! LOCAL Flag for local-site simulation (where there is no
111 ! maps for albedo, veg fraction, and roughness
112 ! true: all LSM parameters (inluding albedo, veg fraction and
113 ! roughness length) will be defined by three tables
114 ! LLANDUSE (=USGS, using USGS landuse classification)
115 ! LSOIL (=STAS, using FAO/STATSGO soil texture classification)
116 ! ----------------------------------------------------------------------
117 ! 3. FORCING DATA (F):
118 ! ----------------------------------------------------------------------
119 ! LWDN LW DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET LONGWAVE)
120 ! SOLDN SOLAR DOWNWARD RADIATION (W M-2; POSITIVE, NOT NET SOLAR)
121 ! SOLNET NET DOWNWARD SOLAR RADIATION ((W M-2; POSITIVE)
122 ! SFCPRS PRESSURE AT HEIGHT ZLVL ABOVE GROUND (PASCALS)
123 ! PRCP PRECIP RATE (KG M-2 S-1) (NOTE, THIS IS A RATE)
124 ! SFCTMP AIR TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
125 ! TH2 AIR POTENTIAL TEMPERATURE (K) AT HEIGHT ZLVL ABOVE GROUND
126 ! Q2 MIXING RATIO AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
127 ! COSZ Solar zenith angle (not used for now)
128 ! PRCPRAIN Liquid-precipitation rate (KG M-2 S-1) (not used)
129 ! SOLARDIRECT Direct component of downward solar radiation (W M-2) (not used)
130 ! FFROZP FRACTION OF FROZEN PRECIPITATION
131 ! ----------------------------------------------------------------------
132 ! 4. OTHER FORCING (INPUT) DATA (I):
133 ! ----------------------------------------------------------------------
134 ! SFCSPD WIND SPEED (M S-1) AT HEIGHT ZLVL ABOVE GROUND
135 ! Q2SAT SAT SPECIFIC HUMIDITY AT HEIGHT ZLVL ABOVE GROUND (KG KG-1)
136 ! DQSDT2 SLOPE OF SAT SPECIFIC HUMIDITY CURVE AT T=SFCTMP
138 ! ----------------------------------------------------------------------
139 ! 5. CANOPY/SOIL CHARACTERISTICS (S):
140 ! ----------------------------------------------------------------------
141 ! VEGTYP VEGETATION TYPE (INTEGER INDEX)
142 ! SOILTYP SOIL TYPE (INTEGER INDEX)
143 ! SLOPETYP CLASS OF SFC SLOPE (INTEGER INDEX)
144 ! SHDFAC AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
145 ! (FRACTION= 0.0-1.0)
146 ! SHDMIN MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
147 ! (FRACTION= 0.0-1.0) <= SHDFAC
148 ! PTU PHOTO THERMAL UNIT (PLANT PHENOLOGY FOR ANNUALS/CROPS)
149 ! (NOT YET USED, BUT PASSED TO REDPRM FOR FUTURE USE IN
151 ! ALB BACKROUND SNOW-FREE SURFACE ALBEDO (FRACTION), FOR JULIAN
152 ! DAY OF YEAR (USUALLY FROM TEMPORAL INTERPOLATION OF
153 ! MONTHLY MEAN VALUES' CALLING PROG MAY OR MAY NOT
154 ! INCLUDE DIURNAL SUN ANGLE EFFECT)
155 ! SNOALB UPPER BOUND ON MAXIMUM ALBEDO OVER DEEP SNOW (E.G. FROM
156 ! ROBINSON AND KUKLA, 1985, J. CLIM. & APPL. METEOR.)
157 ! TBOT BOTTOM SOIL TEMPERATURE (LOCAL YEARLY-MEAN SFC AIR
159 ! Z0BRD Background fixed roughness length (M)
160 ! Z0 Time varying roughness length (M) as function of snow depth
162 ! EMBRD Background surface emissivity (between 0 and 1)
163 ! EMISSI Surface emissivity (between 0 and 1)
164 ! ----------------------------------------------------------------------
165 ! 6. HISTORY (STATE) VARIABLES (H):
166 ! ----------------------------------------------------------------------
167 ! CMC CANOPY MOISTURE CONTENT (M)
168 ! T1 GROUND/CANOPY/SNOWPACK) EFFECTIVE SKIN TEMPERATURE (K)
169 ! STC(NSOIL) SOIL TEMP (K)
170 ! SMC(NSOIL) TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
171 ! SH2O(NSOIL) UNFROZEN SOIL MOISTURE CONTENT (VOLUMETRIC FRACTION)
172 ! NOTE: FROZEN SOIL MOISTURE = SMC - SH2O
173 ! SNOWH ACTUAL SNOW DEPTH (M)
174 ! SNEQV LIQUID WATER-EQUIVALENT SNOW DEPTH (M)
175 ! NOTE: SNOW DENSITY = SNEQV/SNOWH
176 ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT (UNITLESS FRACTION)
177 ! =SNOW-FREE ALBEDO (ALB) WHEN SNEQV=0, OR
178 ! =FCT(MSNOALB,ALB,VEGTYP,SHDFAC,SHDMIN) WHEN SNEQV>0
179 ! CH SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
180 ! (M S-1); NOTE: CH IS TECHNICALLY A CONDUCTANCE SINCE
181 ! IT HAS BEEN MULTIPLIED BY WIND SPEED.
182 ! CM SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM (M S-1); NOTE:
183 ! CM IS TECHNICALLY A CONDUCTANCE SINCE IT HAS BEEN
184 ! MULTIPLIED BY WIND SPEED.
185 ! ----------------------------------------------------------------------
187 ! ----------------------------------------------------------------------
188 ! OUTPUT VARIABLES NECESSARY FOR A COUPLED NUMERICAL WEATHER PREDICTION
189 ! MODEL, E.G. NOAA/NWS/NCEP MESOSCALE ETA MODEL. FOR THIS APPLICATION,
190 ! THE REMAINING OUTPUT/DIAGNOSTIC/PARAMETER BLOCKS BELOW ARE NOT
191 ! NECESSARY. OTHER APPLICATIONS MAY REQUIRE DIFFERENT OUTPUT VARIABLES.
192 ! ETA ACTUAL LATENT HEAT FLUX (W m-2: NEGATIVE, IF UP FROM
194 ! ETA_KINEMATIC atctual latent heat flux in Kg m-2 s-1
195 ! SHEAT SENSIBLE HEAT FLUX (W M-2: NEGATIVE, IF UPWARD FROM
197 ! FDOWN Radiation forcing at the surface (W m-2) = SOLDN*(1-alb)+LWDN
198 ! ----------------------------------------------------------------------
199 ! EC CANOPY WATER EVAPORATION (W m-2)
200 ! EDIR DIRECT SOIL EVAPORATION (W m-2)
201 ! ET(NSOIL) PLANT TRANSPIRATION FROM A PARTICULAR ROOT (SOIL) LAYER
203 ! ETT TOTAL PLANT TRANSPIRATION (W m-2)
204 ! ESNOW SUBLIMATION FROM (OR DEPOSITION TO IF <0) SNOWPACK
206 ! DRIP THROUGH-FALL OF PRECIP AND/OR DEW IN EXCESS OF CANOPY
207 ! WATER-HOLDING CAPACITY (M)
208 ! DEW DEWFALL (OR FROSTFALL FOR T<273.15) (M)
209 ! ----------------------------------------------------------------------
210 ! BETA RATIO OF ACTUAL/POTENTIAL EVAP (DIMENSIONLESS)
211 ! ETP POTENTIAL EVAPORATION (W m-2)
212 ! SSOIL SOIL HEAT FLUX (W M-2: NEGATIVE IF DOWNWARD FROM SURFACE)
213 ! ----------------------------------------------------------------------
214 ! FLX1 PRECIP-SNOW SFC (W M-2)
215 ! FLX2 FREEZING RAIN LATENT HEAT FLUX (W M-2)
216 ! FLX3 PHASE-CHANGE HEAT FLUX FROM SNOWMELT (W M-2)
217 ! ----------------------------------------------------------------------
218 ! SNOMLT SNOW MELT (M) (WATER EQUIVALENT)
219 ! SNCOVR FRACTIONAL SNOW COVER (UNITLESS FRACTION, 0-1)
220 ! ----------------------------------------------------------------------
221 ! RUNOFF1 SURFACE RUNOFF (M S-1), NOT INFILTRATING THE SURFACE
222 ! RUNOFF2 SUBSURFACE RUNOFF (M S-1), DRAINAGE OUT BOTTOM OF LAST
223 ! SOIL LAYER (BASEFLOW)
224 ! RUNOFF3 NUMERICAL TRUNCTATION IN EXCESS OF POROSITY (SMCMAX)
225 ! FOR A GIVEN SOIL LAYER AT THE END OF A TIME STEP (M S-1).
226 ! Note: the above RUNOFF2 is actually the sum of RUNOFF2 and RUNOFF3
227 ! ----------------------------------------------------------------------
228 ! RC CANOPY RESISTANCE (S M-1)
229 ! PC PLANT COEFFICIENT (UNITLESS FRACTION, 0-1) WHERE PC*ETP
231 ! XLAI LEAF AREA INDEX (DIMENSIONLESS)
232 ! RSMIN MINIMUM CANOPY RESISTANCE (S M-1)
233 ! RCS INCOMING SOLAR RC FACTOR (DIMENSIONLESS)
234 ! RCT AIR TEMPERATURE RC FACTOR (DIMENSIONLESS)
235 ! RCQ ATMOS VAPOR PRESSURE DEFICIT RC FACTOR (DIMENSIONLESS)
236 ! RCSOIL SOIL MOISTURE RC FACTOR (DIMENSIONLESS)
237 ! ----------------------------------------------------------------------
238 ! 8. DIAGNOSTIC OUTPUT (D):
239 ! ----------------------------------------------------------------------
240 ! SOILW AVAILABLE SOIL MOISTURE IN ROOT ZONE (UNITLESS FRACTION
241 ! BETWEEN SMCWLT AND SMCMAX)
242 ! SOILM TOTAL SOIL COLUMN MOISTURE CONTENT (FROZEN+UNFROZEN) (M)
243 ! Q1 Effective mixing ratio at surface (kg kg-1), used for
244 ! diagnosing the mixing ratio at 2 meter for coupled model
245 ! Documentation for SNOTIME1 and SNOABL2 ?????
246 ! What categories of arguments do these variables fall into ????
247 ! Documentation for RIBB ?????
248 ! What category of argument does RIBB fall into ?????
249 ! ----------------------------------------------------------------------
251 ! ----------------------------------------------------------------------
252 ! SMCWLT WILTING POINT (VOLUMETRIC)
253 ! SMCDRY DRY SOIL MOISTURE THRESHOLD WHERE DIRECT EVAP FRM TOP
254 ! LAYER ENDS (VOLUMETRIC)
255 ! SMCREF SOIL MOISTURE THRESHOLD WHERE TRANSPIRATION BEGINS TO
256 ! STRESS (VOLUMETRIC)
257 ! SMCMAX POROSITY, I.E. SATURATED VALUE OF SOIL MOISTURE
259 ! NROOT NUMBER OF ROOT LAYERS, A FUNCTION OF VEG TYPE, DETERMINED
260 ! IN SUBROUTINE REDPRM.
261 ! ----------------------------------------------------------------------
265 ! ----------------------------------------------------------------------
267 ! DECLARATIONS - LOGICAL AND CHARACTERS
268 ! ----------------------------------------------------------------------
269 LOGICAL, INTENT(IN):: LOCAL
270 LOGICAL :: FRZGRA, SNOWNG
271 CHARACTER (LEN=256), INTENT(IN):: LLANDUSE, LSOIL
273 ! ----------------------------------------------------------------------
274 ! 1. CONFIGURATION INFORMATION (C):
275 ! ----------------------------------------------------------------------
276 INTEGER,INTENT(IN) :: ICE,NSOIL,SLOPETYP,SOILTYP,VEGTYP
277 INTEGER, INTENT(IN) :: ISURBAN
278 INTEGER,INTENT(OUT):: NROOT
281 ! ----------------------------------------------------------------------
283 ! ----------------------------------------------------------------------
284 LOGICAL, INTENT(IN) :: RDLAI2D
285 LOGICAL, INTENT(IN) :: USEMONALB
287 REAL, INTENT(IN) :: SHDMIN,SHDMAX,DT,DQSDT2,LWDN,PRCP,PRCPRAIN, &
288 Q2,Q2SAT,SFCPRS,SFCSPD,SFCTMP, SNOALB, &
289 SOLDN,SOLNET,TBOT,TH2,ZLVL, &
291 REAL, INTENT(OUT) :: EMBRD
292 REAL, INTENT(OUT) :: ALBEDO
293 REAL, INTENT(INOUT):: COSZ, SOLARDIRECT,CH,CM, &
294 CMC,SNEQV,SNCOVR,SNOWH,T1,XLAI,SHDFAC,Z0BRD, &
296 REAL, INTENT(INOUT):: SNOTIME1
297 REAL, INTENT(INOUT):: RIBB
298 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SLDPTH
299 REAL, DIMENSION(1:NSOIL), INTENT(OUT):: ET
300 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O, SMC, STC
301 REAL,DIMENSION(1:NSOIL):: RTDIS, ZSOIL
303 REAL,INTENT(OUT) :: ETA_KINEMATIC,BETA,DEW,DRIP,EC,EDIR,ESNOW,ETA, &
304 ETP,FLX1,FLX2,FLX3,SHEAT,PC,RUNOFF1,RUNOFF2, &
305 RUNOFF3,RC,RSMIN,RCQ,RCS,RCSOIL,RCT,SSOIL, &
306 SMCDRY,SMCMAX,SMCREF,SMCWLT,SNOMLT, SOILM, &
308 REAL :: BEXP,CFACTR,CMCMAX,CSOIL,CZIL,DF1,DF1H,DF1A,DKSAT,DWSAT, &
309 DSOIL,DTOT,ETT,FRCSNO,FRCSOI,EPSCA,F1,FXEXP,FRZX,HS, &
310 KDT,LVH2O,PRCP1,PSISAT,QUARTZ,R,RCH,REFKDT,RR,RGL, &
312 RSNOW,SNDENS,SNCOND,SBETA,SN_NEW,SLOPE,SNUP,SALP,SOILWM, &
313 SOILWW,T1V,T24,T2V,TH2V,TOPT,TFREEZ,TSNOW,ZBOT,Z0,PRCPF, &
316 REAL :: INTERP_FRACTION
317 REAL :: LAIMIN, LAIMAX
318 REAL :: ALBEDOMIN, ALBEDOMAX
319 REAL :: EMISSMIN, EMISSMAX
322 ! ----------------------------------------------------------------------
323 ! DECLARATIONS - PARAMETERS
324 ! ----------------------------------------------------------------------
325 PARAMETER (TFREEZ = 273.15)
326 PARAMETER (LVH2O = 2.501E+6)
327 PARAMETER (LSUBS = 2.83E+6)
328 PARAMETER (R = 287.04)
329 ! ----------------------------------------------------------------------
331 ! ----------------------------------------------------------------------
337 ! ----------------------------------------------------------------------
338 ! THE VARIABLE "ICE" IS A FLAG DENOTING SEA-ICE / LAND-ICE / ICE-FREE LAND
339 ! SEA-ICE CASE, ICE = 1
340 ! NON-GLACIAL LAND, ICE = 0
341 ! GLACIAL-ICE LAND, ICE = -1
342 IF (ICE /= 0) SHDFAC = 0.0
343 ! ----------------------------------------------------------------------
344 ! SEA-ICE LAYERS ARE EQUAL THICKNESS AND SUM TO 3 METERS
345 ! ----------------------------------------------------------------------
348 ZSOIL (KZ) = -3.* FLOAT (KZ)/ FLOAT (NSOIL)
351 ! ----------------------------------------------------------------------
352 ! CALCULATE DEPTH (NEGATIVE) BELOW GROUND FROM TOP SKIN SFC TO BOTTOM OF
353 ! EACH SOIL LAYER. NOTE: SIGN OF ZSOIL IS NEGATIVE (DENOTING BELOW
355 ! ----------------------------------------------------------------------
357 ZSOIL (1) = - SLDPTH (1)
359 ZSOIL (KZ) = - SLDPTH (KZ) + ZSOIL (KZ -1)
362 ! ----------------------------------------------------------------------
363 ! NEXT IS CRUCIAL CALL TO SET THE LAND-SURFACE PARAMETERS, INCLUDING
364 ! SOIL-TYPE AND VEG-TYPE DEPENDENT PARAMETERS.
365 ! ----------------------------------------------------------------------
366 CALL REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX,TOPT, &
367 REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX, &
368 PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT, &
369 SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP, &
370 RTDIS,SLDPTH,ZSOIL,NROOT,NSOIL,CZIL, &
371 LAIMIN, LAIMAX, EMISSMIN, EMISSMAX, ALBEDOMIN, &
372 ALBEDOMAX, Z0MIN, Z0MAX, CSOIL, PTU, LLANDUSE, &
376 IF(VEGTYP==ISURBAN)THEN
385 IF ( SHDFAC >= SHDMAX ) THEN
387 IF (.NOT. RDLAI2D) THEN
390 IF (.NOT. USEMONALB) THEN
394 ELSE IF ( SHDFAC <= SHDMIN ) THEN
396 IF(.NOT. RDLAI2D) THEN
399 IF(.NOT. USEMONALB) then
405 IF ( SHDMAX > SHDMIN ) THEN
407 INTERP_FRACTION = ( SHDFAC - SHDMIN ) / ( SHDMAX - SHDMIN )
408 ! Bound INTERP_FRACTION between 0 and 1
409 INTERP_FRACTION = MIN ( INTERP_FRACTION, 1.0 )
410 INTERP_FRACTION = MAX ( INTERP_FRACTION, 0.0 )
411 ! Scale Emissivity and LAI between EMISSMIN and EMISSMAX by INTERP_FRACTION
412 EMBRD = ( ( 1.0 - INTERP_FRACTION ) * EMISSMIN ) + ( INTERP_FRACTION * EMISSMAX )
413 IF (.NOT. RDLAI2D) THEN
414 XLAI = ( ( 1.0 - INTERP_FRACTION ) * LAIMIN ) + ( INTERP_FRACTION * LAIMAX )
416 if (.not. USEMONALB) then
417 ALB = ( ( 1.0 - INTERP_FRACTION ) * ALBEDOMAX ) + ( INTERP_FRACTION * ALBEDOMIN )
419 Z0BRD = ( ( 1.0 - INTERP_FRACTION ) * Z0MIN ) + ( INTERP_FRACTION * Z0MAX )
423 EMBRD = 0.5 * EMISSMIN + 0.5 * EMISSMAX
424 IF (.NOT. RDLAI2D) THEN
425 XLAI = 0.5 * LAIMIN + 0.5 * LAIMAX
427 if (.not. USEMONALB) then
428 ALB = 0.5 * ALBEDOMIN + 0.5 * ALBEDOMAX
430 Z0BRD = 0.5 * Z0MIN + 0.5 * Z0MAX
435 ! ----------------------------------------------------------------------
436 ! INITIALIZE PRECIPITATION LOGICALS.
437 ! ----------------------------------------------------------------------
441 ! ----------------------------------------------------------------------
442 ! OVER SEA-ICE OR GLACIAL-ICE, IF S.W.E. (SNEQV) BELOW THRESHOLD LOWER
443 ! BOUND (0.01 M FOR SEA-ICE, 0.10 M FOR GLACIAL-ICE), THEN SET AT LOWER
445 ! ----------------------------------------------------------------------
446 ! IF SEA-ICE CASE, ASSIGN DEFAULT WATER-EQUIV SNOW ON TOP
447 ! ----------------------------------------------------------------------
450 IF ( SNEQV < 0.01 ) THEN
454 ELSE IF ( ICE == -1 ) THEN
456 IF ( SNEQV < 0.10 ) THEN
461 ! ----------------------------------------------------------------------
462 ! FOR SEA-ICE AND GLACIAL-ICE CASES, SET SMC AND SH20 VALUES = 1.0
463 ! ----------------------------------------------------------------------
470 ! ----------------------------------------------------------------------
471 ! IF INPUT SNOWPACK IS NONZERO, THEN COMPUTE SNOW DENSITY "SNDENS" AND
472 ! SNOW THERMAL CONDUCTIVITY "SNCOND" (NOTE THAT CSNOW IS A FUNCTION
474 ! ----------------------------------------------------------------------
475 IF ( SNEQV <= 1.E-7 ) THEN ! safer IF kmh (2008/03/25)
481 SNDENS = SNEQV / SNOWH
482 IF(SNDENS > 1.0) THEN
483 CALL wrf_error_fatal ( 'Physical snow depth is less than snow water equiv.' )
485 CALL CSNOW (SNCOND,SNDENS)
487 ! ----------------------------------------------------------------------
488 ! DETERMINE IF IT'S PRECIPITATING AND WHAT KIND OF PRECIP IT IS.
489 ! IF IT'S PRCPING AND THE AIR TEMP IS COLDER THAN 0 C, IT'S SNOWING!
490 ! IF IT'S PRCPING AND THE AIR TEMP IS WARMER THAN 0 C, BUT THE GRND
491 ! TEMP IS COLDER THAN 0 C, FREEZING RAIN IS PRESUMED TO BE FALLING.
492 ! ----------------------------------------------------------------------
494 ! snow defined when fraction of frozen precip (FFROZP) > 0.5,
495 ! passed in from model microphysics.
496 IF (FFROZP .GT. 0.5) THEN
499 IF (T1 <= TFREEZ) FRZGRA = .TRUE.
502 ! ----------------------------------------------------------------------
503 ! IF EITHER PRCP FLAG IS SET, DETERMINE NEW SNOWFALL (CONVERTING PRCP
504 ! RATE FROM KG M-2 S-1 TO A LIQUID EQUIV SNOW DEPTH IN METERS) AND ADD
505 ! IT TO THE EXISTING SNOWPACK.
506 ! NOTE THAT SINCE ALL PRECIP IS ADDED TO SNOWPACK, NO PRECIP INFILTRATES
507 ! INTO THE SOIL SO THAT PRCP1 IS SET TO ZERO.
508 ! ----------------------------------------------------------------------
509 IF ( (SNOWNG) .OR. (FRZGRA) ) THEN
510 SN_NEW = PRCP * DT * 0.001
511 SNEQV = SNEQV + SN_NEW
514 ! ----------------------------------------------------------------------
515 ! UPDATE SNOW DENSITY BASED ON NEW SNOWFALL, USING OLD AND NEW SNOW.
516 ! UPDATE SNOW THERMAL CONDUCTIVITY
517 ! ----------------------------------------------------------------------
518 CALL SNOW_NEW (SFCTMP,SN_NEW,SNOWH,SNDENS)
520 ! kmh 09/04/2006 set Snow Density at 0.2 g/cm**3
521 ! for "cold permanent ice" or new "dry" snow
523 IF ( (ICE /= 0) .and. SNCOVR .GT. 0.99 ) THEN
524 ! if soil temperature less than 268.15 K, treat as typical Antarctic/Greenland snow firn
525 IF ( STC(1) .LT. (TFREEZ - 5.) ) SNDENS = 0.2
526 IF ( SNOWNG .AND. (T1.LT.273.) .AND. (SFCTMP.LT.273.) ) SNDENS=0.2
529 CALL CSNOW (SNCOND,SNDENS)
531 ! ----------------------------------------------------------------------
532 ! PRECIP IS LIQUID (RAIN), HENCE SAVE IN THE PRECIP VARIABLE THAT
533 ! LATER CAN WHOLELY OR PARTIALLY INFILTRATE THE SOIL (ALONG WITH
534 ! ANY CANOPY "DRIP" ADDED TO THIS LATER)
535 ! ----------------------------------------------------------------------
539 ! ----------------------------------------------------------------------
540 ! DETERMINE SNOWCOVER AND ALBEDO OVER LAND.
541 ! ----------------------------------------------------------------------
542 ! ----------------------------------------------------------------------
543 ! IF SNOW DEPTH=0, SET SNOW FRACTION=0, ALBEDO=SNOW FREE ALBEDO.
544 ! ----------------------------------------------------------------------
545 IF (ICE == 0 .OR. ICE == -1) THEN
546 IF (SNEQV == 0.0) THEN
551 ! ----------------------------------------------------------------------
552 ! DETERMINE SNOW FRACTIONAL COVERAGE.
553 ! DETERMINE SURFACE ALBEDO MODIFICATION DUE TO SNOWDEPTH STATE.
554 ! ----------------------------------------------------------------------
555 CALL SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
556 ! Don't limit snow cover fraction over permanent ice kmh 2008/03/25
558 SNCOVR = MIN(SNCOVR,0.98)
560 CALL ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,T1,ALBEDO,EMISSI, &
561 DT,SNOWNG,SNOTIME1,LVCOEF)
563 ! ----------------------------------------------------------------------
564 ! SNOW COVER, ALBEDO OVER SEA-ICE, GLACIAL ICE
565 ! ----------------------------------------------------------------------
571 ! This value should vary seasonally. 0.65 may be good for Arctic Ocean summer bare ice
572 ! value could be as low as 0.4 for Arctic bare ice and melt pond combo (Perovich data)
573 ! 0.82 may be good for Arctic spring/fall sea ice (Perovich data)
574 ! 0.81 may be good for Antarctic sea ice (Wendler et al. December cruise data)
580 ! ----------------------------------------------------------------------
581 ! THERMAL CONDUCTIVITY FOR SEA-ICE CASE, GLACIAL-ICE CASE
582 ! ----------------------------------------------------------------------
583 IF ( (ICE == 1) .or. (ICE == -1) ) THEN
587 ! kmh 03/25/2008 change SNCOVR threshold to 0.97
589 IF ( SNCOVR .GT. 0.97 ) THEN
594 ! ----------------------------------------------------------------------
595 ! NEXT CALCULATE THE SUBSURFACE HEAT FLUX, WHICH FIRST REQUIRES
596 ! CALCULATION OF THE THERMAL DIFFUSIVITY. TREATMENT OF THE
597 ! LATTER FOLLOWS THAT ON PAGES 148-149 FROM "HEAT TRANSFER IN
598 ! COLD CLIMATES", BY V. J. LUNARDINI (PUBLISHED IN 1981
599 ! BY VAN NOSTRAND REINHOLD CO.) I.E. TREATMENT OF TWO CONTIGUOUS
600 ! "PLANE PARALLEL" MEDIUMS (NAMELY HERE THE FIRST SOIL LAYER
601 ! AND THE SNOWPACK LAYER, IF ANY). THIS DIFFUSIVITY TREATMENT
602 ! BEHAVES WELL FOR BOTH ZERO AND NONZERO SNOWPACK, INCLUDING THE
603 ! LIMIT OF VERY THIN SNOWPACK. THIS TREATMENT ALSO ELIMINATES
604 ! THE NEED TO IMPOSE AN ARBITRARY UPPER BOUND ON SUBSURFACE
605 ! HEAT FLUX WHEN THE SNOWPACK BECOMES EXTREMELY THIN.
606 ! ----------------------------------------------------------------------
607 ! FIRST CALCULATE THERMAL DIFFUSIVITY OF TOP SOIL LAYER, USING
608 ! BOTH THE FROZEN AND LIQUID SOIL MOISTURE, FOLLOWING THE
609 ! SOIL THERMAL DIFFUSIVITY FUNCTION OF PETERS-LIDARD ET AL.
610 ! (1998,JAS, VOL 55, 1209-1224), WHICH REQUIRES THE SPECIFYING
611 ! THE QUARTZ CONTENT OF THE GIVEN SOIL CLASS (SEE ROUTINE REDPRM)
612 ! ----------------------------------------------------------------------
613 ! ----------------------------------------------------------------------
614 ! NEXT ADD SUBSURFACE HEAT FLUX REDUCTION EFFECT FROM THE
615 ! OVERLYING GREEN CANOPY, ADAPTED FROM SECTION 2.1.2 OF
616 ! PETERS-LIDARD ET AL. (1997, JGR, VOL 102(D4))
617 ! ----------------------------------------------------------------------
618 CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
621 IF ( VEGTYP == ISURBAN ) DF1=3.24
623 DF1 = DF1 * EXP (SBETA * SHDFAC)
626 ! kmh 03/25/2008 change SNCOVR threshold to 0.97
628 IF ( SNCOVR .GT. 0.97 ) THEN
632 ! ----------------------------------------------------------------------
633 ! FINALLY "PLANE PARALLEL" SNOWPACK EFFECT FOLLOWING
634 ! V.J. LINARDINI REFERENCE CITED ABOVE. NOTE THAT DTOT IS
635 ! COMBINED DEPTH OF SNOWDEPTH AND THICKNESS OF FIRST SOIL LAYER
636 ! ----------------------------------------------------------------------
639 DSOIL = - (0.5 * ZSOIL (1))
640 IF (SNEQV == 0.) THEN
641 SSOIL = DF1 * (T1- STC (1) ) / DSOIL
644 FRCSNO = SNOWH / DTOT
646 ! 1. HARMONIC MEAN (SERIES FLOW)
647 ! DF1 = (SNCOND*DF1)/(FRCSOI*SNCOND+FRCSNO*DF1)
648 FRCSOI = DSOIL / DTOT
649 ! 2. ARITHMETIC MEAN (PARALLEL FLOW)
650 ! DF1 = FRCSNO*SNCOND + FRCSOI*DF1
651 DF1H = (SNCOND * DF1)/ (FRCSOI * SNCOND+ FRCSNO * DF1)
653 ! 3. GEOMETRIC MEAN (INTERMEDIATE BETWEEN HARMONIC AND ARITHMETIC MEAN)
654 ! DF1 = (SNCOND**FRCSNO)*(DF1**FRCSOI)
655 ! weigh DF by snow fraction
656 ! DF1 = DF1H*SNCOVR + DF1A*(1.0-SNCOVR)
657 ! DF1 = DF1H*SNCOVR + DF1*(1.0-SNCOVR)
658 DF1A = FRCSNO * SNCOND+ FRCSOI * DF1
660 ! ----------------------------------------------------------------------
661 ! CALCULATE SUBSURFACE HEAT FLUX, SSOIL, FROM FINAL THERMAL DIFFUSIVITY
662 ! OF SURFACE MEDIUMS, DF1 ABOVE, AND SKIN TEMPERATURE AND TOP
663 ! MID-LAYER SOIL TEMPERATURE
664 ! ----------------------------------------------------------------------
665 DF1 = DF1A * SNCOVR + DF1* (1.0- SNCOVR)
667 ! kmh 12/15/2005 correct for too deep snow layer
668 ! kmh 09/03/2006 adjust DTOT
669 IF ( DTOT .GT. 2.*DSOIL ) then
673 SSOIL = DF1 * (T1- STC (1) ) / DTOT
675 ! ----------------------------------------------------------------------
676 ! DETERMINE SURFACE ROUGHNESS OVER SNOWPACK USING SNOW CONDITION FROM
677 ! THE PREVIOUS TIMESTEP.
678 ! ----------------------------------------------------------------------
679 IF (SNCOVR > 0. ) THEN
680 CALL SNOWZ0 (SNCOVR,Z0,Z0BRD,SNOWH)
684 ! ----------------------------------------------------------------------
685 ! NEXT CALL ROUTINE SFCDIF TO CALCULATE THE SFC EXCHANGE COEF (CH) FOR
689 ! DO NOT CALL SFCDIF UNTIL AFTER ABOVE CALL TO REDPRM, IN CASE
690 ! ALTERNATIVE VALUES OF ROUGHNESS LENGTH (Z0) AND ZILINTINKEVICH COEF
691 ! (CZIL) ARE SET THERE VIA NAMELIST I/O.
694 ! ROUTINE SFCDIF RETURNS A CH THAT REPRESENTS THE WIND SPD TIMES THE
695 ! "ORIGINAL" NONDIMENSIONAL "Ch" TYPICAL IN LITERATURE. HENCE THE CH
696 ! RETURNED FROM SFCDIF HAS UNITS OF M/S. THE IMPORTANT COMPANION
697 ! COEFFICIENT OF CH, CARRIED HERE AS "RCH", IS THE CH FROM SFCDIF TIMES
698 ! AIR DENSITY AND PARAMETER "CP". "RCH" IS COMPUTED IN "CALL PENMAN".
699 ! RCH RATHER THAN CH IS THE COEFF USUALLY INVOKED LATER IN EQNS.
702 ! ----------------------------------------------------------------------
703 ! SFCDIF ALSO RETURNS THE SURFACE EXCHANGE COEFFICIENT FOR MOMENTUM, CM,
704 ! ALSO KNOWN AS THE SURFACE DRAGE COEFFICIENT. Needed as a state variable
705 ! for iterative/implicit solution of CH in SFCDIF
706 ! ----------------------------------------------------------------------
708 ! T1V = T1 * (1.0+ 0.61 * Q2)
709 ! TH2V = TH2 * (1.0+ 0.61 * Q2)
710 ! CALL SFCDIF_off (ZLVL,Z0,T1V,TH2V,SFCSPD,CZIL,CM,CH)
713 ! ----------------------------------------------------------------------
714 ! CALL PENMAN SUBROUTINE TO CALCULATE POTENTIAL EVAPORATION (ETP), AND
715 ! OTHER PARTIAL PRODUCTS AND SUMS SAVE IN COMMON/RITE FOR LATER
717 ! ----------------------------------------------------------------------
718 ! ----------------------------------------------------------------------
719 ! CALCULATE TOTAL DOWNWARD RADIATION (SOLAR PLUS LONGWAVE) NEEDED IN
720 ! PENMAN EP SUBROUTINE THAT FOLLOWS
721 ! ----------------------------------------------------------------------
722 ! FDOWN = SOLDN * (1.0- ALBEDO) + LWDN
723 FDOWN = SOLNET + LWDN
724 ! ----------------------------------------------------------------------
725 ! CALC VIRTUAL TEMPS AND VIRTUAL POTENTIAL TEMPS NEEDED BY SUBROUTINES
727 T2V = SFCTMP * (1.0+ 0.61 * Q2 )
731 print*,'before penman'
732 print*,' SFCTMP',SFCTMP,'SFCPRS',SFCPRS,'CH',CH,'T2V',T2V, &
733 'TH2',TH2,'PRCP',PRCP,'FDOWN',FDOWN,'T24',T24,'SSOIL',SSOIL, &
734 'Q2',Q2,'Q2SAT',Q2SAT,'ETP',ETP,'RCH',RCH, &
735 'EPSCA',EPSCA,'RR',RR ,'SNOWNG',SNOWNG,'FRZGRA',FRZGRA, &
736 'DQSDT2',DQSDT2,'FLX2',FLX2,'SNOWH',SNOWH,'SNEQV',SNEQV, &
737 ' DSOIL',DSOIL,' FRCSNO',FRCSNO,' SNCOVR',SNCOVR,' DTOT',DTOT, &
738 ' ZSOIL (1)',ZSOIL(1),' DF1',DF1,'T1',T1,' STC1',STC(1), &
739 'ALBEDO',ALBEDO,'SMC',SMC,'STC',STC,'SH2O',SH2O
742 CALL PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, &
743 Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA, &
745 ! kmh 01/09/2007 add T1,ICE,SNCOVR to call
747 DQSDT2,FLX2,EMISSI,SNEQV,T1,ICE,SNCOVR)
749 ! ----------------------------------------------------------------------
750 ! CALL CANRES TO CALCULATE THE CANOPY RESISTANCE AND CONVERT IT INTO PC
751 ! IF NONZERO GREENNESS FRACTION
752 ! ----------------------------------------------------------------------
754 ! ----------------------------------------------------------------------
755 ! FROZEN GROUND EXTENSION: TOTAL SOIL WATER "SMC" WAS REPLACED
756 ! BY UNFROZEN SOIL WATER "SH2O" IN CALL TO CANRES BELOW
757 ! ----------------------------------------------------------------------
758 IF (SHDFAC > 0.) THEN
759 CALL CANRES (SOLDN,CH,SFCTMP,Q2,SFCPRS,SH2O,ZSOIL,NSOIL, &
760 SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2, &
761 TOPT,RSMAX,RGL,HS,XLAI, &
762 RCS,RCT,RCQ,RCSOIL,EMISSI)
764 ! ----------------------------------------------------------------------
765 ! NOW DECIDE MAJOR PATHWAY BRANCH TO TAKE DEPENDING ON WHETHER SNOWPACK
767 ! ----------------------------------------------------------------------
769 IF (SNEQV == 0.0) THEN
770 CALL NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, &
771 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
773 SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI, &
775 STC,EPSCA,BEXP,PC,RCH,RR,CFACTR, &
776 SH2O,SLOPE,KDT,FRZX,PSISAT,ZSOIL, &
777 DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2, &
778 RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS, &
779 QUARTZ,FXEXP,CSOIL, &
780 BETA,DRIP,DEW,FLX1,FLX3,VEGTYP,ISURBAN)
783 CALL SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
784 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
786 Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA, &
787 SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,SNEQV,SNDENS,&
788 SNOWH,SH2O,SLOPE,KDT,FRZX,PSISAT, &
789 ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1, &
790 RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT, &
791 ICE,RTDIS,QUARTZ,FXEXP,CSOIL, &
792 BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI, &
796 ETA_KINEMATIC = ESNOW + ETNS
799 ! Calculate effective mixing ratio at grnd level (skin)
802 Q1=Q2+ETA_KINEMATIC*CP/RCH
804 ! ----------------------------------------------------------------------
805 ! DETERMINE SENSIBLE HEAT (H) IN ENERGY UNITS (W M-2)
806 ! ----------------------------------------------------------------------
807 SHEAT = - (CH * CP * SFCPRS)/ (R * T2V) * ( TH2- T1 )
809 ! ----------------------------------------------------------------------
810 ! CONVERT EVAP TERMS FROM KINEMATIC (KG M-2 S-1) TO ENERGY UNITS (W M-2)
811 ! ----------------------------------------------------------------------
815 ET(K) = ET(K) * LVH2O
818 ESNOW = ESNOW * LSUBS
819 ETP = ETP*((1.-SNCOVR)*LVH2O + SNCOVR*LSUBS)
820 IF (ETP .GT. 0.) THEN
821 ETA = EDIR + EC + ETT + ESNOW
825 ! ----------------------------------------------------------------------
826 ! DETERMINE BETA (RATIO OF ACTUAL TO POTENTIAL EVAP)
827 ! ----------------------------------------------------------------------
834 ! ----------------------------------------------------------------------
835 ! CONVERT THE SIGN OF SOIL HEAT FLUX SO THAT:
836 ! SSOIL>0: WARM THE SURFACE (NIGHT TIME)
837 ! SSOIL<0: COOL THE SURFACE (DAY TIME)
838 ! ----------------------------------------------------------------------
841 ! ----------------------------------------------------------------------
842 ! FOR THE CASE OF LAND (BUT NOT GLACIAL-ICE):
843 ! CONVERT RUNOFF3 (INTERNAL LAYER RUNOFF FROM SUPERSAT) FROM M TO M S-1
844 ! AND ADD TO SUBSURFACE RUNOFF/DRAINAGE/BASEFLOW. RUNOFF2 IS ALREADY
845 ! A RATE AT THIS POINT
846 ! ----------------------------------------------------------------------
848 RUNOFF3 = RUNOFF3/ DT
849 RUNOFF2 = RUNOFF2+ RUNOFF3
850 SOILM = -1.0* SMC (1)* ZSOIL (1)
852 SOILM = SOILM + SMC (K)* (ZSOIL (K -1) - ZSOIL (K))
854 SOILWM = -1.0* (SMCMAX - SMCWLT)* ZSOIL (1)
855 SOILWW = -1.0* (SMC (1) - SMCWLT)* ZSOIL (1)
859 SOILWM = SOILWM + (SMCMAX - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
860 SOILWW = SOILWW + (SMC(K) - SMCWLT)* (ZSOIL (K -1) - ZSOIL (K))
863 IF (SOILWM .LT. 1.E-6) THEN
868 SOILW = SOILWW / SOILWM
871 ! ----------------------------------------------------------------------
872 ! FOR THE CASE OF SEA-ICE (ICE=1) OR GLACIAL-ICE (ICE=-1), ADD ANY
873 ! SNOWMELT DIRECTLY TO SURFACE RUNOFF (RUNOFF1) SINCE THERE IS NO
874 ! SOIL MEDIUM, AND THUS NO CALL TO SUBROUTINE SMFLX (FOR SOIL MOISTURE
876 ! ----------------------------------------------------------------------
883 ! ----------------------------------------------------------------------
885 ! ----------------------------------------------------------------------
887 SUBROUTINE ALCALC (ALB,SNOALB,EMBRD,SHDFAC,SHDMIN,SNCOVR,TSNOW,ALBEDO,EMISSI, &
888 DT,SNOWNG,SNOTIME1,LVCOEF)
890 ! ----------------------------------------------------------------------
891 ! CALCULATE ALBEDO INCLUDING SNOW EFFECT (0 -> 1)
892 ! ALB SNOWFREE ALBEDO
893 ! SNOALB MAXIMUM (DEEP) SNOW ALBEDO
894 ! SHDFAC AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
895 ! SHDMIN MINIMUM AREAL FRACTIONAL COVERAGE OF GREEN VEGETATION
896 ! SNCOVR FRACTIONAL SNOW COVER
897 ! ALBEDO SURFACE ALBEDO INCLUDING SNOW EFFECT
898 ! TSNOW SNOW SURFACE TEMPERATURE (K)
899 ! ----------------------------------------------------------------------
902 ! ----------------------------------------------------------------------
903 ! SNOALB IS ARGUMENT REPRESENTING MAXIMUM ALBEDO OVER DEEP SNOW,
904 ! AS PASSED INTO SFLX, AND ADAPTED FROM THE SATELLITE-BASED MAXIMUM
905 ! SNOW ALBEDO FIELDS PROVIDED BY D. ROBINSON AND G. KUKLA
906 ! (1985, JCAM, VOL 24, 402-411)
907 ! ----------------------------------------------------------------------
908 REAL, INTENT(IN) :: ALB, SNOALB, EMBRD, SHDFAC, SHDMIN, SNCOVR, TSNOW
909 REAL, INTENT(IN) :: DT
910 LOGICAL, INTENT(IN) :: SNOWNG
911 REAL, INTENT(INOUT):: SNOTIME1
912 REAL, INTENT(OUT) :: ALBEDO, EMISSI
915 REAL, INTENT(IN) :: LVCOEF
916 REAL, PARAMETER :: SNACCA=0.94,SNACCB=0.58,SNTHWA=0.82,SNTHWB=0.46
917 ! turn of vegetation effect
918 ! ALBEDO = ALB + (1.0- (SHDFAC - SHDMIN))* SNCOVR * (SNOALB - ALB)
919 ! ALBEDO = (1.0-SNCOVR)*ALB + SNCOVR*SNOALB !this is equivalent to below
920 ALBEDO = ALB + SNCOVR*(SNOALB-ALB)
921 EMISSI = EMBRD + SNCOVR*(EMISSI_S - EMBRD)
923 ! BASE FORMULATION (DICKINSON ET AL., 1986, COGLEY ET AL., 1990)
924 ! IF (TSNOW.LE.263.16) THEN
927 ! IF (TSNOW.LT.273.16) THEN
928 ! TM=0.1*(TSNOW-263.16)
929 ! SNOALB1=0.5*((0.9-0.2*(TM**3))+(0.8-0.16*(TM**3)))
932 ! IF(SNCOVR.GT.0.95) SNOALB1= 0.6
933 ! SNOALB1 = ALB + SNCOVR*(SNOALB-ALB)
936 ! ALBEDO = ALB + SNCOVR*(SNOALB1-ALB)
938 ! ISBA FORMULATION (VERSEGHY, 1991; BAKER ET AL., 1990)
939 ! SNOALB1 = SNOALB+COEF*(0.85-SNOALB)
942 ! SNOTIME1 = SNOTIME1 + DT
948 ! IF (TSNOW.LT.273.16) THEN
949 !! SNOALB2=SNOALB-0.008*LSTSNW*DT/86400
950 !!m SNOALB2=SNOALB-0.008*SNOTIME1/86400
951 ! SNOALB2=(SNOALB2-0.65)*EXP(-0.05*DT/3600)+0.65
952 !! SNOALB2=(ALBEDO-0.65)*EXP(-0.01*DT/3600)+0.65
954 ! SNOALB2=(SNOALB2-0.5)*EXP(-0.0005*DT/3600)+0.5
955 !! SNOALB2=(SNOALB-0.5)*EXP(-0.24*LSTSNW*DT/86400)+0.5
956 !!m SNOALB2=(SNOALB-0.5)*EXP(-0.24*SNOTIME1/86400)+0.5
960 !! print*,'SNOALB2',SNOALB2,'ALBEDO',ALBEDO,'DT',DT
961 ! ALBEDO = ALB + SNCOVR*(SNOALB2-ALB)
962 ! IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
964 !! SNOTIME = SNOTIME1
966 ! formulation by Livneh
967 ! ----------------------------------------------------------------------
968 ! SNOALB IS CONSIDERED AS THE MAXIMUM SNOW ALBEDO FOR NEW SNOW, AT
969 ! A VALUE OF 85%. SNOW ALBEDO CURVE DEFAULTS ARE FROM BRAS P.263. SHOULD
970 ! NOT BE CHANGED EXCEPT FOR SERIOUS PROBLEMS WITH SNOW MELT.
971 ! TO IMPLEMENT ACCUMULATIN PARAMETERS, SNACCA AND SNACCB, ASSERT THAT IT
972 ! IS INDEED ACCUMULATION SEASON. I.E. THAT SNOW SURFACE TEMP IS BELOW
973 ! ZERO AND THE DATE FALLS BETWEEN OCTOBER AND FEBRUARY
974 ! ----------------------------------------------------------------------
975 SNOALB1 = SNOALB+LVCOEF*(0.85-SNOALB)
977 ! ---------------- Initial LSTSNW --------------------------------------
982 ! IF (TSNOW.LT.273.16) THEN
983 SNOALB2=SNOALB1*(SNACCA**((SNOTIME1/86400.0)**SNACCB))
985 ! SNOALB2 =SNOALB1*(SNTHWA**((SNOTIME1/86400.0)**SNTHWB))
989 SNOALB2 = MAX ( SNOALB2, ALB )
990 ALBEDO = ALB + SNCOVR*(SNOALB2-ALB)
991 IF (ALBEDO .GT. SNOALB2) ALBEDO=SNOALB2
993 ! IF (TSNOW.LT.273.16) THEN
994 ! ALBEDO=SNOALB-0.008*DT/86400
996 ! ALBEDO=(SNOALB-0.5)*EXP(-0.24*DT/86400)+0.5
999 ! IF (ALBEDO > SNOALB) ALBEDO = SNOALB
1001 ! ----------------------------------------------------------------------
1002 END SUBROUTINE ALCALC
1003 ! ----------------------------------------------------------------------
1005 SUBROUTINE CANRES (SOLAR,CH,SFCTMP,Q2,SFCPRS,SMC,ZSOIL,NSOIL, &
1006 SMCWLT,SMCREF,RSMIN,RC,PC,NROOT,Q2SAT,DQSDT2, &
1007 TOPT,RSMAX,RGL,HS,XLAI, &
1008 RCS,RCT,RCQ,RCSOIL,EMISSI)
1010 ! ----------------------------------------------------------------------
1012 ! ----------------------------------------------------------------------
1013 ! CALCULATE CANOPY RESISTANCE WHICH DEPENDS ON INCOMING SOLAR RADIATION,
1014 ! AIR TEMPERATURE, ATMOSPHERIC WATER VAPOR PRESSURE DEFICIT AT THE
1015 ! LOWEST MODEL LEVEL, AND SOIL MOISTURE (PREFERABLY UNFROZEN SOIL
1016 ! MOISTURE RATHER THAN TOTAL)
1017 ! ----------------------------------------------------------------------
1018 ! SOURCE: JARVIS (1976), NOILHAN AND PLANTON (1989, MWR), JACQUEMIN AND
1019 ! NOILHAN (1990, BLM)
1020 ! SEE ALSO: CHEN ET AL (1996, JGR, VOL 101(D3), 7251-7268), EQNS 12-14
1021 ! AND TABLE 2 OF SEC. 3.1.2
1022 ! ----------------------------------------------------------------------
1024 ! SOLAR INCOMING SOLAR RADIATION
1025 ! CH SURFACE EXCHANGE COEFFICIENT FOR HEAT AND MOISTURE
1026 ! SFCTMP AIR TEMPERATURE AT 1ST LEVEL ABOVE GROUND
1027 ! Q2 AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
1028 ! Q2SAT SATURATION AIR HUMIDITY AT 1ST LEVEL ABOVE GROUND
1029 ! DQSDT2 SLOPE OF SATURATION HUMIDITY FUNCTION WRT TEMP
1030 ! SFCPRS SURFACE PRESSURE
1031 ! SMC VOLUMETRIC SOIL MOISTURE
1032 ! ZSOIL SOIL DEPTH (NEGATIVE SIGN, AS IT IS BELOW GROUND)
1033 ! NSOIL NO. OF SOIL LAYERS
1034 ! NROOT NO. OF SOIL LAYERS IN ROOT ZONE (1.LE.NROOT.LE.NSOIL)
1035 ! XLAI LEAF AREA INDEX
1036 ! SMCWLT WILTING POINT
1037 ! SMCREF REFERENCE SOIL MOISTURE (WHERE SOIL WATER DEFICIT STRESS
1039 ! RSMIN, RSMAX, TOPT, RGL, HS ARE CANOPY STRESS PARAMETERS SET IN
1042 ! PC PLANT COEFFICIENT
1043 ! RC CANOPY RESISTANCE
1044 ! ----------------------------------------------------------------------
1047 INTEGER, INTENT(IN) :: NROOT,NSOIL
1049 REAL, INTENT(IN) :: CH,DQSDT2,HS,Q2,Q2SAT,RSMIN,RGL,RSMAX, &
1050 SFCPRS,SFCTMP,SMCREF,SMCWLT, SOLAR,TOPT,XLAI, &
1052 REAL,DIMENSION(1:NSOIL), INTENT(IN) :: SMC,ZSOIL
1053 REAL, INTENT(OUT):: PC,RC,RCQ,RCS,RCSOIL,RCT
1054 REAL :: DELTA,FF,GX,P,RR
1055 REAL, DIMENSION(1:NSOIL) :: PART
1056 REAL, PARAMETER :: SLV = 2.501000E6
1059 ! ----------------------------------------------------------------------
1060 ! INITIALIZE CANOPY RESISTANCE MULTIPLIER TERMS.
1061 ! ----------------------------------------------------------------------
1067 ! ----------------------------------------------------------------------
1068 ! CONTRIBUTION DUE TO INCOMING SOLAR RADIATION
1069 ! ----------------------------------------------------------------------
1071 FF = 0.55*2.0* SOLAR / (RGL * XLAI)
1072 RCS = (FF + RSMIN / RSMAX) / (1.0+ FF)
1074 ! ----------------------------------------------------------------------
1075 ! CONTRIBUTION DUE TO AIR TEMPERATURE AT FIRST MODEL LEVEL ABOVE GROUND
1076 ! RCT EXPRESSION FROM NOILHAN AND PLANTON (1989, MWR).
1077 ! ----------------------------------------------------------------------
1078 RCS = MAX (RCS,0.0001)
1079 RCT = 1.0- 0.0016* ( (TOPT - SFCTMP)**2.0)
1081 ! ----------------------------------------------------------------------
1082 ! CONTRIBUTION DUE TO VAPOR PRESSURE DEFICIT AT FIRST MODEL LEVEL.
1083 ! RCQ EXPRESSION FROM SSIB
1084 ! ----------------------------------------------------------------------
1085 RCT = MAX (RCT,0.0001)
1086 RCQ = 1.0/ (1.0+ HS * (Q2SAT - Q2))
1088 ! ----------------------------------------------------------------------
1089 ! CONTRIBUTION DUE TO SOIL MOISTURE AVAILABILITY.
1090 ! DETERMINE CONTRIBUTION FROM EACH SOIL LAYER, THEN ADD THEM UP.
1091 ! ----------------------------------------------------------------------
1092 RCQ = MAX (RCQ,0.01)
1093 GX = (SMC (1) - SMCWLT) / (SMCREF - SMCWLT)
1094 IF (GX > 1.) GX = 1.
1095 IF (GX < 0.) GX = 0.
1097 ! ----------------------------------------------------------------------
1098 ! USE SOIL DEPTH AS WEIGHTING FACTOR
1099 ! ----------------------------------------------------------------------
1100 ! ----------------------------------------------------------------------
1101 ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
1102 ! PART(1) = RTDIS(1) * GX
1103 ! ----------------------------------------------------------------------
1104 PART (1) = (ZSOIL (1)/ ZSOIL (NROOT)) * GX
1106 GX = (SMC (K) - SMCWLT) / (SMCREF - SMCWLT)
1107 IF (GX > 1.) GX = 1.
1108 IF (GX < 0.) GX = 0.
1109 ! ----------------------------------------------------------------------
1110 ! USE SOIL DEPTH AS WEIGHTING FACTOR
1111 ! ----------------------------------------------------------------------
1112 ! ----------------------------------------------------------------------
1113 ! USE ROOT DISTRIBUTION AS WEIGHTING FACTOR
1114 ! PART(K) = RTDIS(K) * GX
1115 ! ----------------------------------------------------------------------
1116 PART (K) = ( (ZSOIL (K) - ZSOIL (K -1))/ ZSOIL (NROOT)) * GX
1119 RCSOIL = RCSOIL + PART (K)
1122 ! ----------------------------------------------------------------------
1123 ! DETERMINE CANOPY RESISTANCE DUE TO ALL FACTORS. CONVERT CANOPY
1124 ! RESISTANCE (RC) TO PLANT COEFFICIENT (PC) TO BE USED WITH POTENTIAL
1125 ! EVAP IN DETERMINING ACTUAL EVAP. PC IS DETERMINED BY:
1126 ! PC * LINERIZED PENMAN POTENTIAL EVAP =
1127 ! PENMAN-MONTEITH ACTUAL EVAPORATION (CONTAINING RC TERM).
1128 ! ----------------------------------------------------------------------
1129 RCSOIL = MAX (RCSOIL,0.0001)
1131 RC = RSMIN / (XLAI * RCS * RCT * RCQ * RCSOIL)
1132 ! RR = (4.* SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) + 1.0
1133 RR = (4.* EMISSI *SIGMA * RD / CP)* (SFCTMP **4.)/ (SFCPRS * CH) &
1136 DELTA = (SLV / CP)* DQSDT2
1138 PC = (RR + DELTA)/ (RR * (1. + RC * CH) + DELTA)
1140 ! ----------------------------------------------------------------------
1141 END SUBROUTINE CANRES
1142 ! ----------------------------------------------------------------------
1144 SUBROUTINE CSNOW (SNCOND,DSNOW)
1146 ! ----------------------------------------------------------------------
1149 ! ----------------------------------------------------------------------
1150 ! CALCULATE SNOW TERMAL CONDUCTIVITY
1151 ! ----------------------------------------------------------------------
1153 REAL, INTENT(IN) :: DSNOW
1154 REAL, INTENT(OUT):: SNCOND
1156 REAL, PARAMETER :: UNIT = 0.11631
1158 ! ----------------------------------------------------------------------
1159 ! SNCOND IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
1160 ! CSNOW IN UNITS OF CAL/(CM*HR*C), RETURNED IN W/(M*C)
1161 ! BASIC VERSION IS DYACHKOVA EQUATION (1960), FOR RANGE 0.1-0.4
1162 ! ----------------------------------------------------------------------
1163 C = 0.328*10** (2.25* DSNOW)
1166 ! ----------------------------------------------------------------------
1167 ! DE VAUX EQUATION (1933), IN RANGE 0.1-0.6
1168 ! ----------------------------------------------------------------------
1169 ! SNCOND=0.0293*(1.+100.*DSNOW**2)
1170 ! CSNOW=0.0293*(1.+100.*DSNOW**2)
1172 ! ----------------------------------------------------------------------
1173 ! E. ANDERSEN FROM FLERCHINGER
1174 ! ----------------------------------------------------------------------
1175 ! SNCOND=0.021+2.51*DSNOW**2
1176 ! CSNOW=0.021+2.51*DSNOW**2
1179 ! double snow thermal conductivity
1180 SNCOND = 2.0 * UNIT * C
1182 ! ----------------------------------------------------------------------
1183 END SUBROUTINE CSNOW
1184 ! ----------------------------------------------------------------------
1186 SUBROUTINE DEVAP (EDIR,ETP1,SMC,ZSOIL,SHDFAC,SMCMAX,BEXP, &
1187 DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
1189 ! ----------------------------------------------------------------------
1192 ! ----------------------------------------------------------------------
1193 ! CALCULATE DIRECT SOIL EVAPORATION
1194 ! ----------------------------------------------------------------------
1196 REAL, INTENT(IN) :: ETP1,SMC,BEXP,DKSAT,DWSAT,FXEXP, &
1197 SHDFAC,SMCDRY,SMCMAX,ZSOIL,SMCREF,SMCWLT
1198 REAL, INTENT(OUT):: EDIR
1202 ! ----------------------------------------------------------------------
1203 ! DIRECT EVAP A FUNCTION OF RELATIVE SOIL MOISTURE AVAILABILITY, LINEAR
1205 ! ----------------------------------------------------------------------
1206 ! ----------------------------------------------------------------------
1207 ! FX > 1 REPRESENTS DEMAND CONTROL
1208 ! FX < 1 REPRESENTS FLUX CONTROL
1209 ! ----------------------------------------------------------------------
1211 SRATIO = (SMC - SMCDRY) / (SMCMAX - SMCDRY)
1212 IF (SRATIO > 0.) THEN
1214 FX = MAX ( MIN ( FX, 1. ) ,0. )
1219 ! ----------------------------------------------------------------------
1220 ! ALLOW FOR THE DIRECT-EVAP-REDUCING EFFECT OF SHADE
1221 ! ----------------------------------------------------------------------
1222 EDIR = FX * ( 1.0- SHDFAC ) * ETP1
1224 ! ----------------------------------------------------------------------
1225 END SUBROUTINE DEVAP
1226 ! ----------------------------------------------------------------------
1228 SUBROUTINE EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
1230 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
1231 SMCREF,SHDFAC,CMCMAX, &
1233 EDIR,EC,ET,ETT,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
1235 ! ----------------------------------------------------------------------
1237 ! ----------------------------------------------------------------------
1238 ! CALCULATE SOIL MOISTURE FLUX. THE SOIL MOISTURE CONTENT (SMC - A PER
1239 ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
1240 ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
1241 ! FROZEN GROUND VERSION: NEW STATES ADDED: SH2O, AND FROZEN GROUND
1242 ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
1243 ! ----------------------------------------------------------------------
1245 INTEGER, INTENT(IN) :: NSOIL, NROOT
1247 REAL, INTENT(IN) :: BEXP, CFACTR,CMC,CMCMAX,DKSAT, &
1248 DT,DWSAT,ETP1,FXEXP,PC,Q2,SFCTMP, &
1249 SHDFAC,SMCDRY,SMCMAX,SMCREF,SMCWLT
1250 REAL, INTENT(OUT) :: EC,EDIR,ETA1,ETT
1252 REAL,DIMENSION(1:NSOIL), INTENT(IN) :: RTDIS, SMC, SH2O, ZSOIL
1253 REAL,DIMENSION(1:NSOIL), INTENT(OUT) :: ET
1255 ! ----------------------------------------------------------------------
1256 ! EXECUTABLE CODE BEGINS HERE IF THE POTENTIAL EVAPOTRANSPIRATION IS
1257 ! GREATER THAN ZERO.
1258 ! ----------------------------------------------------------------------
1266 ! ----------------------------------------------------------------------
1267 ! RETRIEVE DIRECT EVAPORATION FROM SOIL SURFACE. CALL THIS FUNCTION
1268 ! ONLY IF VEG COVER NOT COMPLETE.
1269 ! FROZEN GROUND VERSION: SH2O STATES REPLACE SMC STATES.
1270 ! ----------------------------------------------------------------------
1271 IF (ETP1 > 0.0) THEN
1272 IF (SHDFAC < 1.) THEN
1273 CALL DEVAP (EDIR,ETP1,SMC (1),ZSOIL (1),SHDFAC,SMCMAX, &
1274 BEXP,DKSAT,DWSAT,SMCDRY,SMCREF,SMCWLT,FXEXP)
1276 ! ----------------------------------------------------------------------
1277 ! INITIALIZE PLANT TOTAL TRANSPIRATION, RETRIEVE PLANT TRANSPIRATION,
1278 ! AND ACCUMULATE IT FOR ALL SOIL LAYERS.
1279 ! ----------------------------------------------------------------------
1281 IF (SHDFAC > 0.0) THEN
1282 CALL TRANSP (ET,NSOIL,ETP1,SH2O,CMC,ZSOIL,SHDFAC,SMCWLT, &
1283 CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT,RTDIS)
1285 ETT = ETT + ET ( K )
1287 ! ----------------------------------------------------------------------
1288 ! CALCULATE CANOPY EVAPORATION.
1289 ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR CMC=0.0.
1290 ! ----------------------------------------------------------------------
1292 EC = SHDFAC * ( ( CMC / CMCMAX ) ** CFACTR ) * ETP1
1296 ! ----------------------------------------------------------------------
1297 ! EC SHOULD BE LIMITED BY THE TOTAL AMOUNT OF AVAILABLE WATER ON THE
1298 ! CANOPY. -F.CHEN, 18-OCT-1994
1299 ! ----------------------------------------------------------------------
1301 EC = MIN ( CMC2MS, EC )
1304 ! ----------------------------------------------------------------------
1305 ! TOTAL UP EVAP AND TRANSP TYPES TO OBTAIN ACTUAL EVAPOTRANSP
1306 ! ----------------------------------------------------------------------
1307 ETA1 = EDIR + ETT + EC
1309 ! ----------------------------------------------------------------------
1310 END SUBROUTINE EVAPO
1311 ! ----------------------------------------------------------------------
1313 SUBROUTINE FAC2MIT(SMCMAX,FLIMIT)
1315 REAL, INTENT(IN) :: SMCMAX
1316 REAL, INTENT(OUT) :: FLIMIT
1320 IF ( SMCMAX == 0.395 ) THEN
1322 ELSE IF ( ( SMCMAX == 0.434 ) .OR. ( SMCMAX == 0.404 ) ) THEN
1324 ELSE IF ( ( SMCMAX == 0.465 ) .OR. ( SMCMAX == 0.406 ) ) THEN
1326 ELSE IF ( ( SMCMAX == 0.476 ) .OR. ( SMCMAX == 0.439 ) ) THEN
1328 ELSE IF ( ( SMCMAX == 0.200 ) .OR. ( SMCMAX == 0.464 ) ) THEN
1332 ! ----------------------------------------------------------------------
1333 END SUBROUTINE FAC2MIT
1334 ! ----------------------------------------------------------------------
1336 SUBROUTINE FRH2O (FREE,TKELV,SMC,SH2O,SMCMAX,BEXP,PSIS)
1338 ! ----------------------------------------------------------------------
1340 ! ----------------------------------------------------------------------
1341 ! CALCULATE AMOUNT OF SUPERCOOLED LIQUID SOIL WATER CONTENT IF
1342 ! TEMPERATURE IS BELOW 273.15K (T0). REQUIRES NEWTON-TYPE ITERATION TO
1343 ! SOLVE THE NONLINEAR IMPLICIT EQUATION GIVEN IN EQN 17 OF KOREN ET AL
1344 ! (1999, JGR, VOL 104(D16), 19569-19585).
1345 ! ----------------------------------------------------------------------
1346 ! NEW VERSION (JUNE 2001): MUCH FASTER AND MORE ACCURATE NEWTON
1347 ! ITERATION ACHIEVED BY FIRST TAKING LOG OF EQN CITED ABOVE -- LESS THAN
1348 ! 4 (TYPICALLY 1 OR 2) ITERATIONS ACHIEVES CONVERGENCE. ALSO, EXPLICIT
1349 ! 1-STEP SOLUTION OPTION FOR SPECIAL CASE OF PARAMETER CK=0, WHICH
1350 ! REDUCES THE ORIGINAL IMPLICIT EQUATION TO A SIMPLER EXPLICIT FORM,
1351 ! KNOWN AS THE "FLERCHINGER EQN". IMPROVED HANDLING OF SOLUTION IN THE
1352 ! LIMIT OF FREEZING POINT TEMPERATURE T0.
1353 ! ----------------------------------------------------------------------
1356 ! TKELV.........TEMPERATURE (Kelvin)
1357 ! SMC...........TOTAL SOIL MOISTURE CONTENT (VOLUMETRIC)
1358 ! SH2O..........LIQUID SOIL MOISTURE CONTENT (VOLUMETRIC)
1359 ! SMCMAX........SATURATION SOIL MOISTURE CONTENT (FROM REDPRM)
1360 ! B.............SOIL TYPE "B" PARAMETER (FROM REDPRM)
1361 ! PSIS..........SATURATED SOIL MATRIC POTENTIAL (FROM REDPRM)
1364 ! FRH2O.........SUPERCOOLED LIQUID WATER CONTENT
1365 ! FREE..........SUPERCOOLED LIQUID WATER CONTENT
1366 ! ----------------------------------------------------------------------
1368 REAL, INTENT(IN) :: BEXP,PSIS,SH2O,SMC,SMCMAX,TKELV
1369 REAL, INTENT(OUT) :: FREE
1370 REAL :: BX,DENOM,DF,DSWL,FK,SWL,SWLK
1371 INTEGER :: NLOG,KCOUNT
1372 ! PARAMETER(CK = 0.0)
1373 REAL, PARAMETER :: CK = 8.0, BLIM = 5.5, ERROR = 0.005, &
1374 HLICE = 3.335E5, GS = 9.81,DICE = 920.0, &
1375 DH2O = 1000.0, T0 = 273.15
1377 ! ----------------------------------------------------------------------
1378 ! LIMITS ON PARAMETER B: B < 5.5 (use parameter BLIM)
1379 ! SIMULATIONS SHOWED IF B > 5.5 UNFROZEN WATER CONTENT IS
1380 ! NON-REALISTICALLY HIGH AT VERY LOW TEMPERATURES.
1381 ! ----------------------------------------------------------------------
1384 ! ----------------------------------------------------------------------
1385 ! INITIALIZING ITERATIONS COUNTER AND ITERATIVE SOLUTION FLAG.
1386 ! ----------------------------------------------------------------------
1387 IF (BEXP > BLIM) BX = BLIM
1390 ! ----------------------------------------------------------------------
1391 ! IF TEMPERATURE NOT SIGNIFICANTLY BELOW FREEZING (T0), SH2O = SMC
1392 ! ----------------------------------------------------------------------
1395 IF (TKELV > (T0- 1.E-3)) THEN
1399 ! ----------------------------------------------------------------------
1400 ! OPTION 1: ITERATED SOLUTION FOR NONZERO CK
1401 ! IN KOREN ET AL, JGR, 1999, EQN 17
1402 ! ----------------------------------------------------------------------
1403 ! INITIAL GUESS FOR SWL (frozen content)
1404 ! ----------------------------------------------------------------------
1407 ! ----------------------------------------------------------------------
1408 ! KEEP WITHIN BOUNDS.
1409 ! ----------------------------------------------------------------------
1410 IF (SWL > (SMC -0.02)) SWL = SMC -0.02
1412 ! ----------------------------------------------------------------------
1413 ! START OF ITERATIONS
1414 ! ----------------------------------------------------------------------
1415 IF (SWL < 0.) SWL = 0.
1417 IF (.NOT.( (NLOG < 10) .AND. (KCOUNT == 0))) goto 1002
1419 DF = ALOG ( ( PSIS * GS / HLICE ) * ( ( 1. + CK * SWL )**2.) * &
1420 ( SMCMAX / (SMC - SWL) )** BX) - ALOG ( - ( &
1422 DENOM = 2. * CK / ( 1. + CK * SWL ) + BX / ( SMC - SWL )
1423 SWLK = SWL - DF / DENOM
1424 ! ----------------------------------------------------------------------
1425 ! BOUNDS USEFUL FOR MATHEMATICAL SOLUTION.
1426 ! ----------------------------------------------------------------------
1427 IF (SWLK > (SMC -0.02)) SWLK = SMC - 0.02
1428 IF (SWLK < 0.) SWLK = 0.
1430 ! ----------------------------------------------------------------------
1431 ! MATHEMATICAL SOLUTION BOUNDS APPLIED.
1432 ! ----------------------------------------------------------------------
1433 DSWL = ABS (SWLK - SWL)
1435 ! ----------------------------------------------------------------------
1436 ! IF MORE THAN 10 ITERATIONS, USE EXPLICIT METHOD (CK=0 APPROX.)
1437 ! WHEN DSWL LESS OR EQ. ERROR, NO MORE ITERATIONS REQUIRED.
1438 ! ----------------------------------------------------------------------
1440 IF ( DSWL <= ERROR ) THEN
1443 ! ----------------------------------------------------------------------
1445 ! ----------------------------------------------------------------------
1446 ! BOUNDS APPLIED WITHIN DO-BLOCK ARE VALID FOR PHYSICAL SOLUTION.
1447 ! ----------------------------------------------------------------------
1453 ! ----------------------------------------------------------------------
1455 ! ----------------------------------------------------------------------
1456 ! ----------------------------------------------------------------------
1457 ! OPTION 2: EXPLICIT SOLUTION FOR FLERCHINGER EQ. i.e. CK=0
1458 ! IN KOREN ET AL., JGR, 1999, EQN 17
1459 ! APPLY PHYSICAL BOUNDS TO FLERCHINGER SOLUTION
1460 ! ----------------------------------------------------------------------
1461 IF (KCOUNT == 0) THEN
1462 PRINT *,'Flerchinger USEd in NEW version. Iterations=',NLOG
1463 FK = ( ( (HLICE / (GS * ( - PSIS)))* &
1464 ( (TKELV - T0)/ TKELV))** ( -1/ BX))* SMCMAX
1465 ! FRH2O = MIN (FK, SMC)
1466 IF (FK < 0.02) FK = 0.02
1467 FREE = MIN (FK, SMC)
1468 ! ----------------------------------------------------------------------
1470 ! ----------------------------------------------------------------------
1473 ! ----------------------------------------------------------------------
1474 END SUBROUTINE FRH2O
1475 ! ----------------------------------------------------------------------
1477 SUBROUTINE HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1, &
1478 TBOT,ZBOT,PSISAT,SH2O,DT,BEXP, &
1479 F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP,ISURBAN)
1481 ! ----------------------------------------------------------------------
1483 ! ----------------------------------------------------------------------
1484 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
1485 ! THERMAL DIFFUSION EQUATION. ALSO TO COMPUTE ( PREPARE ) THE MATRIX
1486 ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
1487 ! ----------------------------------------------------------------------
1490 INTEGER, INTENT(IN) :: NSOIL, VEGTYP
1491 INTEGER, INTENT(IN) :: ISURBAN
1494 REAL, INTENT(IN) :: BEXP, CSOIL, DF1, DT,F1,PSISAT,QUARTZ, &
1495 SMCMAX ,TBOT,YY,ZZ1, ZBOT
1496 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SMC,STC,ZSOIL
1497 REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SH2O
1498 REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: RHSTS
1499 REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: AI, BI,CI
1500 REAL :: DDZ, DDZ2, DENOM, DF1N, DF1K, DTSDZ, &
1501 DTSDZ2,HCPCT,QTOT,SSOIL,SICE,TAVG,TBK, &
1502 TBK1,TSNSR,TSURF,CSOIL_LOC
1503 REAL, PARAMETER :: T0 = 273.15, CAIR = 1004.0, CICE = 2.106E6,&
1508 IF( VEGTYP == ISURBAN ) then
1514 ! ----------------------------------------------------------------------
1515 ! INITIALIZE LOGICAL FOR SOIL LAYER TEMPERATURE AVERAGING.
1516 ! ----------------------------------------------------------------------
1518 ! ----------------------------------------------------------------------
1519 ! BEGIN SECTION FOR TOP SOIL LAYER
1520 ! ----------------------------------------------------------------------
1521 ! CALC THE HEAT CAPACITY OF THE TOP SOIL LAYER
1522 ! ----------------------------------------------------------------------
1523 HCPCT = SH2O (1)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC (1))&
1525 + ( SMC (1) - SH2O (1) )* CICE
1527 ! ----------------------------------------------------------------------
1528 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
1529 ! ----------------------------------------------------------------------
1530 DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
1532 CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
1534 ! ----------------------------------------------------------------------
1535 ! CALCULATE THE VERTICAL SOIL TEMP GRADIENT BTWN THE 1ST AND 2ND SOIL
1536 ! LAYERS. THEN CALCULATE THE SUBSURFACE HEAT FLUX. USE THE TEMP
1537 ! GRADIENT AND SUBSFC HEAT FLUX TO CALC "RIGHT-HAND SIDE TENDENCY
1538 ! TERMS", OR "RHSTS", FOR TOP SOIL LAYER.
1539 ! ----------------------------------------------------------------------
1540 BI (1) = - CI (1) + DF1 / (0.5 * ZSOIL (1) * ZSOIL (1)* HCPCT * &
1542 DTSDZ = (STC (1) - STC (2)) / ( -0.5 * ZSOIL (2))
1543 SSOIL = DF1 * (STC (1) - YY) / (0.5 * ZSOIL (1) * ZZ1)
1544 ! RHSTS(1) = (DF1 * DTSDZ - SSOIL) / (ZSOIL(1) * HCPCT)
1545 DENOM = (ZSOIL (1) * HCPCT)
1547 ! ----------------------------------------------------------------------
1548 ! NEXT CAPTURE THE VERTICAL DIFFERENCE OF THE HEAT FLUX AT TOP AND
1549 ! BOTTOM OF FIRST SOIL LAYER FOR USE IN HEAT FLUX CONSTRAINT APPLIED TO
1550 ! POTENTIAL SOIL FREEZING/THAWING IN ROUTINE SNKSRC.
1551 ! ----------------------------------------------------------------------
1552 ! QTOT = SSOIL - DF1*DTSDZ
1553 RHSTS (1) = (DF1 * DTSDZ - SSOIL) / DENOM
1555 ! ----------------------------------------------------------------------
1556 ! CALCULATE FROZEN WATER CONTENT IN 1ST SOIL LAYER.
1557 ! ----------------------------------------------------------------------
1558 QTOT = -1.0* RHSTS (1)* DENOM
1560 ! ----------------------------------------------------------------------
1561 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP):
1562 ! SET TEMP "TSURF" AT TOP OF SOIL COLUMN (FOR USE IN FREEZING SOIL
1563 ! PHYSICS LATER IN FUNCTION SUBROUTINE SNKSRC). IF SNOWPACK CONTENT IS
1564 ! ZERO, THEN TSURF EXPRESSION BELOW GIVES TSURF = SKIN TEMP. IF
1565 ! SNOWPACK IS NONZERO (HENCE ARGUMENT ZZ1=1), THEN TSURF EXPRESSION
1566 ! BELOW YIELDS SOIL COLUMN TOP TEMPERATURE UNDER SNOWPACK. THEN
1567 ! CALCULATE TEMPERATURE AT BOTTOM INTERFACE OF 1ST SOIL LAYER FOR USE
1568 ! LATER IN FUNCTION SUBROUTINE SNKSRC
1569 ! ----------------------------------------------------------------------
1570 SICE = SMC (1) - SH2O (1)
1572 TSURF = (YY + (ZZ1-1) * STC (1)) / ZZ1
1573 ! ----------------------------------------------------------------------
1574 ! IF FROZEN WATER PRESENT OR ANY OF LAYER-1 MID-POINT OR BOUNDING
1575 ! INTERFACE TEMPERATURES BELOW FREEZING, THEN CALL SNKSRC TO
1576 ! COMPUTE HEAT SOURCE/SINK (AND CHANGE IN FROZEN WATER CONTENT)
1577 ! DUE TO POSSIBLE SOIL WATER PHASE CHANGE
1578 ! ----------------------------------------------------------------------
1579 CALL TBND (STC (1),STC (2),ZSOIL,ZBOT,1,NSOIL,TBK)
1580 IF ( (SICE > 0.) .OR. (STC (1) < T0) .OR. &
1581 (TSURF < T0) .OR. (TBK < T0) ) THEN
1582 ! TSNSR = SNKSRC (TAVG,SMC(1),SH2O(1),
1583 CALL TMPAVG (TAVG,TSURF,STC (1),TBK,ZSOIL,NSOIL,1)
1584 CALL SNKSRC (TSNSR,TAVG,SMC (1),SH2O (1), &
1585 ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
1586 ! RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
1587 RHSTS (1) = RHSTS (1) - TSNSR / DENOM
1590 ! TSNSR = SNKSRC (STC(1),SMC(1),SH2O(1),
1591 IF ( (SICE > 0.) .OR. (STC (1) < T0) ) THEN
1592 CALL SNKSRC (TSNSR,STC (1),SMC (1),SH2O (1), &
1593 ZSOIL,NSOIL,SMCMAX,PSISAT,BEXP,DT,1,QTOT)
1594 ! RHSTS(1) = RHSTS(1) - TSNSR / ( ZSOIL(1) * HCPCT )
1595 RHSTS (1) = RHSTS (1) - TSNSR / DENOM
1597 ! ----------------------------------------------------------------------
1598 ! THIS ENDS SECTION FOR TOP SOIL LAYER.
1599 ! ----------------------------------------------------------------------
1603 ! ----------------------------------------------------------------------
1608 ! ----------------------------------------------------------------------
1609 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
1610 ! (EXCEPT SUBSFC OR "GROUND" HEAT FLUX NOT REPEATED IN LOWER LAYERS)
1611 ! ----------------------------------------------------------------------
1612 ! CALCULATE HEAT CAPACITY FOR THIS SOIL LAYER.
1613 ! ----------------------------------------------------------------------
1615 HCPCT = SH2O (K)* CH2O + (1.0- SMCMAX)* CSOIL_LOC + (SMCMAX - SMC ( &
1616 K))* CAIR + ( SMC (K) - SH2O (K) )* CICE
1617 ! ----------------------------------------------------------------------
1618 ! THIS SECTION FOR LAYER 2 OR GREATER, BUT NOT LAST LAYER.
1619 ! ----------------------------------------------------------------------
1620 ! CALCULATE THERMAL DIFFUSIVITY FOR THIS LAYER.
1621 ! ----------------------------------------------------------------------
1622 IF (K /= NSOIL) THEN
1624 ! ----------------------------------------------------------------------
1625 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER
1626 ! ----------------------------------------------------------------------
1627 CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
1630 IF ( VEGTYP == ISURBAN ) DF1N = 3.24
1632 DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
1634 ! ----------------------------------------------------------------------
1635 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
1636 ! ----------------------------------------------------------------------
1637 DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
1638 DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
1640 ! ----------------------------------------------------------------------
1641 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP): CALCULATE
1642 ! TEMP AT BOTTOM OF LAYER.
1643 ! ----------------------------------------------------------------------
1644 CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K)) * &
1647 CALL TBND (STC (K),STC (K +1),ZSOIL,ZBOT,K,NSOIL,TBK1)
1651 ! ----------------------------------------------------------------------
1652 ! SPECIAL CASE OF BOTTOM SOIL LAYER: CALCULATE THERMAL DIFFUSIVITY FOR
1654 ! ----------------------------------------------------------------------
1656 ! ----------------------------------------------------------------------
1657 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU BOTTOM LAYER.
1658 ! ----------------------------------------------------------------------
1659 CALL TDFCND (DF1N,SMC (K),QUARTZ,SMCMAX,SH2O (K))
1663 IF ( VEGTYP == ISURBAN ) DF1N = 3.24
1665 DENOM = .5 * (ZSOIL (K -1) + ZSOIL (K)) - ZBOT
1667 ! ----------------------------------------------------------------------
1668 ! SET MATRIX COEF, CI TO ZERO IF BOTTOM LAYER.
1669 ! ----------------------------------------------------------------------
1670 DTSDZ2 = (STC (K) - TBOT) / DENOM
1672 ! ----------------------------------------------------------------------
1673 ! IF TEMPERATURE AVERAGING INVOKED (ITAVG=TRUE; ELSE SKIP): CALCULATE
1674 ! TEMP AT BOTTOM OF LAST LAYER.
1675 ! ----------------------------------------------------------------------
1678 CALL TBND (STC (K),TBOT,ZSOIL,ZBOT,K,NSOIL,TBK1)
1680 ! ----------------------------------------------------------------------
1681 ! THIS ENDS SPECIAL LOOP FOR BOTTOM LAYER.
1683 ! ----------------------------------------------------------------------
1684 ! CALCULATE RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
1685 ! ----------------------------------------------------------------------
1686 DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
1687 RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
1688 QTOT = -1.0* DENOM * RHSTS (K)
1690 SICE = SMC (K) - SH2O (K)
1692 CALL TMPAVG (TAVG,TBK,STC (K),TBK1,ZSOIL,NSOIL,K)
1693 ! TSNSR = SNKSRC(TAVG,SMC(K),SH2O(K),ZSOIL,NSOIL,
1694 IF ( (SICE > 0.) .OR. (STC (K) < T0) .OR. &
1695 (TBK .lt. T0) .OR. (TBK1 .lt. T0) ) THEN
1696 CALL SNKSRC (TSNSR,TAVG,SMC (K),SH2O (K),ZSOIL,NSOIL, &
1697 SMCMAX,PSISAT,BEXP,DT,K,QTOT)
1698 RHSTS (K) = RHSTS (K) - TSNSR / DENOM
1701 ! TSNSR = SNKSRC(STC(K),SMC(K),SH2O(K),ZSOIL,NSOIL,
1702 IF ( (SICE > 0.) .OR. (STC (K) < T0) ) THEN
1703 CALL SNKSRC (TSNSR,STC (K),SMC (K),SH2O (K),ZSOIL,NSOIL, &
1704 SMCMAX,PSISAT,BEXP,DT,K,QTOT)
1705 RHSTS (K) = RHSTS (K) - TSNSR / DENOM
1709 ! ----------------------------------------------------------------------
1710 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
1711 ! ----------------------------------------------------------------------
1712 AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
1714 ! ----------------------------------------------------------------------
1715 ! RESET VALUES OF DF1, DTSDZ, DDZ, AND TBK FOR LOOP TO NEXT SOIL LAYER.
1716 ! ----------------------------------------------------------------------
1717 BI (K) = - (AI (K) + CI (K))
1723 ! ----------------------------------------------------------------------
1725 ! ----------------------------------------------------------------------
1727 SUBROUTINE HRTICE (RHSTS,STC,TBOT,ICE,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
1729 ! ----------------------------------------------------------------------
1731 ! ----------------------------------------------------------------------
1732 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
1733 ! THERMAL DIFFUSION EQUATION IN THE CASE OF SEA-ICE (ICE=1) OR GLACIAL
1734 ! ICE (ICE=-1). COMPUTE (PREPARE) THE MATRIX COEFFICIENTS FOR THE
1735 ! TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
1737 ! (NOTE: THIS SUBROUTINE ONLY CALLED FOR SEA-ICE OR GLACIAL ICE, BUT
1738 ! NOT FOR NON-GLACIAL LAND (ICE = 0).
1739 ! ----------------------------------------------------------------------
1743 INTEGER, INTENT(IN) :: NSOIL
1746 REAL, INTENT(IN) :: DF1,YY,ZZ1
1747 REAL, DIMENSION(1:NSOIL), INTENT(OUT):: AI, BI,CI
1748 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: STC, ZSOIL
1749 REAL, DIMENSION(1:NSOIL), INTENT(OUT):: RHSTS
1750 REAL, INTENT(IN) :: TBOT
1751 INTEGER, INTENT(IN) :: ICE
1752 REAL :: DDZ,DDZ2,DENOM,DTSDZ,DTSDZ2,SSOIL, &
1759 ! ----------------------------------------------------------------------
1760 ! SET A NOMINAL UNIVERSAL VALUE OF THE SEA-ICE SPECIFIC HEAT CAPACITY,
1761 ! HCPCT = 1880.0*917.0.
1762 ! ----------------------------------------------------------------------
1763 IF ( ICE == 1 ) THEN
1766 ELSEIF (ICE == -1) THEN
1767 ! SET A NOMINAL UNIVERSAL VALUE OF GLACIAL-ICE SPECIFIC HEAT CAPACITY,
1768 ! HCPCT = 2100.0*900.0 = 1.89000E+6 (SOURCE: BOB GRUMBINE, 2005)
1769 ! TBOT PASSED IN AS ARGUMENT, VALUE FROM GLOBAL DATA SET
1771 ! A least-squares fit for the four points provided by
1772 ! Keith Hines for the Yen (1981) values for Antarctic
1775 HCPCT = 1.E6 * (0.8194 - 0.1309*0.5*ZSOIL(1))
1779 ! ----------------------------------------------------------------------
1780 ! THE INPUT ARGUMENT DF1 IS A UNIVERSALLY CONSTANT VALUE OF SEA-ICE
1781 ! THERMAL DIFFUSIVITY, SET IN ROUTINE SNOPAC AS DF1 = 2.2.
1782 ! ----------------------------------------------------------------------
1783 ! SET ICE PACK DEPTH. USE TBOT AS ICE PACK LOWER BOUNDARY TEMPERATURE
1784 ! (THAT OF UNFROZEN SEA WATER AT BOTTOM OF SEA ICE PACK). ASSUME ICE
1785 ! PACK IS OF N=NSOIL LAYERS SPANNING A UNIFORM CONSTANT ICE PACK
1786 ! THICKNESS AS DEFINED BY ZSOIL(NSOIL) IN ROUTINE SFLX.
1787 ! ----------------------------------------------------------------------
1788 ! ----------------------------------------------------------------------
1789 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
1790 ! ----------------------------------------------------------------------
1792 ZBOT = ZSOIL (NSOIL)
1793 ELSE IF (ICE == -1) THEN
1796 DDZ = 1.0 / ( -0.5 * ZSOIL (2) )
1798 CI (1) = (DF1 * DDZ) / (ZSOIL (1) * HCPCT)
1800 ! ----------------------------------------------------------------------
1801 ! CALC THE VERTICAL SOIL TEMP GRADIENT BTWN THE TOP AND 2ND SOIL LAYERS.
1802 ! RECALC/ADJUST THE SOIL HEAT FLUX. USE THE GRADIENT AND FLUX TO CALC
1803 ! RHSTS FOR THE TOP SOIL LAYER.
1804 ! ----------------------------------------------------------------------
1805 BI (1) = - CI (1) + DF1/ (0.5 * ZSOIL (1) * ZSOIL (1) * HCPCT * &
1807 DTSDZ = ( STC (1) - STC (2) ) / ( -0.5 * ZSOIL (2) )
1808 SSOIL = DF1 * ( STC (1) - YY ) / ( 0.5 * ZSOIL (1) * ZZ1 )
1810 ! ----------------------------------------------------------------------
1812 ! ----------------------------------------------------------------------
1813 RHSTS (1) = ( DF1 * DTSDZ - SSOIL ) / ( ZSOIL (1) * HCPCT )
1815 ! ----------------------------------------------------------------------
1816 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABOVE PROCESS
1817 ! ----------------------------------------------------------------------
1823 IF ( ICE == -1 ) THEN
1824 ZMD = 0.5 * (ZSOIL(K)+ZSOIL(K-1))
1825 ! For the land-ice case
1826 ! kmh 09/03/2006 use Yen (1981)'s values for Antarctic snow firn
1827 ! IF ( K .eq. 2 ) HCPCT = 0.855108E6
1828 ! IF ( K .eq. 3 ) HCPCT = 0.922906E6
1829 ! IF ( K .eq. 4 ) HCPCT = 1.009986E6
1831 ! Least squares fit to the four points supplied by Keith Hines
1832 ! from Yen (1981) for Antarctic snow firn. Not optimal, but
1833 ! probably better than just a constant.
1834 HCPCT = 1.E6 * ( 0.8194 - 0.1309*ZMD )
1836 ! IF ( K .eq. 2 ) DF1N = 0.345356
1837 ! IF ( K .eq. 3 ) DF1N = 0.398777
1838 ! IF ( K .eq. 4 ) DF1N = 0.472653
1840 ! Least squares fit to the three points supplied by Keith Hines
1841 ! from Yen (1981) for Antarctic snow firn. Not optimal, but
1842 ! probably better than just a constant.
1843 DF1N = 0.32333 - ( 0.10073 * ZMD )
1845 ! ----------------------------------------------------------------------
1846 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THIS LAYER.
1847 ! ----------------------------------------------------------------------
1848 IF (K /= NSOIL) THEN
1849 DENOM = 0.5 * ( ZSOIL (K -1) - ZSOIL (K +1) )
1851 ! ----------------------------------------------------------------------
1852 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT.
1853 ! ----------------------------------------------------------------------
1854 DTSDZ2 = ( STC (K) - STC (K +1) ) / DENOM
1855 DDZ2 = 2. / (ZSOIL (K -1) - ZSOIL (K +1))
1856 CI (K) = - DF1N * DDZ2 / ( (ZSOIL (K -1) - ZSOIL (K))*HCPCT)
1858 ! ----------------------------------------------------------------------
1859 ! CALC THE VERTICAL SOIL TEMP GRADIENT THRU THE LOWEST LAYER.
1860 ! ----------------------------------------------------------------------
1863 ! ----------------------------------------------------------------------
1864 ! SET MATRIX COEF, CI TO ZERO.
1865 ! ----------------------------------------------------------------------
1866 DTSDZ2 = (STC (K) - TBOT)/ (.5 * (ZSOIL (K -1) + ZSOIL (K)) &
1869 ! ----------------------------------------------------------------------
1870 ! CALC RHSTS FOR THIS LAYER AFTER CALC'NG A PARTIAL PRODUCT.
1871 ! ----------------------------------------------------------------------
1873 DENOM = ( ZSOIL (K) - ZSOIL (K -1) ) * HCPCT
1875 ! ----------------------------------------------------------------------
1876 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER.
1877 ! ----------------------------------------------------------------------
1878 RHSTS (K) = ( DF1N * DTSDZ2- DF1K * DTSDZ ) / DENOM
1879 AI (K) = - DF1K * DDZ / ( (ZSOIL (K -1) - ZSOIL (K)) * HCPCT)
1881 ! ----------------------------------------------------------------------
1882 ! RESET VALUES OF DTSDZ AND DDZ FOR LOOP TO NEXT SOIL LYR.
1883 ! ----------------------------------------------------------------------
1884 BI (K) = - (AI (K) + CI (K))
1889 ! ----------------------------------------------------------------------
1890 END SUBROUTINE HRTICE
1891 ! ----------------------------------------------------------------------
1893 SUBROUTINE HSTEP (STCOUT,STCIN,RHSTS,DT,NSOIL,AI,BI,CI)
1895 ! ----------------------------------------------------------------------
1897 ! ----------------------------------------------------------------------
1898 ! CALCULATE/UPDATE THE SOIL TEMPERATURE FIELD.
1899 ! ----------------------------------------------------------------------
1901 INTEGER, INTENT(IN) :: NSOIL
1904 REAL, DIMENSION(1:NSOIL), INTENT(IN):: STCIN
1905 REAL, DIMENSION(1:NSOIL), INTENT(OUT):: STCOUT
1906 REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: RHSTS
1907 REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: AI,BI,CI
1908 REAL, DIMENSION(1:NSOIL) :: RHSTSin
1909 REAL, DIMENSION(1:NSOIL) :: CIin
1912 ! ----------------------------------------------------------------------
1913 ! CREATE FINITE DIFFERENCE VALUES FOR USE IN ROSR12 ROUTINE
1914 ! ----------------------------------------------------------------------
1916 RHSTS (K) = RHSTS (K) * DT
1917 AI (K) = AI (K) * DT
1918 BI (K) = 1. + BI (K) * DT
1919 CI (K) = CI (K) * DT
1921 ! ----------------------------------------------------------------------
1922 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
1923 ! ----------------------------------------------------------------------
1925 RHSTSin (K) = RHSTS (K)
1930 ! ----------------------------------------------------------------------
1931 ! SOLVE THE TRI-DIAGONAL MATRIX EQUATION
1932 ! ----------------------------------------------------------------------
1933 CALL ROSR12 (CI,AI,BI,CIin,RHSTSin,RHSTS,NSOIL)
1934 ! ----------------------------------------------------------------------
1935 ! CALC/UPDATE THE SOIL TEMPS USING MATRIX SOLUTION
1936 ! ----------------------------------------------------------------------
1938 STCOUT (K) = STCIN (K) + CI (K)
1940 ! ----------------------------------------------------------------------
1941 END SUBROUTINE HSTEP
1942 ! ----------------------------------------------------------------------
1944 SUBROUTINE NOPAC (ETP,ETA,PRCP,SMC,SMCMAX,SMCWLT, &
1945 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT,SHDFAC, &
1946 SBETA,Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,EMISSI, &
1948 STC,EPSCA,BEXP,PC,RCH,RR,CFACTR, &
1949 SH2O,SLOPE,KDT,FRZFACT,PSISAT,ZSOIL, &
1950 DKSAT,DWSAT,TBOT,ZBOT,RUNOFF1,RUNOFF2, &
1951 RUNOFF3,EDIR,EC,ET,ETT,NROOT,ICE,RTDIS, &
1952 QUARTZ,FXEXP,CSOIL, &
1953 BETA,DRIP,DEW,FLX1,FLX3,VEGTYP,ISURBAN)
1955 ! ----------------------------------------------------------------------
1957 ! ----------------------------------------------------------------------
1958 ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES AND UPDATE SOIL MOISTURE
1959 ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN NO SNOW PACK IS
1961 ! ----------------------------------------------------------------------
1964 INTEGER, INTENT(IN) :: ICE, NROOT,NSOIL,VEGTYP
1965 INTEGER, INTENT(IN) :: ISURBAN
1968 REAL, INTENT(IN) :: BEXP,CFACTR, CMCMAX,CSOIL,DKSAT,DT,DWSAT, &
1969 EPSCA,ETP,FDOWN,F1,FXEXP,FRZFACT,KDT,PC, &
1970 PRCP,PSISAT,Q2,QUARTZ,RCH,RR,SBETA,SFCTMP,&
1971 SHDFAC,SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, &
1972 T24,TBOT,TH2,ZBOT,EMISSI
1973 REAL, INTENT(INOUT) :: CMC,BETA,T1
1974 REAL, INTENT(OUT) :: DEW,DRIP,EC,EDIR,ETA,ETT,FLX1,FLX3, &
1975 RUNOFF1,RUNOFF2,RUNOFF3,SSOIL
1976 REAL, DIMENSION(1:NSOIL),INTENT(IN) :: RTDIS,ZSOIL
1977 REAL, DIMENSION(1:NSOIL),INTENT(OUT) :: ET
1978 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
1979 REAL, DIMENSION(1:NSOIL) :: ET1
1980 REAL :: EC1,EDIR1,ETT1,DF1,ETA1,ETP1,PRCP1,YY, &
1983 ! ----------------------------------------------------------------------
1984 ! EXECUTABLE CODE BEGINS HERE:
1985 ! CONVERT ETP Fnd PRCP FROM KG M-2 S-1 TO M S-1 AND INITIALIZE DEW.
1986 ! ----------------------------------------------------------------------
1987 PRCP1 = PRCP * 0.001
1990 ! ----------------------------------------------------------------------
1991 ! INITIALIZE EVAP TERMS.
1992 ! ----------------------------------------------------------------------
2005 CALL EVAPO (ETA1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
2007 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
2008 SMCREF,SHDFAC,CMCMAX, &
2010 EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS,FXEXP)
2011 CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
2012 SH2O,SLOPE,KDT,FRZFACT, &
2013 SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
2015 RUNOFF1,RUNOFF2,RUNOFF3, &
2019 ! ----------------------------------------------------------------------
2020 ! CONVERT MODELED EVAPOTRANSPIRATION FROM M S-1 TO KG M-2 S-1.
2021 ! ----------------------------------------------------------------------
2025 ! ----------------------------------------------------------------------
2026 ! IF ETP < 0, ASSUME DEW FORMS (TRANSFORM ETP1 INTO DEW AND REINITIALIZE
2028 ! ----------------------------------------------------------------------
2032 ! ----------------------------------------------------------------------
2033 ! CONVERT PRCP FROM 'KG M-2 S-1' TO 'M S-1' AND ADD DEW AMOUNT.
2034 ! ----------------------------------------------------------------------
2037 CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
2038 SH2O,SLOPE,KDT,FRZFACT, &
2039 SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
2041 RUNOFF1,RUNOFF2,RUNOFF3, &
2045 ! ----------------------------------------------------------------------
2046 ! CONVERT MODELED EVAPOTRANSPIRATION FROM 'M S-1' TO 'KG M-2 S-1'.
2047 ! ----------------------------------------------------------------------
2048 ! ETA = ETA1 * 1000.0
2051 ! ----------------------------------------------------------------------
2052 ! BASED ON ETP AND E VALUES, DETERMINE BETA
2053 ! ----------------------------------------------------------------------
2055 IF ( ETP <= 0.0 ) THEN
2058 IF ( ETP < 0.0 ) THEN
2065 ! ----------------------------------------------------------------------
2066 ! CONVERT MODELED EVAPOTRANSPIRATION COMPONENTS 'M S-1' TO 'KG M-2 S-1'.
2067 ! ----------------------------------------------------------------------
2071 ET(K) = ET1(K)*1000.
2075 ! ----------------------------------------------------------------------
2076 ! GET SOIL THERMAL DIFFUXIVITY/CONDUCTIVITY FOR TOP SOIL LYR,
2077 ! CALC. ADJUSTED TOP LYR SOIL TEMP AND ADJUSTED SOIL FLUX, THEN
2078 ! CALL SHFLX TO COMPUTE/UPDATE SOIL HEAT FLUX AND SOIL TEMPS.
2079 ! ----------------------------------------------------------------------
2081 CALL TDFCND (DF1,SMC (1),QUARTZ,SMCMAX,SH2O (1))
2084 IF ( VEGTYP == ISURBAN ) DF1=3.24
2087 ! ----------------------------------------------------------------------
2088 ! VEGETATION GREENNESS FRACTION REDUCTION IN SUBSURFACE HEAT FLUX
2089 ! VIA REDUCTION FACTOR, WHICH IS CONVENIENT TO APPLY HERE TO THERMAL
2090 ! DIFFUSIVITY THAT IS LATER USED IN HRT TO COMPUTE SUB SFC HEAT FLUX
2091 ! (SEE ADDITIONAL COMMENTS ON VEG EFFECT SUB-SFC HEAT FLX IN
2093 ! ----------------------------------------------------------------------
2094 DF1 = DF1 * EXP (SBETA * SHDFAC)
2095 ! ----------------------------------------------------------------------
2096 ! COMPUTE INTERMEDIATE TERMS PASSED TO ROUTINE HRT (VIA ROUTINE
2097 ! SHFLX BELOW) FOR USE IN COMPUTING SUBSURFACE HEAT FLUX IN HRT
2098 ! ----------------------------------------------------------------------
2099 YYNUM = FDOWN - EMISSI*SIGMA * T24
2100 YY = SFCTMP + (YYNUM / RCH + TH2- SFCTMP - BETA * EPSCA) / RR
2102 ZZ1 = DF1 / ( -0.5 * ZSOIL (1) * RCH * RR ) + 1.0
2105 CALL SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, &
2106 TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
2107 QUARTZ,CSOIL,VEGTYP,ISURBAN)
2109 ! ----------------------------------------------------------------------
2110 ! SET FLX1 AND FLX3 (SNOPACK PHASE CHANGE HEAT FLUXES) TO ZERO SINCE
2111 ! THEY ARE NOT USED HERE IN SNOPAC. FLX2 (FREEZING RAIN HEAT FLUX) WAS
2112 ! SIMILARLY INITIALIZED IN THE PENMAN ROUTINE.
2113 ! ----------------------------------------------------------------------
2117 ! ----------------------------------------------------------------------
2118 END SUBROUTINE NOPAC
2119 ! ----------------------------------------------------------------------
2121 SUBROUTINE PENMAN (SFCTMP,SFCPRS,CH,T2V,TH2,PRCP,FDOWN,T24,SSOIL, &
2122 & Q2,Q2SAT,ETP,RCH,EPSCA,RR,SNOWNG,FRZGRA, &
2123 & DQSDT2,FLX2,EMISSI_IN,SNEQV,T1,ICE,SNCOVR)
2125 ! ----------------------------------------------------------------------
2127 ! ----------------------------------------------------------------------
2128 ! CALCULATE POTENTIAL EVAPORATION FOR THE CURRENT POINT. VARIOUS
2129 ! PARTIAL SUMS/PRODUCTS ARE ALSO CALCULATED AND PASSED BACK TO THE
2130 ! CALLING ROUTINE FOR LATER USE.
2131 ! ----------------------------------------------------------------------
2133 LOGICAL, INTENT(IN) :: SNOWNG, FRZGRA
2134 REAL, INTENT(IN) :: CH, DQSDT2,FDOWN,PRCP, &
2135 Q2, Q2SAT,SSOIL, SFCPRS, SFCTMP, &
2136 T2V, TH2,EMISSI_IN,SNEQV
2137 REAL, INTENT(IN) :: T1 , SNCOVR
2140 INTEGER, INTENT(IN) :: ICE
2143 REAL, INTENT(OUT) :: EPSCA,ETP,FLX2,RCH,RR,T24
2144 REAL :: A, DELTA, FNET,RAD,RHO,EMISSI,ELCP1,LVS
2146 REAL, PARAMETER :: ELCP = 2.4888E+3, LSUBC = 2.501000E+6,CP = 1004.6
2147 REAL, PARAMETER :: LSUBS = 2.83E+6
2149 ! ----------------------------------------------------------------------
2150 ! EXECUTABLE CODE BEGINS HERE:
2151 ! ----------------------------------------------------------------------
2152 ! ----------------------------------------------------------------------
2153 ! PREPARE PARTIAL QUANTITIES FOR PENMAN EQUATION.
2154 ! ----------------------------------------------------------------------
2157 ELCP1 = (1.0-SNCOVR)*ELCP + SNCOVR*ELCP*LSUBS/LSUBC
2158 LVS = (1.0-SNCOVR)*LSUBC + SNCOVR*LSUBS
2160 IF ( T1 > 273.15 ) THEN
2164 ELCP1 = ELCP*LSUBS/LSUBC
2170 ! DELTA = ELCP * DQSDT2
2171 DELTA = ELCP1 * DQSDT2
2172 T24 = SFCTMP * SFCTMP * SFCTMP * SFCTMP
2173 ! RR = T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
2174 RR = EMISSI*T24 * 6.48E-8 / (SFCPRS * CH) + 1.0
2175 RHO = SFCPRS / (RD * T2V)
2177 ! ----------------------------------------------------------------------
2178 ! ADJUST THE PARTIAL SUMS / PRODUCTS WITH THE LATENT HEAT
2179 ! EFFECTS CAUSED BY FALLING PRECIPITATION.
2180 ! ----------------------------------------------------------------------
2182 IF (.NOT. SNOWNG) THEN
2183 IF (PRCP > 0.0) RR = RR + CPH2O * PRCP / RCH
2185 RR = RR + CPICE * PRCP / RCH
2188 ! ----------------------------------------------------------------------
2189 ! INCLUDE THE LATENT HEAT EFFECTS OF FRZNG RAIN CONVERTING TO ICE ON
2190 ! IMPACT IN THE CALCULATION OF FLX2 AND FNET.
2191 ! ----------------------------------------------------------------------
2192 ! FNET = FDOWN - SIGMA * T24- SSOIL
2193 FNET = FDOWN - EMISSI*SIGMA * T24- SSOIL
2195 FLX2 = - LSUBF * PRCP
2197 ! ----------------------------------------------------------------------
2198 ! FINISH PENMAN EQUATION CALCULATIONS.
2199 ! ----------------------------------------------------------------------
2201 RAD = FNET / RCH + TH2- SFCTMP
2202 ! A = ELCP * (Q2SAT - Q2)
2203 A = ELCP1 * (Q2SAT - Q2)
2204 EPSCA = (A * RR + RAD * DELTA) / (DELTA + RR)
2205 ! ETP = EPSCA * RCH / LSUBC
2206 ETP = EPSCA * RCH / LVS
2208 ! ----------------------------------------------------------------------
2209 END SUBROUTINE PENMAN
2210 ! ----------------------------------------------------------------------
2212 SUBROUTINE REDPRM (VEGTYP,SOILTYP,SLOPETYP,CFACTR,CMCMAX,RSMAX, &
2214 REFKDT,KDT,SBETA, SHDFAC,RSMIN,RGL,HS,ZBOT,FRZX, &
2215 PSISAT,SLOPE,SNUP,SALP,BEXP,DKSAT,DWSAT, &
2216 SMCMAX,SMCWLT,SMCREF,SMCDRY,F1,QUARTZ,FXEXP, &
2217 RTDIS,SLDPTH,ZSOIL, NROOT,NSOIL,CZIL, &
2218 LAIMIN, LAIMAX, EMISSMIN, EMISSMAX, ALBEDOMIN, &
2219 ALBEDOMAX, Z0MIN, Z0MAX, CSOIL, PTU, LLANDUSE, &
2220 LSOIL, LOCAL,LVCOEF)
2223 ! ----------------------------------------------------------------------
2224 ! Internally set (default valuess)
2225 ! all soil and vegetation parameters required for the execusion oF
2226 ! the Noah lsm are defined in VEGPARM.TBL, SOILPARM.TB, and GENPARM.TBL.
2227 ! ----------------------------------------------------------------------
2228 ! Vegetation parameters:
2229 ! ALBBRD: SFC background snow-free albedo
2230 ! CMXTBL: MAX CNPY Capacity
2231 ! Z0BRD: Background roughness length
2232 ! SHDFAC: Green vegetation fraction
2233 ! NROOT: Rooting depth
2234 ! RSMIN: Mimimum stomatal resistance
2235 ! RSMAX: Max. stomatal resistance
2236 ! RGL: Parameters used in radiation stress function
2237 ! HS: Parameter used in vapor pressure deficit functio
2238 ! TOPT: Optimum transpiration air temperature.
2239 ! CMCMAX: Maximum canopy water capacity
2240 ! CFACTR: Parameter used in the canopy inteception calculation
2241 ! SNUP: Threshold snow depth (in water equivalent m) that
2242 ! implies 100 percent snow cover
2243 ! LAI: Leaf area index
2245 ! ----------------------------------------------------------------------
2247 ! SMCMAX: MAX soil moisture content (porosity)
2248 ! SMCREF: Reference soil moisture (field capacity)
2249 ! SMCWLT: Wilting point soil moisture
2250 ! SMCWLT: Air dry soil moist content limits
2251 ! SSATPSI: SAT (saturation) soil potential
2252 ! DKSAT: SAT soil conductivity
2254 ! SSATDW: SAT soil diffusivity
2255 ! F1: Soil thermal diffusivity/conductivity coef.
2256 ! QUARTZ: Soil quartz content
2257 ! Modified by F. Chen (12/22/97) to use the STATSGO soil map
2258 ! Modified By F. Chen (01/22/00) to include PLaya, Lava, and White San
2259 ! Modified By F. Chen (08/05/02) to include additional parameters for the Noah
2260 ! NOTE: SATDW = BB*SATDK*(SATPSI/MAXSMC)
2261 ! F11 = ALOG10(SATPSI) + BB*ALOG10(MAXSMC) + 2.0
2262 ! REFSMC1=MAXSMC*(5.79E-9/SATDK)**(1/(2*BB+3)) 5.79E-9 m/s= 0.5 mm
2263 ! REFSMC=REFSMC1+1./3.(MAXSMC-REFSMC1)
2264 ! WLTSMC1=MAXSMC*(200./SATPSI)**(-1./BB) (Wetzel and Chang, 198
2265 ! WLTSMC=WLTSMC1-0.5*WLTSMC1
2266 ! Note: the values for playa is set for it to have a thermal conductivit
2267 ! as sand and to have a hydrulic conductivity as clay
2269 ! ----------------------------------------------------------------------
2270 ! Class parameter 'SLOPETYP' was included to estimate linear reservoir
2271 ! coefficient 'SLOPE' to the baseflow runoff out of the bottom layer.
2272 ! lowest class (slopetyp=0) means highest slope parameter = 1.
2273 ! definition of slopetyp from 'zobler' slope type:
2274 ! slope class percent slope
2284 ! SLOPE_DATA: linear reservoir coefficient
2285 ! SBETA_DATA: parameter used to caluculate vegetation effect on soil heat
2286 ! FXEXP_DAT: soil evaporation exponent used in DEVAP
2287 ! CSOIL_DATA: soil heat capacity [J M-3 K-1]
2288 ! SALP_DATA: shape parameter of distribution function of snow cover
2289 ! REFDK_DATA and REFKDT_DATA: parameters in the surface runoff parameteriz
2290 ! FRZK_DATA: frozen ground parameter
2291 ! ZBOT_DATA: depth[M] of lower boundary soil temperature
2292 ! CZIL_DATA: calculate roughness length of heat
2293 ! SMLOW_DATA and MHIGH_DATA: two soil moisture wilt, soil moisture referen
2295 ! Set maximum number of soil-, veg-, and slopetyp in data statement.
2296 ! ----------------------------------------------------------------------
2297 INTEGER, PARAMETER :: MAX_SLOPETYP=30,MAX_SOILTYP=30,MAX_VEGTYP=30
2299 CHARACTER (LEN=256), INTENT(IN):: LLANDUSE, LSOIL
2302 INTEGER, INTENT(IN) :: VEGTYP
2303 INTEGER, INTENT(OUT) :: NROOT
2304 REAL, INTENT(OUT) :: HS,RSMIN,RGL,SHDFAC,SNUP, &
2305 CMCMAX,RSMAX,TOPT, &
2306 EMISSMIN, EMISSMAX, &
2309 ALBEDOMIN, ALBEDOMAX
2311 INTEGER, INTENT(IN) :: SOILTYP
2312 REAL, INTENT(OUT) :: BEXP,DKSAT,DWSAT,F1,QUARTZ,SMCDRY, &
2313 SMCMAX,SMCREF,SMCWLT,PSISAT
2314 ! General parameters
2315 INTEGER, INTENT(IN) :: SLOPETYP,NSOIL
2318 REAL, INTENT(OUT) :: SLOPE,CZIL,SBETA,FXEXP, &
2319 CSOIL,SALP,FRZX,KDT,CFACTR, &
2321 REAL, INTENT(OUT) :: LVCOEF
2322 REAL,DIMENSION(1:NSOIL),INTENT(IN) :: SLDPTH,ZSOIL
2323 REAL,DIMENSION(1:NSOIL),INTENT(OUT):: RTDIS
2324 REAL :: FRZFACT,FRZK,REFDK
2327 ! ----------------------------------------------------------------------
2329 IF (SOILTYP .gt. SLCATS) THEN
2330 CALL wrf_error_fatal ( 'Warning: too many input soil types' )
2332 IF (VEGTYP .gt. LUCATS) THEN
2333 CALL wrf_error_fatal ( 'Warning: too many input landuse types' )
2335 IF (SLOPETYP .gt. SLPCATS) THEN
2336 CALL wrf_error_fatal ( 'Warning: too many input slope types' )
2339 ! ----------------------------------------------------------------------
2340 ! SET-UP SOIL PARAMETERS
2341 ! ----------------------------------------------------------------------
2344 DKSAT = SATDK (SOILTYP)
2345 DWSAT = SATDW (SOILTYP)
2347 PSISAT = SATPSI (SOILTYP)
2348 QUARTZ = QTZ (SOILTYP)
2349 SMCDRY = DRYSMC (SOILTYP)
2350 SMCMAX = MAXSMC (SOILTYP)
2351 SMCREF = REFSMC (SOILTYP)
2352 SMCWLT = WLTSMC (SOILTYP)
2353 ! ----------------------------------------------------------------------
2354 ! Set-up universal parameters (not dependent on SOILTYP, VEGTYP or
2356 ! ----------------------------------------------------------------------
2363 REFKDT = REFKDT_DATA
2364 PTU = 0. ! (not used yet) to satisify intent(out)
2365 KDT = REFKDT * DKSAT / REFDK
2367 SLOPE = SLOPE_DATA (SLOPETYP)
2368 LVCOEF = LVCOEF_DATA
2370 ! ----------------------------------------------------------------------
2371 ! TO ADJUST FRZK PARAMETER TO ACTUAL SOIL TYPE: FRZK * FRZFACT
2372 ! ----------------------------------------------------------------------
2373 FRZFACT = (SMCMAX / SMCREF) * (0.412 / 0.468)
2374 FRZX = FRZK * FRZFACT
2376 ! ----------------------------------------------------------------------
2377 ! SET-UP VEGETATION PARAMETERS
2378 ! ----------------------------------------------------------------------
2380 CMCMAX = CMCMAX_DATA
2381 CFACTR = CFACTR_DATA
2383 NROOT = NROTBL (VEGTYP)
2384 SNUP = SNUPTBL (VEGTYP)
2385 RSMIN = RSTBL (VEGTYP)
2386 RGL = RGLTBL (VEGTYP)
2388 EMISSMIN = EMISSMINTBL (VEGTYP)
2389 EMISSMAX = EMISSMAXTBL (VEGTYP)
2390 LAIMIN = LAIMINTBL (VEGTYP)
2391 LAIMAX = LAIMAXTBL (VEGTYP)
2392 Z0MIN = Z0MINTBL (VEGTYP)
2393 Z0MAX = Z0MAXTBL (VEGTYP)
2394 ALBEDOMIN = ALBEDOMINTBL (VEGTYP)
2395 ALBEDOMAX = ALBEDOMAXTBL (VEGTYP)
2397 IF (VEGTYP .eq. BARE) SHDFAC = 0.0
2398 IF (NROOT .gt. NSOIL) THEN
2399 WRITE (err_message,*) 'Error: too many root layers ', &
2401 CALL wrf_error_fatal ( err_message )
2402 ! ----------------------------------------------------------------------
2403 ! CALCULATE ROOT DISTRIBUTION. PRESENT VERSION ASSUMES UNIFORM
2404 ! DISTRIBUTION BASED ON SOIL LAYER DEPTHS.
2405 ! ----------------------------------------------------------------------
2408 RTDIS (I) = - SLDPTH (I)/ ZSOIL (NROOT)
2409 ! ----------------------------------------------------------------------
2410 ! SET-UP SLOPE PARAMETER
2411 ! ----------------------------------------------------------------------
2414 ! print*,'end of PRMRED'
2415 ! print*,'VEGTYP',VEGTYP,'SOILTYP',SOILTYP,'SLOPETYP',SLOPETYP, &
2416 ! & 'CFACTR',CFACTR,'CMCMAX',CMCMAX,'RSMAX',RSMAX,'TOPT',TOPT, &
2417 ! & 'REFKDT',REFKDT,'KDT',KDT,'SBETA',SBETA, 'SHDFAC',SHDFAC, &
2418 ! & 'RSMIN',RSMIN,'RGL',RGL,'HS',HS,'ZBOT',ZBOT,'FRZX',FRZX, &
2419 ! & 'PSISAT',PSISAT,'SLOPE',SLOPE,'SNUP',SNUP,'SALP',SALP,'BEXP', &
2421 ! & 'DKSAT',DKSAT,'DWSAT',DWSAT, &
2422 ! & 'SMCMAX',SMCMAX,'SMCWLT',SMCWLT,'SMCREF',SMCREF,'SMCDRY',SMCDRY, &
2423 ! & 'F1',F1,'QUARTZ',QUARTZ,'FXEXP',FXEXP, &
2424 ! & 'RTDIS',RTDIS,'SLDPTH',SLDPTH,'ZSOIL',ZSOIL, 'NROOT',NROOT, &
2425 ! & 'NSOIL',NSOIL,'Z0',Z0,'CZIL',CZIL,'LAI',LAI, &
2426 ! & 'CSOIL',CSOIL,'PTU',PTU, &
2429 END SUBROUTINE REDPRM
2431 SUBROUTINE ROSR12 (P,A,B,C,D,DELTA,NSOIL)
2433 ! ----------------------------------------------------------------------
2435 ! ----------------------------------------------------------------------
2436 ! INVERT (SOLVE) THE TRI-DIAGONAL MATRIX PROBLEM SHOWN BELOW:
2437 ! ### ### ### ### ### ###
2438 ! #B(1), C(1), 0 , 0 , 0 , . . . , 0 # # # # #
2439 ! #A(2), B(2), C(2), 0 , 0 , . . . , 0 # # # # #
2440 ! # 0 , A(3), B(3), C(3), 0 , . . . , 0 # # # # D(3) #
2441 ! # 0 , 0 , A(4), B(4), C(4), . . . , 0 # # P(4) # # D(4) #
2442 ! # 0 , 0 , 0 , A(5), B(5), . . . , 0 # # P(5) # # D(5) #
2443 ! # . . # # . # = # . #
2444 ! # . . # # . # # . #
2445 ! # . . # # . # # . #
2446 ! # 0 , . . . , 0 , A(M-2), B(M-2), C(M-2), 0 # #P(M-2)# #D(M-2)#
2447 ! # 0 , . . . , 0 , 0 , A(M-1), B(M-1), C(M-1)# #P(M-1)# #D(M-1)#
2448 ! # 0 , . . . , 0 , 0 , 0 , A(M) , B(M) # # P(M) # # D(M) #
2449 ! ### ### ### ### ### ###
2450 ! ----------------------------------------------------------------------
2453 INTEGER, INTENT(IN) :: NSOIL
2456 REAL, DIMENSION(1:NSOIL), INTENT(IN):: A, B, D
2457 REAL, DIMENSION(1:NSOIL),INTENT(INOUT):: C,P,DELTA
2459 ! ----------------------------------------------------------------------
2460 ! INITIALIZE EQN COEF C FOR THE LOWEST SOIL LAYER
2461 ! ----------------------------------------------------------------------
2463 P (1) = - C (1) / B (1)
2464 ! ----------------------------------------------------------------------
2465 ! SOLVE THE COEFS FOR THE 1ST SOIL LAYER
2466 ! ----------------------------------------------------------------------
2468 ! ----------------------------------------------------------------------
2469 ! SOLVE THE COEFS FOR SOIL LAYERS 2 THRU NSOIL
2470 ! ----------------------------------------------------------------------
2471 DELTA (1) = D (1) / B (1)
2473 P (K) = - C (K) * ( 1.0 / (B (K) + A (K) * P (K -1)) )
2474 DELTA (K) = (D (K) - A (K)* DELTA (K -1))* (1.0/ (B (K) + A (K)&
2477 ! ----------------------------------------------------------------------
2478 ! SET P TO DELTA FOR LOWEST SOIL LAYER
2479 ! ----------------------------------------------------------------------
2480 P (NSOIL) = DELTA (NSOIL)
2482 ! ----------------------------------------------------------------------
2483 ! ADJUST P FOR SOIL LAYERS 2 THRU NSOIL
2484 ! ----------------------------------------------------------------------
2487 P (KK) = P (KK) * P (KK +1) + DELTA (KK)
2489 ! ----------------------------------------------------------------------
2490 END SUBROUTINE ROSR12
2491 ! ----------------------------------------------------------------------
2494 SUBROUTINE SHFLX (SSOIL,STC,SMC,SMCMAX,NSOIL,T1,DT,YY,ZZ1,ZSOIL, &
2495 TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
2496 QUARTZ,CSOIL,VEGTYP,ISURBAN)
2498 ! ----------------------------------------------------------------------
2500 ! ----------------------------------------------------------------------
2501 ! UPDATE THE TEMPERATURE STATE OF THE SOIL COLUMN BASED ON THE THERMAL
2502 ! DIFFUSION EQUATION AND UPDATE THE FROZEN SOIL MOISTURE CONTENT BASED
2503 ! ON THE TEMPERATURE.
2504 ! ----------------------------------------------------------------------
2507 INTEGER, INTENT(IN) :: ICE, NSOIL, VEGTYP, ISURBAN
2510 REAL, INTENT(IN) :: BEXP,CSOIL,DF1,DT,F1,PSISAT,QUARTZ, &
2511 SMCMAX, SMCWLT, TBOT,YY, ZBOT,ZZ1
2512 REAL, INTENT(INOUT) :: T1
2513 REAL, INTENT(OUT) :: SSOIL
2514 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SMC,ZSOIL
2515 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SH2O
2516 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: STC
2517 REAL, DIMENSION(1:NSOIL) :: AI, BI, CI, STCF,RHSTS
2518 REAL, PARAMETER :: T0 = 273.15
2520 ! ----------------------------------------------------------------------
2521 ! HRT ROUTINE CALCS THE RIGHT HAND SIDE OF THE SOIL TEMP DIF EQN
2522 ! ----------------------------------------------------------------------
2524 ! ----------------------------------------------------------------------
2525 ! SEA-ICE CASE, GLACIAL ICE CASE
2526 ! ----------------------------------------------------------------------
2527 IF ( ICE /= 0 ) THEN
2529 CALL HRTICE (RHSTS,STC,TBOT,ICE,NSOIL,ZSOIL,YY,ZZ1,DF1,AI,BI,CI)
2531 CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
2533 ! ----------------------------------------------------------------------
2535 ! ----------------------------------------------------------------------
2537 CALL HRT (RHSTS,STC,SMC,SMCMAX,NSOIL,ZSOIL,YY,ZZ1,TBOT, &
2538 ZBOT,PSISAT,SH2O,DT, &
2539 BEXP,F1,DF1,QUARTZ,CSOIL,AI,BI,CI,VEGTYP,ISURBAN)
2541 CALL HSTEP (STCF,STC,RHSTS,DT,NSOIL,AI,BI,CI)
2547 ! ----------------------------------------------------------------------
2548 ! IN THE NO SNOWPACK CASE (VIA ROUTINE NOPAC BRANCH,) UPDATE THE GRND
2549 ! (SKIN) TEMPERATURE HERE IN RESPONSE TO THE UPDATED SOIL TEMPERATURE
2550 ! PROFILE ABOVE. (NOTE: INSPECTION OF ROUTINE SNOPAC SHOWS THAT T1
2551 ! BELOW IS A DUMMY VARIABLE ONLY, AS SKIN TEMPERATURE IS UPDATED
2552 ! DIFFERENTLY IN ROUTINE SNOPAC)
2553 ! ----------------------------------------------------------------------
2554 ! ----------------------------------------------------------------------
2555 ! CALCULATE SURFACE SOIL HEAT FLUX
2556 ! ----------------------------------------------------------------------
2557 T1 = (YY + (ZZ1- 1.0) * STC (1)) / ZZ1
2558 SSOIL = DF1 * (STC (1) - T1) / (0.5 * ZSOIL (1))
2560 ! ----------------------------------------------------------------------
2561 END SUBROUTINE SHFLX
2562 ! ----------------------------------------------------------------------
2564 SUBROUTINE SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
2565 & SH2O,SLOPE,KDT,FRZFACT, &
2566 & SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
2568 & RUNOFF1,RUNOFF2,RUNOFF3, &
2572 ! ----------------------------------------------------------------------
2574 ! ----------------------------------------------------------------------
2575 ! CALCULATE SOIL MOISTURE FLUX. THE SOIL MOISTURE CONTENT (SMC - A PER
2576 ! UNIT VOLUME MEASUREMENT) IS A DEPENDENT VARIABLE THAT IS UPDATED WITH
2577 ! PROGNOSTIC EQNS. THE CANOPY MOISTURE CONTENT (CMC) IS ALSO UPDATED.
2578 ! FROZEN GROUND VERSION: NEW STATES ADDED: SH2O, AND FROZEN GROUND
2579 ! CORRECTION FACTOR, FRZFACT AND PARAMETER SLOPE.
2580 ! ----------------------------------------------------------------------
2583 INTEGER, INTENT(IN) :: NSOIL
2586 REAL, INTENT(IN) :: BEXP, CMCMAX, DKSAT,DWSAT, DT, EC, EDIR, &
2587 KDT, PRCP1, SHDFAC, SLOPE, SMCMAX, SMCWLT
2588 REAL, INTENT(OUT) :: DRIP, RUNOFF1, RUNOFF2, RUNOFF3
2589 REAL, INTENT(INOUT) :: CMC
2590 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ET,ZSOIL
2591 REAL, DIMENSION(1:NSOIL), INTENT(INOUT):: SMC, SH2O
2592 REAL, DIMENSION(1:NSOIL) :: AI, BI, CI, STCF,RHSTS, RHSTT, &
2594 REAL :: DUMMY, EXCESS,FRZFACT,PCPDRP,RHSCT,TRHSCT
2598 ! ----------------------------------------------------------------------
2599 ! EXECUTABLE CODE BEGINS HERE.
2600 ! ----------------------------------------------------------------------
2601 ! ----------------------------------------------------------------------
2602 ! COMPUTE THE RIGHT HAND SIDE OF THE CANOPY EQN TERM ( RHSCT )
2603 ! ----------------------------------------------------------------------
2606 ! ----------------------------------------------------------------------
2607 ! CONVERT RHSCT (A RATE) TO TRHSCT (AN AMOUNT) AND ADD IT TO EXISTING
2608 ! CMC. IF RESULTING AMT EXCEEDS MAX CAPACITY, IT BECOMES DRIP AND WILL
2610 ! ----------------------------------------------------------------------
2611 RHSCT = SHDFAC * PRCP1- EC
2614 EXCESS = CMC + TRHSCT
2616 ! ----------------------------------------------------------------------
2617 ! PCPDRP IS THE COMBINED PRCP1 AND DRIP (FROM CMC) THAT GOES INTO THE
2619 ! ----------------------------------------------------------------------
2620 IF (EXCESS > CMCMAX) DRIP = EXCESS - CMCMAX
2621 PCPDRP = (1. - SHDFAC) * PRCP1+ DRIP / DT
2623 ! ----------------------------------------------------------------------
2624 ! STORE ICE CONTENT AT EACH SOIL LAYER BEFORE CALLING SRT and SSTEP
2627 SICE (I) = SMC (I) - SH2O (I)
2629 ! ----------------------------------------------------------------------
2630 ! CALL SUBROUTINES SRT AND SSTEP TO SOLVE THE SOIL MOISTURE
2631 ! TENDENCY EQUATIONS.
2632 ! IF THE INFILTRATING PRECIP RATE IS NONTRIVIAL,
2633 ! (WE CONSIDER NONTRIVIAL TO BE A PRECIP TOTAL OVER THE TIME STEP
2634 ! EXCEEDING ONE ONE-THOUSANDTH OF THE WATER HOLDING CAPACITY OF
2635 ! THE FIRST SOIL LAYER)
2636 ! THEN CALL THE SRT/SSTEP SUBROUTINE PAIR TWICE IN THE MANNER OF
2637 ! TIME SCHEME "F" (IMPLICIT STATE, AVERAGED COEFFICIENT)
2638 ! OF SECTION 2 OF KALNAY AND KANAMITSU (1988, MWR, VOL 116,
2639 ! PAGES 1945-1958)TO MINIMIZE 2-DELTA-T OSCILLATIONS IN THE
2640 ! SOIL MOISTURE VALUE OF THE TOP SOIL LAYER THAT CAN ARISE BECAUSE
2641 ! OF THE EXTREME NONLINEAR DEPENDENCE OF THE SOIL HYDRAULIC
2642 ! DIFFUSIVITY COEFFICIENT AND THE HYDRAULIC CONDUCTIVITY ON THE
2643 ! SOIL MOISTURE STATE
2644 ! OTHERWISE CALL THE SRT/SSTEP SUBROUTINE PAIR ONCE IN THE MANNER OF
2645 ! TIME SCHEME "D" (IMPLICIT STATE, EXPLICIT COEFFICIENT)
2646 ! OF SECTION 2 OF KALNAY AND KANAMITSU
2647 ! PCPDRP IS UNITS OF KG/M**2/S OR MM/S, ZSOIL IS NEGATIVE DEPTH IN M
2648 ! ----------------------------------------------------------------------
2649 ! According to Dr. Ken Mitchell's suggestion, add the second contraint
2650 ! to remove numerical instability of runoff and soil moisture
2651 ! FLIMIT is a limit value for FAC2
2654 FAC2=MAX(FAC2,SH2O(I)/SMCMAX)
2656 CALL FAC2MIT(SMCMAX,FLIMIT)
2658 ! ----------------------------------------------------------------------
2659 ! FROZEN GROUND VERSION:
2660 ! SMC STATES REPLACED BY SH2O STATES IN SRT SUBR. SH2O & SICE STATES
2661 ! INC&UDED IN SSTEP SUBR. FROZEN GROUND CORRECTION FACTOR, FRZFACT
2662 ! ADDED. ALL WATER BALANCE CALCULATIONS USING UNFROZEN WATER
2663 ! ----------------------------------------------------------------------
2664 IF ( ( (PCPDRP * DT) > (0.0001*1000.0* (- ZSOIL (1))* SMCMAX) ) &
2665 .OR. (FAC2 > FLIMIT) ) THEN
2666 CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL, &
2667 DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
2668 RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2669 CALL SSTEP (SH2OFG,SH2O,DUMMY,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
2670 CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2672 SH2OA (K) = (SH2O (K) + SH2OFG (K)) * 0.5
2674 CALL SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP,ZSOIL, &
2675 DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
2676 RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2677 CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
2678 CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2681 CALL SRT (RHSTT,EDIR,ET,SH2O,SH2O,NSOIL,PCPDRP,ZSOIL, &
2682 DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
2683 RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZFACT,SICE,AI,BI,CI)
2684 CALL SSTEP (SH2O,SH2O,CMC,RHSTT,RHSCT,DT,NSOIL,SMCMAX, &
2685 CMCMAX,RUNOFF3,ZSOIL,SMC,SICE,AI,BI,CI)
2690 ! ----------------------------------------------------------------------
2691 END SUBROUTINE SMFLX
2692 ! ----------------------------------------------------------------------
2695 SUBROUTINE SNFRAC (SNEQV,SNUP,SALP,SNOWH,SNCOVR)
2697 ! ----------------------------------------------------------------------
2699 ! ----------------------------------------------------------------------
2700 ! CALCULATE SNOW FRACTION (0 -> 1)
2701 ! SNEQV SNOW WATER EQUIVALENT (M)
2702 ! SNUP THRESHOLD SNEQV DEPTH ABOVE WHICH SNCOVR=1
2703 ! SALP TUNING PARAMETER
2704 ! SNCOVR FRACTIONAL SNOW COVER
2705 ! ----------------------------------------------------------------------
2708 REAL, INTENT(IN) :: SNEQV,SNUP,SALP,SNOWH
2709 REAL, INTENT(OUT) :: SNCOVR
2712 ! ----------------------------------------------------------------------
2713 ! SNUP IS VEG-CLASS DEPENDENT SNOWDEPTH THRESHHOLD (SET IN ROUTINE
2714 ! REDPRM) ABOVE WHICH SNOCVR=1.
2715 ! ----------------------------------------------------------------------
2716 IF (SNEQV < SNUP) THEN
2717 RSNOW = SNEQV / SNUP
2718 SNCOVR = 1. - ( EXP ( - SALP * RSNOW) - RSNOW * EXP ( - SALP))
2723 ! FORMULATION OF DICKINSON ET AL. 1986
2726 ! SNCOVR=SNOWH/(SNOWH + 5*Z0N)
2728 ! FORMULATION OF MARSHALL ET AL. 1994
2729 ! SNCOVR=SNEQV/(SNEQV + 2*Z0N)
2731 ! ----------------------------------------------------------------------
2732 END SUBROUTINE SNFRAC
2733 ! ----------------------------------------------------------------------
2735 SUBROUTINE SNKSRC (TSNSR,TAVG,SMC,SH2O,ZSOIL,NSOIL, &
2736 & SMCMAX,PSISAT,BEXP,DT,K,QTOT)
2737 ! ----------------------------------------------------------------------
2739 ! ----------------------------------------------------------------------
2740 ! CALCULATE SINK/SOURCE TERM OF THE TERMAL DIFFUSION EQUATION. (SH2O) IS
2741 ! AVAILABLE LIQUED WATER.
2742 ! ----------------------------------------------------------------------
2745 INTEGER, INTENT(IN) :: K,NSOIL
2746 REAL, INTENT(IN) :: BEXP, DT, PSISAT, QTOT, SMC, SMCMAX, &
2748 REAL, INTENT(INOUT) :: SH2O
2750 REAL, DIMENSION(1:NSOIL), INTENT(IN):: ZSOIL
2752 REAL :: DF, DZ, DZH, FREE, TSNSR, &
2753 TDN, TM, TUP, TZ, X0, XDN, XH2O, XUP
2755 REAL, PARAMETER :: DH2O = 1.0000E3, HLICE = 3.3350E5, &
2761 DZ = ZSOIL (K -1) - ZSOIL (K)
2763 ! ----------------------------------------------------------------------
2764 ! VIA FUNCTION FRH2O, COMPUTE POTENTIAL OR 'EQUILIBRIUM' UNFROZEN
2765 ! SUPERCOOLED FREE WATER FOR GIVEN SOIL TYPE AND SOIL LAYER TEMPERATURE.
2766 ! FUNCTION FRH20 INVOKES EQN (17) FROM V. KOREN ET AL (1999, JGR, VOL.
2767 ! 104, PG 19573). (ASIDE: LATTER EQN IN JOURNAL IN CENTIGRADE UNITS.
2768 ! ROUTINE FRH2O USE FORM OF EQN IN KELVIN UNITS.)
2769 ! ----------------------------------------------------------------------
2770 ! FREE = FRH2O(TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
2772 ! ----------------------------------------------------------------------
2773 ! IN NEXT BLOCK OF CODE, INVOKE EQN 18 OF V. KOREN ET AL (1999, JGR,
2774 ! VOL. 104, PG 19573.) THAT IS, FIRST ESTIMATE THE NEW AMOUNTOF LIQUID
2775 ! WATER, 'XH2O', IMPLIED BY THE SUM OF (1) THE LIQUID WATER AT THE BEGIN
2776 ! OF CURRENT TIME STEP, AND (2) THE FREEZE OF THAW CHANGE IN LIQUID
2777 ! WATER IMPLIED BY THE HEAT FLUX 'QTOT' PASSED IN FROM ROUTINE HRT.
2778 ! SECOND, DETERMINE IF XH2O NEEDS TO BE BOUNDED BY 'FREE' (EQUIL AMT) OR
2779 ! IF 'FREE' NEEDS TO BE BOUNDED BY XH2O.
2780 ! ----------------------------------------------------------------------
2781 CALL FRH2O (FREE,TAVG,SMC,SH2O,SMCMAX,BEXP,PSISAT)
2783 ! ----------------------------------------------------------------------
2784 ! FIRST, IF FREEZING AND REMAINING LIQUID LESS THAN LOWER BOUND, THEN
2785 ! REDUCE EXTENT OF FREEZING, THEREBY LETTING SOME OR ALL OF HEAT FLUX
2786 ! QTOT COOL THE SOIL TEMP LATER IN ROUTINE HRT.
2787 ! ----------------------------------------------------------------------
2788 XH2O = SH2O + QTOT * DT / (DH2O * HLICE * DZ)
2789 IF ( XH2O < SH2O .AND. XH2O < FREE) THEN
2790 IF ( FREE > SH2O ) THEN
2796 ! ----------------------------------------------------------------------
2797 ! SECOND, IF THAWING AND THE INCREASE IN LIQUID WATER GREATER THAN UPPER
2798 ! BOUND, THEN REDUCE EXTENT OF THAW, THEREBY LETTING SOME OR ALL OF HEAT
2799 ! FLUX QTOT WARM THE SOIL TEMP LATER IN ROUTINE HRT.
2800 ! ----------------------------------------------------------------------
2801 IF ( XH2O > SH2O .AND. XH2O > FREE ) THEN
2802 IF ( FREE < SH2O ) THEN
2809 ! ----------------------------------------------------------------------
2810 ! CALCULATE PHASE-CHANGE HEAT SOURCE/SINK TERM FOR USE IN ROUTINE HRT
2811 ! AND UPDATE LIQUID WATER TO REFLCET FINAL FREEZE/THAW INCREMENT.
2812 ! ----------------------------------------------------------------------
2813 ! SNKSRC = -DH2O*HLICE*DZ*(XH2O-SH2O)/DT
2814 IF (XH2O < 0.) XH2O = 0.
2815 IF (XH2O > SMC) XH2O = SMC
2816 TSNSR = - DH2O * HLICE * DZ * (XH2O - SH2O)/ DT
2819 ! ----------------------------------------------------------------------
2820 END SUBROUTINE SNKSRC
2821 ! ----------------------------------------------------------------------
2823 SUBROUTINE SNOPAC (ETP,ETA,PRCP,PRCPF,SNOWNG,SMC,SMCMAX,SMCWLT, &
2824 SMCREF,SMCDRY,CMC,CMCMAX,NSOIL,DT, &
2826 Q2,T1,SFCTMP,T24,TH2,FDOWN,F1,SSOIL,STC,EPSCA,&
2827 SFCPRS,BEXP,PC,RCH,RR,CFACTR,SNCOVR,ESD,SNDENS,&
2828 SNOWH,SH2O,SLOPE,KDT,FRZFACT,PSISAT, &
2829 ZSOIL,DWSAT,DKSAT,TBOT,ZBOT,SHDFAC,RUNOFF1, &
2830 RUNOFF2,RUNOFF3,EDIR,EC,ET,ETT,NROOT,SNOMLT, &
2831 ICE,RTDIS,QUARTZ,FXEXP,CSOIL, &
2832 BETA,DRIP,DEW,FLX1,FLX2,FLX3,ESNOW,ETNS,EMISSI,&
2838 ! ----------------------------------------------------------------------
2840 ! ----------------------------------------------------------------------
2841 ! CALCULATE SOIL MOISTURE AND HEAT FLUX VALUES & UPDATE SOIL MOISTURE
2842 ! CONTENT AND SOIL HEAT CONTENT VALUES FOR THE CASE WHEN A SNOW PACK IS
2844 ! ----------------------------------------------------------------------
2847 INTEGER, INTENT(IN) :: ICE, NROOT, NSOIL,VEGTYP
2848 INTEGER, INTENT(IN) :: ISURBAN
2851 ! kmh 09/03/2006 add IT16 for surface temperature iteration
2854 LOGICAL, INTENT(IN) :: SNOWNG
2855 REAL, INTENT(IN) :: BEXP,CFACTR, CMCMAX,CSOIL,DF1,DKSAT, &
2856 DT,DWSAT, EPSCA,FDOWN,F1,FXEXP, &
2857 FRZFACT,KDT,PC, PRCP,PSISAT,Q2,QUARTZ, &
2858 RCH,RR,SBETA,SFCPRS, SFCTMP, SHDFAC, &
2859 SLOPE,SMCDRY,SMCMAX,SMCREF,SMCWLT, T24, &
2860 TBOT,TH2,ZBOT,EMISSI,SOLDN
2861 REAL, INTENT(INOUT) :: CMC, BETA, ESD,FLX2,PRCPF,SNOWH,SNCOVR, &
2862 SNDENS, T1, RIBB, ETP
2863 REAL, INTENT(OUT) :: DEW,DRIP,EC,EDIR, ETNS, ESNOW,ETT, &
2864 FLX1,FLX3, RUNOFF1,RUNOFF2,RUNOFF3, &
2866 REAL, DIMENSION(1:NSOIL),INTENT(IN) :: RTDIS,ZSOIL
2867 REAL, DIMENSION(1:NSOIL),INTENT(OUT) :: ET
2868 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: SMC,SH2O,STC
2869 REAL, DIMENSION(1:NSOIL) :: ET1
2870 REAL :: DENOM,DSOIL,DTOT,EC1,EDIR1,ESDFLX,ETA, &
2871 ETT1, ESNOW1, ESNOW2, ETA1,ETP1,ETP2, &
2872 ETP3, ETNS1, ETANRG, ETAX, EX, FLX3X, &
2873 FRCSNO,FRCSOI, PRCP1, QSAT,RSNOW, SEH, &
2874 SNCOND,SSOIL1, T11,T12, T12A, T12AX, &
2876 ! T12B, T14, YY, ZZ1,EMISSI_S
2878 ! kmh 01/11/2007 add T15, T16, and DTOT2 for SFC T iteration and snow heat flux
2880 REAL :: T15, T16, DTOT2
2881 REAL, PARAMETER :: ESDMIN = 1.E-6, LSUBC = 2.501000E+6, &
2882 LSUBS = 2.83E+6, TFREEZ = 273.15, &
2885 ! ----------------------------------------------------------------------
2886 ! EXECUTABLE CODE BEGINS HERE:
2887 ! ----------------------------------------------------------------------
2888 ! IF SEA-ICE (ICE=1) OR GLACIAL-ICE (ICE=-1), SNOWCOVER FRACTION = 1.0,
2889 ! AND SUBLIMATION IS AT THE POTENTIAL RATE.
2890 ! FOR NON-GLACIAL LAND (ICE=0), IF SNOWCOVER FRACTION < 1.0, TOTAL
2891 ! EVAPORATION < POTENTIAL DUE TO NON-POTENTIAL CONTRIBUTION FROM
2892 ! NON-SNOW COVERED FRACTION.
2893 ! ----------------------------------------------------------------------
2894 ! INITIALIZE EVAP TERMS.
2895 ! ----------------------------------------------------------------------
2897 ! ESNOW [KG M-2 S-1]
2898 ! ESDFLX [KG M-2 S-1] .le. ESNOW
2904 ! ----------------------------------------------------------------------
2910 ! EMISSI_S=0.95 ! For snow
2924 ! ----------------------------------------------------------------------
2925 ! CONVERT POTENTIAL EVAP (ETP) FROM KG M-2 S-1 TO ETP1 IN M S-1
2926 ! ----------------------------------------------------------------------
2927 PRCP1 = PRCPF *0.001
2928 ! ----------------------------------------------------------------------
2929 ! IF ETP<0 (DOWNWARD) THEN DEWFALL (=FROSTFALL IN THIS CASE).
2930 ! ----------------------------------------------------------------------
2932 IF (ETP <= 0.0) THEN
2933 IF ( ( RIBB >= 0.1 ) .AND. ( FDOWN > 150.0 ) ) THEN
2934 ETP=(MIN(ETP*(1.0-RIBB),0.)*SNCOVR/0.980 + ETP*(0.980-SNCOVR))/0.980
2936 IF(ETP == 0.) BETA = 0.0
2940 ETANRG = ETP*((1.-SNCOVR)*LSUBC + SNCOVR*LSUBS)
2943 IF ( ICE /= 0 ) THEN
2944 ! SEA-ICE AND GLACIAL-ICE CASE
2946 ESNOW1 = ESNOW*0.001
2948 ETANRG = ESNOW*LSUBS
2949 ELSE IF ( ICE == 0) THEN
2950 ! NON-GLACIAL LAND CASE
2951 IF (SNCOVR < 1.) THEN
2952 CALL EVAPO (ETNS1,SMC,NSOIL,CMC,ETP1,DT,ZSOIL, &
2954 SMCMAX,BEXP,PC,SMCWLT,DKSAT,DWSAT, &
2955 SMCREF,SHDFAC,CMCMAX, &
2957 EDIR1,EC1,ET1,ETT1,SFCTMP,Q2,NROOT,RTDIS, &
2959 ! ----------------------------------------------------------------------------
2960 EDIR1 = EDIR1* (1. - SNCOVR)
2961 EC1 = EC1* (1. - SNCOVR)
2963 ET1 (K) = ET1 (K)* (1. - SNCOVR)
2965 ETT1 = ETT1*(1.-SNCOVR)
2966 ! ETNS1 = EDIR1+ EC1+ ETT1
2967 ETNS1 = ETNS1*(1.-SNCOVR)
2968 ! ----------------------------------------------------------------------------
2972 ET (K) = ET1 (K)*1000.
2976 ! ----------------------------------------------------------------------
2978 ! end IF (SNCOVR .lt. 1.)
2980 ! end IF (ICE .ne. 1)
2983 ESNOW1 = ESNOW*0.001
2985 ETANRG = ESNOW*LSUBS + ETNS*LSUBC
2986 ! end IF (ETP .le. 0.0)
2989 ! ----------------------------------------------------------------------
2990 ! IF PRECIP IS FALLING, CALCULATE HEAT FLUX FROM SNOW SFC TO NEWLY
2991 ! ACCUMULATING PRECIP. NOTE THAT THIS REFLECTS THE FLUX APPROPRIATE FOR
2992 ! THE NOT-YET-UPDATED SKIN TEMPERATURE (T1). ASSUMES TEMPERATURE OF THE
2993 ! SNOWFALL STRIKING THE GROUND IS =SFCTMP (LOWEST MODEL LEVEL AIR TEMP).
2994 ! ----------------------------------------------------------------------
2997 FLX1 = CPICE * PRCP * (T1- SFCTMP)
2999 IF (PRCP > 0.0) FLX1 = CPH2O * PRCP * (T1- SFCTMP)
3000 ! ----------------------------------------------------------------------
3001 ! CALCULATE AN 'EFFECTIVE SNOW-GRND SFC TEMP' (T12) BASED ON HEAT FLUXES
3002 ! BETWEEN THE SNOW PACK AND THE SOIL AND ON NET RADIATION.
3003 ! INCLUDE FLX1 (PRECIP-SNOW SFC) AND FLX2 (FREEZING RAIN LATENT HEAT)
3004 ! FLUXES. FLX1 FROM ABOVE, FLX2 BROUGHT IN VIA COMMOM BLOCK RITE.
3005 ! FLX2 REFLECTS FREEZING RAIN LATENT HEAT FLUX USING T1 CALCULATED IN
3007 ! ----------------------------------------------------------------------
3009 DSOIL = - (0.5 * ZSOIL (1))
3010 DTOT = SNOWH + DSOIL
3011 DENOM = 1.0+ DF1 / (DTOT * RR * RCH)
3012 ! surface emissivity weighted by snow cover fraction
3013 ! T12A = ( (FDOWN - FLX1 - FLX2 - &
3014 ! & ((SNCOVR*EMISSI_S)+EMISSI*(1.0-SNCOVR))*SIGMA *T24)/RCH &
3015 ! & + TH2 - SFCTMP - ETANRG/RCH ) / RR
3016 T12A = ( (FDOWN - FLX1- FLX2- EMISSI * SIGMA * T24)/ RCH &
3017 + TH2- SFCTMP - ETANRG / RCH ) / RR
3019 T12B = DF1 * STC (1) / (DTOT * RR * RCH)
3021 ! ----------------------------------------------------------------------
3022 ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS AT OR BELOW FREEZING, NO SNOW
3023 ! MELT WILL OCCUR. SET THE SKIN TEMP TO THIS EFFECTIVE TEMP. REDUCE
3024 ! (BY SUBLIMINATION ) OR INCREASE (BY FROST) THE DEPTH OF THE SNOWPACK,
3025 ! DEPENDING ON SIGN OF ETP.
3026 ! UPDATE SOIL HEAT FLUX (SSOIL) USING NEW SKIN TEMPERATURE (T1)
3027 ! SINCE NO SNOWMELT, SET ACCUMULATED SNOWMELT TO ZERO, SET 'EFFECTIVE'
3028 ! PRECIP FROM SNOWMELT TO ZERO, SET PHASE-CHANGE HEAT FLUX FROM SNOWMELT
3030 ! ----------------------------------------------------------------------
3031 ! SUB-FREEZING BLOCK
3032 ! ----------------------------------------------------------------------
3033 T12 = (SFCTMP + T12A + T12B) / DENOM
3034 IF (T12 <= TFREEZ) THEN
3036 SSOIL = DF1 * (T1- STC (1)) / DTOT
3037 ! ESD = MAX (0.0, ESD- ETP2)
3038 ESD = MAX(0.0, ESD-ESNOW2)
3043 ! ----------------------------------------------------------------------
3044 ! IF THE 'EFFECTIVE SNOW-GRND SFC TEMP' IS ABOVE FREEZING, SNOW MELT
3045 ! WILL OCCUR. CALL THE SNOW MELT RATE,EX AND AMT, SNOMLT. REVISE THE
3046 ! EFFECTIVE SNOW DEPTH. REVISE THE SKIN TEMP BECAUSE IT WOULD HAVE CHGD
3047 ! DUE TO THE LATENT HEAT RELEASED BY THE MELTING. CALC THE LATENT HEAT
3048 ! RELEASED, FLX3. SET THE EFFECTIVE PRECIP, PRCP1 TO THE SNOW MELT RATE,
3049 ! EX FOR USE IN SMFLX. ADJUSTMENT TO T1 TO ACCOUNT FOR SNOW PATCHES.
3050 ! CALCULATE QSAT VALID AT FREEZING POINT. NOTE THAT ESAT (SATURATION
3051 ! VAPOR PRESSURE) VALUE OF 6.11E+2 USED HERE IS THAT VALID AT FRZZING
3052 ! POINT. NOTE THAT ETP FROM CALL PENMAN IN SFLX IS IGNORED HERE IN
3053 ! FAVOR OF BULK ETP OVER 'OPEN WATER' AT FREEZING TEMP.
3054 ! UPDATE SOIL HEAT FLUX (S) USING NEW SKIN TEMPERATURE (T1)
3055 ! ----------------------------------------------------------------------
3056 ! ABOVE FREEZING BLOCK
3057 ! ----------------------------------------------------------------------
3059 T1 = TFREEZ * SNCOVR ** SNOEXP + T12 * (1.0- SNCOVR ** SNOEXP)
3062 ! ----------------------------------------------------------------------
3063 ! IF POTENTIAL EVAP (SUBLIMATION) GREATER THAN DEPTH OF SNOWPACK.
3065 ! SNOWPACK HAS SUBLIMATED AWAY, SET DEPTH TO ZERO.
3066 ! ----------------------------------------------------------------------
3067 ! kmh 12/15/2005 modify SSOIL
3068 ! kmh 09/03/2006 modify DTOT
3069 if ( DTOT .GT. 2.0*DSOIL ) then
3072 SSOIL = DF1 * (T1- STC (1)) / DTOT
3073 IF (ESD-ESNOW2 <= ESDMIN) THEN
3078 ! ----------------------------------------------------------------------
3079 ! SUBLIMATION LESS THAN DEPTH OF SNOWPACK
3080 ! SNOWPACK (ESD) REDUCED BY ESNOW2 (DEPTH OF SUBLIMATED SNOW)
3081 ! ----------------------------------------------------------------------
3085 SEH = RCH * (T1- TH2)
3088 ! FLX3 = FDOWN - FLX1 - FLX2 - &
3089 ! ((SNCOVR*EMISSI_S)+EMISSI*(1-SNCOVR))*SIGMA*T14 - &
3090 ! SSOIL - SEH - ETANRG
3091 FLX3 = FDOWN - FLX1- FLX2- EMISSI*SIGMA * T14- SSOIL - SEH - ETANRG
3092 IF (FLX3 <= 0.0) FLX3 = 0.0
3093 ! ----------------------------------------------------------------------
3094 ! SNOWMELT REDUCTION DEPENDING ON SNOW COVER
3095 ! ----------------------------------------------------------------------
3096 EX = FLX3*0.001/ LSUBF
3098 ! ----------------------------------------------------------------------
3099 ! ESDMIN REPRESENTS A SNOWPACK DEPTH THRESHOLD VALUE BELOW WHICH WE
3100 ! CHOOSE NOT TO RETAIN ANY SNOWPACK, AND INSTEAD INCLUDE IT IN SNOWMELT.
3101 ! ----------------------------------------------------------------------
3103 IF (ESD- SNOMLT >= ESDMIN) THEN
3105 ! ----------------------------------------------------------------------
3106 ! SNOWMELT EXCEEDS SNOW DEPTH
3107 ! ----------------------------------------------------------------------
3110 FLX3 = EX *1000.0* LSUBF
3114 ! ----------------------------------------------------------------------
3115 ! END OF 'ESD .LE. ETP2' IF-BLOCK
3116 ! ----------------------------------------------------------------------
3120 ! ----------------------------------------------------------------------
3121 ! END OF 'T12 .LE. TFREEZ' IF-BLOCK
3122 ! ----------------------------------------------------------------------
3123 ! ----------------------------------------------------------------------
3124 ! IF NON-GLACIAL LAND, ADD SNOWMELT RATE (EX) TO PRECIP RATE TO BE USED
3125 ! IN SUBROUTINE SMFLX (SOIL MOISTURE EVOLUTION) VIA INFILTRATION.
3127 ! FOR SEA-ICE AND GLACIAL-ICE, THE SNOWMELT WILL BE ADDED TO SUBSURFACE
3128 ! RUNOFF/BASEFLOW LATER NEAR THE END OF SFLX (AFTER RETURN FROM CALL TO
3129 ! SUBROUTINE SNOPAC)
3130 ! ----------------------------------------------------------------------
3131 IF (ICE == 0) PRCP1 = PRCP1+ EX
3133 ! ----------------------------------------------------------------------
3134 ! SET THE EFFECTIVE POTNL EVAPOTRANSP (ETP1) TO ZERO SINCE THIS IS SNOW
3135 ! CASE, SO SURFACE EVAP NOT CALCULATED FROM EDIR, EC, OR ETT IN SMFLX
3137 ! IF SEAICE (ICE==1) SKIP CALL TO SMFLX.
3138 ! SMFLX RETURNS UPDATED SOIL MOISTURE VALUES FOR NON-GLACIAL LAND.
3139 ! IF SEA-ICE (ICE==1) OR GLACIAL-ICE (ICE==-1), SKIP CALL TO SMFLX,
3140 ! SINCE NO SOIL MEDIUM FOR SEA-ICE OR GLACIAL-ICE.
3141 ! ----------------------------------------------------------------------
3144 CALL SMFLX (SMC,NSOIL,CMC,DT,PRCP1,ZSOIL, &
3145 SH2O,SLOPE,KDT,FRZFACT, &
3146 SMCMAX,BEXP,SMCWLT,DKSAT,DWSAT, &
3148 RUNOFF1,RUNOFF2,RUNOFF3, &
3151 ! ----------------------------------------------------------------------
3152 ! BEFORE CALL SHFLX IN THIS SNOWPACK CASE, SET ZZ1 AND YY ARGUMENTS TO
3153 ! SPECIAL VALUES THAT ENSURE THAT GROUND HEAT FLUX CALCULATED IN SHFLX
3154 ! MATCHES THAT ALREADY COMPUTER FOR BELOW THE SNOWPACK, THUS THE SFC
3155 ! HEAT FLUX TO BE COMPUTED IN SHFLX WILL EFFECTIVELY BE THE FLUX AT THE
3156 ! SNOW TOP SURFACE. T11 IS A DUMMY ARGUEMENT SO WE WILL NOT USE THE
3157 ! SKIN TEMP VALUE AS REVISED BY SHFLX.
3158 ! ----------------------------------------------------------------------
3161 YY = STC (1) -0.5* SSOIL * ZSOIL (1)* ZZ1/ DF1
3163 ! ----------------------------------------------------------------------
3164 ! SHFLX WILL CALC/UPDATE THE SOIL TEMPS. NOTE: THE SUB-SFC HEAT FLUX
3165 ! (SSOIL1) AND THE SKIN TEMP (T11) OUTPUT FROM THIS SHFLX CALL ARE NOT
3166 ! USED IN ANY SUBSEQUENT CALCULATIONS. RATHER, THEY ARE DUMMY VARIABLES
3167 ! HERE IN THE SNOPAC CASE, SINCE THE SKIN TEMP AND SUB-SFC HEAT FLUX ARE
3168 ! UPDATED INSTEAD NEAR THE BEGINNING OF THE CALL TO SNOPAC.
3169 ! ----------------------------------------------------------------------
3171 CALL SHFLX (SSOIL1,STC,SMC,SMCMAX,NSOIL,T11,DT,YY,ZZ1,ZSOIL, &
3172 TBOT,ZBOT,SMCWLT,PSISAT,SH2O,BEXP,F1,DF1,ICE, &
3173 QUARTZ,CSOIL,VEGTYP,ISURBAN)
3175 ! ----------------------------------------------------------------------
3176 ! SNOW DEPTH AND DENSITY ADJUSTMENT BASED ON SNOW COMPACTION. YY IS
3177 ! ASSUMED TO BE THE SOIL TEMPERTURE AT THE TOP OF THE SOIL COLUMN.
3178 ! ----------------------------------------------------------------------
3182 CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
3190 ELSEIF (ICE == 1) THEN
3192 IF (ESD .GE. 0.01) THEN
3193 CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
3201 ELSEIF (ICE == -1) THEN
3203 IF (ESD .GE. 0.10) THEN
3204 CALL SNOWPACK (ESD,DT,SNOWH,SNDENS,T1,YY)
3213 ! ----------------------------------------------------------------------
3214 END SUBROUTINE SNOPAC
3215 ! ----------------------------------------------------------------------
3218 SUBROUTINE SNOWPACK (ESD,DTSEC,SNOWH,SNDENS,TSNOW,TSOIL)
3220 ! ----------------------------------------------------------------------
3221 ! SUBROUTINE SNOWPACK
3222 ! ----------------------------------------------------------------------
3223 ! CALCULATE COMPACTION OF SNOWPACK UNDER CONDITIONS OF INCREASING SNOW
3224 ! DENSITY, AS OBTAINED FROM AN APPROXIMATE SOLUTION OF E. ANDERSON'S
3225 ! DIFFERENTIAL EQUATION (3.29), NOAA TECHNICAL REPORT NWS 19, BY VICTOR
3227 ! ----------------------------------------------------------------------
3228 ! ESD WATER EQUIVALENT OF SNOW (M)
3229 ! DTSEC TIME STEP (SEC)
3230 ! SNOWH SNOW DEPTH (M)
3231 ! SNDENS SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
3232 ! TSNOW SNOW SURFACE TEMPERATURE (K)
3233 ! TSOIL SOIL SURFACE TEMPERATURE (K)
3235 ! SUBROUTINE WILL RETURN NEW VALUES OF SNOWH AND SNDENS
3236 ! ----------------------------------------------------------------------
3240 REAL, INTENT(IN) :: ESD, DTSEC,TSNOW,TSOIL
3241 REAL, INTENT(INOUT) :: SNOWH, SNDENS
3242 REAL :: BFAC,DSX,DTHR,DW,SNOWHC,PEXP, &
3243 TAVGC,TSNOWC,TSOILC,ESDC,ESDCX
3244 REAL, PARAMETER :: C1 = 0.01, C2 = 21.0, G = 9.81, &
3246 ! ----------------------------------------------------------------------
3247 ! CONVERSION INTO SIMULATION UNITS
3248 ! ----------------------------------------------------------------------
3249 SNOWHC = SNOWH *100.
3252 TSNOWC = TSNOW -273.15
3253 TSOILC = TSOIL -273.15
3255 ! ----------------------------------------------------------------------
3256 ! CALCULATING OF AVERAGE TEMPERATURE OF SNOW PACK
3257 ! ----------------------------------------------------------------------
3258 ! ----------------------------------------------------------------------
3259 ! CALCULATING OF SNOW DEPTH AND DENSITY AS A RESULT OF COMPACTION
3260 ! SNDENS=DS0*(EXP(BFAC*ESD)-1.)/(BFAC*ESD)
3261 ! BFAC=DTHR*C1*EXP(0.08*TAVGC-C2*DS0)
3262 ! NOTE: BFAC*ESD IN SNDENS EQN ABOVE HAS TO BE CAREFULLY TREATED
3263 ! NUMERICALLY BELOW:
3264 ! C1 IS THE FRACTIONAL INCREASE IN DENSITY (1/(CM*HR))
3265 ! C2 IS A CONSTANT (CM3/G) KOJIMA ESTIMATED AS 21 CMS/G
3266 ! ----------------------------------------------------------------------
3267 TAVGC = 0.5* (TSNOWC + TSOILC)
3268 IF (ESDC > 1.E-2) THEN
3274 ! DSX = SNDENS*((DEXP(BFAC*ESDC)-1.)/(BFAC*ESDC))
3275 ! ----------------------------------------------------------------------
3276 ! THE FUNCTION OF THE FORM (e**x-1)/x IMBEDDED IN ABOVE EXPRESSION
3277 ! FOR DSX WAS CAUSING NUMERICAL DIFFICULTIES WHEN THE DENOMINATOR "x"
3278 ! (I.E. BFAC*ESDC) BECAME ZERO OR APPROACHED ZERO (DESPITE THE FACT THAT
3279 ! THE ANALYTICAL FUNCTION (e**x-1)/x HAS A WELL DEFINED LIMIT AS
3280 ! "x" APPROACHES ZERO), HENCE BELOW WE REPLACE THE (e**x-1)/x
3281 ! EXPRESSION WITH AN EQUIVALENT, NUMERICALLY WELL-BEHAVED
3282 ! POLYNOMIAL EXPANSION.
3284 ! NUMBER OF TERMS OF POLYNOMIAL EXPANSION, AND HENCE ITS ACCURACY,
3285 ! IS GOVERNED BY ITERATION LIMIT "IPOL".
3286 ! IPOL GREATER THAN 9 ONLY MAKES A DIFFERENCE ON DOUBLE
3287 ! PRECISION (RELATIVE ERRORS GIVEN IN PERCENT %).
3288 ! IPOL=9, FOR REL.ERROR <~ 1.6 E-6 % (8 SIGNIFICANT DIGITS)
3289 ! IPOL=8, FOR REL.ERROR <~ 1.8 E-5 % (7 SIGNIFICANT DIGITS)
3290 ! IPOL=7, FOR REL.ERROR <~ 1.8 E-4 % ...
3291 ! ----------------------------------------------------------------------
3292 BFAC = DTHR * C1* EXP (0.08* TAVGC - C2* SNDENS)
3295 ! PEXP = (1. + PEXP)*BFAC*ESDC/REAL(J+1)
3297 PEXP = (1. + PEXP)* BFAC * ESDCX / REAL (J +1)
3301 ! ----------------------------------------------------------------------
3302 ! ABOVE LINE ENDS POLYNOMIAL SUBSTITUTION
3303 ! ----------------------------------------------------------------------
3304 ! END OF KOREAN FORMULATION
3306 ! BASE FORMULATION (COGLEY ET AL., 1990)
3307 ! CONVERT DENSITY FROM G/CM3 TO KG/M3
3310 ! DSX=DSM+DTSEC*0.5*DSM*G*ESD/
3311 ! & (1E7*EXP(-0.02*DSM+KN/(TAVGC+273.16)-14.643))
3313 ! & CONVERT DENSITY FROM KG/M3 TO G/CM3
3316 ! END OF COGLEY ET AL. FORMULATION
3318 ! ----------------------------------------------------------------------
3319 ! SET UPPER/LOWER LIMIT ON SNOW DENSITY
3320 ! ----------------------------------------------------------------------
3321 DSX = SNDENS * (PEXP)
3322 IF (DSX > 0.40) DSX = 0.40
3323 IF (DSX < 0.05) DSX = 0.05
3324 ! ----------------------------------------------------------------------
3325 ! UPDATE OF SNOW DEPTH AND DENSITY DEPENDING ON LIQUID WATER DURING
3326 ! SNOWMELT. ASSUMED THAT 13% OF LIQUID WATER CAN BE STORED IN SNOW PER
3327 ! DAY DURING SNOWMELT TILL SNOW DENSITY 0.40.
3328 ! ----------------------------------------------------------------------
3330 IF (TSNOWC >= 0.) THEN
3331 DW = 0.13* DTHR /24.
3332 SNDENS = SNDENS * (1. - DW) + DW
3333 IF (SNDENS >= 0.40) SNDENS = 0.40
3334 ! ----------------------------------------------------------------------
3335 ! CALCULATE SNOW DEPTH (CM) FROM SNOW WATER EQUIVALENT AND SNOW DENSITY.
3336 ! CHANGE SNOW DEPTH UNITS TO METERS
3337 ! ----------------------------------------------------------------------
3339 SNOWHC = ESDC / SNDENS
3340 SNOWH = SNOWHC *0.01
3342 ! ----------------------------------------------------------------------
3343 END SUBROUTINE SNOWPACK
3344 ! ----------------------------------------------------------------------
3346 SUBROUTINE SNOWZ0 (SNCOVR,Z0, Z0BRD, SNOWH)
3348 ! ----------------------------------------------------------------------
3350 ! ----------------------------------------------------------------------
3351 ! CALCULATE TOTAL ROUGHNESS LENGTH OVER SNOW
3352 ! SNCOVR FRACTIONAL SNOW COVER
3353 ! Z0 ROUGHNESS LENGTH (m)
3354 ! Z0S SNOW ROUGHNESS LENGTH:=0.001 (m)
3355 ! ----------------------------------------------------------------------
3357 REAL, INTENT(IN) :: SNCOVR, Z0BRD
3358 REAL, INTENT(OUT) :: Z0
3359 REAL, PARAMETER :: Z0S=0.001
3360 REAL, INTENT(IN) :: SNOWH
3363 !m Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0S
3364 BURIAL = 7.0*Z0BRD - SNOWH
3365 IF(BURIAL.LE.0.0007) THEN
3371 Z0 = (1.- SNCOVR)* Z0BRD + SNCOVR * Z0EFF
3373 ! ----------------------------------------------------------------------
3374 END SUBROUTINE SNOWZ0
3375 ! ----------------------------------------------------------------------
3378 SUBROUTINE SNOW_NEW (TEMP,NEWSN,SNOWH,SNDENS)
3380 ! ----------------------------------------------------------------------
3381 ! SUBROUTINE SNOW_NEW
3382 ! ----------------------------------------------------------------------
3383 ! CALCULATE SNOW DEPTH AND DENSITITY TO ACCOUNT FOR THE NEW SNOWFALL.
3384 ! NEW VALUES OF SNOW DEPTH & DENSITY RETURNED.
3386 ! TEMP AIR TEMPERATURE (K)
3387 ! NEWSN NEW SNOWFALL (M)
3388 ! SNOWH SNOW DEPTH (M)
3389 ! SNDENS SNOW DENSITY (G/CM3=DIMENSIONLESS FRACTION OF H2O DENSITY)
3390 ! ----------------------------------------------------------------------
3392 REAL, INTENT(IN) :: NEWSN, TEMP
3393 REAL, INTENT(INOUT) :: SNDENS, SNOWH
3394 REAL :: DSNEW, HNEWC, SNOWHC,NEWSNC,TEMPC
3396 ! ----------------------------------------------------------------------
3397 ! CONVERSION INTO SIMULATION UNITS
3398 ! ----------------------------------------------------------------------
3399 SNOWHC = SNOWH *100.
3400 NEWSNC = NEWSN *100.
3402 ! ----------------------------------------------------------------------
3403 ! CALCULATING NEW SNOWFALL DENSITY DEPENDING ON TEMPERATURE
3404 ! EQUATION FROM GOTTLIB L. 'A GENERAL RUNOFF MODEL FOR SNOWCOVERED
3405 ! AND GLACIERIZED BASIN', 6TH NORDIC HYDROLOGICAL CONFERENCE,
3406 ! VEMADOLEN, SWEDEN, 1980, 172-177PP.
3407 !-----------------------------------------------------------------------
3408 TEMPC = TEMP -273.15
3409 IF (TEMPC <= -15.) THEN
3412 DSNEW = 0.05+0.0017* (TEMPC +15.)**1.5
3414 ! ----------------------------------------------------------------------
3415 ! ADJUSTMENT OF SNOW DENSITY DEPENDING ON NEW SNOWFALL
3416 ! ----------------------------------------------------------------------
3417 HNEWC = NEWSNC / DSNEW
3418 IF (SNOWHC + HNEWC .LT. 1.0E-3) THEN
3419 SNDENS = MAX(DSNEW,SNDENS)
3421 SNDENS = (SNOWHC * SNDENS + HNEWC * DSNEW)/ (SNOWHC + HNEWC)
3423 SNOWHC = SNOWHC + HNEWC
3424 SNOWH = SNOWHC *0.01
3426 ! ----------------------------------------------------------------------
3427 END SUBROUTINE SNOW_NEW
3428 ! ----------------------------------------------------------------------
3430 SUBROUTINE SRT (RHSTT,EDIR,ET,SH2O,SH2OA,NSOIL,PCPDRP, &
3431 ZSOIL,DWSAT,DKSAT,SMCMAX,BEXP,RUNOFF1, &
3432 RUNOFF2,DT,SMCWLT,SLOPE,KDT,FRZX,SICE,AI,BI,CI)
3434 ! ----------------------------------------------------------------------
3436 ! ----------------------------------------------------------------------
3437 ! CALCULATE THE RIGHT HAND SIDE OF THE TIME TENDENCY TERM OF THE SOIL
3438 ! WATER DIFFUSION EQUATION. ALSO TO COMPUTE ( PREPARE ) THE MATRIX
3439 ! COEFFICIENTS FOR THE TRI-DIAGONAL MATRIX OF THE IMPLICIT TIME SCHEME.
3440 ! ----------------------------------------------------------------------
3442 INTEGER, INTENT(IN) :: NSOIL
3443 INTEGER :: IALP1, IOHINF, J, JJ, K, KS
3444 REAL, INTENT(IN) :: BEXP, DKSAT, DT, DWSAT, EDIR, FRZX, &
3445 KDT, PCPDRP, SLOPE, SMCMAX, SMCWLT
3446 REAL, INTENT(OUT) :: RUNOFF1, RUNOFF2
3447 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ET, SH2O, SH2OA, SICE, &
3449 REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: RHSTT
3450 REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: AI, BI, CI
3451 REAL, DIMENSION(1:NSOIL) :: DMAX
3452 REAL :: ACRT, DD, DDT, DDZ, DDZ2, DENOM, &
3453 DENOM2,DICE, DSMDZ, DSMDZ2, DT1, &
3454 FCR,INFMAX,MXSMC,MXSMC2,NUMER,PDDUM, &
3455 PX, SICEMAX,SLOPX, SMCAV, SSTT, &
3456 SUM, VAL, WCND, WCND2, WDF, WDF2
3457 INTEGER, PARAMETER :: CVFRZ = 3
3459 ! ----------------------------------------------------------------------
3460 ! FROZEN GROUND VERSION:
3461 ! REFERENCE FROZEN GROUND PARAMETER, CVFRZ, IS A SHAPE PARAMETER OF
3462 ! AREAL DISTRIBUTION FUNCTION OF SOIL ICE CONTENT WHICH EQUALS 1/CV.
3463 ! CV IS A COEFFICIENT OF SPATIAL VARIATION OF SOIL ICE CONTENT. BASED
3464 ! ON FIELD DATA CV DEPENDS ON AREAL MEAN OF FROZEN DEPTH, AND IT CLOSE
3465 ! TO CONSTANT = 0.6 IF AREAL MEAN FROZEN DEPTH IS ABOVE 20 CM. THAT IS
3466 ! WHY PARAMETER CVFRZ = 3 (INT{1/0.6*0.6}).
3467 ! CURRENT LOGIC DOESN'T ALLOW CVFRZ BE BIGGER THAN 3
3468 ! ----------------------------------------------------------------------
3470 ! ----------------------------------------------------------------------
3471 ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF. INCLUDE THE
3472 ! INFILTRATION FORMULE FROM SCHAAKE AND KOREN MODEL.
3473 ! MODIFIED BY Q DUAN
3474 ! ----------------------------------------------------------------------
3475 ! ----------------------------------------------------------------------
3476 ! LET SICEMAX BE THE GREATEST, IF ANY, FROZEN WATER CONTENT WITHIN SOIL
3478 ! ----------------------------------------------------------------------
3482 IF (SICE (KS) > SICEMAX) SICEMAX = SICE (KS)
3483 ! ----------------------------------------------------------------------
3484 ! DETERMINE RAINFALL INFILTRATION RATE AND RUNOFF
3485 ! ----------------------------------------------------------------------
3490 ! ----------------------------------------------------------------------
3491 ! MODIFIED BY Q. DUAN, 5/16/94
3492 ! ----------------------------------------------------------------------
3493 ! IF (IOHINF == 1) THEN
3495 IF (PCPDRP /= 0.0) THEN
3497 SMCAV = SMCMAX - SMCWLT
3499 ! ----------------------------------------------------------------------
3500 ! FROZEN GROUND VERSION:
3501 ! ----------------------------------------------------------------------
3502 DMAX (1)= - ZSOIL (1)* SMCAV
3504 DICE = - ZSOIL (1) * SICE (1)
3505 DMAX (1)= DMAX (1)* (1.0- (SH2OA (1) + SICE (1) - SMCWLT)/ &
3510 ! ----------------------------------------------------------------------
3511 ! FROZEN GROUND VERSION:
3512 ! ----------------------------------------------------------------------
3515 DICE = DICE+ ( ZSOIL (KS -1) - ZSOIL (KS) ) * SICE (KS)
3516 DMAX (KS) = (ZSOIL (KS -1) - ZSOIL (KS))* SMCAV
3517 DMAX (KS) = DMAX (KS)* (1.0- (SH2OA (KS) + SICE (KS) &
3520 ! ----------------------------------------------------------------------
3521 ! VAL = (1.-EXP(-KDT*SQRT(DT1)))
3522 ! IN BELOW, REMOVE THE SQRT IN ABOVE
3523 ! ----------------------------------------------------------------------
3525 VAL = (1. - EXP ( - KDT * DT1))
3528 IF (PX < 0.0) PX = 0.0
3530 ! ----------------------------------------------------------------------
3531 ! FROZEN GROUND VERSION:
3532 ! REDUCTION OF INFILTRATION BASED ON FROZEN GROUND PARAMETERS
3533 ! ----------------------------------------------------------------------
3534 INFMAX = (PX * (DDT / (PX + DDT)))/ DT
3536 IF (DICE > 1.E-2) THEN
3537 ACRT = CVFRZ * FRZX / DICE
3545 SUM = SUM + (ACRT ** ( CVFRZ - J)) / FLOAT (K)
3547 FCR = 1. - EXP ( - ACRT) * SUM
3550 ! ----------------------------------------------------------------------
3551 ! CORRECTION OF INFILTRATION LIMITATION:
3552 ! IF INFMAX .LE. HYDROLIC CONDUCTIVITY ASSIGN INFMAX THE VALUE OF
3553 ! HYDROLIC CONDUCTIVITY
3554 ! ----------------------------------------------------------------------
3555 ! MXSMC = MAX ( SH2OA(1), SH2OA(2) )
3556 INFMAX = INFMAX * FCR
3559 CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
3561 INFMAX = MAX (INFMAX,WCND)
3563 INFMAX = MIN (INFMAX,PX/DT)
3564 IF (PCPDRP > INFMAX) THEN
3565 RUNOFF1 = PCPDRP - INFMAX
3568 ! ----------------------------------------------------------------------
3569 ! TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN LINE
3570 ! BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
3571 ! 'MXSMC = MAX(SH2OA(1), SH2OA(2))'
3572 ! ----------------------------------------------------------------------
3576 CALL WDFCND (WDF,WCND,MXSMC,SMCMAX,BEXP,DKSAT,DWSAT, &
3578 ! ----------------------------------------------------------------------
3579 ! CALC THE MATRIX COEFFICIENTS AI, BI, AND CI FOR THE TOP LAYER
3580 ! ----------------------------------------------------------------------
3581 DDZ = 1. / ( - .5 * ZSOIL (2) )
3583 BI (1) = WDF * DDZ / ( - ZSOIL (1) )
3585 ! ----------------------------------------------------------------------
3586 ! CALC RHSTT FOR THE TOP LAYER AFTER CALC'NG THE VERTICAL SOIL MOISTURE
3587 ! GRADIENT BTWN THE TOP AND NEXT TO TOP LAYERS.
3588 ! ----------------------------------------------------------------------
3590 DSMDZ = ( SH2O (1) - SH2O (2) ) / ( - .5 * ZSOIL (2) )
3591 RHSTT (1) = (WDF * DSMDZ + WCND- PDDUM + EDIR + ET (1))/ ZSOIL (1)
3593 ! ----------------------------------------------------------------------
3595 ! ----------------------------------------------------------------------
3596 SSTT = WDF * DSMDZ + WCND+ EDIR + ET (1)
3598 ! ----------------------------------------------------------------------
3599 ! LOOP THRU THE REMAINING SOIL LAYERS, REPEATING THE ABV PROCESS
3600 ! ----------------------------------------------------------------------
3603 DENOM2 = (ZSOIL (K -1) - ZSOIL (K))
3604 IF (K /= NSOIL) THEN
3606 ! ----------------------------------------------------------------------
3607 ! AGAIN, TO AVOID SPURIOUS DRAINAGE BEHAVIOR, 'UPSTREAM DIFFERENCING' IN
3608 ! LINE BELOW REPLACED WITH NEW APPROACH IN 2ND LINE:
3609 ! 'MXSMC2 = MAX (SH2OA(K), SH2OA(K+1))'
3610 ! ----------------------------------------------------------------------
3614 CALL WDFCND (WDF2,WCND2,MXSMC2,SMCMAX,BEXP,DKSAT,DWSAT, &
3616 ! -----------------------------------------------------------------------
3617 ! CALC SOME PARTIAL PRODUCTS FOR LATER USE IN CALC'NG RHSTT
3618 ! ----------------------------------------------------------------------
3619 DENOM = (ZSOIL (K -1) - ZSOIL (K +1))
3621 ! ----------------------------------------------------------------------
3622 ! CALC THE MATRIX COEF, CI, AFTER CALC'NG ITS PARTIAL PRODUCT
3623 ! ----------------------------------------------------------------------
3624 DSMDZ2 = (SH2O (K) - SH2O (K +1)) / (DENOM * 0.5)
3626 CI (K) = - WDF2 * DDZ2 / DENOM2
3629 ! ----------------------------------------------------------------------
3630 ! SLOPE OF BOTTOM LAYER IS INTRODUCED
3631 ! ----------------------------------------------------------------------
3633 ! ----------------------------------------------------------------------
3634 ! RETRIEVE THE SOIL WATER DIFFUSIVITY AND HYDRAULIC CONDUCTIVITY FOR
3636 ! ----------------------------------------------------------------------
3638 CALL WDFCND (WDF2,WCND2,SH2OA (NSOIL),SMCMAX,BEXP,DKSAT,DWSAT, &
3641 ! ----------------------------------------------------------------------
3642 ! CALC A PARTIAL PRODUCT FOR LATER USE IN CALC'NG RHSTT
3643 ! ----------------------------------------------------------------------
3645 ! ----------------------------------------------------------------------
3646 ! SET MATRIX COEF CI TO ZERO
3647 ! ----------------------------------------------------------------------
3650 ! ----------------------------------------------------------------------
3651 ! CALC RHSTT FOR THIS LAYER AFTER CALC'NG ITS NUMERATOR
3652 ! ----------------------------------------------------------------------
3654 NUMER = (WDF2 * DSMDZ2) + SLOPX * WCND2- (WDF * DSMDZ) &
3657 ! ----------------------------------------------------------------------
3658 ! CALC MATRIX COEFS, AI, AND BI FOR THIS LAYER
3659 ! ----------------------------------------------------------------------
3660 RHSTT (K) = NUMER / ( - DENOM2)
3661 AI (K) = - WDF * DDZ / DENOM2
3663 ! ----------------------------------------------------------------------
3664 ! RESET VALUES OF WDF, WCND, DSMDZ, AND DDZ FOR LOOP TO NEXT LYR
3665 ! RUNOFF2: SUB-SURFACE OR BASEFLOW RUNOFF
3666 ! ----------------------------------------------------------------------
3667 BI (K) = - ( AI (K) + CI (K) )
3668 IF (K .eq. NSOIL) THEN
3669 RUNOFF2 = SLOPX * WCND2
3671 IF (K .ne. NSOIL) THEN
3678 ! ----------------------------------------------------------------------
3680 ! ----------------------------------------------------------------------
3682 SUBROUTINE SSTEP (SH2OOUT,SH2OIN,CMC,RHSTT,RHSCT,DT, &
3683 NSOIL,SMCMAX,CMCMAX,RUNOFF3,ZSOIL,SMC,SICE, &
3686 ! ----------------------------------------------------------------------
3688 ! ----------------------------------------------------------------------
3689 ! CALCULATE/UPDATE SOIL MOISTURE CONTENT VALUES AND CANOPY MOISTURE
3691 ! ----------------------------------------------------------------------
3693 INTEGER, INTENT(IN) :: NSOIL
3694 INTEGER :: I, K, KK11
3696 REAL, INTENT(IN) :: CMCMAX, DT, SMCMAX
3697 REAL, INTENT(OUT) :: RUNOFF3
3698 REAL, INTENT(INOUT) :: CMC
3699 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: SH2OIN, SICE, ZSOIL
3700 REAL, DIMENSION(1:NSOIL), INTENT(OUT) :: SH2OOUT
3701 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: RHSTT, SMC
3702 REAL, DIMENSION(1:NSOIL), INTENT(INOUT) :: AI, BI, CI
3703 REAL, DIMENSION(1:NSOIL) :: RHSTTin
3704 REAL, DIMENSION(1:NSOIL) :: CIin
3705 REAL :: DDZ, RHSCT, STOT, WPLUS
3707 ! ----------------------------------------------------------------------
3708 ! CREATE 'AMOUNT' VALUES OF VARIABLES TO BE INPUT TO THE
3709 ! TRI-DIAGONAL MATRIX ROUTINE.
3710 ! ----------------------------------------------------------------------
3712 RHSTT (K) = RHSTT (K) * DT
3713 AI (K) = AI (K) * DT
3714 BI (K) = 1. + BI (K) * DT
3715 CI (K) = CI (K) * DT
3717 ! ----------------------------------------------------------------------
3718 ! COPY VALUES FOR INPUT VARIABLES BEFORE CALL TO ROSR12
3719 ! ----------------------------------------------------------------------
3721 RHSTTin (K) = RHSTT (K)
3726 ! ----------------------------------------------------------------------
3727 ! CALL ROSR12 TO SOLVE THE TRI-DIAGONAL MATRIX
3728 ! ----------------------------------------------------------------------
3729 CALL ROSR12 (CI,AI,BI,CIin,RHSTTin,RHSTT,NSOIL)
3730 ! ----------------------------------------------------------------------
3731 ! SUM THE PREVIOUS SMC VALUE AND THE MATRIX SOLUTION TO GET A
3732 ! NEW VALUE. MIN ALLOWABLE VALUE OF SMC WILL BE 0.02.
3733 ! RUNOFF3: RUNOFF WITHIN SOIL LAYERS
3734 ! ----------------------------------------------------------------------
3740 IF (K /= 1) DDZ = ZSOIL (K - 1) - ZSOIL (K)
3741 SH2OOUT (K) = SH2OIN (K) + CI (K) + WPLUS / DDZ
3742 STOT = SH2OOUT (K) + SICE (K)
3743 IF (STOT > SMCMAX) THEN
3748 DDZ = - ZSOIL (K) + ZSOIL (KK11)
3750 WPLUS = (STOT - SMCMAX) * DDZ
3754 SMC (K) = MAX ( MIN (STOT,SMCMAX),0.02 )
3755 SH2OOUT (K) = MAX ( (SMC (K) - SICE (K)),0.0)
3758 ! ----------------------------------------------------------------------
3759 ! UPDATE CANOPY WATER CONTENT/INTERCEPTION (CMC). CONVERT RHSCT TO
3760 ! AN 'AMOUNT' VALUE AND ADD TO PREVIOUS CMC VALUE TO GET NEW CMC.
3761 ! ----------------------------------------------------------------------
3763 CMC = CMC + DT * RHSCT
3764 IF (CMC < 1.E-20) CMC = 0.0
3765 CMC = MIN (CMC,CMCMAX)
3767 ! ----------------------------------------------------------------------
3768 END SUBROUTINE SSTEP
3769 ! ----------------------------------------------------------------------
3771 SUBROUTINE TBND (TU,TB,ZSOIL,ZBOT,K,NSOIL,TBND1)
3773 ! ----------------------------------------------------------------------
3775 ! ----------------------------------------------------------------------
3776 ! CALCULATE TEMPERATURE ON THE BOUNDARY OF THE LAYER BY INTERPOLATION OF
3777 ! THE MIDDLE LAYER TEMPERATURES
3778 ! ----------------------------------------------------------------------
3780 INTEGER, INTENT(IN) :: NSOIL
3782 REAL, INTENT(IN) :: TB, TU, ZBOT
3783 REAL, INTENT(OUT) :: TBND1
3784 REAL, DIMENSION(1:NSOIL), INTENT(IN) :: ZSOIL
3786 REAL, PARAMETER :: T0 = 273.15
3788 ! ----------------------------------------------------------------------
3789 ! USE SURFACE TEMPERATURE ON THE TOP OF THE FIRST LAYER
3790 ! ----------------------------------------------------------------------
3796 ! ----------------------------------------------------------------------
3797 ! USE DEPTH OF THE CONSTANT BOTTOM TEMPERATURE WHEN INTERPOLATE
3798 ! TEMPERATURE INTO THE LAST LAYER BOUNDARY
3799 ! ----------------------------------------------------------------------
3800 IF (K == NSOIL) THEN
3801 ZB = 2.* ZBOT - ZSOIL (K)
3805 ! ----------------------------------------------------------------------
3806 ! LINEAR INTERPOLATION BETWEEN THE AVERAGE LAYER TEMPERATURES
3807 ! ----------------------------------------------------------------------
3809 TBND1 = TU + (TB - TU)* (ZUP - ZSOIL (K))/ (ZUP - ZB)
3810 ! ----------------------------------------------------------------------
3812 ! ----------------------------------------------------------------------
3815 SUBROUTINE TDFCND ( DF, SMC, QZ, SMCMAX, SH2O)
3817 ! ----------------------------------------------------------------------
3819 ! ----------------------------------------------------------------------
3820 ! CALCULATE THERMAL DIFFUSIVITY AND CONDUCTIVITY OF THE SOIL FOR A GIVEN
3822 ! ----------------------------------------------------------------------
3823 ! PETERS-LIDARD APPROACH (PETERS-LIDARD et al., 1998)
3824 ! June 2001 CHANGES: FROZEN SOIL CONDITION.
3825 ! ----------------------------------------------------------------------
3827 REAL, INTENT(IN) :: QZ, SMC, SMCMAX, SH2O
3828 REAL, INTENT(OUT) :: DF
3829 REAL :: AKE, GAMMD, THKDRY, THKICE, THKO, &
3830 THKQTZ,THKSAT,THKS,THKW,SATRATIO,XU, &
3833 ! ----------------------------------------------------------------------
3834 ! WE NOW GET QUARTZ AS AN INPUT ARGUMENT (SET IN ROUTINE REDPRM):
3835 ! DATA QUARTZ /0.82, 0.10, 0.25, 0.60, 0.52,
3836 ! & 0.35, 0.60, 0.40, 0.82/
3837 ! ----------------------------------------------------------------------
3838 ! IF THE SOIL HAS ANY MOISTURE CONTENT COMPUTE A PARTIAL SUM/PRODUCT
3839 ! OTHERWISE USE A CONSTANT VALUE WHICH WORKS WELL WITH MOST SOILS
3840 ! ----------------------------------------------------------------------
3841 ! THKW ......WATER THERMAL CONDUCTIVITY
3842 ! THKQTZ ....THERMAL CONDUCTIVITY FOR QUARTZ
3843 ! THKO ......THERMAL CONDUCTIVITY FOR OTHER SOIL COMPONENTS
3844 ! THKS ......THERMAL CONDUCTIVITY FOR THE SOLIDS COMBINED(QUARTZ+OTHER)
3845 ! THKICE ....ICE THERMAL CONDUCTIVITY
3846 ! SMCMAX ....POROSITY (= SMCMAX)
3847 ! QZ .........QUARTZ CONTENT (SOIL TYPE DEPENDENT)
3848 ! ----------------------------------------------------------------------
3849 ! USE AS IN PETERS-LIDARD, 1998 (MODIF. FROM JOHANSEN, 1975).
3851 ! PABLO GRUNMANN, 08/17/98
3853 ! FAROUKI, O.T.,1986: THERMAL PROPERTIES OF SOILS. SERIES ON ROCK
3854 ! AND SOIL MECHANICS, VOL. 11, TRANS TECH, 136 PP.
3855 ! JOHANSEN, O., 1975: THERMAL CONDUCTIVITY OF SOILS. PH.D. THESIS,
3856 ! UNIVERSITY OF TRONDHEIM,
3857 ! PETERS-LIDARD, C. D., ET AL., 1998: THE EFFECT OF SOIL THERMAL
3858 ! CONDUCTIVITY PARAMETERIZATION ON SURFACE ENERGY FLUXES
3859 ! AND TEMPERATURES. JOURNAL OF THE ATMOSPHERIC SCIENCES,
3860 ! VOL. 55, PP. 1209-1224.
3861 ! ----------------------------------------------------------------------
3863 ! POROSITY(SOIL TYPE):
3866 ! PARAMETERS W/(M.K)
3867 SATRATIO = SMC / SMCMAX
3870 ! WATER CONDUCTIVITY:
3872 ! THERMAL CONDUCTIVITY OF "OTHER" SOIL COMPONENTS
3873 ! IF (QZ .LE. 0.2) THKO = 3.0
3875 ! QUARTZ' CONDUCTIVITY
3877 ! SOLIDS' CONDUCTIVITY
3878 THKS = (THKQTZ ** QZ)* (THKO ** (1. - QZ))
3880 ! UNFROZEN FRACTION (FROM 1., i.e., 100%LIQUID, TO 0. (100% FROZEN))
3881 XUNFROZ = SH2O / SMC
3882 ! UNFROZEN VOLUME FOR SATURATION (POROSITY*XUNFROZ)
3883 XU = XUNFROZ * SMCMAX
3885 ! SATURATED THERMAL CONDUCTIVITY
3886 THKSAT = THKS ** (1. - SMCMAX)* THKICE ** (SMCMAX - XU)* THKW ** &
3889 ! DRY DENSITY IN KG/M3
3890 GAMMD = (1. - SMCMAX)*2700.
3892 ! DRY THERMAL CONDUCTIVITY IN W.M-1.K-1
3893 THKDRY = (0.135* GAMMD+ 64.7)/ (2700. - 0.947* GAMMD)
3895 IF ( (SH2O + 0.0005) < SMC ) THEN
3898 ! RANGE OF VALIDITY FOR THE KERSTEN NUMBER (AKE)
3901 ! KERSTEN NUMBER (USING "FINE" FORMULA, VALID FOR SOILS CONTAINING AT
3902 ! LEAST 5% OF PARTICLES WITH DIAMETER LESS THAN 2.E-6 METERS.)
3903 ! (FOR "COARSE" FORMULA, SEE PETERS-LIDARD ET AL., 1998).
3905 IF ( SATRATIO > 0.1 ) THEN
3907 AKE = LOG10 (SATRATIO) + 1.0
3914 ! THERMAL CONDUCTIVITY
3918 DF = AKE * (THKSAT - THKDRY) + THKDRY
3919 ! ----------------------------------------------------------------------
3920 END SUBROUTINE TDFCND
3921 ! ----------------------------------------------------------------------
3923 SUBROUTINE TMPAVG (TAVG,TUP,TM,TDN,ZSOIL,NSOIL,K)
3925 ! ----------------------------------------------------------------------
3927 ! ----------------------------------------------------------------------
3928 ! CALCULATE SOIL LAYER AVERAGE TEMPERATURE (TAVG) IN FREEZING/THAWING
3929 ! LAYER USING UP, DOWN, AND MIDDLE LAYER TEMPERATURES (TUP, TDN, TM),
3930 ! WHERE TUP IS AT TOP BOUNDARY OF LAYER, TDN IS AT BOTTOM BOUNDARY OF
3931 ! LAYER. TM IS LAYER PROGNOSTIC STATE TEMPERATURE.
3932 ! ----------------------------------------------------------------------
3950 ! ----------------------------------------------------------------------
3951 PARAMETER (T0 = 2.7315E2)
3955 DZ = ZSOIL (K -1) - ZSOIL (K)
3959 IF (TUP .lt. T0) THEN
3960 IF (TM .lt. T0) THEN
3961 ! ----------------------------------------------------------------------
3963 ! ----------------------------------------------------------------------
3964 IF (TDN .lt. T0) THEN
3965 TAVG = (TUP + 2.0* TM + TDN)/ 4.0
3966 ! ----------------------------------------------------------------------
3967 ! TUP & TM < T0, TDN .ge. T0
3968 ! ----------------------------------------------------------------------
3970 X0 = (T0- TM) * DZH / (TDN - TM)
3971 TAVG = 0.5 * (TUP * DZH + TM * (DZH + X0) + T0* ( &
3972 & 2.* DZH - X0)) / DZ
3975 ! ----------------------------------------------------------------------
3976 ! TUP < T0, TM .ge. T0, TDN < T0
3977 ! ----------------------------------------------------------------------
3978 IF (TDN .lt. T0) THEN
3979 XUP = (T0- TUP) * DZH / (TM - TUP)
3980 XDN = DZH - (T0- TM) * DZH / (TDN - TM)
3981 TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP - XDN) &
3983 ! ----------------------------------------------------------------------
3984 ! TUP < T0, TM .ge. T0, TDN .ge. T0
3985 ! ----------------------------------------------------------------------
3987 XUP = (T0- TUP) * DZH / (TM - TUP)
3988 TAVG = 0.5 * (TUP * XUP + T0* (2.* DZ - XUP)) / DZ
3992 IF (TM .lt. T0) THEN
3993 ! ----------------------------------------------------------------------
3994 ! TUP .ge. T0, TM < T0, TDN < T0
3995 ! ----------------------------------------------------------------------
3996 IF (TDN .lt. T0) THEN
3997 XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
3998 TAVG = 0.5 * (T0* (DZ - XUP) + TM * (DZH + XUP) &
4000 ! ----------------------------------------------------------------------
4001 ! TUP .ge. T0, TM < T0, TDN .ge. T0
4002 ! ----------------------------------------------------------------------
4004 XUP = DZH - (T0- TUP) * DZH / (TM - TUP)
4005 XDN = (T0- TM) * DZH / (TDN - TM)
4006 TAVG = 0.5 * (T0* (2.* DZ - XUP - XDN) + TM * &
4010 ! ----------------------------------------------------------------------
4011 ! TUP .ge. T0, TM .ge. T0, TDN < T0
4012 ! ----------------------------------------------------------------------
4013 IF (TDN .lt. T0) THEN
4014 XDN = DZH - (T0- TM) * DZH / (TDN - TM)
4015 TAVG = (T0* (DZ - XDN) +0.5* (T0+ TDN)* XDN) / DZ
4016 ! ----------------------------------------------------------------------
4017 ! TUP .ge. T0, TM .ge. T0, TDN .ge. T0
4018 ! ----------------------------------------------------------------------
4020 TAVG = (TUP + 2.0* TM + TDN) / 4.0
4024 ! ----------------------------------------------------------------------
4025 END SUBROUTINE TMPAVG
4026 ! ----------------------------------------------------------------------
4028 SUBROUTINE TRANSP (ET,NSOIL,ETP1,SMC,CMC,ZSOIL,SHDFAC,SMCWLT, &
4029 & CMCMAX,PC,CFACTR,SMCREF,SFCTMP,Q2,NROOT, &
4032 ! ----------------------------------------------------------------------
4034 ! ----------------------------------------------------------------------
4035 ! CALCULATE TRANSPIRATION FOR THE VEG CLASS.
4036 ! ----------------------------------------------------------------------
4050 !.....REAL PART(NSOIL)
4063 ! ----------------------------------------------------------------------
4064 ! INITIALIZE PLANT TRANSP TO ZERO FOR ALL SOIL LAYERS.
4065 ! ----------------------------------------------------------------------
4069 ! ----------------------------------------------------------------------
4070 ! CALCULATE AN 'ADJUSTED' POTENTIAL TRANSPIRATION
4071 ! IF STATEMENT BELOW TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
4072 ! NOTE: GX AND OTHER TERMS BELOW REDISTRIBUTE TRANSPIRATION BY LAYER,
4073 ! ET(K), AS A FUNCTION OF SOIL MOISTURE AVAILABILITY, WHILE PRESERVING
4075 ! ----------------------------------------------------------------------
4077 IF (CMC .ne. 0.0) THEN
4078 ETP1A = SHDFAC * PC * ETP1 * (1.0- (CMC / CMCMAX) ** CFACTR)
4080 ETP1A = SHDFAC * PC * ETP1
4084 GX (I) = ( SMC (I) - SMCWLT ) / ( SMCREF - SMCWLT )
4085 GX (I) = MAX ( MIN ( GX (I), 1. ), 0. )
4092 RTX = RTDIS (I) + GX (I) - SGX
4093 GX (I) = GX (I) * MAX ( RTX, 0. )
4094 DENOM = DENOM + GX (I)
4097 IF (DENOM .le. 0.0) DENOM = 1.
4099 ET (I) = ETP1A * GX (I) / DENOM
4100 ! ----------------------------------------------------------------------
4101 ! ABOVE CODE ASSUMES A VERTICALLY UNIFORM ROOT DISTRIBUTION
4102 ! CODE BELOW TESTS A VARIABLE ROOT DISTRIBUTION
4103 ! ----------------------------------------------------------------------
4104 ! ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * GX * ETP1A
4105 ! ET(1) = ( ZSOIL(1) / ZSOIL(NROOT) ) * ETP1A
4106 ! ----------------------------------------------------------------------
4107 ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
4108 ! ----------------------------------------------------------------------
4109 ! ET(1) = RTDIS(1) * ETP1A
4110 ! ET(1) = ETP1A * PART(1)
4111 ! ----------------------------------------------------------------------
4112 ! LOOP DOWN THRU THE SOIL LAYERS REPEATING THE OPERATION ABOVE,
4113 ! BUT USING THE THICKNESS OF THE SOIL LAYER (RATHER THAN THE
4114 ! ABSOLUTE DEPTH OF EACH LAYER) IN THE FINAL CALCULATION.
4115 ! ----------------------------------------------------------------------
4117 ! GX = ( SMC(K) - SMCWLT ) / ( SMCREF - SMCWLT )
4118 ! GX = MAX ( MIN ( GX, 1. ), 0. )
4119 ! TEST CANOPY RESISTANCE
4121 ! ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*GX*ETP1A
4122 ! ET(K) = ((ZSOIL(K)-ZSOIL(K-1))/ZSOIL(NROOT))*ETP1A
4123 ! ----------------------------------------------------------------------
4124 ! USING ROOT DISTRIBUTION AS WEIGHTING FACTOR
4125 ! ----------------------------------------------------------------------
4126 ! ET(K) = RTDIS(K) * ETP1A
4127 ! ET(K) = ETP1A*PART(K)
4130 ! ----------------------------------------------------------------------
4131 END SUBROUTINE TRANSP
4132 ! ----------------------------------------------------------------------
4134 SUBROUTINE WDFCND (WDF,WCND,SMC,SMCMAX,BEXP,DKSAT,DWSAT, &
4137 ! ----------------------------------------------------------------------
4139 ! ----------------------------------------------------------------------
4140 ! CALCULATE SOIL WATER DIFFUSIVITY AND SOIL HYDRAULIC CONDUCTIVITY.
4141 ! ----------------------------------------------------------------------
4155 ! ----------------------------------------------------------------------
4156 ! CALC THE RATIO OF THE ACTUAL TO THE MAX PSBL SOIL H2O CONTENT
4157 ! ----------------------------------------------------------------------
4159 FACTR1 = 0.05 / SMCMAX
4161 ! ----------------------------------------------------------------------
4162 ! PREP AN EXPNTL COEF AND CALC THE SOIL WATER DIFFUSIVITY
4163 ! ----------------------------------------------------------------------
4164 FACTR2 = SMC / SMCMAX
4165 FACTR1 = MIN(FACTR1,FACTR2)
4168 ! ----------------------------------------------------------------------
4169 ! FROZEN SOIL HYDRAULIC DIFFUSIVITY. VERY SENSITIVE TO THE VERTICAL
4170 ! GRADIENT OF UNFROZEN WATER. THE LATTER GRADIENT CAN BECOME VERY
4171 ! EXTREME IN FREEZING/THAWING SITUATIONS, AND GIVEN THE RELATIVELY
4172 ! FEW AND THICK SOIL LAYERS, THIS GRADIENT SUFFERES SERIOUS
4173 ! TRUNCTION ERRORS YIELDING ERRONEOUSLY HIGH VERTICAL TRANSPORTS OF
4174 ! UNFROZEN WATER IN BOTH DIRECTIONS FROM HUGE HYDRAULIC DIFFUSIVITY.
4175 ! THEREFORE, WE FOUND WE HAD TO ARBITRARILY CONSTRAIN WDF
4177 ! VERSION D_10CM: ........ FACTR1 = 0.2/SMCMAX
4178 ! WEIGHTED APPROACH...................... PABLO GRUNMANN, 28_SEP_1999.
4179 ! ----------------------------------------------------------------------
4180 WDF = DWSAT * FACTR2 ** EXPON
4181 IF (SICEMAX .gt. 0.0) THEN
4182 VKWGT = 1./ (1. + (500.* SICEMAX)**3.)
4183 WDF = VKWGT * WDF + (1. - VKWGT)* DWSAT * FACTR1** EXPON
4184 ! ----------------------------------------------------------------------
4185 ! RESET THE EXPNTL COEF AND CALC THE HYDRAULIC CONDUCTIVITY
4186 ! ----------------------------------------------------------------------
4188 EXPON = (2.0 * BEXP) + 3.0
4189 WCND = DKSAT * FACTR2 ** EXPON
4191 ! ----------------------------------------------------------------------
4192 END SUBROUTINE WDFCND
4193 ! ----------------------------------------------------------------------
4195 SUBROUTINE SFCDIF_off (ZLM,Z0,THZ0,THLM,SFCSPD,CZIL,AKMS,AKHS)
4197 ! ----------------------------------------------------------------------
4198 ! SUBROUTINE SFCDIF (renamed SFCDIF_off to avoid clash with Eta PBL)
4199 ! ----------------------------------------------------------------------
4200 ! CALCULATE SURFACE LAYER EXCHANGE COEFFICIENTS VIA ITERATIVE PROCESS.
4201 ! SEE CHEN ET AL (1997, BLM)
4202 ! ----------------------------------------------------------------------
4205 REAL WWST, WWST2, G, VKRM, EXCM, BETA, BTG, ELFC, WOLD, WNEW
4206 REAL PIHF, EPSU2, EPSUST, EPSIT, EPSA, ZTMIN, ZTMAX, HPBL, &
4208 REAL RIC, RRIC, FHNEU, RFC, RFAC, ZZ, PSLMU, PSLMS, PSLHU, &
4210 REAL XX, PSPMU, YY, PSPMS, PSPHU, PSPHS, ZLM, Z0, THZ0, THLM
4211 REAL SFCSPD, CZIL, AKMS, AKHS, ZILFC, ZU, ZT, RDZ, CXCH
4212 REAL DTHV, DU2, BTGH, WSTAR2, USTAR, ZSLU, ZSLT, RLOGU, RLOGT
4213 REAL RLMO, ZETALT, ZETALU, ZETAU, ZETAT, XLU4, XLT4, XU4, XT4
4216 REAL XLU, XLT, XU, XT, PSMZ, SIMM, PSHZ, SIMH, USTARK, RLMN, &
4219 INTEGER ITRMX, ILECH, ITR
4221 & (WWST = 1.2,WWST2 = WWST * WWST,G = 9.8,VKRM = 0.40, &
4223 & ,BETA = 1./270.,BTG = BETA * G,ELFC = VKRM * BTG &
4224 & ,WOLD =.15,WNEW = 1. - WOLD,ITRMX = 05, &
4225 & PIHF = 3.14159265/2.)
4227 & (EPSU2 = 1.E-4,EPSUST = 0.07,EPSIT = 1.E-4,EPSA = 1.E-8 &
4228 & ,ZTMIN = -5.,ZTMAX = 1.,HPBL = 1000.0 &
4231 & (RIC = 0.183,RRIC = 1.0/ RIC,FHNEU = 0.8,RFC = 0.191 &
4232 & ,RFAC = RIC / (FHNEU * RFC * RFC))
4234 ! ----------------------------------------------------------------------
4235 ! NOTE: THE TWO CODE BLOCKS BELOW DEFINE FUNCTIONS
4236 ! ----------------------------------------------------------------------
4237 ! LECH'S SURFACE FUNCTIONS
4238 ! ----------------------------------------------------------------------
4239 PSLMU (ZZ)= -0.96* log (1.0-4.5* ZZ)
4240 PSLMS (ZZ)= ZZ * RRIC -2.076* (1. -1./ (ZZ +1.))
4241 PSLHU (ZZ)= -0.96* log (1.0-4.5* ZZ)
4243 ! ----------------------------------------------------------------------
4244 ! PAULSON'S SURFACE FUNCTIONS
4245 ! ----------------------------------------------------------------------
4246 PSLHS (ZZ)= ZZ * RFAC -2.076* (1. -1./ (ZZ +1.))
4247 PSPMU (XX)= -2.* log ( (XX +1.)*0.5) - log ( (XX * XX +1.)*0.5) &
4251 PSPHU (XX)= -2.* log ( (XX * XX +1.)*0.5)
4253 ! ----------------------------------------------------------------------
4254 ! THIS ROUTINE SFCDIF CAN HANDLE BOTH OVER OPEN WATER (SEA, OCEAN) AND
4255 ! OVER SOLID SURFACE (LAND, SEA-ICE).
4256 ! ----------------------------------------------------------------------
4259 ! ----------------------------------------------------------------------
4260 ! ZTFC: RATIO OF ZOH/ZOM LESS OR EQUAL THAN 1
4262 ! CZIL: CONSTANT C IN Zilitinkevich, S. S.1995,:NOTE ABOUT ZT
4263 ! ----------------------------------------------------------------------
4266 ! ----------------------------------------------------------------------
4267 ZILFC = - CZIL * VKRM * SQVISC
4268 ! C.......ZT=Z0*ZTFC
4274 ! ----------------------------------------------------------------------
4275 ! BELJARS CORRECTION OF USTAR
4276 ! ----------------------------------------------------------------------
4277 DU2 = MAX (SFCSPD * SFCSPD,EPSU2)
4278 !cc If statements to avoid TANGENT LINEAR problems near zero
4280 IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
4281 WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
4286 ! ----------------------------------------------------------------------
4287 ! ZILITINKEVITCH APPROACH FOR ZT
4288 ! ----------------------------------------------------------------------
4289 USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
4291 ! ----------------------------------------------------------------------
4292 ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
4294 ! PRINT*,'ZSLT=',ZSLT
4299 RLOGU = log (ZSLU / ZU)
4301 RLOGT = log (ZSLT / ZT)
4302 ! PRINT*,'RLMO=',RLMO
4303 ! PRINT*,'ELFC=',ELFC
4304 ! PRINT*,'AKHS=',AKHS
4305 ! PRINT*,'DTHV=',DTHV
4306 ! PRINT*,'USTAR=',USTAR
4308 RLMO = ELFC * AKHS * DTHV / USTAR **3
4309 ! ----------------------------------------------------------------------
4310 ! 1./MONIN-OBUKKHOV LENGTH-SCALE
4311 ! ----------------------------------------------------------------------
4313 ZETALT = MAX (ZSLT * RLMO,ZTMIN)
4314 RLMO = ZETALT / ZSLT
4315 ZETALU = ZSLU * RLMO
4319 IF (ILECH .eq. 0) THEN
4320 IF (RLMO .lt. 0.)THEN
4321 XLU4 = 1. -16.* ZETALU
4322 XLT4 = 1. -16.* ZETALT
4323 XU4 = 1. -16.* ZETAU
4325 XT4 = 1. -16.* ZETAT
4326 XLU = SQRT (SQRT (XLU4))
4327 XLT = SQRT (SQRT (XLT4))
4328 XU = SQRT (SQRT (XU4))
4330 XT = SQRT (SQRT (XT4))
4331 ! PRINT*,'-----------1------------'
4332 ! PRINT*,'PSMZ=',PSMZ
4333 ! PRINT*,'PSPMU(ZETAU)=',PSPMU(ZETAU)
4335 ! PRINT*,'------------------------'
4337 SIMM = PSPMU (XLU) - PSMZ + RLOGU
4339 SIMH = PSPHU (XLT) - PSHZ + RLOGT
4341 ZETALU = MIN (ZETALU,ZTMAX)
4342 ZETALT = MIN (ZETALT,ZTMAX)
4343 ! PRINT*,'-----------2------------'
4344 ! PRINT*,'PSMZ=',PSMZ
4345 ! PRINT*,'PSPMS(ZETAU)=',PSPMS(ZETAU)
4346 ! PRINT*,'ZETAU=',ZETAU
4347 ! PRINT*,'------------------------'
4348 PSMZ = PSPMS (ZETAU)
4349 SIMM = PSPMS (ZETALU) - PSMZ + RLOGU
4350 PSHZ = PSPHS (ZETAT)
4351 SIMH = PSPHS (ZETALT) - PSHZ + RLOGT
4353 ! ----------------------------------------------------------------------
4355 ! ----------------------------------------------------------------------
4357 IF (RLMO .lt. 0.)THEN
4358 ! PRINT*,'-----------3------------'
4359 ! PRINT*,'PSMZ=',PSMZ
4360 ! PRINT*,'PSLMU(ZETAU)=',PSLMU(ZETAU)
4361 ! PRINT*,'ZETAU=',ZETAU
4362 ! PRINT*,'------------------------'
4363 PSMZ = PSLMU (ZETAU)
4364 SIMM = PSLMU (ZETALU) - PSMZ + RLOGU
4365 PSHZ = PSLHU (ZETAT)
4366 SIMH = PSLHU (ZETALT) - PSHZ + RLOGT
4368 ZETALU = MIN (ZETALU,ZTMAX)
4370 ZETALT = MIN (ZETALT,ZTMAX)
4371 ! PRINT*,'-----------4------------'
4372 ! PRINT*,'PSMZ=',PSMZ
4373 ! PRINT*,'PSLMS(ZETAU)=',PSLMS(ZETAU)
4374 ! PRINT*,'ZETAU=',ZETAU
4375 ! PRINT*,'------------------------'
4376 PSMZ = PSLMS (ZETAU)
4377 SIMM = PSLMS (ZETALU) - PSMZ + RLOGU
4378 PSHZ = PSLHS (ZETAT)
4379 SIMH = PSLHS (ZETALT) - PSHZ + RLOGT
4381 ! ----------------------------------------------------------------------
4382 ! BELJAARS CORRECTION FOR USTAR
4383 ! ----------------------------------------------------------------------
4386 ! ----------------------------------------------------------------------
4387 ! ZILITINKEVITCH FIX FOR ZT
4388 ! ----------------------------------------------------------------------
4389 USTAR = MAX (SQRT (AKMS * SQRT (DU2+ WSTAR2)),EPSUST)
4391 ZT = EXP (ZILFC * SQRT (USTAR * Z0))* Z0
4393 !-----------------------------------------------------------------------
4394 RLOGT = log (ZSLT / ZT)
4395 USTARK = USTAR * VKRM
4396 AKMS = MAX (USTARK / SIMM,CXCH)
4397 !-----------------------------------------------------------------------
4398 ! IF STATEMENTS TO AVOID TANGENT LINEAR PROBLEMS NEAR ZERO
4399 !-----------------------------------------------------------------------
4400 AKHS = MAX (USTARK / SIMH,CXCH)
4401 IF (BTGH * AKHS * DTHV .ne. 0.0) THEN
4402 WSTAR2 = WWST2* ABS (BTGH * AKHS * DTHV)** (2./3.)
4406 !-----------------------------------------------------------------------
4407 RLMN = ELFC * AKHS * DTHV / USTAR **3
4408 !-----------------------------------------------------------------------
4409 ! IF(ABS((RLMN-RLMO)/RLMA).LT.EPSIT) GO TO 110
4410 !-----------------------------------------------------------------------
4411 RLMA = RLMO * WOLD+ RLMN * WNEW
4412 !-----------------------------------------------------------------------
4414 ! PRINT*,'----------------------------'
4415 ! PRINT*,'SFCDIF OUTPUT ! ! ! ! ! ! ! ! ! ! ! !'
4419 ! PRINT*,'THZ0=',THZ0
4420 ! PRINT*,'THLM=',THLM
4421 ! PRINT*,'SFCSPD=',SFCSPD
4422 ! PRINT*,'CZIL=',CZIL
4423 ! PRINT*,'AKMS=',AKMS
4424 ! PRINT*,'AKHS=',AKHS
4425 ! PRINT*,'----------------------------'
4428 ! ----------------------------------------------------------------------
4429 END SUBROUTINE SFCDIF_off
4430 ! ----------------------------------------------------------------------
4432 END MODULE module_sf_noahlsm