|
| 1 | +# PINNICLE: Physics-Informed Neural Networks for Ice and CLimatE |
1 | 2 |
|
2 | | -# PINNICLE |
3 | | -Physics Informed Neural Networks for Ice and CLimatE |
4 | | - |
| 3 | + |
5 | 4 | [](https://github.com/ISSMteam/PINNICLE/actions/workflows/CI.yml) |
6 | 5 | [](https://codecov.io/gh/ISSMteam/PINNICLE) |
7 | 6 | [](https://pinnicle.readthedocs.io/en/latest/?badge=latest) |
8 | 7 | [](https://doi.org/10.5281/zenodo.15178900) |
| 8 | + |
| 9 | + |
| 10 | + |
| 11 | +**PINNICLE** (Physics-Informed Neural Networks for Ice and CLimatE) is an open-source Python library for modeling ice sheets using physics-informed neural networks. |
| 12 | +It is designed to integrate physical laws with observational data to solve both forward and inverse problems in glaciology. |
| 13 | +The library currently supports stress balance approximations, mass conservation, and time-dependent simulations, etc. Built on top of [DeepXDE](https://github.com/lululxvi/deepxde), it supports TensorFlow, PyTorch, and JAX backends. |
9 | 14 |
|
10 | | -A Python library for solving ice sheet modeling problems using a unified framework with Physics Informed Neural Networks |
| 15 | +Developed at the Department of Earth Sciences, Dartmouth College, USA. |
11 | 16 |
|
| 17 | + |
12 | 18 |
|
13 | 19 | --- |
14 | | -**NOTE** |
15 | 20 |
|
16 | | - This project is under active development. |
| 21 | +## 🚀 Features |
17 | 22 |
|
18 | | ---- |
| 23 | +- Solve forward and inverse glaciological problems |
| 24 | +- Built-in support for: |
| 25 | + - Shelfy-Stream Approximation (SSA) |
| 26 | + - Mono-Layer Higher-Order (MOLHO) stress balance |
| 27 | + - Time-dependent mass conservation |
| 28 | +- Support for multiple backends: TensorFlow, PyTorch, JAX |
| 29 | +- Integration with observational data: [ISSM](https://issm.jpl.nasa.gov) data format, MATLAB general `.mat`, HDF5, NetCDF. |
| 30 | +- Fourier Feature Transform for input and output |
| 31 | +- Fully modular and customizable architecture |
19 | 32 |
|
20 | | -**Documentation**: [pinnicle.readthedocs.io](https://pinnicle.readthedocs.io) |
21 | 33 |
|
22 | | - |
| 34 | +## 📦 Installation |
| 35 | + |
| 36 | +### Install from PyPI (recommended) |
| 37 | + |
| 38 | +```bash |
| 39 | +pip install pinnicle |
| 40 | +``` |
| 41 | + |
| 42 | +### Install from source |
| 43 | + |
| 44 | +```bash |
| 45 | +git clone https://github.com/ISSMteam/PINNICLE.git |
| 46 | +cd PINNICLE |
| 47 | +pip install -e . |
| 48 | +``` |
| 49 | +### Dependencies |
| 50 | + |
| 51 | +PINNICLE requires: |
| 52 | + |
| 53 | +* Python ≥ 3.9 |
| 54 | +* [DeepXDE](https://github.com/lululxvi/deepxde) |
| 55 | +* NumPy, SciPy, pandas, matplotlib, scikit-learn |
| 56 | +* mat73 (for MATLAB v7.3 files) |
| 57 | + |
| 58 | +## ⚙️ Backend Selection |
| 59 | + |
| 60 | +PINNICLE supports TensorFlow, PyTorch, and JAX backends via DeepXDE. |
| 61 | + |
| 62 | +Choose your backend: |
| 63 | + |
| 64 | +```bash |
| 65 | +DDE_BACKEND=tensorflow python your_script.py |
| 66 | +``` |
| 67 | + |
| 68 | +You can also export the backend globally (Linux/macOS): |
| 69 | + |
| 70 | +```bash |
| 71 | +export DDE_BACKEND=pytorch |
| 72 | +``` |
| 73 | + |
| 74 | +Alternatively, edit `~/.deepxde/config.json`: |
| 75 | + |
| 76 | +```json |
| 77 | +{ |
| 78 | + "backend": "tensorflow" |
| 79 | +} |
| 80 | +``` |
23 | 81 |
|
24 | | -## Physics |
| 82 | +## 🧪 Examples |
25 | 83 |
|
26 | | -- Momentum Conservation (stress balance): |
27 | | - - Shelfy Stream Approximation (SSA) |
28 | | - - MOno-Layer Higher-Order (MOLHO) ice flow model |
| 84 | +Example scripts and input files are located in the [`examples/`](https://github.com/ISSMteam/PINNICLE/tree/main/examples) directory. |
29 | 85 |
|
30 | | -- Mass Conservation (mass balance): |
31 | | - - Thickness evolution |
| 86 | +* [**Example 1**](https://github.com/ISSMteam/PINNICLE/blob/main/examples/example1_helheim_ssa_inverse.py): |
| 87 | + Inverse problem on Helheim Glacier using SSA to infer basal friction |
32 | 88 |
|
33 | | -- Coupuling: |
34 | | - - stress balance + mass balance |
| 89 | +* [**Example 2**](https://github.com/ISSMteam/PINNICLE/blob/main/examples/example2_pig_ssa_rheology.py): |
| 90 | + Joint inversion of basal friction and ice rheology for Pine Island Glacier |
35 | 91 |
|
36 | | -- Time dependent problems |
| 92 | +* [**Example 3**](https://github.com/ISSMteam/PINNICLE/blob/main/examples/example3_helheim_forward_transient.py): |
| 93 | + Time-dependent forward modeling of Helheim Glacier (2008–2009) |
37 | 94 |
|
38 | | -## Data format |
| 95 | +Each example includes a complete Python script and configuration dictionary. |
39 | 96 |
|
40 | | -- [ISSM](https://issm.jpl.nasa.gov) `model()` type, directly saved from ISSM by `saveasstruct(md, filename)` |
41 | | -- Scattered data |
42 | 97 |
|
| 98 | +## 📖 Documentation |
| 99 | + |
| 100 | +Full documentation is available in the `docs/` folder or at: |
| 101 | + |
| 102 | +📘 [pinnicle.readthedocs.io](https://pinnicle.readthedocs.io) |
| 103 | + |
| 104 | + |
| 105 | +## 📚 Citation |
| 106 | + |
| 107 | +If you use PINNICLE in your research, please cite: |
| 108 | + |
| 109 | +> Cheng, G., Krishna, M., and Morlighem, M.: A Python library for solving ice sheet modeling problems using Physics Informed Neural Networks, PINNICLE v1.0, EGUsphere [preprint], https://doi.org/10.5194/egusphere-2025-1188, 2025. |
| 110 | +
|
| 111 | +**BibTeX**: |
| 112 | + |
| 113 | +```bibtex |
| 114 | +@Article{egusphere-2025-1188, |
| 115 | + AUTHOR = {Cheng, G. and Krishna, M. and Morlighem, M.}, |
| 116 | + TITLE = {A Python library for solving ice sheet modeling problems using Physics Informed Neural Networks, PINNICLE v1.0}, |
| 117 | + JOURNAL = {EGUsphere}, |
| 118 | + VOLUME = {2025}, |
| 119 | + YEAR = {2025}, |
| 120 | + PAGES = {1--26}, |
| 121 | + URL = {https://egusphere.copernicus.org/preprints/2025/egusphere-2025-1188/}, |
| 122 | + DOI = {10.5194/egusphere-2025-1188} |
| 123 | +} |
| 124 | +``` |
| 125 | + |
| 126 | +--- |
| 127 | + |
| 128 | +## 📂 License |
| 129 | + |
| 130 | +This project is licensed under the [GNU Lesser General Public License v2.1](LICENSE). |
| 131 | + |
| 132 | +--- |
| 133 | + |
| 134 | +## 🤝 Acknowledgements |
| 135 | + |
| 136 | +Supported by: |
| 137 | + |
| 138 | +* National Science Foundation \[#2118285, #2147601] |
| 139 | +* Novo Nordisk Foundation \[NNF23OC00807040] |
| 140 | +* Heising-Simons Foundation \[2019-1161, 2021-3059] |
| 141 | + |
| 142 | +--- |
43 | 143 |
|
44 | | -## More |
| 144 | +## 🔗 Links |
45 | 145 |
|
46 | | -- [Install and Setup](https://pinnicle.readthedocs.io/en/latest/installation.html#installation) |
47 | | -- [An example of stress balance](https://pinnicle.readthedocs.io/en/latest/examples/ssa.html) |
| 146 | +* 📦 PyPI: [pinnicle](https://pypi.org/project/pinnicle/) |
| 147 | +* 📖 Documentation: [pinnicle.readthedocs.io](https://pinnicle.readthedocs.io) |
| 148 | +* 📄 Zenodo Archive: [doi.org/10.5281/zenodo.15178900](https://doi.org/10.5281/zenodo.15178900) |
48 | 149 |
|
0 commit comments