4.4 Stencil operators
This section lists all the stencil operators provided by Blitz++. They
assume that an array represents evenly spaced data points separated by a
distance of h. A 2nd-order accurate operator has error term
O(h^2); a 4th-order accurate operator has error term O(h^4).
All of the stencils have factors associated with them. For example, the
central12 operator is a discrete first derivative which is 2nd-order
accurate. Its factor is 2h; this means that to get the first derivative of
an array A, you need to use central12(A,firstDim)/(2h).
Typically when designing stencils, one factors out all of the h terms
for efficiency.
The factor terms always consist of an integer multiplier (often 1) and a
power of h. For ease of use, all of the operators listed below are
provided in a second “normalized” version in which the integer multiplier
is 1. The normalized versions have an n appended to the name, for
example central12n is the normalized version of central12, and
has factor h instead of 2h.
These operators are defined in blitz/array/stencilops.h if you wish
to see the implementation.
4.4.1 Central differences
central12(A,dimension)- 1st derivative, 2nd order accurate. Factor: 2h
central22(A,dimension)- 2nd derivative, 2nd order accurate. Factor: h^2
central32(A,dimension)- 3rd derivative, 2nd order accurate. Factor: 2h^3
central42(A,dimension)- 4th derivative, 2nd order accurate. Factor: h^4
central14(A,dimension)- 1st derivative, 4th order accurate. Factor: 12h
central24(A,dimension)- 2nd derivative, 4th order accurate. Factor: 12h^2
central34(A,dimension)- 3rd derivative, 4th order accurate. Factor: 8h^3
central44(A,dimension)- 4th derivative, 4th order accurate. Factor: 6h^4
Note that the above are available in normalized versions central12n,
central22n, ..., central44n which have factors of h,
h^2, h^3, or h^4 as appropriate.
These are available in multicomponent versions: for example,
central12(A,component,dimension) gives the central12 operator for the
specified component (Components are numbered 0, 1, ... N-1).
4.4.2 Forward differences
forward11(A,dimension)- 1st derivative, 1st order accurate. Factor: h
forward21(A,dimension)- 2nd derivative, 1st order accurate. Factor: h^2
forward31(A,dimension)- 3rd derivative, 1st order accurate. Factor: h^3
forward41(A,dimension)- 4th derivative, 1st order accurate. Factor: h^4
forward12(A,dimension)- 1st derivative, 2nd order accurate. Factor: 2h
forward22(A,dimension)- 2nd derivative, 2nd order accurate. Factor: h^2
forward32(A,dimension)- 3rd derivative, 2nd order accurate. Factor: 2h^3
forward42(A,dimension)- 4th derivative, 2nd order accurate. Factor: h^4
Note that the above are available in normalized versions forward11n,
forward21n, ..., forward42n which have factors of h,
h^2, h^3, or h^4 as appropriate.
These are available in multicomponent versions: for example,
forward11(A,component,dimension) gives the forward11 operator for the
specified component (Components are numbered 0, 1, ... N-1).
4.4.3 Backward differences
backward11(A,dimension)- 1st derivative, 1st order accurate. Factor: h
backward21(A,dimension)- 2nd derivative, 1st order accurate. Factor: h^2
backward31(A,dimension)- 3rd derivative, 1st order accurate. Factor: h^3
backward41(A,dimension)- 4th derivative, 1st order accurate. Factor: h^4
backward12(A,dimension)- 1st derivative, 2nd order accurate. Factor: 2h
backward22(A,dimension)- 2nd derivative, 2nd order accurate. Factor: h^2
backward32(A,dimension)- 3rd derivative, 2nd order accurate. Factor: 2h^3
backward42(A,dimension)- 4th derivative, 2nd order accurate. Factor: h^4
Note that the above are available in normalized versions backward11n,
backward21n, ..., backward42n which have factors of h,
h^2, h^3, or h^4 as appropriate.
These are available in multicomponent versions: for example,
backward42(A,component,dimension) gives the backward42 operator for
the specified component (Components are numbered 0, 1, ... N-1).
4.4.4 Laplacian (\nabla ^2) operators
Laplacian2D(A)- 2nd order accurate, 2-dimensional laplacian. Factor: h^2
Laplacian3D(A)- 2nd order accurate, 3-dimensional laplacian. Factor: h^2
Laplacian2D4(A)- 4th order accurate, 2-dimensional laplacian. Factor: 12h^2
| -2 | -1 | 0 | 1 | 2 |
| -2 | | | -1 | | |
| -1 | | | 16 | | |
| 0 | -1 | 16 | -60 | 16 | -1 |
| 1 | | | 16 | | |
| 2 | | | -1 | | |
Laplacian3D4(A)- 4th order accurate, 3-dimensional laplacian. Factor: 12h^2
Note that the above are available in normalized versions
Laplacian2D4n, Laplacian3D4n which have factors h^2.
4.4.5 Gradient (\nabla) operators
These return TinyVectors of the appropriate numeric type and length:
grad2D(A)- 2nd order, 2-dimensional gradient (vector of first derivatives), generated
using the central12 operator. Factor: 2h
grad2D4(A)- 4th order, 2-dimensional gradient, using central14 operator. Factor: 12h
grad3D(A)- 2nd order, 3-dimensional gradient, using central12 operator. Factor: 2h
grad3D4(A)- 4th order, 3-dimensional gradient, using central14 operator. Factor: 12h
These are available in normalized versions grad2Dn, grad2D4n,
grad3Dn and grad3D4n which have factors h.
4.4.6 Jacobian operators
The Jacobian operators are defined over 3D vector fields only (e.g.
Array<TinyVector<double,3>,3>). They return a
TinyMatrix<T,3,3> where T is the numeric type of the vector field.
Jacobian3D(A)- 2nd order, 3-dimensional Jacobian using the central12 operator. Factor:
2h.
Jacobian3D4(A)- 4th order, 3-dimensional Jacobian using the central14 operator. Factor:
12h.
These are also available in normalized versions Jacobian3Dn and
Jacobain3D4n which have factors h.
4.4.7 Grad-squared operators
There are also grad-squared operators, which return TinyVectors of
second derivatives:
gradSqr2D(A)- 2nd order, 2-dimensional grad-squared (vector of second derivatives),
generated using the central22 operator. Factor: h^2
gradSqr2D4(A)- 4th order, 2-dimensional grad-squared, using central24 operator. Factor:
12h^2
gradSqr3D(A)- 2nd order, 3-dimensional grad-squared, using the central22 operator.
Factor: h^2
gradSqr3D4(A)- 4th order, 3-dimensional grad-squared, using central24 operator. Factor:
12h^2
Note that the above are available in normalized versions gradSqr2Dn,
gradSqr2D4n, gradSqr3Dn, gradSqr3D4n which have factors
h^2.
4.4.8 Curl (\nabla \times) operators
These curl operators return scalar values:
curl(Vx,Vy)- 2nd order curl operator using the central12 operator. Factor: 2h
curl4(Vx,Vy)- 4th order curl operator using the central14 operator. Factor: 12h
curl2D(V)- 2nd order curl operator on a 2D vector field (e.g.
Array<TinyVector<float,2>,2>), using the central12 operator. Factor:
2h
curl2D4(V)- 4th order curl operator on a 2D vector field, using the central12 operator.
Factor: 12h
Available in normalized forms curln, curl4n, curl2Dn,
curl2D4n.
These curl operators return three-dimensional TinyVectors of the
appropriate numeric type:
curl(Vx,Vy,Vz)- 2nd order curl operator using the central12 operator. Factor: 2h
curl4(Vx,Vy,Vz)- 4th order curl operator using the central14 operator. Factor: 12h
curl(V)- 2nd order curl operator on a 3D vector field (e.g.
Array<TinyVector<double,3>,3>, using the central12 operator. Factor:
2h
curl4(V)- 4th order curl operator on a 3D vector field, using the central14 operator.
Factor: 12h
Note that the above are available in normalized versions curln and
curl4n, which have factors of h.
4.4.9 Divergence (\nabla \cdot) operators
The divergence operators return a scalar value.
div(Vx,Vy)- 2nd order div operator using the central12 operator. Factor: 2h
div4(Vx,Vy)- 4th order div operator using the central14 operator. Factor: 12h
div(Vx,Vy,Vz)- 2nd order div operator using the central12 operator. Factor: 2h
div4(Vx,Vy,Vz)- 4th order div operator using the central14 operator. Factor: 12h
div2D(V)- 2nd order div operator on a 2D vector field, using the central12 operator.
Factor: 2h
div2D4(V)- 2nd order div operator on a 2D vector field, using the central14 operator.
Factor: 12h
div3D(V)- 2nd order div operator on a 3D vector field, using the central12 operator.
Factor: 2h
div3D4(V)- 2nd order div operator on a 3D vector field using the central14 operator.
Factor: 12h
These are available in normalized versions
divn, div4n, div2Dn, div2D4n, div3Dn, and
div3D4n which have factors of h.
4.4.10 Mixed partial derivatives
mixed22(A,dim1,dim2)- 2nd order accurate, 2nd mixed partial derivative. Factor: 4h^2
mixed24(A,dim1,dim2)- 4th order accurate, 2nd mixed partial derivative. Factor: 144h^2
There are also normalized versions of the above, mixed22n and
mixed24n which have factors h^2.