---
title: "Learned Multiphysics Inversion with Differentiable Programming & Machine Learning"
subtitle: "An open-source path from wave physics to CO₂ digital twins"
author: "Mathias Louboutin, Ipsita Bhar, Huseyin Tuna Erdinc and Felix J. Herrmann"
institute: "Devito Codes and Georgia Institute of Technology — ML4Seismic/SLIM group"
date: June 7, 2026
format:
  revealjs:
    theme: simple
    slide-number: true
    transition: fade
    width: 1280
    height: 720
    footer: "EAGE 2026 Workshop on Open Source Software — Aberdeen"
bibliography: references.bib
csl: https://www.zotero.org/styles/apa
link-citations: true
nocite: |
  @louboutin2023lmi, @donoho2024singularity, @devito-api, @devito-compiler,
  @judi, @witte2019compressive, @jutul, @jutuldarcy, @jutuldarcyrules,
  @invertiblenetworks, @orozco2024invertiblenetworks, @dfno_sw,
  @grady2023modelparallel, @yin2024wise, @wisejl, @erdinc2026sage,
  @bhar2026openseisml, @innes2019differentiable, @chainrules, @innes2018zygote
---

## Donoho's frictionless-reproducibility triad

After [@donoho2024singularity], a field crosses the **reproducibility singularity** only once *all three* become frictionless open services:

::: {.columns}
::: {.column width="33%"}
::: {.callout-note appearance="simple" icon=false}
### `[FR-1]` — **Data**
Public, citable, one-click research data.
:::
:::
::: {.column width="33%"}
::: {.callout-note appearance="simple" icon=false}
### `[FR-2]` — **Code**
Code sharing with **exact re-execution** by anyone.
:::
:::
::: {.column width="33%"}
::: {.callout-note appearance="simple" icon=false}
### `[FR-3]` — **Challenges**
Shared dataset, quantified metric, public leaderboard.
:::
:::
:::

::: {.fragment}
Empirical ML has all three. **Geophysics so far has mostly `[FR-2]`** — strong open software, but data and challenges still missing.
:::

---

## End-to-end multiphysics — every arrow differentiable

![](figs/end2end.png){fig-align="center" width="86%"}

$$\mathbf{z} \xrightarrow{\;\mathcal{G}\;} \mathbf{K} \xrightarrow{\;\mathcal{S}\;} \mathbf{c} \xrightarrow{\;\mathcal{R}\;} \mathbf{m} \xrightarrow{\;\mathcal{F}(\cdot)\mathbf{q}\;} \mathbf{d}$$

Generative NF · multiphase flow · rock physics · wave physics — one AD graph, one gradient [@louboutin2023lmi; @yin2023e2e].

---

## A differentiable open-source stack {.smaller}

::: {.columns}
::: {.column width="50%"}
**Wave physics**

- [`Devito`](https://github.com/devitocodes/devito) — JIT stencil compiler [@devito-api; @devito-compiler]
- [`JUDI.jl`](https://github.com/slimgroup/JUDI.jl) — matrix-free seismic ops with `rrule` [@judi; @witte2019compressive]

**Reservoir physics**

- [`Jutul.jl`](https://github.com/sintefmath/Jutul.jl) / [`JutulDarcy.jl`](https://github.com/sintefmath/JutulDarcy.jl) — implicit multiphase flow [@jutul; @jutuldarcy]
- [`JutulDarcyRules.jl`](https://github.com/slimgroup/JutulDarcyRules.jl) — single `rrule` makes flow gradients composable [@jutuldarcyrules]
:::
::: {.column width="50%"}
**ML / surrogates**

- [`InvertibleNetworks.jl`](https://github.com/slimgroup/InvertibleNetworks.jl) — memory-efficient normalizing flows [@invertiblenetworks; @orozco2024invertiblenetworks]
- [`dfno`](https://github.com/slimgroup/dfno) — model-parallel FNO surrogates [@dfno_sw; @grady2023modelparallel]

**AD glue**

- [`ChainRules.jl`](https://github.com/JuliaDiff/ChainRules.jl) + [`Zygote.jl`](https://github.com/FluxML/Zygote.jl) [@chainrules; @innes2018zygote]
:::
:::

::: {.fragment}
Register the adjoint **once** — compose freely across PDEs, ML, and surrogates [@innes2019differentiable].
:::

---

## ML-prior FWI — composing AD across physics & networks{.smaller}

::: {.columns}
::: {.column width="40%"}
$$\min_{\mathbf{z}}\ \tfrac{1}{2}\|\mathcal{F}(\mathcal{G}_{\theta^\ast}(\mathbf{z}))\mathbf{q} - \mathbf{d}\|_2^2 + \tfrac{\lambda}{2}\|\mathbf{z}\|_2^2$$

NF prior $\mathcal{G}_{\theta^\ast}$ trained on Compass slices; gradient flows through wave physics **and** through the invertible net.
:::
::: {.column width="20%"}
**Truth**
![](figs/gt_fwi.png){width="100%"}
:::
::: {.column width="20%"}
**Vanilla**
![](figs/vanilla_fwi.png){width="100%"}
:::
::: {.column width="20%"}
**+ NF prior**
![](figs/deepprior_fwi.png){width="100%"}
:::
:::

---

## End-to-end permeability inversion from time-lapse seismic {.smaller}

::: {.columns}
::: {.column width="50%"}
![True log-permeability](figs/K.png){width="100%"}
:::
::: {.column width="50%"}
![Inverted with FNO surrogate](figs/KendFNO.png){width="100%"}
:::
:::

One AD graph: wave physics → rock physics → multiphase flow (or FNO surrogate) → NF latent prior. **No glue code, no manual adjoints** [@louboutin2023lmi; @grady2023modelparallel].

---

## Best in class — *but lacks training data*

Independent comparison of differentiable subsurface-flow / inversion frameworks ranks SLIM's stack **best in class** on capability — and flags the same gap we feel internally:

::: {.callout-warning appearance="simple"}
**"Lacks training data."**
:::

We have the physics, the AD, the networks, the workflows.
What we don't have are **curated, ML-ready Earth and reservoir datasets** to train priors and surrogates at industry scale.

::: aside
[Public comparison spreadsheet](https://docs.google.com/spreadsheets/d/e/2PACX-1vRt62Y0skRS-dC9rxIGuh0pPJurB886_66s0SqnIDUiVTj4xEBNKsz7GnQNVnfaJUd2FafGkd0X_n23/pubhtml?usp=embed_facebook)
:::

---

## Closing the `[FR-1]` gap with SAGE {.smaller}

![](figs/WISE-SAGE-workflow.png){fig-align="center" width="78%"}

**SAGE** — *Subsurface AI-driven Geostatistical Extraction* of proxy posteriors [@erdinc2026sage] — distills National Data Repository information into a trainable prior, plugged into **WISE** [variational FWI; @yin2024wise; @wisejl] via [`WISE.jl`](https://github.com/slimgroup/WISE.jl).

---

## `[FR-1]` data — UK National Data Repository curation {.smaller}

::: {.columns}
::: {.column width="58%"}
![](figs/ukndr.png){width="100%"}
:::
::: {.column width="42%"}
**OpenSeisML** [@bhar2026openseisml]: automated pipeline curating imaged seismic + well logs from the UK NDR into a reproducible, ML-ready dataset for generative priors.

- time → depth via checkshots
- post-stack volumes + petrophysical logs
- North Sea geology, multiple surveys
- **reproducible**, **open**, **at scale**
:::
:::

---

## Proxy prior — sampling plausible velocity realizations {.smaller}

::: {.columns}
::: {.column width="55%"}
![](figs/proxyprior.gif){width="100%"}
:::
::: {.column width="45%"}
Two-network distillation [@erdinc2026sage]:

1. **Generative net** on 3D imaged seismic → image realizations.
2. **Conditional 2D net** on *image ↔ well* pairs → velocity / property realizations.

Result: a learned **proxy prior** $p(\mathbf{m})$ used to train WISE / end-to-end inversion.
:::
:::

---

## Currated training pairs from UK-NDR{.smaller}

![](figs/wells_overlay.png){fig-align="center" width="82%"}

Currated training samples [@erdinc2026sage;@bhar2026openseisml].

---

## Guided inference with SAGE {.smaller}

![](figs/Real-data-full-2.png){fig-align="center" width="92%"}

- Velocity models (third and fourth columns) sampled from the *proxy prior* conditioned on real unseen seismic (second colum) and guided by unseen wells (first column) produced by generative model trained on NDR data [@erdinc2026sage].

- Samples from the *proxy prior* will be used to train @wisejl via [`WISE.jl`](https://github.com/slimgroup/WISE.jl).
 

---

## Closing the `[FR-1]` gap with SAGE {.smaller}

![](figs/WISE-SAGE-workflow.png){fig-align="center" width="78%"}

**SAGE** — *Subsurface AI-driven Geostatistical Extraction* of proxy posteriors [@erdinc2026sage] — distills National Data Repository information into a trainable prior, plugged into **WISE** [variational FWI; @yin2024wise; @wisejl] via [`WISE.jl`](https://github.com/slimgroup/WISE.jl).

---

## Closing

- **Differentiable programming is mature.** Wave + flow + rock + ML inverted in one gradient — today, in open code [@louboutin2023lmi].
- **Software is no longer the bottleneck. Training data is.**
- SAGE + WISE + OpenSeisML build the missing **`[FR-1]`** layer on top of `[FR-2]` — *if* industry and NDRs help unlock the data.
- Need help currating training data from National Data Repositories around the world.

::: {.fragment style="text-align:center; margin-top: 1em;"}
**Thank you — let's build the data layer in the open.**

[github.com/slimgroup](https://github.com/slimgroup) · `felix.herrmann@gatech.edu`
:::

---

## Colophon

::: {style="text-align:center; margin-top: 2em;"}
These slides were generated with the assistance of
[**Claude Code**](https://claude.com/claude-code) (Anthropic).

Source, bibliography, and reproducible Quarto build at
[github.com/slimgroup](https://github.com/slimgroup).

[![](figs/cc-by-88x31.png){width="88px"}](https://creativecommons.org/licenses/by/4.0/)

© 2026 the authors. Licensed under
[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
:::

---

## References {.smaller}

::: {#refs}
:::
