Skip to content
forked from pypest/pyemu

python modules for model-independent uncertainty analyses, data-worth analyses, and interfacing with PEST(++)

License

Notifications You must be signed in to change notification settings

cnicol-gwlogic/pyemu

 
 

Repository files navigation

pyEMU

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

Master branch: GHA CI Coverage Status

Develop branch: GHA CI Coverage Status

Documentation

Complete user's guide:

https://pyemu.readthedocs.io/en/latest/

The pyEMU documentation is being treated as a first-class citizen! Also see the example notebooks in the repo.

What is pyEMU?

pyEMU is a set of python modules for model-independent, user-friendly, computer model uncertainty analysis. pyEMU is tightly coupled to the open-source suite PEST (Doherty 2010a and 2010b, and Doherty and other, 2010) and PEST++ (Welter and others, 2015, Welter and other, 2012), which are tools for model-independent parameter estimation. However, pyEMU can be used with generic array objects, such as numpy ndarrays.

Several equations are implemented, including Schur's complement for conditional uncertainty propagation (a.k.a. Bayes Linear estimation) (the foundation of the PREDUNC suite from PEST) and error variance analysis (the foundation of the PREDVAR suite of PEST). pyEMU has easy-to-use routines for parmaeter and data worth analyses, which estimate how increased parameter knowledge and/or additional data effect forecast uncertainty in linear, Bayesian framework. Support is also provided for high-dimensional Monte Carlo analyses via ObservationEnsemble and ParameterEnsemble class, including the null-space monte carlo approach of Tonkin and Doherty (2009); these ensemble classes also play nicely with PESTPP-IES.

pyEMU also includes lots of functionality for dealing with PEST(++) datasets, such as:

  • manipulation of PEST control files, including the use of pandas for sophisticated editing of the parameter data and observation data sections
  • creation of PEST control files from instruction and template files
  • going between site sample files and pandas dataframes - really cool for observation processing
  • easy-to-use observation (re)weigthing via residuals or user-defined functions
  • handling Jacobian and covariance matrices, including functionality to go between binary and ASCII matrices, reading and writing PEST uncertaity files. Covariance matrices can be instaniated from relevant control file sections, such as parameter bounds or observation weights. The base Matrix class overloads most common linear algebra operators so that operations are automatically aligned by row and column name. Builtin SVD is also included in all Matrix instances.
  • geostatistics including geostatistical structure support, reading and writing PEST structure files and creating covariance matrices implied by nested geostatistical structures, and ordinary kriging (in the utils.geostats.OrdrinaryKrige object), which replicates the functionality of pest utility ppk2fac.
  • composite scaled sensitivity calculations
  • calculation of correlation coefficient matrix from a given covariance matrix
  • Karhunen-Loeve-based parameterization as an alternative to pilot points for spatially-distributed parameter fields
  • a helper functions to start a group of tcp/ip workers on a local machine for parallel PEST++/BeoPEST runs
  • full support for prior information equations in control files
  • preferred differencing prior information equations where the weights are based on the Pearson correlation coefficient
  • verification-based tests based on results from several PEST utilities

Version 1.1 includes the PstFrom setup class to support generating PEST(++) interfaces in the 100,000 to 1,000,000 parameter range with all the bells and whistles. A publication documenting the PstFrom class can be found here:

https://doi.org/10.1016/j.envsoft.2021.105022

A publication documenting pyEMU and an example application can be found here:

http://dx.doi.org/10.1016/j.envsoft.2016.08.017

Funding

pyEMU was originally developed with support from the U.S Geological Survey. The New Zealand Strategic Science Investment Fund as part of GNS Science’s (https://www.gns.cri.nz/) Groundwater Research Programme has also funded contributions 2018-present. Intera, Inc. has also provided funding for pyEMU development and support

Examples

Several example ipython notebooks are provided to demonstrate typical workflows for FOSM parameter and forecast uncertainty analysis as well as techniques to investigate parameter contributions to forecast uncertainty and observation data worth. Example models include the Henry saltwater intrusion problem (Henry 1964) and the model of Freyberg (1988)

Related Links

https://github.com/usgs/pestpp

PEST - http://www.pesthomepage.org/

How to get started with pyEMU

pyEMU is available through pyPI:

>>>pip install pyemu

pyEMU needs numpy and pandas. For plotting, matplotloib, pyshp, and flopy to take advantage of the auto interface construction

About

python modules for model-independent uncertainty analyses, data-worth analyses, and interfacing with PEST(++)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TeX 46.4%
  • Reason 23.0%
  • Python 13.5%
  • Jupyter Notebook 11.1%
  • Smarty 3.4%
  • Go 2.5%
  • Other 0.1%