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:
- mesh
discretize.base.BaseMesh
Discretized model space.
- reference_locs
float
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 inreference_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.- exponent
float
,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.
- threshold
float
orNone
,optional
Threshold parameters used in the depth weighting. If
None
, it will be set to half of the smallest cell width.
- mesh
- 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.