Forward modeling with 3D right rectangular prisms (fatiando.gravmag.prism)

Calculate the potential fields of the 3D right rectangular prism.

Note

All input units are SI. Output is in conventional units: SI for the gravitatonal potential, mGal for gravity, Eotvos for gravity gradients, nT for magnetic total field anomalies.

Note

The coordinate system of the input parameters is x -> North, y -> East and z -> Down.

Gravity

The gravitational fields are calculated using the formula of Nagy et al. (2000). Available functions are:

Warning

The gxy, gxz, and gyz components have singularities when the computation point is aligned with the corners of the prism on the bottom, east, and north sides, respectively. In these cases, the above functions will move the computation point slightly to avoid these singularities. Unfortunately, this means that the result will not be as accurate on those points.

Magnetic

Available fields are the total-field anomaly (using the formula of Bhattacharyya, 1964) and x, y, z components of the magnetic induction:

Auxiliary Functions

Calculates the second derivatives of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

with respect to the variables \(x\), \(y\), and \(z\). In this equation,

\[r = \sqrt{(x - \nu)^2 + (y - \eta)^2 + (z - \zeta)^2}\]

and \(\nu\), \(\eta\), \(\zeta\) are the Cartesian coordinates of an element inside the volume of a 3D prism. These second derivatives are used to calculate the total field anomaly and the gravity gradient tensor components.

References

Bhattacharyya, B. K. (1964), Magnetic anomalies due to prism-shaped bodies with arbitrary polarization, Geophysics, 29(4), 517, doi: 10.1190/1.1439386.

Nagy, D., G. Papp, and J. Benedek (2000), The gravitational potential and its derivatives for the prism: Journal of Geodesy, 74, 552–560, doi: 10.1007/s001900000116.


fatiando.gravmag.prism.bx(xp, yp, zp, prisms, pmag=None)[source]

Calculates the x component of the magnetic induction produced by rectangular prisms.

Note

Input units are SI. Output is in nT

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates where the anomaly will be calculated

  • prisms
    : list of fatiando.mesher.Prism

    The model used to calculate the total field anomaly. Prisms without the physical property 'magnetization' will be ignored. The 'magnetization' must be a vector.

  • pmag
    : [mx, my, mz] or None

    A magnetization vector. If not None, will use this value instead of the 'magnetization' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • bx: array

    The x component of the magnetic induction

fatiando.gravmag.prism.by(xp, yp, zp, prisms, pmag=None)[source]

Calculates the y component of the magnetic induction produced by rectangular prisms.

Note

Input units are SI. Output is in nT

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates where the anomaly will be calculated

  • prisms
    : list of fatiando.mesher.Prism

    The model used to calculate the total field anomaly. Prisms without the physical property 'magnetization' will be ignored. The 'magnetization' must be a vector.

  • pmag
    : [mx, my, mz] or None

    A magnetization vector. If not None, will use this value instead of the 'magnetization' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • by: array

    The y component of the magnetic induction

fatiando.gravmag.prism.bz(xp, yp, zp, prisms, pmag=None)[source]

Calculates the z component of the magnetic induction produced by rectangular prisms.

Note

Input units are SI. Output is in nT

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates where the anomaly will be calculated

  • prisms
    : list of fatiando.mesher.Prism

    The model used to calculate the total field anomaly. Prisms without the physical property 'magnetization' will be ignored. The 'magnetization' must be a vector.

  • pmag
    : [mx, my, mz] or None

    A magnetization vector. If not None, will use this value instead of the 'magnetization' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • bz: array

    The z component of the magnetic induction

fatiando.gravmag.prism.gx(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_x\) gravity acceleration component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in mGal!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gxx(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{xx}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gxy(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{xy}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Warning

This component has singularities when the computation point is aligned with the corners of the prism on the bottom side. In these cases, the computation point slightly to avoid these singularities. Unfortunately, this means that the result will not be as accurate on those points.

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gxz(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{xz}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Warning

This component has singularities when the computation point is aligned with the corners of the prism on the east side. In these cases, the computation point slightly to avoid these singularities. Unfortunately, this means that the result will not be as accurate on those points.

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gy(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_y\) gravity acceleration component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in mGal!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gyy(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{yy}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gyz(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{yz}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Warning

This component has singularities when the computation point is aligned with the corners of the prism on the north side. In these cases, the computation point slightly to avoid these singularities. Unfortunately, this means that the result will not be as accurate on those points.

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gz(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_z\) gravity acceleration component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in mGal!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.gzz(xp, yp, zp, prisms, dens=None)[source]

Calculates the \(g_{zz}\) gravity gradient tensor component.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input values in SI units(!) and output in Eotvos!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.kernelxx(xp, yp, zp, prism)[source]

Calculates the xx derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.kernelxy(xp, yp, zp, prism)[source]

Calculates the xy derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.kernelxz(xp, yp, zp, prism)[source]

Calculates the xz derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.kernelyy(xp, yp, zp, prism)[source]

Calculates the yy derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.kernelyz(xp, yp, zp, prism)[source]

Calculates the yz derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.kernelzz(xp, yp, zp, prism)[source]

Calculates the zz derivative of the function

\[\phi(x,y,z) = \int\int\int \frac{1}{r} \mathrm{d}\nu \mathrm{d}\eta \mathrm{d}\zeta\]

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    The x, y, and z coordinates of the computation points.

  • prisms
    : object of fatiando.mesher.Prism

    The model used to calculate the field.

Returns:

  • res
    : array

    The effect calculated on the computation points.

fatiando.gravmag.prism.potential(xp, yp, zp, prisms, dens=None)[source]

Calculates the gravitational potential.

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> DOWN.

Note

All input and output values in SI units(!)!

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The density model used to calculate the gravitational effect. Prisms must have the property 'density'. Prisms that don’t have this property will be ignored in the computations. Elements of prisms that are None will also be ignored. prisms can also be a PrismMesh.

  • dens
    : float or None

    If not None, will use this value instead of the 'density' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp

fatiando.gravmag.prism.tf(xp, yp, zp, prisms, inc, dec, pmag=None)[source]

Calculate the total-field magnetic anomaly of prisms.

Note

Input units are SI. Output is in nT

Note

The coordinate system of the input parameters is to be x -> North, y -> East and z -> Down.

Parameters:

  • xp, yp, zp
    : arrays

    Arrays with the x, y, and z coordinates of the computation points.

  • prisms
    : list of Prism

    The model used to calculate the total field anomaly. Prisms without the physical property 'magnetization' will be ignored. prisms can also be a PrismMesh.

  • inc
    : float

    The inclination of the regional field (in degrees)

  • dec
    : float

    The declination of the regional field (in degrees)

  • pmag
    : [mx, my, mz] or None

    A magnetization vector. If not None, will use this value instead of the 'magnetization' property of the prisms. Use this, e.g., for sensitivity matrix building.

Returns:

  • res
    : array

    The field calculated on xp, yp, zp