get_source_field¶
- emg3d.fields.get_source_field(grid, source, frequency, **kwargs)[source]¶
Return source field for provided source and frequency.
The source term is given in Equation 2 of [Muld06],
\[-\mathrm{i} \omega \mu_0 \mathbf{J}_\mathrm{s} \, .\]In the case of dipoles and wires, the source is distributed onto the cells as fraction of the source length.
In the case of points, the adjoint of the trilinear interpolation is used to distribute it to the grid edges.
- Parameters
- gridTensorMesh
Model grid; a
emg3d.meshes.TensorMesh
instance.- source{Tx*, tuple, list, ndarray)
Any source object from
emg3d.electrodes
(recommended usage).If it is a list, tuple, or ndarray it is in the case of a dipole put through to
emg3d.electrodes.TxElectricDipole
or, ifelectric=False
, toemg3d.electrodes.TxMagneticDipole
. If it has more than two points it is put through toemg3d.electrodes.TxElectricWire
. Consult the documentation of the respective classes for the format, but it is recommended to provide directly the classes.- frequency{float, None}
Source frequency (Hz), used to compute the Laplace parameter
s
. Either positive or negative:frequency > 0
: Frequency domain, hence \(s = \mathrm{i}\omega = 2\mathrm{i}\pi f\) (complex);frequency < 0
: Laplace domain, hence \(s = f\) (real).frequency == None
: Returns the real-valued, frequency-independent source vector. This basically excludes the multiplication by \(-\mathrm{i}\omega\mu_0\).
- strength{float, complex}, default: 1.0
Source strength (A), put through to
emg3d.electrodes.TxElectricDipole
or, ifelectric=False
, toemg3d.electrodes.TxMagneticDipole
.Only used if the provided source is not a source instance.- lengthfloat, default: 1.0
Dipole length (m), put through to
emg3d.electrodes.TxElectricDipole
or, ifelectric=False
, toemg3d.electrodes.TxMagneticDipole
.Only used if the provided source is not a source instance.- electricbool, default: True
If True,
emg3d.electrodes.TxElectricDipole
is used to get the source instance, elseemg3d.electrodes.TxMagneticDipole
.Only used if the provided source is not a source instance.
- Returns
- sfieldField
Source field (or source vector, if
frequency=None
), aemg3d.fields.Field
instance.
Examples
In [1]: import emg3d ...: import numpy as np ...: In [2]: # Create a simple grid, 8 cells of length 100 m in each ...: # direction, centered around the origin. ...: hx = np.ones(8)*100 ...: grid = emg3d.TensorMesh([hx, hx, hx], origin=(-400, -400, -400)) ...: grid # For QC ...: Out[2]: TensorMesh: 512 cells MESH EXTENT CELL WIDTH FACTOR dir nC min max min max max --- --- --------------------------- ------------------ ------ x 8 -400.00 400.00 100.00 100.00 1.00 y 8 -400.00 400.00 100.00 100.00 1.00 z 8 -400.00 400.00 100.00 100.00 1.00 In [3]: # Create an electric dipole source from ...: # x1=y1=z1=0 to x2=100, y2=z2=0; strength=100 A. ...: source = emg3d.TxElectricDipole( ...: [[0, 0, 0], [100, 0, 0]], strength=100) ...: source # For QC ...: Out[3]: TxElectricDipole: 100.0 A; e1={0.0; 0.0; 0.0} m; e2={100.0; 0.0; 0.0} m In [4]: # Get the corresponding source field for f=0.5 Hz. ...: sfield = emg3d.get_source_field(grid, source, frequency=0.5) ...: sfield # For QC ...: Out[4]: Field: electric; 8 x 8 x 8; 1,944