CRIKit

machine learning
python
partial differential equations
automatic differentiation
tensorflow
jax
pytorch
gitlab ci
Published

May 16, 2023

This project earned me much Python and automatic differentiation experience.

CRIKit (2019-2023)

Code here

Forward problem

Adjoint problem
Figure 1: When computing the loss, information flows from parameters \(p\) to loss \(J\), with intermediate computations of the PDE output \(u\) and the observable quantity \(d\). For computing the parameter gradient, information flows backward from \(J\) to \(p\). Even though the matrix \(\frac{du}{dp}\) grows quadratically with the problem size, applying its adjoint to \(\frac{dJ}{du}\) is cheap. This allows scalable gradient-based optimization of the parameters \(p\) when \(p\) is high-dimensional compared to the loss \(J\).

Boundary conditions for the damage \(\phi\)

Boundary conditions for the velocity \(u\)
Figure 2: Boundary conditions for a 2D vertical slice of a large mound of ice.
Figure 3: Solution from solving PDE with “ground-truth” damage model.
Figure 4: Error in learned damage model for 3 levels of noise (0%, 1%, and 5%) and 3 types of measurements.