Important Note: This FAQ is not complete. However, many users questions have been posted and answered
on the DHSVM users forum. Those are posted at http://mailman1.u.washington.edu/pipermail/dhsvm-users/. Check it out if you do not find the answer to your
question in this page. Check the Tools section as well.
Provided below is a list of Frequently Asked Questions:
MODEL THEORY
What is DHSVM?
DHSVM is a distributed hydrology model that was developed at the University of Washington almost ten years ago. It has been applied both operationally, for streamflow prediction, and in a research capacity, to examine the effects of forest management on peak streamflow, among other things.
Three journal articles that describe the fundamental structure of DHSVM are:
Wigmosta, M.S., B. Nijssen, P. Storck, and D.P. Lettenmaier, 2002: The
Distributed Hydrology Soil Vegetation Model, In Mathematical Models of Small
Watershed Hydrology and Applications, V.P. Singh, D.K. Frevert, eds., Water
Resource Publications, Littleton, CO., p. 7-42.
Wigmosta, M.S. and W.A. Perkins, 2001. Simulating the effects of forest
roads on watershed hydrology, in Land Use and Watersheds: Human Influence on
Hydrology and Geomorphology in Urban and Forest Areas, M.S. Wigmosta and S.J.
Burges, eds., AGU Water Science and Application Volume 2, p. 127-143.
Wigmosta, M.S., L. Vail, and D.P. Lettenmaier, 1994: A distributed
hydrology-vegetation model for complex terrain, Wat. Resour. Res., 30, p. 1665-1679.
Is there a user manual?
The primary repository for information regarding the operation of DHSVM is this web site.
What do I need to run the model?
In general, DHSVM requires 1) time series inputs, 2) spatial inputs,
3) linear elements and 4) look-up tables. The time series inputs refer
to the meteorologic data used to force the model. The spatial inputs include
five maps: a digital elevation model (DEM), basin mask file, soil type file,
soil depth file, and a vegetation type file. These are binary raster files
at the resolution of the model run (typically grid cells on the order of 50 m,
applications have varied from 25 m to 200 m). The linear elements include arc
coverages of the streams and forest roads (if present), as well as point coverages
of culvert (and other drainage feature) locations. These are processed within
ArcInfo to prepare the stream (and road) class, network and map files that are
used by the model. The look-up tables are tied to the soil or vegetation type
in the map files. The look-up table parameters are listed in the
configuration
file.
Can DHSVM be used in urban areas?
To our knowledge no one has ever tested DHSVM in urban areas and it was
not designed to deal with urban areas where there are storm sewer networks
that will route water more quickly and not based on topography. The
impervious fraction vegetation parameter was added for the
PRISM project because some of
the basins include developed areas, although the model
domains were upstream of the most significant cities. It is simplistic
(basically any precipitation falling on impervious areas jump to the
nearest stream channel in the next timestep), but seems to have served
this purpose.
In the source code, why does the calculation for flow_fractions only
allow 4 adjacent neighbors instead of 8 adjacent neighbors as described
in Wigmosta et al. (1994)?
DHSVM offers the possibility to use 4 or 8 neighbor pixels (with NDIR
in constants.h) to perform the calculations. However, the subroutine "flowfractions" (SlopeAspect.c) cannot handle 8 neighbor pixels. The code enabling 8 flow directions was removed to make the computation of surface and subsurface flow pathways consistent with the digital elevation model networks (DEMON) described by Costa-Cabral and Burges (1994). The DEMON approach makes use of flow tubesthat distribute fractions of runoff between the downslope pixels to resolve problems of flow path configuration and total contributing area that arise in most commonly used "D8" algorithms.
Costa-Cabral, M.C. and S.J. Burges, 1994, Digital elevation model networks (DEMON): A model of flow over hillslopes for computation of contributing and dispersal areas, Water Resources Research, 30 (6), 1681-1692.
I am getting unrealistic accumulations of water in some pixels, resulting in huge amounts of surface runoff even though I filled sinks in my DEM in ArcInfo.
As mentioned above, DHSVM now onlys allows distribution of runoff among the 4 nearest neighbors, while the algorithm used to fill sinks in ArcInfo uses the 8 nearest neighbors. Using the 4 neighbor cells, can be troublesome for flat areas, because water that reacheds these areas cannot leave. This results in loca lrecycling of water, a rising watertable and huge runoff for some pixels, even when the precipitation is set to zero. This problem might be eliminated
by implementing an 8 neighbor algorithm. Alternatively, the program FILL_SINKS_DHSVM is a draft utility that will fill sinks in a manner similar to the ArcInfo algorithm, using only the 4 nearest neighbors. There are no guarantees on the accuracy and reliability of this utility, etc., etc.
The Storck et al. (1998) publication in Hydrologic Processes indicates that
two snow layers were included in the model instead of the single layer model
reported in Wigmosta et al. (1994). Is a description of the 2-layer model
published somewhere?
Yes. Wigmosta, M.S., B. Nijssen, P. Storck, and D.P. Lettenmaier, 2002: The
Distributed Hydrology Soil Vegetation Model, In Mathematical Models of
Small Watershed Hydrology and Applications, V.P. Singh, D.K. Frevert,
eds., Water Resource Publications, Littleton, CO., p. 7-42.
Does DHSVM contain algorithms to evaluate surface erosion and transport to
the basin outlet?
The versions DHSVM 3.0 and higher simulate surface erosion, road erosion
and transport to basin outlet.
How are channels represented to allow water to move from the hillslope
into the channel?
Channels are represented as vectors which overlay the grids. Please refer to
the DHSVM publications list for more information on how features are represented in the
model.
What flow routing algorithm does DHSVM use?
Please refer to the DHSVM publications list for specific information on the
algorithms in the code.
The stream channel segment routing uses following equations in channel.c:
segment->K = sqrt(segment->slope)*pow(y,2.0/3.0) /
(segment->class->friction*segment->length); (1)
segment->X = exp(-segment->K * deltat); (2)
I understand Manning equation (eq. 1). What is equation 2?
DHSVM uses a linear reservoir routing scheme. Each segment is treated
as a reservoir of constant width with outflow linearly related to
storage. This implies a constant flow velocity that is calculated
from Manning's equation using a reference flow depth and corresponding
hydraulic radius so that storage can be determined:
Storaget+1 = Qin/segment->K + (Storaget - Qin/segment->K)*segment->X
equation 21 in Wigmosta and Perkins (2001)
So the outflow from the segment is determined by mass balance:
Qout = Qin - (Storaget+1 - Storaget)/deltat
equation 22 in Wigmosta and Perkins (2001)
How is infiltration on forest roads represented in DHSVM?
Forest roads can have a different infiltration rate than the
surrounding landscape. This is specified in the road class file.
However, the interaction of roads and the surrounding ground surface as
pertaining to infiltration and subsurface saturation is more complicated than
that. It would be best if water that is already running on the road could
interact with the subsurface. Currently rain falling on the road can infiltrate, but water running on the road cannot.
The problem is that rain falling on the road is handled at the individual
pixel level, where we have a full knowledge of the moisture conditions in
the pixel. However, water running on the road (or more correctly water
running in the ditch alongside the road), is handled in the routing
routines, which treat stretches of the road as linear features, which in
most cases span multiple pixels. It is not straightforward to access the
moisture conditions in the individual pixels from the routing routines.
Generally the only way the water from the road (ditch) will return to the
landscape is through a "sink", which spills the water from the ditch on a
downslope pixel.
For a conservative approach of no infiltration on the road surface
(to reflect compaction of the road surface), infiltration through
the road bed will not happen and the interaction between the water on the
road and the roadbed and the moisture conditions in the pixels through
which the road passes are not needed. For modelling roads where infiltration
is important or modeling the change in infiltration with use, or some other
factor, further development is necessary.
MODEL SOURCE CODE
Do you make the code available for research projects?
Yes, the model source code can be downloaded from this website.
Do you provide technical assistance for using DHSVM?
No formal technical support is provided for DHSVM unless specific arrangements have been made. Questions regarding model implementation and use that are not answered through these web pages can be posted to the DHSVM-users list server
I have run into a problem with compiling channel.c. I got the following
error messages:
channel.c: In function 'alloc_channel_class':
channel.c:40: 'errno' undeclared (first use in this function)
In my errno.h file located in "/usr/include/sys", the errno variable is not defined.
If I edit errno.h and add the following line, "#define errno 999" (a junk
number), channel.c compiles without the error message. Is there a better
solution?
For compiling the source code, in the makefile, there is line setting a
variable called FLEX to /usr/bin/flex. I don't have a directory called
flex in /usr/bin. What is this? Is this a standard UNIX thing?
MODEL INPUTS
Do you have a sample set of input files?
Check out the tutorial or the
Input File Processing Section.
How do you generate binary files needed for model input?
Check out myconvert.c in the Tools section
and in tutorial for more details.
I have some AML scripts for creating model input that I got from you in 2001.
Are there more up-to-date scripts available?
The most recent set of scripts can be found in the Tools section
and in the tutorial.
Is it okay if the grid cells in the input maps don't match up exactly?
No. The grids need to have the same xmin, ymin, xmax and ymax and the same
number of active grid cells. If the grid cells do not match up,
this causes a problem. For instance, a cell in the mask could have a soil depth
of -9999. In the past, we have used grids that are square (all cells have a
value) and then use the mask to define the basin to avoid this problem.
Configuration file
What are sources for obtaining the following input parameters?
Ground roughness - literature
Snow roughness - often calibrated between reasonable ranges taken from literature
Snow water capacity - literature
Reference Height - This is the reference height for wind speed
measurements. Wind speed (depending on the data source) is often measured at
either 2 or 10 meters above bare ground/short grass. However, for DHSVM this
needs to be translated this to a height above the vegetation. For short
vegetation (understory only) we assume that wind speed measured at 2 m
above the ground has a reference height equal to the veg height + 2 m. For taller
vegetation (overstory), the boundary layer effect is greater, so we often assume that
wind speed measured at 2 meters above bare ground is equal to wind speed
approximately 10 m above the canopy. For model stability it is best if
the reference height is set to at least 10 m above the tallest vegetation.
LAI multipliers - field studies or literature
Min intercepted snow - field studies or literature
Temperature lapse rate - observations or psuedo adiabatic lapse rate
Precipitation lapse rate - observations. The PRISM files option override this.
If the shading option is used does shortwave radiation need to be broken
into direct and diffuse components in the input meteorological files?
No.
Mask file
What will happen if the 'outside mask value' is different than what is actually
in the binary map file?
The model will crash or the model may run and generate extremely large mass balance errors. These must match.
How is the mask file generated?
We usually delineate watersheds from the DEM using ArcInfo GIS software.
ArcInfo first computes the flow direction from each grid cell (based on
steepest descent) and then creates a raster file containing the cumulative
number of pixels draining to each grid cell. This is the flow
accumulation file. The basin mask should be generated from the flow accumulation
file at the model resolution. Refer to ArcInfo help for more information on this.
Can a mask file be created without ArcInfo?
The mask file should be generated such that the drainage directions as
computed from the underlying DEM are explicitly taken into account. A mask
file created without taking into account the drainage directions based on
the DEM may result in a mass balance error. Essentially what can happen is
that the model solves for some pixels that do not drain into the watershed.
Therefore, the runoff and subsurface flow generated from these
pixels is never captured by the stream network and essentially disappears
from the water balance. The mass error would change with calibration because of
changes to the ratio of evaporation to runoff. The evaporation from
these out-of-basin pixels is still accounted for in the mass balance,
but the runoff is being lost.
Soil type file
Is it possible to have one soil layer?
DHSVM has always been run with three soil layers and a deep soil layer,
for a total of four layers. In theory, as long as there is a second layer
(the deep layer) for the saturated moisture transport (i.e. soil depth in
the soil depth file still must be greater than the depth specified
in the configuration file), the model should work with one layer.
However, since it has not been tested, what will actually occur is unknown.
How sensitive is the model to hydraulic conductivity?
Saturated hydraulic conductivity is the single greatest calibration
parameter. There is also an exponential decay of conductivity with depth so
that the effective transmissivity is a non-linear function of water table
depth.
What are the units for thermal conductivity?
The units indicated on our website in the past (J/m3°C) were incorrect.
The actual units are (W/(m*K)).
Is thermal capacity per unit mass (i.e., specific heat) or volumetric
(what most sources call "thermal capacity")?
The units indicated on our website in the past (J/kg/K) were incorrect.
The actual units are (J/m3°C), which are typical units for (volumetric)
thermal capacity.
Soil depth file
What is the minimum allowable soil depth?
The soils need to be deeper than rooting zone depths. If there are
vegetation types without roots (and therefore zero rooting depth), the soil
depth needs to be greater than zero. DHSVM can not handle a zero soil depth.
The model will crash because of a division by zero somewhere in the
calculations. If there is a soil type with zero soil depth, i.e. rock,
the soil parameters (in the configuration file) could be used to simulate
no soil (i.e. a low porosity). The net effect is probably very similar (i.e. no
infiltration and upstream groundwater flow will be brought to the surface like
in a spring), but the model structure will more easily accommodate this. The soil
would have the same number of layers and depth as the neighboring pixels.
What soil depths have been used in past model applications?
DHSVM has ONLY been run with depths in the range of 1-10 m. The saturated flow
model in DHSVM is relatively simple. The assumption is that there is no
vertical saturated groundwater flow in a pixel, and all the groundwater that
is part of the system is contained in a single, unconfined aquifer, the
boundaries of which coincide with those of the watershed. In addition,
all flow leaves the basin as surface flow. One of the important reasons for the
simple groundwater model is that DHSVM distributes the saturated water every timestep
for very many pixels. So a fast and simple method for subsurface flow was needed.
These are not unreasonable assumptions for mountainous watersheds where the
depth to bedrock is limited to a few meters. It is a much less reasonable
assumption when there are 300 m of aquifer, most likely in a series of
layers with different hydraulic properties. DHSVM simply was not developed
for these conditions. Since the model has not been run outside of this range,
the affects of modeling deeper soils is unknown.
Vegetation type file
Where have vegetation parameters come from in past model applications?
Check out the following description og DHSVM vegetation parameters.
How is trunk space used in the model?
Trunk space is the percentage of height where the crown begins. The
vegetation height and trunk space are used to calculate the
wind profile and aerodynamic resistance to heat and water vapor transfer,
as affected by the presence of vegetation.
What is meant by understory?
Understory is low lying vegetation (grasses and shrubs) and we have typically
used 0.5 m for the understory height. The understory should not include trees.
Instead, those should be considered as part of a multistory overstory.
How should a multistory overstory be parameterized?
The overstory height and the trunk space values should be used to represent
a multistory overstory. For overstory height, an average height for the top layer
of the overstory could be used. For trunk space, an average height to lowest
layer in canopy could be used.
What was your source for the vegetation data used in the
tutorial input file?
The tutorial was put together for demonstration purposes. As such, many of the
parameters are not from sources, but simply filled in to complete the tutorial.
These parameters should NOT be used in applications of the model. Check out
this for where parameters have come from for actual
past applications.
What is Rpc, Rp and Rp factor?
Rpc is the fraction of radiation that is photosynthetically active.
Rp is radiation flux in the visible part of the spectrum.
Rp factor = 1.0 / [(RsMin / RsMax + Rp / Rpc) / (1 + Rp / Rpc)] (equation 15, Wigmosta et al., 1994) and should range from infinity to 1.0.
The intent of the Rp factor is to increase the stomatal resistance (Rs) at
low light levels, to more realistically simulate evapotranspiration at these
low light levels.
Additionally, Wigmosta et al. (1994) states that Rpc is the light
level where Rs = 2*RsMin and that equation 15 came from Dickinson
et al. (1991), which gave values of Rpc = 10-50 W/m2.
Meteorological station file
Can DHSVM use simulated weather data to evaluate the water balance?
As long as the data are in the correct format, they can be used.
What is the difference between each interpolation scheme?
The nearest scheme assigns values in each cell to that of the station nearest
to the cell. The inverse scheme calculates weighted average values from multiple stations based on the inverse distance
from stations. The Cressman approach is similar to the inverse scheme, but
uses the distance as a radius from the stations.
Can I input maps of meteorological data rather than station time series?
The MM5 option allows the input of binary maps of meteorological data. The extent and resolution do not have to be the same as the underlying DHSVM mask. This option was created to handle input from the MM5 mesoscale meteorological model, but in theory there is nothing preventing the use of alternative sources of meteorological maps.
PRISM files
What are the units in the PRISM files and how are they used in the model?
The units are mm*100. The maps are used to scale the station
precipitation (precip) in the met data files, using the PRISM precip at
the station location and the gridcell location:
precip at gridcell = station precip * (PRISM precip at gridcell location/PRISM precip at station location).
Stream network, map and class files
Why does createstreamnetwork.aml crash when there are stream classes
in the .aat table?
The .aat table should have only the defaults. The AML requires
modifications if you want to assign stream classes manually.
When using createstreamnetwork.aml, why are some of the channel segments
flowing in the wrong direction?
The channel needs to be located in the valley bottom, according to the
DEM. The ArcInfo algorithms used to create the stream network input files,
use an interpolation method (latticespot in the AML) to determine channel
elevations at all channel segment upstream and downstream nodes. (A channel
segment is defined as a channel reach between two tributaries.) If the
segments are not located in the valley bottom, according to the DEM,
downstream segments may be assigned an elevation greater than the
upstream end resulting in the incorrect flow direction.
Can DHSVM model braided channels?
No. DHSVM requires a hydrologically accurate stream network consistent with
the flowaccumulation file as determined by ArcInfo.
Our stream channel passes a rice paddy which is soaked in water
during the wet season. Half of the streamflow goes to the rice paddy
and the other half of streamflow goes to outlet. What should we do with
such case using DHSVM?
DHSVM is just not designed to handle this type of problem. There is no
mechanism to calculate evaporation directly from flooded areas, and perhaps
more importantly, there is no way to divide the streamflow. The streamflow
routing algorithm assumes that there is only one downstream outlet from
each segment. In order to represent the paddy, you would need to edit the
code to allow for a bifurcation in flow, and then release the diverted
water back to the underlying model pixel in a manner similar to what is
done with the culvert sinks.
If you only need to simulate this type of situation for one basin, the
easiest, but inelegant, solution would be to hard-wire the code to treat
the one stream segment differently. You can start by editing the
'channel_route_segment" function in the file 'channel.c'. Find the segment
ID of the stream segment that loses flow to the rice paddy and replace the
line 'segment->outflow = outflow * deltat;' with something like:
*diversion = 0.0;
if(segment->ID == "yourid") {
segment->outflow = (outflow * deltat)/2.;
*diversion = (outflow * deltat)/2.;
else
segment->outflow = outflow * deltat;
You will need to pass this new variable 'diversion' to both the
'channel_route_network' and 'channel_route_segment' functions.
'channel_route_network' is called from the function 'RouteChannel' in the
file 'DHSVMChannel.c'. This is the function you will need to edit in
order to return the diverted streamflow held in the new 'diversion'
variable to the model grid as surface runoff. Essentially after the call
to 'channel_save_outflow_text', you will want to add something like:
SoilMap[y][x].Runoff += diversion / Map->DX * Map->DY;
where y and x are the row and column of the rice paddy. (You could also
divide this water over several grid cells, depending on how big the rice
paddy is.)
This suggestion does not guarantee that additional code changes are not
necessary. One indication that these changes, or any significant code
changes, were not implemented correctly, is increases in the mass balance
error. If it increases with inclusion of this change than
you are not accounting for all of the diverted water and it is important
that you find the 'leak'.
How do you create the stream network and map files given known locations of
connected culverts? Also, do you use the same ArcInfo scripts used to generate the initial stream files to generate these new stream files to incorporate the new stream segments resulting from the connected culverts?
In the case where the stream network is not mapped, but the culverts that are "connected" to the stream network through stream crossings, gullies and overland flow have been mapped, we generally use the mapped stream crossings to help adjust the threshold contributing area for generating an intial stream network using ArcInfo. This stream network is then edited by hand in ArcEdit to either clip stream segments that extend too far, or to draw in connecting segments between "connected" culverts and the nearest stream, being sure to follow the contours of the underlying DEM. To our knowledge, no one has ever automated this process in ArcInfo, but I don't think that it would be that difficult to automate. You may want to manually add a different stream class to these added gully segments, rather than the defaults assigned in createstreamnetwork.aml. One these "new streams" have been added to the original stream arc file, you run the same set of aml scripts to generate the network, map and class files for input into DHSVM.
Is there a means of determining the area and extent of the contributing area
DHSVM accesses to calculate stream flow or flow to any point in the
watershed? Since subsurface flow can occur from one pixel to more than one
down stream pixel, determining the contributing area probably is not as simple
as tracing a boundary based on pixel aspect.
That is true. Essentially you need to use the DEMON algorithm to calculate the total contributing area upstream of a point. We do not have such code available for download through this site.
Road network, map and class files
When using the road preprocessing tools, why do all low points in the road
network get assigned a culvert?
To avoid water recycling: 1) water is intercepted by the road, 2) it
travels in the road-side ditch to another pixel, where it is released through
a culvert, 3) if this pixel is HIGHER than the pixel from which
the water was intercepted, 4) the water will travel back to its origin via
surface runoff, where 5) it is re-intercepted by the SAME road segment.
When using the AML scripts to create the road network input files, where
should nodes exist?
They should only exist where two road segments intersect or where a change
in road and/or ditch characteristics (cut slope, width, ditch dimensions,
etc.).
Are all roads assumed to drain to a culvert?
When using the processing tools currently available through our website, yes. All road-side ditches
are first order, and have a sink (a culvert) somewhere. Since a road segment
can span multiple grid cells, there may not be a sink in every grid cell.
When I tried to generate water flow on road surfaces, I found that there
are a few sinks which are not connected to stream channels. What happens
to the water in such sinks?
The runoff from these sinks is released as surface runoff, onto the model grid
cell which contains the sink. It can then either infiltrate or
continue to travel as overland flow, depending on the soil and moisture characteristics
of that grid cell. That water will eventually enter the stream network as
either surface runoff or subsurface flow.
Travel time file
For the unit hydrograph mode, how is the travel time file made?
We have not used the model in this mode any time in the recent past. Any
efforts to do so will require the user to create all needed input without
assistance from us.
Model state files
How do I create the state files needed for start up?
Follow the links to see the format of these files.
Check out tutorial for an example of how to create these files for an
initial run.
MODEL OUTPUT
What are some causes of mass balance errors in the model?
1. If the basin mask was not generated from the flow accumulation file at
the model resolution i.e. it was generated from some finer resolution or from
another data source. If the DEM and the mask file do not match exactly, there will be
some 'active' grid cells that don't drain anywhere; hence mass balance
errors.
2. If the 'outside basin value' set in the configuration file is not
the same as the mask file.
3. If the spatial files were converted to binary incorrectly, i.e. with headers
or to the wrong type of binary.
4. If a stream segment (except the mouth) in the stream network file does not
drain to a valid segment within the basin.
5. Some versions of the code contain the following lines in UnsaturatedFlow.c:
if (Moist[NSoilLayers] < FCap[NSoilLayers - 1])
Moist[NSoilLayers] = FCap[NSoilLayers - 1];
This essentially resets the bottom layer soil moisture under dry conditions and can result in a substantial mass balance error is some simulations. This check was put in as a short term solution to resolve problems with negative soil moisture that can result because of improper accounting of subsurface flow under some conditions. As of the time of this writing, a fix for negative soil moisture is still in progress.
How should I calibrate the model
The lateral hydraulic conductivity and the exponential decay ( Klat decreases with depth) are the best
parameters to use for the hydraulic calibration. Calibration should be done at the outlet and at the
same spatial resolution as the study. The vertical hydraulic conductivity would be the second parameter.
MASS WASTING MODEL
In the configuration file, how do you choose the MWM Time Steps and the Soil Erosion (SE) Time Steps?
The times were chosen on the basis of the periods when saturation was
high. This is a pre-screening step. There is an output file called
saturation_extent.txt that lists the saturated percent of the basin (the
percent of cells reaching a certain saturation threshold defined in the
code). This was examined for "events" and then put into the input file.
Be careful how many you select. If you pick multiple runs of the mwm
during the same saturation event it will make inappropriate results due
to the stochastic nature of the model.
Surface erosion was selected on a similar basis. Soil erosion is not a stochastic process
and it can be run through the entire model run
Is there any soil erodibility parameter for soil erosion?
Hillslope erosion uses the d50 soil parameter to derive the soil
erodibility. This is computed as in KINEROS. Then look at the root coherions and the vegetation surcharge
parameters in the MWM configuration file. For values or order of magnitude, check the following description
of Erosion parameters for soil and vegetation
for where parameters have come from for actual past applications.
Where can I find erodibility parameters values for road erosion?
Check the following description of Erodibility parameters
for where parameters have come from for actual past applications.
Last Changed:
March 3, 2006