The BROOK90 Hydrologic Model

For Evaporation, Soil Water, and Streamflow

[Revised - April 9, 2021]

C. Anthony Federer, 5 Blueberry Ln Unit T2, Falmouth ME 04105, USA

Forks - This web page and its sub-pages describe the original BROOK90 hydrologic model as written by me (C. Anthony Federer). Several forks (modifications/recodings) of BROOK90 exist. The ones that I know of are described in Forks of BROOK90 below. These include BROOK90 in R, and LWF-BROOK90 in Fortran, R, and Julia. In most of these the core algorithms are basically unchanged, but they have very different front and back ends to facilitate alternative input methods and output analysis.

License - All my versions of BROOK90 through 3.1Q and 3.1F, which included all of the core algorithms, were coded by me when I was an employee of the USDA Forest Service, and thus their source code was prevented by law from carrying any copyright. All my more recent versions, all my documentation, and all downloads from this web site carry a CC0 1.0 Universal License and thus are in the public domain.

Purpose -- Documentation -- Running the Model -- Simulated Processes
Limitations -- Forks of BROOK90 -- Acknowledgements


Documentation Version 4
Version 3
Published Papers
Using BROOK90
History of
the BROOK Models


BROOK90 Version 4.8a
June 28, 2019
BROOK90 Data Files
Jun 28, 2019
BROOK90 Documentation
June 28, 2019
BROOK90 Source Code (optional)
June 28, 2019
Sample AutoIt script (optional)
June 28, 2019
msvbm60.dll (if needed)
comdlg32.ocx (if needed)


BROOK90 simulates vertical soil water movement and daily evapotranspiration for all land surfaces at all times of year using a process-oriented approach with physically-meaningful parameters. Only enough streamflow generation pathways are included to allow comparison with measured streamflow where available (see flow chart). The complexities of hillslope hydrology and spatial distribution have been omitted in order to focus on the details of the factors controlling evaporation.

BROOK90 can fill a wide range of needs: as a research tool to study the water budget and water movement on small plots, as a teaching tool for evaporation and soil water processes, as a water budget model for land managers and for predicting climate change effects, and as a fairly complex water budget model against which simpler models can be tested.

Input of daily precipitation and maximum and minimum temperatures is required, and daily solar radiation, vapor pressure, and wind speed are desirable. The model estimates interception and transpiration from a single layer (big leaf) plant canopy, soil and snow evaporation, snow accumulation and melt, and soil-water movement through one or more soil layers (including macropore-assisted infiltration). Stormflow is generated by a variable source area or simple pipe flow. Delayed flow is from soil drainage and a first-order groundwater storage. BROOK90 uses a Shuttleworth-Wallace modification to Penman-Monteith potential evaporation in order to separate transpiration and soil evaporation from sparse canopies. Actual transpiration is reduced below potential using Federer's method based on root density with depth, plant resistance, and a critical leaf-water potential. Water movement between soil layers is integrated using Darcy's Law and variable time-steps.


Documentation for BROOK90 (in HTML 4 Transitional) can be viewed online or downloaded above. The downloaded documentation can be unzipped into any folder, and printed from any browser.

Both the model and the documentation have changed over time (see Version 4 Updates and Version 3 Updates. I recommend that users obtain the latest version of these.

The model can be cited as either of the following:

Federer, C.A. 2002. BROOK 90: A simulation model for evaporation, soil water, and streamflow.

Federer, C.A., C. Vörösmarty, and B. Fekete. 2003. Sensitivity of annual evaporation to soil and root properties in two models of contrasting complexity. J Hydrometeorology 4:1276-1290.

Published Papers Using BROOK90 lists all BROOK90 publications that I know of

Running the Model

BROOK90 is a Windows program coded in Visual Basic and runs on all versions of Windows from XP through 10. It is easily installed manually and does not use the Windows registry. I do not know if it can be run in a Mac OS environment with Windows emulation. The Compass Brook computers are virus-protected by BitDefender and Malwarebytes.

Download the latest version of BROOK90 and the BROOK90 Data Files from the links above, and unzip them into any folder.

Two additional files may also need to be downloaded. Msvbm60.dll (Visual Basic 6) is included in all versions of Windows through Windows 10. However, comdlg32.ocx (Windows Common Dialog) has not been included in recent Windows versions. In 32-bit Windows these two files should be placed in the C:\Windows\System\ folder. In 64-bit versions, they should placed be in C:\Windows\SysWOW64\ (if BROOK90 still fails to open , run regsvr32 c:\Windows\SysWOW64\comdlg32.ocx with administrator privileges to register it).

Users wishing to modify BROOK90 can download the VB source code. The algorithm routines should be easily translatable for other compilers, but the Windows GUI is very tricky to modify.

To make a test run:

To learn about BROOK90:

BROOK90 Version 4 reads daily input from a data file as it runs. Data files must be produced or modified by using a text editor such as TextPad, which allows column moves, or by using a spreadsheet program like Excel to produce a .CSV or .PRN file.

BROOK90 optionally allows for precipitation input at intervals less than once a day. When used, this data is read from a separate precip interval file.

BROOK90 Version 4 requires six separate parameter files: Location, Flow, Canopy, Soil, Fixed, and Initial files. Each contains a number of names and values that must be in correct order. These files can be created and edited either within BROOK90 (safer) or externally with a text editor. With some restrictions, these values and even the whole file can be changed within a model run.

Output values of a many variables may be produced at iteration, precip, daily, monthly, and annual intervals. Graphic output of precipitation, snow, soil water, evaporation, simulated streamflow, and measured streamflow (if input) over time can be displayed during a run.

The scripting software AutoIt can be used to automate BROOK90. It is freeware, comprehensive, and fairly easy to use. A sample script can be download above. The script requires the default data and parameter files to be in the B90V4.exe folder.

Simulated Processes

Inputs of daily precipitation and maximum and minimum temperatures are required, and daily solar radiation, vapor pressure, and wind speed are desirable. Precipitation may be input several times per day. Water is stored in the model as intercepted rain, intercepted snow, snow on the ground, soil water in from 1 to 25 layers, and groundwater (see Flow Chart).

Snowmelt is based on a degree day factor and accounts for snowpack temperature and liquid water content. The factor is modified for canopy cover as determined by LAI and SAI.

Net throughfall plus snowmelt may 1) infiltrate into the soil matrix of the surface horizon, 2) infiltrate directly to deeper horizons via vertical macropore flow, 3) go immediately to streamflow via impaction on a variable saturated source area, or 4) go immediately to streamflow via vertical macropore flow followed by downslope pipe flow. Streamflow can also be produced by delayed flow from vertical or downslope soil drainage and from a first-order groundwater store.

Evaporation is the sum of five components: evaporation of intercepted rain and snow, snow and soil evaporation, and transpiration from a single-layer canopy. The model estimates potential interception and transpiration from a single-layer plant canopy using the Shuttleworth and Wallace (1985) method for separating transpiration and soil evaporation in sparse canopies. Evaporation of intercepted rain or snow is calculated with a canopy resistance of zero and aerodynamic resistances based on canopy height, coupled with a canopy capacity and an average storm duration. For potential transpiration, canopy resistance depends on maximum leaf conductance, reduced for humidity, temperature, and light penetration. Aerodynamic resistances are modified from Shuttleworth and Gurney (1990); they depend on leaf area index, which can vary seasonally, and on canopy height, which determines stem area index. Snow evaporation or condensation depends on the aerodynamic resistances and the vapor gradient. Soil evaporation resistance depends on soil water potential in the top soil layer. Actual transpiration is the lesser of potential transpiration and a soil water supply rate determined by plant resistance, rhizosphere resistance, minimum (critical) leaf water potential, root distribution, and soil water potential in the soil layers (Federer 1979).

Below ground, the model includes 1 to 25 soil layers, which may have differing physical properties and thicknesses. Water in the soil matrix moves vertically according to Darcy's Law for unsaturated or saturated flow. Integration of the continuity equation is by explicit forward difference (Euler), but with a variable iteration time-step that limits changes in layer water content and in potential gradients. For different layer thicknesses, the interlayer conductivity and gradient behaves as if both layers have the thickness of the thinner layer. The relationships among matric potential, soil water content, and hydraulic conductivity are parameterized by a modified Clapp and Hornberger (1978) formulation

Water is added to groundwater by gravity drainage from the deepest soil layer.The groundwater component of streamflow is simulated as a fixed fraction of groundwater each day. A fixed fraction of the groundwater outflow may be deep seepage.

A variety of output variables can be selected for each of the model time intervals: iteration, precip interval, day, month, and year. All output files are text files, so they can easily be imported into any spreadsheet, database, or plotting programs. Graphs of simulated and measured streamflow and snow and soil water storages can be plotted to the screen at run time.

BROOK90 has numerous parameters, but all parameters are provided externally and are generally physically meaningful. Parameter fitting is not necessary to obtain reasonable results. However, a procedure is described for modifying important parameters to improve the fit of simulated to measured streamflow. Parameter values are read from several files at run time. Parameters can be changed and new parameter files saved from within BROOK90.


BROOK90 has no allowance for non-green leaves, which can intercept precipitation and radiation but do not transpire. There is no provision for soil frost, so infiltration and percolation are never frost-limited. There is no provision for reduction of leaf area index after prolonged water stress. Albedo does not depend on solar elevation, canopy structure, or snow age. Snowpack energy balance is affected only by temperature and vapor pressure, not by radiation. A constant snow density is assumed to determine how much of the canopy is covered by snow.

The Shuttleworth-Wallace theory used for evaporation assumes a bare soil under a canopy that is uniformly distributed vertically and horizontally. Snow evaporation for tall leafless canopies is not handled well by the Shuttleworth-Gurney parameterization of canopy resistances; consequently a severe and arbitrary correction factor is required. Aerodynamic resistances assume neutral stability in both daytime and nighttime; this may be one cause of the snow evaporation problem.

There is no provision in BROOK90 for internal calculation of phenology or growth, but the parameters involved can be changed during a run by using an external script such as AutoIt.

BROOK90 has no provision for spatial distribution of parameters in the horizontal and no provision for lateral transfer of water to adjacent downslope areas. There is only a single, first order groundwater reservoir. There is no channel routing.

Forks of BROOK90

The main branch of BROOK90 is fully described on this web site; all of its programming is my own. But several other versions exist and are briefly mentioned here. The core algorithms have remained unchanged since Version 3.1 (with the exception of the calculation of KKMEAN and GRAD in V4.4), so all versions of BROOK90, so far, produce essentially the same results. However, this may not be true in the future, especially with the development of versions in R, so authors should carefully specify which version of BROOK90 they have used and what modifications they have made.

BROOK90-R - . Rico Kronenberg and Lisa Marie Oehlschlägel of Dresden, Germany, recoded BROOK90 Version 4.8 into R, the statistics and graphics language preferred by many scientists. This both removes the restrictive but easy Windows user interface in favor of much more flexible R arrays for input and output, and allows application of the R library of statistics and graphics. The algorithms remain unchanged; BROOK90-R produces the same results as the Windows version, except that R does all calculations in double precision whereas the Windows code is mostly single precision. The R version allows modification of algorithms and parameters, which the Windows version does not. BROOK90-R can be downloaded from and the project log is at See also Kronenberg, R., L.M. Oehlschlägel, C. Bernhofer, and T.T. Luong. 2019. Introducing an implementation of Brook90 in R. Geophys Res Abstr 21:1.

The R version of BROOK90 should not be confused with an earlier BROOK90-R in which the R stands for an added reservoir component, as described in Park, J. 2015 Storage estimation of irrigation reservoir using BROOK90-R hydrological model. Intern Conf Biol Environ Food Eng (BEFE-2015) May 15-16 2015 Singapore.

LWF-BROOK90 - The first, and still the only main branch of BROOK90, is LWF-BROOK90, a modification of Version 3.1F by Martin Kennel and his colleagues in Munich, Germany. It adds vanGenuchten soil parameterization, stand development over time, temperature-dependent phenology, and graphics output. LWF-BROOK90 has been widely used in Europe. It is documented in Hammel, K. and M. Kennel. 2001. Charakterisierung und Analyse der Wasserverfügbarkeit und des Wasserhaushalts von Waldstandorten in Bayern mit dem Simulationsmodell BROOK90. Forstliche Forschungsberichte München 185.

In 2018 Paul Schmidt-Walter of Göttingen, Germany, embedded the Fortran of LWF-BROOK90 into an R framework. His version is available at or It was described in Schmidt-Walter, P., V. Trotsiuk, K. Meusberger, M. Zacios, and H. Meesenburg. 2020. Advancing simulations of water fluxes, soil moisture and drought stress using the LWF-Brook90 hydrological model in R. Agric For Meteorol 291, 108023.

In 2021 Fabian Bernhard of Zurich, Switzerland, rewrote LWF-BROOK90 into Julia. See, with documentation at


This model is dedicated to three deceased colleagues and friends who supported and contributed to the BROOK models: Bob Pierce, Hans Keller, and Cindy Veen.

BROOK90 is a one-person project. Early versions were written by me, C. Anthony Federer, when I was a scientist with the U.S. Forest Service. Windows-based versions and these web pages are the product of my retirement under my "business" name, Compass Brook. Please email me at if you have any questions about BROOK90.

I would like to thank the many users of BROOK90 around the world who have contributed to its improvement with comments and questions.

[Compass Brook logo]