ODIL (Optimizing a Discrete Loss) is a Python framework for solving inverse and data assimilation problems for partial differential equations. ODIL formulates the problem through optimization of a loss function including the residuals of a finite-difference and finite-volume discretization along with data and regularization terms. ODIL solves the same problems as the popular PINN (Physics-Informed Neural Networks) framework.
Key features:
- automatic differentiation using TensorFlow or JAX
- optimization by gradient-based methods (Adam, L-BFGS) and Newton's method
- orders of magnitude lower computational cost than PINN [1]
- multigrid decomposition for faster optimization [2]
These demos use a C++ implementation of ODIL with autodiff and Emscripten to run interactively in the web browser.
Poisson | Wave | Heat | Advection | Advection2 |
pip install odil
or
pip install git+https://github.com/cselab/odil.git
To enable GPU support, provide a non-empty list of devices in CUDA_VISIBLE_DEVICES
.
Values CUDA_VISIBLE_DEVICES=
and CUDA_VISIBLE_DEVICES=-1
disable GPU support.
ODIL is developed by researchers at Harvard University
advised by
-
Karnakov P, Litvinov S, Koumoutsakos P. Solving inverse problems in physics by optimizing a discrete loss: Fast and accurate learning without neural networks. PNAS Nexus, 2024. DOI:10.1093/pnasnexus/pgae005
-
Karnakov P, Litvinov S, Koumoutsakos P. Flow reconstruction by multiresolution optimization of a discrete loss with automatic differentiation. Eur. Phys. J, 2023. DOI:10.1140/epje/s10189-023-00313-7 arXiv:2303.04679 slides