PEST++, a Software Suite for Parameter Estimation, Uncertainty Analysis, Management Optimization and Sensitivity Analysis

Release Date:

This software has been approved for release by the U.S. Geological Survey (USGS). Although the software has been subjected to rigorous review, the USGS reserves the right to update the software as needed pursuant to further analysis and review. No warranty, expressed or implied, is made by the USGS or the U.S. Government as to the functionality of the software and related material nor shall the fact of release constitute any such warranty. Furthermore, the software is released on condition that neither the USGS nor the U.S. Government shall be held liable for any damages resulting from its authorized or unauthorized use.

PEST++ provides environmental modeling practitioners access to tools to support decision making with environmental models, including tools for global sensitivity analysis (PESTPP-SEN); least-squares parameter estimation with integrated first-order, second-moment parameter and forecast uncertainty estimation (PESTPP-GLM); an iterative, localized ensemble smoother (PESTPP-IES); and a tool for management optimization under uncertainty (PESTPP-OPT). Additionally, all  PEST++ tools have a built-in fault-tolerant, multithreaded parallel run manager and are model independent, using the same protocol as the widely used PEST software suite.

PEST++ data visualization

The left axis is a visualization of an ensemble of solutions (crosses and dashed lines) iteratively moving down gradient on an objective function surface (color flood) in 2-D parameters space, with the associated prior (gray) and posterior (blue) parameter marginal distributions shown on the two right stacked axes.

(Credit: Jeremy White, Texas Water Science Center. Public domain.)

The PEST++ software suite is object-oriented universal computer code written in C++ that expands on and extends the algorithms included in PEST, a widely used parameter estimation code written in Fortran. PEST++ is designed to lower the barriers of entry for users and developers while providing efficient algorithms that can accommodate large, highly parameterized problems. This effort has focused on: (1) implementing and extending the most popular features of PEST in a way that is easy for novice or experienced modelers to use; and (2) creating a software design that is easy to extend with future advances.

PEST++ contains functionality such as an integrated TCP/IP run manager, global sensitivity calculations, linear uncertainty analyses, and Gauss-Marquardt-Levenberg (GML) capabilities. Capabilities of the external general run manager GENIE have also been updated.


 GIF visualization of an ensemble of solutions for PEST++

A prior parameter ensemble (gray dots and gray histograms on the marginals) being iteratively driven towards a minimum of the objective function, and ultimately becoming a posterior ensemble. The lower left axis is the objective function values for each realization in the ensemble traced through the iterations.

(Credit: Jeremy White, Texas Water Science Center. Public domain.)


Documentation for the code may be viewed here:

White, J. T., Hunt, R. J., , Doherty, J. E., and Fienen, M. N. (2020b). PEST++ version 5, a parameter estimation and uncertainty analysis software suite optimized for large environmental models. U.S. Geological Survey Techniques and Methods Report, in press.


Supported Computing Platforms and Source Code Compilation

The PEST++ Version 5 software suite can be compiled for Microsoft Windows®1 and Unix-based operating systems such as Apple2 and Linux®3; the source code is available with a Microsoft Visual Studio®4 2019 solution; and CMake support for all three operating system is also provided.



PEST++ executable files are currently available for Windows operating systems. There is no installation procedure needed; unzip the archive files and ensure that the executable files are placed into your path and are accessible from the command line.



The MODFLOW-6 example problems shown in the PEST++ V5 report can be downloaded here.



Python modules for model-independent FOSM (first-order, second-moment) (a.k.a linear-based, a.k.a. Bayes linear) uncertainty analyses and data-worth analyses, non-linear uncertainty analyses and interfacing with PEST and PEST++.  pyEMU also has a pure python (pandas and numpy) implementation of ordinary kriging for geostatistical interpolation and support for generating high-dimensional PEST(++) model interfaces, including support for (very) high-dimensional ensemble generation and handling.  pyEMU can be accessed here.



A ZIP file that contains all of the source code for PEST++ may be downloaded here.



See the PEST++ project for frequently asked questions.



Please report any bugs encounted by creating a new issue on the PEST++ Suite github site.
Support is provided for correcting bugs and clarification of how the code is intended to work; only limited assistance can be provided for applying PEST++ to specific problems. For comments regarding this software distribution site, please contact Randy Hunt.
For questions regarding the PEST++ software suite code base, please contact Jeremy White.


Software User Rights Notice

The PEST++ software suite is designed to provide a foundation for an open-source development platform capable of producing robust and efficient software tools for the environmental modeling community into the future. This software, documentation, and example data sets are made freely available by the authors and the U.S. Geological Survey (USGS) to be used in the public interest and in the advancement of science. The performance of the PEST++ suite software has been tested in a variety of applications. Future applications, however, might reveal errors that were not detected in the test simulations. Users are requested to notify the U.S. Geological Survey contact of any errors found in this document or the computer program using the email address available listed above. Updates might occasionally be made to this document and the PEST++ program; users are encouraged to check the website periodically.



White, J. T. (2018). A model-independent iterative ensemble smoother for efficient history- matching and uncertainty quantification in very high dimensions. Environmental modeling & Software.

White, J., Fienen, M., M. Barlow, P., and E. Welter, D. (2018). A tool for efficient, model-independent management optimization under uncertainty. Environmental Modelling & Software, 100:213–221.