Finitedifference approximations¶

devito.finite_differences.finite_difference.
first_derivative
(expr, dim, fd_order=None, side=centered[0], matvec=direct[1], symbolic=False)[source]¶ Firstorder derivative of a given expression.
Parameters:  expr (exprlike) – Expression for which the firstorder derivative is produced.
 dim (Dimension) – The Dimension w.r.t. which to differentiate.
 fd_order (int, optional) – Coefficient discretization order. Note: this impacts the width of
the resulting stencil. Defaults to
expr.space_order
 side (Side, optional) – Side of the finite difference location, centered (at x), left (at x  1)
or right (at x +1). Defaults to
centered
.  matvec (Transpose, optional) – Forward (matvec=direct) or transpose (matvec=transpose) mode of the
finite difference. Defaults to
direct
.
Returns: Firstorder derivative of
expr
.Return type: exprlike
Examples
>>> from devito import Function, Grid, first_derivative, transpose >>> grid = Grid(shape=(4, 4)) >>> x, _ = grid.dimensions >>> f = Function(name='f', grid=grid) >>> g = Function(name='g', grid=grid) >>> first_derivative(f*g, dim=x) f(x, y)*g(x, y)/h_x + f(x + h_x, y)*g(x + h_x, y)/h_x
This is also more easily obtainable via:
>>> (f*g).dx f(x, y)*g(x, y)/h_x + f(x + h_x, y)*g(x + h_x, y)/h_x
The adjoint mode
>>> g = Function(name='g', grid=grid) >>> first_derivative(f*g, dim=x, matvec=transpose) f(x, y)*g(x, y)/h_x  f(x + h_x, y)*g(x + h_x, y)/h_x

devito.finite_differences.finite_difference.
second_derivative
(expr, dim, fd_order, stagger=None, **kwargs)[source]¶ Secondorder derivative of a given expression.
Parameters:  expr (exprlike) – Expression for which the derivative is produced.
 dim (Dimension) – The Dimension w.r.t. which to differentiate.
 fd_order (int) – Coefficient discretization order. Note: this impacts the width of the resulting stencil.
 stagger (Side, optional) – Shift of the finitedifference approximation.
Returns: Secondorder derivative of
expr
.Return type: exprlike
Examples
>>> from devito import Function, Grid, second_derivative >>> grid = Grid(shape=(4, 4)) >>> x, _ = grid.dimensions >>> f = Function(name='f', grid=grid, space_order=2) >>> g = Function(name='g', grid=grid, space_order=2) >>> second_derivative(f*g, dim=x, fd_order=2) 2.0*f(x, y)*g(x, y)/h_x**2 + f(x  h_x, y)*g(x  h_x, y)/h_x**2 + f(x + h_x, y)*g(x + h_x, y)/h_x**2
This is also more easily obtainable via:
>>> (f*g).dx2 2.0*f(x, y)*g(x, y)/h_x**2 + f(x  h_x, y)*g(x  h_x, y)/h_x**2 + f(x + h_x, y)*g(x + h_x, y)/h_x**2

devito.finite_differences.finite_difference.
cross_derivative
(expr, dims, fd_order, deriv_order, stagger=None, **kwargs)[source]¶ Arbitraryorder cross derivative of a given expression.
Parameters:  expr (exprlike) – Expression for which the cross derivative is produced.
 dims (tuple of Dimension) – Dimensions w.r.t. which to differentiate.
 fd_order (tuple of ints) – Coefficient discretization order. Note: this impacts the width of the resulting stencil.
 deriv_order (tuple of ints) – Derivative order, e.g. 2 for a secondorder derivative.
 stagger (tuple of Side, optional) – Shift of the finitedifference approximation.
Returns: Crossderivative of
expr
.Return type: exprlike
Examples
>>> from devito import Function, Grid, second_derivative >>> grid = Grid(shape=(4, 4)) >>> x, y = grid.dimensions >>> f = Function(name='f', grid=grid, space_order=2) >>> g = Function(name='g', grid=grid, space_order=2) >>> cross_derivative(f*g, dims=(x, y), fd_order=(2, 2), deriv_order=(1, 1)) 0.5*(0.5*f(x  h_x, y  h_y)*g(x  h_x, y  h_y)/h_x + 0.5*f(x + h_x, y  h_y)*g(x + h_x, y  h_y)/h_x)/h_y + 0.5*(0.5*f(x  h_x, y + h_y)*g(x  h_x, y + h_y)/h_x + 0.5*f(x + h_x, y + h_y)*g(x + h_x, y + h_y)/h_x)/h_y
This is also more easily obtainable via:
>>> (f*g).dxdy 0.5*(0.5*f(x  h_x, y  h_y)*g(x  h_x, y  h_y)/h_x + 0.5*f(x + h_x, y  h_y)*g(x + h_x, y  h_y)/h_x)/h_y + 0.5*(0.5*f(x  h_x, y + h_y)*g(x  h_x, y + h_y)/h_x + 0.5*f(x + h_x, y + h_y)*g(x + h_x, y + h_y)/h_x)/h_y

devito.finite_differences.finite_difference.
generic_derivative
(expr, dim, fd_order, deriv_order, stagger=None, symbolic=False)[source]¶ Arbitraryorder derivative of a given expression.
Parameters:  expr (exprlike) – Expression for which the derivative is produced.
 dim (Dimension) – The Dimension w.r.t. which to differentiate.
 fd_order (int) – Coefficient discretization order. Note: this impacts the width of the resulting stencil.
 deriv_order (int) – Derivative order, e.g. 2 for a secondorder derivative.
 stagger (Side, optional) – Shift of the finitedifference approximation.
Returns: derivorder
derivative ofexpr
.Return type: exprlike