Skip to Main Content U.S. Department of Energy
Distributed Hydrology Soil Vegetation Model (DHSVM)

Frequently Asked Questions

Important Note: In addition to the questions covered in this FAQ, additional users questions have been posted and answered on the DHSVM Users Forum.

Provided below is a list of Frequently Asked Questions:


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 tubes that 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 only 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 reaches these areas cannot leave. This results in local recycling 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 modeling roads where infiltration is important or modeling the change in infiltration with use, or some other factor, further development is necessary.


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.


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?

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 of 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 meta 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.;
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.


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.


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.