Skip to content
/ NES Public

Neural Eikonal Solver: framework for modeling traveltimes via solving eikonal equation using neural networks

License

Notifications You must be signed in to change notification settings

sgrubas/NES

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neural Eikonal Solver

Neural Eikonal Solver (NES) is framework for solving factored eikonal equation using physics-informed neural network, for details see our paper: early arXiv version and published final version. NES can simulate traveltimes of seismic waves in complex inhomogeneous velocity models.

Description

See quick introduction on Google Colab

NES has two solvers:

  1. One-Point NES (NES-OP) is to solve conventional one-point eikonal (NES-OP tutorial)

$$\Vert \nabla \tau(\textbf{x}) \Vert = \frac{1}{v(\textbf{x})}$$

  1. Two-Point NES (NES-TP) is to solve generalized two-point eikonal (NES-TP tutorial)

$$\Vert \nabla_r T(\textbf{x}_s, \textbf{x}_r) \Vert = \frac{1}{v(\textbf{x}_r)}$$

$$\Vert \nabla_s T(\textbf{x}_s, \textbf{x}_r) \Vert = \frac{1}{v(\textbf{x}_s)}$$

So far, NES outperforms all existing neural-network based solutions. Table shows average performance results on a smoothed part of Marmousi model (NES-OP vs. PINNeik and NES-TP vs. EikoNet). RMAE is relative mean-absolute error with respect to the reference solution (second-order factored Fast Marching Method). The tests were performed on GPU Tesla P100-PCIE.

Solver RMAE, % Training time, sec Network size
NES-OP (ours) 0.2 240 7856
PINNeik 12.4 330 4061
NES-TP (ours) 0.4 300 51308
EikoNet 5.4 9600 7913249

For detailed comparisons see our colab notebooks EikoNet and PINNeik.

Installation

pip install git+https://github.com/sgrubas/NES.git

Quick example

import NES

Vel = NES.velocity.MarmousiSmoothedPart()
Eik = NES.NES_TP(velocity=Vel)
Eik.build_model()
h = Eik.train(x_train=100000, epochs=1000, batch_size=25000)

grid = NES.utils.RegularGrid(Vel)
Xs = grid((5, 5)); Xr = grid((100, 100))
X = grid.sou_rec_pairs(Xs, Xr)
T = Eik.Traveltime(X)

2D examples of NES-OP

Isochrones of solutions. RMAE is shown above each figure. The NES solutions are white dashed isochrones, the reference solutions are black isochrones.

0.06% 0.12%

0.42% 0.28%

0.33% 0.34%

Citation

If you find NES useful for your research, please cite our paper and this repo:

@article{grubas2023NES,
title = {Neural Eikonal solver: Improving accuracy of physics-informed neural networks for solving eikonal equation in case of caustics},
journal = {Journal of Computational Physics},
volume = {474},
pages = {111789},
year = {2023},
issn = {0021-9991},
doi = {https://doi.org/10.1016/j.jcp.2022.111789},
url = {https://www.sciencedirect.com/science/article/pii/S002199912200852X},
author = {Serafim Grubas and Anton Duchkov and Georgy Loginov},
keywords = {Physics-informed neural network, Eikonal equation, Seismic, Traveltimes, Caustics}
}

@article{grubas2023NESpython,
title = {Neural Eikonal Solver},
journal = {GitHub},
url = {https://github.com/sgrubas/NES},
doi = {10.5281/zenodo.12588346},
year = {2023},
author = {Serafim Grubas and Anton Duchkov and Georgy Loginov}
}

Future plans

  • Anisotropic eikonal
  • Ray tracing
  • Wave amplitudes
  • Earthquake localization
  • Traveltime tomography

Developers

Serafim Grubas (serafimgrubas@gmail.com)
Nikolay Shilov
Anton Duchkov
Georgy Loginov