SimPEG.utils.depth_weighting#

SimPEG.utils.depth_weighting(mesh, reference_locs, active_cells=None, exponent=2.0, threshold=None, **kwargs)[source]#

Construct diagonal elements of a depth weighting matrix

Builds the model weights following the depth weighting strategy, a method to generate weights based on the vertical distance between mesh cell centers and some reference location(s). Use these weights in regularizations to counteract the natural decay of potential field data with depth.

Parameters:
meshdiscretize.base.BaseMesh

Discretized model space.

reference_locsfloat or (n, ndim) numpy.ndarray

Reference location for the depth weighting. It can be a float, which value is the vertical component for the reference location. Or it can be a 2d array, with multiple reference locations, where each row should contain the coordinates of a single location point in the following order: _x_, _y_, _z_ (for 3D meshes) or _x_, _z_ (for 2D meshes). The vertical coordinate of the reference location for each cell in the mesh will be obtained by the closest point in reference_locs using only their horizontal coordinates.

active_cells(mesh.n_cells) numpy.ndarray of bool, optional

Index vector for the active cells on the mesh. If None, every cell will be assumed to be active.

exponentfloat, optional

Exponent parameter for depth weighting. The exponent should match the natural decay power of the potential field. For example, for gravity acceleration, set it to 2; for magnetic fields, to 3.

thresholdfloat or None, optional

Threshold parameters used in the depth weighting. If None, it will be set to half of the smallest cell width.

Returns:
(n_active) numpy.ndarray

Normalized depth weights for the mesh at every active cell as a 1d-array.

Notes

Each diagonal term of the matrix is defined as:

\[w(z) = \frac{1}{(|z - z_0| + \epsilon) ^ {\nu / 2}}\]

where \(z\) is the vertical coordinate of the mesh cell centers, \(z_0\) is the vertical coordinate of the reference location, \(\nu\) is the _exponent_, and \(\epsilon\) is a given _threshold_.

The depth weights array is finally normalized by dividing for its maximum value.