📄 snow_intercept.c
字号:
/* * SUMMARY: SnowInterception.c - simulates snow interception and release * USAGE: * * AUTHOR: Brian Connelly and Pascal Storck * ORG: University of Washington, Department of Civil Engineering * E-MAIL: pstorck@u.washington.edu * ORIG-DATE: 29-Aug-1996 at 13:42:17 * LAST-MOD: Tue Feb 29 14:36:36 2000 by Keith Cherkauer <cherkaue@u.washington.edu> * DESCRIPTION: Calculates the interception and subsequent release of * by the forest canopy using an energy balance approach * DESCRIP-END. * FUNCTIONS: SnowInterception() * COMMENTS: Modified for use with VIC-NL code by Keith Cherkauer * on 4-9-98 */#include <math.h>#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <vicNl.h>static char vcid[] = "$Id: snow_intercept.c,v 4.1 2000/05/16 21:07:16 vicadmin Exp $";/***************************************************************************** Function name: SnowInterception() Purpose : Calculate snow interception and release by the canopy Required : int Dt - Model timestep (hours) double F - Fractional coverage double LAI - Leaf Area Index double MaxInt - Maximum rainfall interception storage (m) double BaseRa - Aerodynamic resistance (uncorrected for stability) (s/m) double AirDens - Density of air (kg/m3) double EactAir - Actual vapor pressure of air (Pa) double Lv - Latent heat of vaporization (J/kg3) PIXRAD *LocalRad - Components of radiation balance for current pixel (W/m2) double Press - Air pressure (Pa) double Tair - Air temperature (C) double Vpd - Vapor pressure deficit (Pa) double Wind - Wind speed (m/s) double *RainFall - Amount of rain (m) double *Snowfall - Amount of snow (m) double *IntRain - Intercepted rain (m) double *IntSnow - Snow water equivalent of intercepted snow (m) double *TempIntStorage - Temporary storage for snowmelt and rainfall involved in mass release calculations (m) double *VaporMassFlux - Vapor mass flux to/from intercepted snow (m/timestep) double *Tcanopy - Canopy temperature (C) double *MeltEnergy - Energy used in heating and melting of the snow (W/m2) Returns : none Modifies : double *RainFall - Amount of rain (m) double *Snowfall - Amount of snow (m) double *IntRain - Intercepted rain (m) double *IntSnow - Snow water equivalent of intercepted snow (m) double *TempIntStorage - Temporary storage for snowmelt and rainfall involved in mass release calculations (m) double *VaporMassFlux - Vapor mass flux to/from intercepted snow (m/timestep) double *Tcanopy - Canopy temperature (C) Comments : Only the top canopy layer is taken into account for snow interception. Snow interception by lower canopy is disregarded. Rain water CAN be intercepted by lower canopy layers (similar to InterceptionStorage()). Of course: NO vegetation -> NO interception Modifications: 06-98 included maximum structural loading to prevent the model from loading the canopy with more snow than it can handle structurally. PXS 09-98 aerodynamic resistances in the canopy when snow has been intercepted is increased by a factor of 10: include REF Journal of Hydrology, 1998 KAC, GO'D*****************************************************************************/void snow_intercept(double Dt, double F, double LAI, double MaxInt, double Ra, double AirDens, double EactAir, double Lv, double Shortwave, double Longwave, double Press, double Tair, double Vpd, double Wind, double *RainFall, double *SnowFall, double *IntRain, double *IntSnow, double *TempIntStorage, double *VaporMassFlux, double *Tcanopy, double *MeltEnergy, int month, int rec, int hour){ double AdvectedEnergy; /* Energy advected by the rain (W/m2) */ double BlownSnow; /* Depth of snow blown of the canopy (m) */ double DeltaSnowInt; /* Change in the physical swe of snow interceped on the branches. (m) */ double Drip; /* Amount of drip from intercepted snow as a result of snowmelt (m) */ double ExcessSnowMelt; /* Snowmelt in excess of the water holding capacity of the tree (m) */ double EsSnow; /* saturated vapor pressure in the snow pack (Pa) */ double InitialSnowInt; /* Initial intercepted snow (m) */ double InitialWaterInt; /* Initial intercepted water (snow and rain) (m) */ double LatentHeat; /* Latent heat flux (W/m2) */ double LongOut; /* Longwave radiation emitted by canopy (W/m2) */ double Ls; /* Latent heat of sublimation (J/(kg K) */ double MassBalanceError; /* Mass blalnce to make sure no water is being destroyed/created (m) */ double MaxWaterInt; /* Water interception capacity (m) */ double MaxSnowInt; /* Snow interception capacity (m) */ double NetRadiation; double PotSnowMelt; /* Potential snow melt (m) */ double RainThroughFall; /* Amount of rain reaching to the ground (m) */ double RefreezeEnergy; /* Energy available for refreezing or melt */ double ReleasedMass; /* Amount of mass release of intercepted snow (m) */ double SensibleHeat; /* Sensible heat flux (W/m2) */ double SnowThroughFall; /* Amount of snow reaching to the ground (m) */ double Tmp; /* Temporary variable */ double Imax1; /* maxium water intecept regardless of temp */ double IntRainFract; /* Fraction of intercpeted water which is liquid */ double IntSnowFract; /* Fraction of intercepted water which is solid */ double Overload; /* temp variable to calculated structural overloading */ /* Convert Units from VIC (mm -> m) */ *RainFall /= 1000.; *SnowFall /= 1000.; *IntRain /= 1000.; MaxInt /= 1000.; /* Initialize Drip, H2O balance, and mass release variables. */ InitialWaterInt = *IntSnow + *IntRain; *IntSnow /= F; *IntRain /= F; InitialSnowInt = *IntSnow; Drip = 0.0; ReleasedMass = 0.0; /* Determine the maximum snow interception water equivalent. Kobayashi, D., 1986, Snow Accumulation on a Narrow Board, Cold Regions Science and Technology, (13), pp. 239-245. Figure 4. */ Imax1 = 4.0* LAI_SNOW_MULTIPLIER * LAI; if (Tair < -1.0 && Tair > -3.0) MaxSnowInt = (Tair*3.0/2.0) + (11.0/2.0); else if (Tair > -1.0) MaxSnowInt = 4.0; else MaxSnowInt = 1.0; /* therefore LAI_ratio decreases as temp decreases */ MaxSnowInt *= LAI_SNOW_MULTIPLIER * LAI; /* Calculate snow interception. */ DeltaSnowInt = (1-*IntSnow/MaxSnowInt) * *SnowFall; if (DeltaSnowInt + *IntSnow > MaxSnowInt) DeltaSnowInt = MaxSnowInt - *IntSnow; if (DeltaSnowInt < 0.0) DeltaSnowInt = 0.0; /* Reduce the amount of intercepted snow if windy and cold. Ringyo Shikenjo Tokyo, #54, 1952. Bulletin of the Govt. Forest Exp. Station, Govt. Forest Exp. Station, Meguro, Tokyo, Japan. FORSTX 634.9072 R475r #54. Page 146, Figure 10. Reduce the amount of intercepted snow if snowing, windy, and cold (< -3 to -5 C). Schmidt and Troendle 1992 western snow conference paper. */ if (Tair < -3.0 && DeltaSnowInt > 0.0 && Wind > 1.0) { BlownSnow = (0.2 * Wind - 0.2) * DeltaSnowInt; if (BlownSnow >= DeltaSnowInt) BlownSnow = DeltaSnowInt; DeltaSnowInt -= BlownSnow; } /* now update snowfall and total accumulated intercepted snow amounts */ if (*IntSnow + DeltaSnowInt > Imax1) DeltaSnowInt =0.0; /* pixel depth */ SnowThroughFall = (*SnowFall - DeltaSnowInt) * F + (*SnowFall) * (1 - F); /* physical depth */ *IntSnow += DeltaSnowInt; /* Calculate amount of rain intercepted on branches and stored in intercepted snow. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -