mf6adj is a Python package for adjoint-state sensitivity analysis with MODFLOW 6
Project description
mf6adj
mf6adj is a Python package for adjoint-state sensitivity analysis with MODFLOW 6. It uses the MODFLOW 6 API to access the internal solution components at run time — no modifications to MODFLOW 6 are required. Given one or more user-defined performance measures (heads, boundary fluxes, or composite objectives), mf6adj computes the sensitivity of each measure to model parameters across the full model domain.
Installation
pip
pip install mf6adj
conda-forge
conda install -c conda-forge mf6adj
mf6adj drives MODFLOW 6 through its shared library (libmf6). The easiest
way to get both is through the
flopy helper:
get-modflow --subset mf6,libmf6 :python
Quick start
import flopy
import mf6adj
# locate the MF6 binary and shared library in the active conda environment
mf6_bin, lib_name = mf6adj.get_conda_mf6_paths()
# run the baseline forward model
flopy.run_model(exe_name=mf6_bin, namefile=None, model_ws="path/to/model")
# write a performance-measure file
with open("path/to/model/model.adj", "w") as f:
f.write("begin performance_measure head_obs\n")
f.write("1 1 1 5 5 head direct 1.0 -1.0e+30\n")
f.write("end performance_measure\n")
# solve forward and adjoint
adj = mf6adj.Mf6Adj("model.adj", str(lib_name), working_directory="path/to/model")
adj.solve_forward_model()
sensitivity_dfs = adj.solve_adjoint()
adj.finalize()
print(sensitivity_dfs["head_obs"])
Documentation
Full documentation, including API reference and example notebooks, is available at mf6adj.readthedocs.io.
How to cite
If you use mf6adj in your work, please cite:
Hayek, M., White, J. T., Markovich, K. H., Hughes, J. D., & Lavenue, M. (2025). MF6-ADJ: A Non-Intrusive Adjoint Sensitivity Capability for MODFLOW 6. Groundwater, 63(6), 874–888. https://doi.org/10.1111/gwat.70025
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mf6adj-1.0.0.tar.gz.
File metadata
- Download URL: mf6adj-1.0.0.tar.gz
- Upload date:
- Size: 394.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6eb191dbed5f5e7d474aa3e99ad7bfdd101d0fd28da07a5aa2e30effe7e49a50
|
|
| MD5 |
122a7aa845991e833bece9f2f708d379
|
|
| BLAKE2b-256 |
e08b6f85d74df77aa5aa9c9f2f4c76f4385daa38a503fe4f523072dc3b56312e
|
File details
Details for the file mf6adj-1.0.0-py3-none-any.whl.
File metadata
- Download URL: mf6adj-1.0.0-py3-none-any.whl
- Upload date:
- Size: 38.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f4bb4dcb282a01ec661cdf44a6ef935310090e823e3f0d3320c0b05ddf71d60
|
|
| MD5 |
1c95e59e2808c4d5e1341dccebc1ebce
|
|
| BLAKE2b-256 |
87498e7e794ebff6ab8f2069f9bcd6ddd2d9f7c436242ce7bfb9f0b758634dd5
|