fatiando.gravmag.tensor
)¶Utilities for operating on the gradient tensor of potential fields.
Functions
invariants
: Calculates the first
(\(I_1\)), second (\(I_2\)), and dimensionless (\(I\)) invariantseigen
: Calculates the eigenvalues and
eigenvectors of an array of gradient tensor measurementscenter_of_mass
: Estimate the center of
mass of sources from the first eigenvector using the method of
Beiki and Pedersen (2010)Theory
Following Pedersen and Rasmussen (1990), the characteristic polynomial of the gravity gradient tensor \(\mathbf{\Gamma}\) is
where \(\lambda\) is an eigenvalue and \(I_1\) and \(I_2\) are the two invariants. The dimensionless invariant \(I\) is
The invariant \(I\) indicates the dimensionality of the source. \(I = 0\) for 2 dimensional bodies and \(I = 1\) for a monopole.
References
Beiki, M., and L. B. Pedersen (2010), Eigenvector analysis of gravity gradient tensor to locate geologic bodies, Geophysics, 75(6), I37, doi:10.1190/1.3484098
Pedersen, L. B., and T. M. Rasmussen (1990), The gradient tensor of potential field anomalies: Some implications on data collection and data processing of maps, Geophysics, 55(12), 1558, doi:10.1190/1.1442807
fatiando.gravmag.tensor.
center_of_mass
(x, y, z, eigvec1, windows=1, wcenter=None, wmin=None, wmax=None)[source]¶Estimates the center of mass of a source using the 1st eigenvector
Uses the method of Beiki and Pedersen (2010) with an expanding window scheme to get the best estimate and deal with multiple sources.
Parameters:
The x, y, and z coordinates of the observation points
The first eigenvector of the gravity gradient tensor at each observation point
The number of expanding windows to use
The [x, y] coordinates of the center of the expanding windows. Will default to the middle of the data area if None
Minimum and maximum size of the expanding windows. Will default to 10% data area and 100% data area, respectively, if None
Returns:
xo, yo, zo are the coordinates of the estimated center of mass
Examples:
Estimate the center of a sphere using some synthetic data:
>>> from fatiando import gridder
>>> from fatiando.mesher import Sphere
>>> from fatiando.gravmag import sphere, tensor
>>> # Generate synthetic data using a sphere model
>>> # The center of the sphere is (-100, 0, 100)
>>> model = [Sphere(-100, 20, 100, 100, {'density':1000})]
>>> x, y, z = gridder.regular((-500, 500, -500, 500), (20, 20), z=-100)
>>> data = [sphere.gxx(x, y, z, model),
... sphere.gxy(x, y, z, model),
... sphere.gxz(x, y, z, model),
... sphere.gyy(x, y, z, model),
... sphere.gyz(x, y, z, model),
... sphere.gzz(x, y, z, model)]
>>> # Get the first eigenvector
>>> eigenvals, eigenvecs = tensor.eigen(data)
>>> # Now estimate the center of mass
>>> cm = tensor.center_of_mass(x, y, z, eigenvecs[0])
>>> print('{:.1f} {:.1f} {:.1f}'.format(cm[0], cm[1], cm[2]))
-100.0 20.0 100.0
fatiando.gravmag.tensor.
eigen
(tensor)[source]¶Calculates the eigenvalues and eigenvectors of the gradient tensor.
Note
The coordinate system used is x->North, y->East, z->Down
Parameters:
A list of arrays with the 6 components of the gradient tensor measured on a set of points. The order of the list should be: [gxx, gxy, gxz, gyy, gyz, gzz]
Returns:
The eigenvalues and eigenvectors at each observation point.
[[eigval1, eigval2, eigval3], [eigvec1, eigvec2, eigvec3]]
The first, second, and third eigenvalues
The first, second, and third eigenvectors
Example:
>>> tensor = [[2], [0], [0], [3], [0], [1]]
>>> eigenvals, eigenvecs = eigen(tensor)
>>> print eigenvals[0], eigenvecs[0]
[ 3.] [[ 0. 1. 0.]]
>>> print eigenvals[1], eigenvecs[1]
[ 2.] [[ 1. 0. 0.]]
>>> print eigenvals[2], eigenvecs[2]
[ 1.] [[ 0. 0. 1.]]
fatiando.gravmag.tensor.
invariants
(tensor)[source]¶Calculates the first, second, and dimensionless invariants of the gradient tensor.
Note
The coordinate system used is x->North, y->East, z->Down
Parameters:
A list of arrays with the 6 components of the gradient tensor measured on a set of points. The order of the list should be: [gxx, gxy, gxz, gyy, gyz, gzz]
Returns:
The invariants calculated for each point