{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Boundary conditions tutorial"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This tutorial aims to demonstrate how users can implement various boundary conditions in Devito, building on concepts introduced in previous tutorials. Over the course of this notebook we will go over the implementation of both free surface boundary conditions and perfectly-matched layers (PMLs) in the context of the first-order acoustic wave equation. This tutorial is based on a simplified version of the method outlined in Liu and Tao's 1997 paper (https://doi.org/10.1121/1.419657).\n",
"\n",
"We will set up our domain with PMLs along the left, right, and bottom edges, and free surface boundaries at the top as shown below.\n",
"\n",
"\n",
"\n",
"Note that whilst in practice we would want the PML tapers to overlap in the corners, this requires additional subdomains. As such, they are omitted for simplicity.\n",
"\n",
"As always, we will begin by specifying some parameters for our `Grid`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"shape = (101, 101)\n",
"extent = (2000., 2000.)\n",
"nbpml = 10 # Number of PMLs on each side"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will need to use subdomains to accomodate the modified equations in the PML regions. As `Grid` objects cannot have subdomains added retroactively, we must define our subdomains beforehand."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from devito import SubDomain\n",
"\n",
"s_o = 6 # Space order\n",
"\n",
"class MainDomain(SubDomain): # Main section with no damping\n",
" name = 'main'\n",
" def __init__(self, PMLS, S_O):\n",
" super().__init__()\n",
" self.PMLS = PMLS\n",
" self.S_O = S_O\n",
"\n",
" def define(self, dimensions):\n",
" x, y = dimensions\n",
" return {x: ('middle', self.PMLS, self.PMLS),\n",
" y: ('middle', self.S_O//2, self.PMLS)}\n",
"\n",
"\n",
"class Left(SubDomain): # Left PML region\n",
" name = 'left'\n",
" def __init__(self, PMLS):\n",
" super().__init__()\n",
" self.PMLS = PMLS\n",
"\n",
" def define(self, dimensions):\n",
" x, y = dimensions\n",
" return {x: ('left', self.PMLS), y: y}\n",
"\n",
"\n",
"class Right(SubDomain): # Right PML region\n",
" name = 'right'\n",
" def __init__(self, PMLS):\n",
" super().__init__()\n",
" self.PMLS = PMLS\n",
"\n",
" def define(self, dimensions):\n",
" x, y = dimensions\n",
" return {x: ('right', self.PMLS), y: y}\n",
" \n",
"class Base(SubDomain): # Base PML region\n",
" name = 'base'\n",
" def __init__(self, PMLS):\n",
" super().__init__()\n",
" self.PMLS = PMLS\n",
"\n",
" def define(self, dimensions):\n",
" x, y = dimensions\n",
" return {x: ('middle', self.PMLS, self.PMLS), y: ('right', self.PMLS)}\n",
"\n",
"class FreeSurface(SubDomain): # Free surface region\n",
" name = 'freesurface'\n",
" def __init__(self, PMLS, S_O):\n",
" super().__init__()\n",
" self.PMLS = PMLS\n",
" self.S_O = S_O\n",
" \n",
" def define(self, dimensions):\n",
" x, y = dimensions\n",
" return {x: ('middle', self.PMLS, self.PMLS), y: ('left', self.S_O//2)}\n",
"\n",
"main_domain = MainDomain(nbpml, s_o)\n",
"left = Left(nbpml)\n",
"right = Right(nbpml)\n",
"base = Base(nbpml)\n",
"freesurface = FreeSurface(nbpml, s_o)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And create the grid, attaching our subdomains:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from devito import Grid\n",
"\n",
"grid = Grid(shape=shape, extent=extent,\n",
" subdomains=(main_domain, left, right, base, freesurface))\n",
"x, y = grid.dimensions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can then begin to specify our problem starting with some parameters."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"density = 1. # 1000kg/m^3\n",
"velocity = 4. # km/s\n",
"gamma = 0.0002 # Absorption coefficient"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also need a `TimeFunction` object for each of our wavefields. As particle velocity is a vector, we will choose a `VectorTimeFunction` object to encapsulate it."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from devito import TimeFunction, VectorTimeFunction, NODE\n",
"\n",
"p = TimeFunction(name='p', grid=grid, time_order=1,\n",
" space_order=s_o, staggered=NODE)\n",
"v = VectorTimeFunction(name='v', grid=grid, time_order=1,\n",
" space_order=s_o)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A `VectorTimeFunction` is near identical in function to a standard `TimeFunction`, albeit with a field for each grid dimension. The fields associated with each component can be accessed as follows:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[[0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" ...\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]]\n",
"\n",
" [[0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" ...\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]]]\n"
]
}
],
"source": [
"print(v[0].data) # Print the data attribute associated with the x component of v"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You may have also noticed the keyword `staggered` in the arguments when we created these functions. As one might expect, these are used for specifying where derivatives should be evaluated relative to the grid, as required for implementing formulations such as the first-order acoustic wave equation or P-SV elastic. Passing a function `staggered=NODE` specifies that its derivatives should be evaluated at the node. One can also pass `staggered=x` or `staggered=y` to stagger the grid by half a spacing in those respective directions. Additionally, a tuple of dimensions can be passed to stagger in multiple directions (e.g. `staggered=(x, y)`). `VectorTimeFunction` objects have their associated grids staggered by default.\n",
"\n",
"We will also need to define a field for integrating pressure over time:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"p_i = TimeFunction(name='p_i', grid=grid, time_order=1,\n",
" space_order=1, staggered=NODE)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we prepare the source term:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from examples.seismic import TimeAxis, RickerSource\n",
"\n",
"t0 = 0. # Simulation starts at t=0\n",
"tn = 400. # Simulation length in ms\n",
"dt = 1e2*(1. / np.sqrt(2.)) / 60. # Time step\n",
"\n",
"time_range = TimeAxis(start=t0, stop=tn, step=dt)\n",
"\n",
"f0 = 0.02\n",
"src = RickerSource(name='src', grid=grid, f0=f0,\n",
" npoint=1, time_range=time_range)\n",
"\n",
"# Position source centrally in all dimensions\n",
"src.coordinates.data[0, :] = 1000."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"tags": [
"nbval-skip"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"