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

Release Date:

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: USGS, 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.


 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: USGS, Texas Water Science Center. Public domain.)

Information and Downloads

Documentation for the code may be viewed here:

White, J.T., Hunt, R.J., Fienen, M.N., and Doherty, J.E., 2020, Approaches to Highly Parameterized Inversion: PEST++ Version 5, a Software Suite for Parameter Estimation, Uncertainty Analysis, Management Optimization and Sensitivity Analysis: U.S. Geological Survey Techniques and Methods 7C26, 51 p.,

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 Apple® 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.


Compiled PEST++ Executables

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.


PEST++ Users Guide

A PEST-style users guide that provides more background information on model input variables is available here.  


MODFLOW 6 Example

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.


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



See the PEST++ project for frequently asked questions.

Points of Contact

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.

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.