{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 01 - Introduction to seismic modelling\n", "\n", "This notebook is the first in a series of tutorials highlighting various aspects of seismic inversion based on Devito operators. In this first example we aim to highlight the core ideas behind seismic modelling, where we create a numerical model that captures the processes involved in a seismic survey. This forward model will then form the basis for further tutorials on the implementation of inversion processes using Devito operators.\n", "\n", "## Modelling workflow\n", "\n", "The core process we are aiming to model is a seismic survey, which consists of two main components:\n", "\n", "- **Source** - A source is positioned at a single or a few physical locations where artificial pressure is injected into the domain we want to model. In the case of land survey, it is usually dynamite blowing up at a given location, or a vibroseis (a vibrating engine generating continuous sound waves). For a marine survey, the source is an air gun sending a bubble of compressed air into the water that will expand and generate a seismic wave.\n", "- **Receiver** - A set of microphones or hydrophones are used to measure the resulting wave and create a set of measurements called a *Shot Record*. These measurements are recorded at multiple locations, and usually at the surface of the domain or at the bottom of the ocean in some marine cases.\n", "\n", "In order to create a numerical model of a seismic survey, we need to solve the wave equation and implement source and receiver interpolation to inject the source and record the seismic wave at sparse point locations in the grid.\n", "\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The acoustic seismic wave equation\n", "The acoustic wave equation for the square slowness $m$, defined as $m=\\frac{1}{c^2}$, where $c$ is the speed of sound in the given physical media, and a source $q$ is given by:\n", "\n", "\\begin{cases}\n", " &m \\frac{d^2 u(x,t)}{dt^2} - \\nabla^2 u(x,t) = q \\ \\text{in } \\Omega \\\\\n", " &u(.,t=0) = 0 \\\\\n", " &\\frac{d u(x,t)}{dt}|_{t=0} = 0 \n", "\\end{cases}\n", "\n", "with the zero initial conditions to guarantee unicity of the solution.\n", "The boundary conditions are Dirichlet conditions:\n", "\\begin{equation}\n", " u(x,t)|_\\delta\\Omega = 0\n", "\\end{equation}\n", "\n", "where $\\delta\\Omega$ is the surface of the boundary of the model $\\Omega$.\n", "\n", "\n", "# Finite domains\n", "\n", "The last piece of the puzzle is the computational limitation. In the field, the seismic wave propagates in every direction to an \"infinite\" distance. However, solving the wave equation in a mathematically/discrete infinite domain is not feasible. In order to compensate, Absorbing Boundary Conditions (ABC) or Perfectly Matched Layers (PML) are required to mimic an infinite domain. These two methods allow to approximate an infinite media by damping and absorbing the waves at the limit of the domain to avoid reflections.\n", "\n", "The simplest of these methods is the absorbing damping mask. The core idea is to extend the physical domain and to add a Sponge mask in this extension that will absorb the incident waves. The acoustic wave equation with this damping mask can be rewritten as:\n", "\n", "\\begin{cases} \n", " &m \\frac{d^2 u(x,t)}{dt^2} - \\nabla^2 u(x,t) + \\eta \\frac{d u(x,t)}{dt}=q \\ \\text{in } \\Omega \\\\\n", " &u(.,0) = 0 \\\\\n", " &\\frac{d u(x,t)}{dt}|_{t=0} = 0 \n", "\\end{cases}\n", "\n", "where $\\eta$ is the damping mask equal to $0$ inside the physical domain and increasing inside the sponge layer. Multiple choice of profile can be chosen for $\\eta$ from linear to exponential." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Seismic modelling with devito\n", "\n", "We describe here a step by step setup of seismic modelling with Devito in a simple 2D case. We will create a physical model of our domain and define a single source and an according set of receivers to model for the forward model. But first, we initialize some basic utilities." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "# Adding ignore due to (probably an np notebook magic) bug\n", "import numpy as np\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the physical problem\n", "\n", "The first step is to define the physical model:\n", "\n", "- What are the physical dimensions of interest\n", "- What is the velocity profile of this physical domain\n", "\n", "We will create a simple velocity model here by hand for demonstration purposes. This model essentially consists of two layers, each with a different velocity: $1.5km/s$ in the top layer and $2.5km/s$ in the bottom layer. We will use this simple model a lot in the following tutorials, so we will rely on a utility function to create it again later." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Operator `initdamp` run in 0.01 s\n", "Operator `padfunc` run in 0.01 s\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "from examples.seismic import Model, plot_velocity\n", "\n", "# Define a physical size\n", "shape = (101, 101) # Number of grid point (nx, nz)\n", "spacing = (10., 10.) # Grid spacing in m. The domain size is now 1km by 1km\n", "origin = (0., 0.) # What is the location of the top left corner. This is necessary to define\n", "# the absolute location of the source and receivers\n", "\n", "# Define a velocity profile. The velocity is in km/s\n", "v = np.empty(shape, dtype=np.float32)\n", "v[:, :51] = 1.5\n", "v[:, 51:] = 2.5\n", "\n", "# With the velocity and model size defined, we can create the seismic model that\n", "# encapsulates this properties. We also define the size of the absorbing layer as 10 grid points\n", "model = Model(vp=v, origin=origin, shape=shape, spacing=spacing,\n", " space_order=2, nbl=10, bcs=\"damp\")\n", "\n", "plot_velocity(model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Acquisition geometry\n", "\n", "To fully define our problem setup we also need to define the source that injects the wave to model and the set of receiver locations at which to sample the wavefield. The source time signature will be modelled using a Ricker wavelet defined as\n", "\n", "\\begin{equation}\n", " q(t) = (1-2\\pi^2 f_0^2 (t - \\frac{1}{f_0})^2 )e^{- \\pi^2 f_0^2 (t - \\frac{1}{f_0})}\n", "\\end{equation}\n", "\n", "To fully define the source signature we first need to define the time duration for our model and the timestep size, which is dictated by the CFL condition and our grid spacing. Luckily, our `Model` utility provides us with the critical timestep size, so we can fully discretize our model time axis as an array:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from examples.seismic import TimeAxis\n", "\n", "t0 = 0. # Simulation starts a t=0\n", "tn = 1000. # Simulation last 1 second (1000 ms)\n", "dt = model.critical_dt # Time step from model grid spacing\n", "\n", "time_range = TimeAxis(start=t0, stop=tn, step=dt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The source is positioned at a $20m$ depth and at the middle of the $x$ axis ($x_{src}=500m$), with a peak wavelet frequency of $10Hz$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "from examples.seismic import RickerSource\n", "\n", "f0 = 0.010 # Source peak frequency is 10Hz (0.010 kHz)\n", "src = RickerSource(name='src', grid=model.grid, f0=f0,\n", " npoint=1, time_range=time_range)\n", "\n", "# First, position source centrally in all dimensions, then set depth\n", "src.coordinates.data[0, :] = np.array(model.domain_size) * .5\n", "src.coordinates.data[0, -1] = 20. # Depth is 20m\n", "\n", "# We can plot the time signature to see the wavelet\n", "src.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly to our source object, we can now define our receiver geometry as a symbol of type `Receiver`. It is worth noting here that both utility classes, `RickerSource` and `Receiver` are thin wrappers around the Devito's `SparseTimeFunction` type, which encapsulates sparse point data and allows us to inject and interpolate values into and out of the computational grid. As we have already seen, both types provide a `.coordinates` property to define the position within the domain of all points encapsulated by that symbol. \n", "\n", "In this example we will position receivers at the same depth as the source, every $10m$ along the x axis. The `rec.data` property will be initialized, but left empty, as we will compute the receiver readings during the simulation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "from examples.seismic import Receiver\n", "\n", "# Create symbol for 101 receivers\n", "rec = Receiver(name='rec', grid=model.grid, npoint=101, time_range=time_range)\n", "\n", "# Prescribe even spacing for receivers along the x-axis\n", "rec.coordinates.data[:, 0] = np.linspace(0, model.domain_size[0], num=101)\n", "rec.coordinates.data[:, 1] = 20. # Depth is 20m\n", "\n", "# We can now show the source and receivers within our domain:\n", "# Red dot: Source location\n", "# Green dots: Receiver locations (every 4th point)\n", "plot_velocity(model, source=src.coordinates.data,\n", " receiver=rec.coordinates.data[::4, :])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Finite-difference discretization\n", "\n", "Devito is a finite-difference DSL that solves the discretized wave-equation on a Cartesian grid. The finite-difference approximation is derived from Taylor expansions of the continuous field after removing the error term.\n", "\n", "## Time discretization\n", "\n", "We only consider the second order time discretization for now. From the Taylor expansion, the second order discrete approximation of the second order time derivative is:\n", "\\begin{equation}\n", "\\begin{aligned}\n", " \\frac{d^2 u(x,t)}{dt^2} = \\frac{\\mathbf{u}(\\mathbf{x},\\mathbf{t+\\Delta t}) - 2 \\mathbf{u}(\\mathbf{x},\\mathbf{t}) + \\mathbf{u}(\\mathbf{x},\\mathbf{t-\\Delta t})}{\\mathbf{\\Delta t}^2} + O(\\mathbf{\\Delta t}^2).\n", "\\end{aligned}\n", "\\end{equation} \n", "\n", "where $\\mathbf{u}$ is the discrete wavefield, $\\mathbf{\\Delta t}$ is the discrete\n", "time-step (distance between two consecutive discrete time points) and $O(\\mathbf{\\Delta\n", " t}^2)$ is the discretization error term. The discretized approximation of the\n", "second order time derivative is then given by dropping the error term. This derivative is represented in Devito by `u.dt2` where u is a `TimeFunction` object.\n", "\n", "## Spatial discretization \n", "\n", "We define the discrete Laplacian as the sum of the second order spatial\n", "derivatives in the three dimensions:\n", "\\begin{equation}\n", "\\begin{aligned}\n", "\\Delta \\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t})= \\sum_{j=1}^{j=\\frac{k}{2}} \\Bigg[\\alpha_j \\Bigg(&\n", "\\mathbf{u}(\\mathbf{x+jdx},\\mathbf{y},\\mathbf{z},\\mathbf{t})+\\mathbf{u}(\\mathbf{x-jdx},\\mathbf{y},\\mathbf{z},\\mathbf{t}) + \\\\\n", "&\\mathbf{u}(\\mathbf{x},\\mathbf{y+jdy},\\mathbf{z},\\mathbf{t})+\\mathbf{u}(\\mathbf{x},\\mathbf{y-jdy},\\mathbf{z}\\mathbf{t}) + \\\\\n", "&\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z+jdz},\\mathbf{t})+\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z-jdz},\\mathbf{t})\\Bigg) \\Bigg] + \\\\\n", "&3\\alpha_0 \\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}).\n", "\\end{aligned}\n", "\\end{equation}\n", "\n", "This derivative is represented in Devito by `u.laplace` where u is a `TimeFunction` object.\n", "\n", "## Wave equation\n", "\n", "With the space and time discretization defined, we can fully discretize the wave-equation with the combination of time and space discretizations and obtain the following second order in time and $k^{th}$ order in space discrete stencil to update one grid point at position $\\mathbf{x}, \\mathbf{y},\\mathbf{z}$ at time $\\mathbf{t}$, i.e.\n", "\\begin{equation}\n", "\\begin{aligned}\n", "\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t+\\Delta t}) = &2\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) - \\mathbf{u}(\\mathbf{x},\\mathbf{y}, \\mathbf{z},\\mathbf{t-\\Delta t}) +\\\\\n", "& \\frac{\\mathbf{\\Delta t}^2}{\\mathbf{m(\\mathbf{x},\\mathbf{y},\\mathbf{z})}} \\Big(\\Delta \\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) + \\mathbf{q}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) \\Big). \n", "\\end{aligned}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\operatorname{damp}{\\left(x,y \\right)} \\frac{\\partial}{\\partial t} u{\\left(t,x,y \\right)} - \\frac{\\partial^{2}}{\\partial x^{2}} u{\\left(t,x,y \\right)} - \\frac{\\partial^{2}}{\\partial y^{2}} u{\\left(t,x,y \\right)} + \\frac{\\frac{\\partial^{2}}{\\partial t^{2}} u{\\left(t,x,y \\right)}}{\\operatorname{vp}^{2}{\\left(x,y \\right)}}$" ], "text/plain": [ "damp(x, y)*Derivative(u(t, x, y), t) - Derivative(u(t, x, y), (x, 2)) - Derivative(u(t, x, y), (y, 2)) + Derivative(u(t, x, y), (t, 2))/vp(x, y)**2" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# In order to represent the wavefield u and the square slowness we need symbolic objects \n", "# corresponding to time-space-varying field (u, TimeFunction) and \n", "# space-varying field (m, Function)\n", "from devito import TimeFunction\n", "\n", "# Define the wavefield with the size of the model and the time dimension\n", "u = TimeFunction(name=\"u\", grid=model.grid, time_order=2, space_order=2)\n", "\n", "# We can now write the PDE\n", "pde = model.m * u.dt2 - u.laplace + model.damp * u.dt\n", "\n", "# The PDE representation is as on paper\n", "pde" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# This discrete PDE can be solved in a time-marching way updating u(t+dt) from the previous time step\n", "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as \n", "# a time marching updating equation known as a stencil using customized SymPy functions\n", "from devito import Eq, solve\n", "\n", "stencil = Eq(u.forward, solve(pde, u.forward))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Source injection and receiver interpolation\n", "\n", "With a numerical scheme to solve the homogenous wave equation, we need to add the source to introduce seismic waves and to implement the measurement operator, and interpolation operator. This operation is linked to the discrete scheme and needs to be done at the proper time step. The semi-discretized in time wave equation with a source reads:\n", "\n", "\\begin{equation}\n", "\\begin{aligned}\n", "\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t+\\Delta t}) = &2\\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) - \\mathbf{u}(\\mathbf{x},\\mathbf{y}, \\mathbf{z},\\mathbf{t-\\Delta t}) +\\\\\n", "& \\frac{\\mathbf{\\Delta t}^2}{\\mathbf{m(\\mathbf{x},\\mathbf{y},\\mathbf{z})}} \\Big(\\Delta \\mathbf{u}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) + \\mathbf{q}(\\mathbf{x},\\mathbf{y},\\mathbf{z},\\mathbf{t}) \\Big). \n", "\\end{aligned}\n", "\\end{equation}\n", "\n", "It shows that in order to update $\\mathbf{u}$ at time $\\mathbf{t+\\Delta t}$ we have to inject the value of the source term $\\mathbf{q}$ of time $\\mathbf{t}$. In Devito, it corresponds the update of $u$ at index $t+1$ (t = time implicitly) with the source of time $t$.\n", "On the receiver side, the problem is either as it only requires to record the data at the given time step $t$ for the receiver at time $time=t$.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Finally we define the source injection and receiver read function to generate the corresponding code\n", "src_term = src.inject(field=u.forward, expr=src * dt**2 / model.m)\n", "\n", "# Create interpolation expression for receivers\n", "rec_term = rec.interpolate(expr=u.forward)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Devito operator and solve\n", "After constructing all the necessary expressions for updating the wavefield, injecting the source term and interpolating onto the receiver points, we can now create the Devito operator that will generate the C code at runtime. When creating the operator, Devito's two optimization engines will log which performance optimizations have been performed:\n", "* **DSE:** The Devito Symbolics Engine will attempt to reduce the number of operations required by the kernel.\n", "* **DLE:** The Devito Loop Engine will perform various loop-level optimizations to improve runtime performance.\n", "\n", "**Note**: The argument `subs=model.spacing_map` causes the operator to substitute values for our current grid spacing into the expressions before code generation. This reduces the number of floating point operations executed by the kernel by pre-evaluating certain coefficients." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "from devito import Operator\n", "\n", "op = Operator([stencil] + src_term + rec_term, subs=model.spacing_map)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can execute the create operator for a number of timesteps. We specify the number of timesteps to compute with the keyword `time` and the timestep size with `dt`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Operator `Kernel` run in 0.01 s\n" ] }, { "data": { "text/plain": [ "PerformanceSummary([(PerfKey(name='section0', rank=None),\n", " PerfEntry(time=0.0032300000000000237, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", " (PerfKey(name='section1', rank=None),\n", " PerfEntry(time=1.4000000000000003e-05, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[])),\n", " (PerfKey(name='section2', rank=None),\n", " PerfEntry(time=0.0006070000000000032, gflopss=0.0, gpointss=0.0, oi=0.0, ops=0, itershapes=[]))])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "op(time=time_range.num-1, dt=model.critical_dt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After running our operator kernel, the data associated with the receiver symbol `rec.data` has now been populated due to the interpolation expression we inserted into the operator. This allows us the visualize the shot record:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", "from examples.seismic import plot_shotrecord\n", "\n", "plot_shotrecord(rec.data, model, t0, tn)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "assert np.isclose(np.linalg.norm(rec.data), 370, rtol=1)" ] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 4 }