Dave and Harvey's slope stability package

This is the basic model, as seen in SLOPE DISTRIBUTIONS, THRESHOLD HILLSLOPES, AND STEADY-STATE TOPOGRAPHY (Montgomery) and A physically-based model for the topographic control on shallow landsliding: Water Resources Research (Montgomery and Dietrich, 1994).
Q is the critical steady-state rainfall required to cause slope instability where a is the upslope contributing area, b is the contour length across which flow is accounted for, and T is the soil transmissivity, which is given by the product of the soil thickness and hydraulic conductivity. It is further constrained by the restriction that soil saturation cannot exceed 100%.

So how does this differ from < broken link > Dave and Bill's slope stability package < /broken link > ?

Thoughts on September 2, 2020: The physics is still good, but the software is dated. (Though we just just updated an old windows executable below.) Take a look at the python version


stability.aml is an ARC/INFO macro which calculates slope stability for a digital elevation model (DEM). It is launched from the Arc: prompt, and ends at the Grid: prompt. It makes a system call to a C program sloparea.


The required first argument is the name of a filled ARC/INFO grid.

The optional second argument can be the name of a mask grid or either of the keywords grid or mouth. If a grid name is given, the output stability grids will be masked to this grid. If the keyword grid is given, the macro assumes that a cover named boundary exists in the current or parent directory, and creates a grid named shedg from it. If the keyword mouth is given, the macro assumes that a grid named mouth exists, containing a or more cells to define the watershed outlet. After sinks are filled, a watershed boundary grid (named shedg) will be created. You may use a # sign if you want to skip this argument and enter others.

The optional third argument is the name of a directory which contains the cohord.reclass and unstord.reclass files. The default location ./ is the current directory.

The optional fourth argument is the xscale. If it is omitted, it wil default to one, unless the grid projection indicates feet, in which case it will be .3048

The optional fifth argument is the zscale. If it is omitted, it wil default to one, unless the grid projection indicates feet, in which case it will be 0.3048 Use 0.1 if you have decimeters.


The first output grid is named sloped. It is an integer grid with a Z-scale which will make the max value close to the maximum 4-byte integer. The macro will tell you what this scale is.

The C program sloparea reads the exported version of the filled DEM. first determines the pour points of flat spots and increments elevations by one unit so that no flat spots remain. The result is written out to the file filledsloped.bil. The macro creates hdr and blw files so that the bil file can be imported to ARC/INFO as the grid sloped.


The program sloparea continues to run, calculating flow accumulation per unit length. It starts at the peaks and, through many iterations, it assigns flows to all lower cells, proportional to the slope (using a longer baseline on the diagonals) to each neighboring cell. It also tracks the flux at every cell, dividing the incoming flow either by the edge. The result is written out to the file filledcum.bil. This is imported to ARCINFO as the grid flux.

general files

From this point, everything is straightforward grid algebra. We create slopedeg (slope in degrees), tanslope, and sinslope. We also create aobs: flux / sin.

Model Parameters

At lines 225-229, stability.aml sets the parameters transmissivity, soil depth, phi, bulk density, cohesion, and the steady-state rainfall assumed in critical cohesion. These can be easily changed, but the user should be careful to keep track of all parameters expressed in the output grids.

Moving Right Along

The macro creates the temporary grids wet1 (wetness at Q = 1 mm/day) and cossq (cosē). Next it calculates rainfall-for-instability for a cohesion of 2. It first creates an intermediate file qnt2. Then it creates qust2, the actual Q value in mm/day, except that cells to flat to fail are coded as 9999, cells that are stepper but are still stable when saturated are coded 10000, and values greater than 90000 are truncated to 90000. Finally it creates qustc2c, breaking the values into classes numbered 1-7 as defined in the file unstord.reclass. It repeats this process for cohesion values of 4 and 8. Next it calculates the value of Q for saturation qsat), and breaks it into categories (qustc). Finally, it recreates the classic analysis: phi = 45° and cohesion = 0 as grids qust45 and qust45c.

Update history

3/24/97: corrected bug in critical rainfall calculation. It was giving bad results when depth was set to anything other than one meter. Also add a label field to the classified critical cohesion and classified critical rainfall VATs. As long as the reclass files are not altered, stability.aml will create grids in which categories are clearly labeled. Also, include sample plotting macros in the distribution.

4/10/97: We now declare an area stable if rain-for-saturation is greater than rain-for-instability. These get a unique code is the qust%coh% grid, but are classified the same as low slopes in qust%coh%c.

5/8/97: Similar fix for critical rainfall.

8/11/98: Stability.aml automatically uses a correction factor if the horizontal units are feet.

10/15/98: new verion of sloparea. (See internal docs.)

7/1/2004: modified stability.aml so that it does not require unix or fortran, though it still calls sloparea. It should handle varied XY and Z units, floating-point grids, and long flat spots. (See internal documentation.) Sloparea was modified so that is will use the scaling factor with 4-byte DEMs.

1/27/2015: Even as Harvey is making excuses for not finishing a python rewrite (and as others are praising the SAGA version), he has updated stability.aml. It now scales up any DEM to the widest possible range of 32-bit integer values.


The value of T is depth-integrated transmissivity. If you alter soil depth, the wetness (proportion of the soil column which is saturated) will not change.


Why we need fuzzy flow accumulation
See our sensitivity analysis.
We finally noticed that cohesion/depth can be treated as a single parameter.

Downloading files

download new stability.aml (updated 1/27/2015)
download last stability.aml (updated 7/2/2004)
download sample cohord.reclass
download sample unstord.reclass
download sloparea.zip source code (updated 6/02/2010)
Note: we have had trouble compiling portable static versions of this C program with cygwin gcc. In 2020, we decided that the following version may the only one that works.
Hey, Renato, this is what you want.
download sloparea Intel Windows executable, compiled Sept 29 2015, but added to this page Sept 2 2020
download sample macro for plotting critical rainfall.
download sample macro for plotting critical cohesion.
download a self-contained kit for students to play with a partially-processed DEM and adjust parameters with a Seattle example.
or use the old Mettman Ridge version of the kit.
Tim Schaub's lightly documented arcview version of shalstab

Direct questions to Harvey Greenberg and Dave Montgomery. Please send us a note if you use the model.

Main Geomorphology Research Group Page