Last updated 05/26/97
Ferdi Hellweger and David Maidment



HECPREPRO is a GIS preprocessor for the Hydrologic Engineering Center’s (HEC) Hydrologic Modeling System (HMS). HMS is currently being developed by HEC as part of the NexGen program of research. The purpose of HECPREPRO is to summarize data from a GIS system so that they can be used as input for HMS. HECPREPRO takes a stream and subbasin GIS layers as input data. The output data consists of an HMS Basin file. The system is written in ARC/INFO Arc Macro Language (AML) (Version and ArcView Avenue (Version 4.0.av).


As input stream and subbasin data layers are required. An elevation grid is required for the ARC/INFO implementation and optional for the ArcView implementation. The data sets have to be in the same projection and datum. The input data has to accurately describe the hydrologic properties of the area. Where errors occur they are due to discrepancies among the stream and subbasin data layers.


The program code is oriented around identifying hydrologic elements and their connectivity with each other. Seven hydrologic elements are identified. They are: subbasins, sources, reaches, junctions, reservoirs, diversions and sinks.

The step-by-step methodology for identifying and connecting hydrologic elements is presented below. The data for the figures is from the Tenkiller Reservoir drainage basin. Some features were added so that all seven hydrological features are present. The same data is used for the sample applications later.

  1. The program starts with a stream and a subbasin data layer. The stream and subbasin layers are shown in blue and black ,respectively, in Figure 1.

  2. The two layers are intersected. This removes streams outside the watershed boundary and identifies locations at the intersection of streams and subbasin boundaries. Those locations can represent sources, subbasin outlets or sinks. The resulting stream layer with the intersection locations marked in red is shown in Figure 2.

  3. Stream lines are classified into three types. Stream lines can be part of the channel system that carries water from upstream features, they can be tributaries to the channel system or they can be part of a lake or reservoir defined by double-line connections between two channel locations.

    The channel system is defined by being downstream of hydrologic elements. There is always a source or a subbasin outlet at the most upstream end of a channel system. That means that the channel system can also be defined by being downstream of sources and subbasin outlets. The system identifies the channel system by tracing downstream of the locations identified in step 2. Reservoir lines are identified by being enclosed polygons in the stream coverage. The channel streams (green), the non-channel streams (red) and the reservoir streams (blue) are shown in Figure 3.

  4. All the elements on the channel can be identified based on their relation to the connecting lines as follows:

    Diversion - one channel line upstream and two or more channel lines downstream.
    Junction - two or more channel lines upstream and one channel line downstream.
    Reservoir - two reservoir lines upstream and no reservoir line downstream.
    Sink - one channel line upstream and no channel line downstream.
    Source - no channel line upstream and one channel line downstream.
    Subbasin outlet - any intersection location not meeting the criteria for sink or source.

    Diversions (red circles), junctions (blue circles), reservoirs (black circles), sinks(red dots), sources (green dotd), and subbasin outlets (blue dots) are shown in Figure 4.

  5. A unique ID is assigned to each element on the channel system as shown in Figure 5.
  6. Connectivity among channel elements is establised by moving along the channel streams from element to element. During this process multiple stream lines are combined into single reaches and they are assigned IDs as shown in Figure 6.

  7. Subbasin elements are defined by the centroid of the polygons in the subbasin coverage. They are assigned unique IDs and marked with black dots as shown in Figure 7.

  8. With all the channel elements establised and connectivity identified a symbolic layer is generated. Points in the layer are diversions (red circle), junctions (blue circle), reservoirs (black circle), sinks (red dot), sources (green dot), and subbasins (black dot). Note that elements previously classified as subbasin outlets are now combined with junctions, because they serve the same function. Connection among the elements represented by points can be with a channel (green) or a link (yellow) as shown in Figure 8.

  9. The IDs are carried over into the symbolic layer as shown in Figure 9.


The output data contains of a HMS basin file, and a ‘hydrologic’ and a symbolic data layer.

HMS Basin File
The HMS basin file is an ASCII file designed to be read by HMS directly. Here is an example.

Hydrologic Data Layer
A ‘hydrologic’ data layer is created. The main purpose of the layer is to serve as a working layer to store data and perform calculations during the program run. However, the layer is also useful for trouble shooting purposes.

Symbolic Data Layer
A symbolic data layer is created. The main purpose of the layer is for the user to check the results of the system.


The system consists of five AML programs. The programs can be viewed and downloaded by clicking on the hyperlinks for each program below. Alternatively the programs can be downloaded via anonymous ftp from

hecprepro.aml - main program (arc).
hecpause.aml - pause utility (any).

hecshell.aml - user interactive data input shell (arc).
hechydro.aml - program that reproduces hydrocov display (arcplot).
hecsym.aml - program that reproduces symcov display (arcplot).


The system is designed to run without user interaction. This means that the main task of the user is to start the system. The easiest way to start the system is to use the user interactive data input shell (hecshell.aml). The program should be run from the 'Arc'-prompt with the arc &RUN directive. The program will prompt you for the data needed.

There are several advanced options which can control program run. They are: