analytical#

empymod.model.analytical(src, rec, res, freqtime, solution='fs', signal=None, ab=11, aniso=None, epermH=None, epermV=None, mpermH=None, mpermV=None, **kwargs)[source]#

Return analytical full- or half-space solution.

Calculate the electromagnetic frequency- or time-domain field due to infinitesimal small electric or magnetic dipole source(s), measured by infinitesimal small electric or magnetic dipole receiver(s); sources and receivers are directed along the principal directions x, y, or z, and all sources are at the same depth, as well as all receivers are at the same depth.

In the case of a halfspace the air-interface is located at z = 0 m, and both sources and receiver must be either at the interface or within the subsurface, not in the air (this is NOT checked by the code).

You can call the functions empymod.kernel.fullspace and empymod.kernel.halfspace in empymod.kernel directly. This interface is just to provide a consistent interface with the same input parameters as for instance for dipole.

This function yields the same result if solution=’fs’ as dipole, if the model is a fullspace.

Included are:

  • Full fullspace solution (solution=’fs’) for ee-, me-, em-, mm-fields, only frequency domain, [HuTS15].

  • Diffusive fullspace solution (solution=’dfs’) for ee-fields, [SlHM10].

  • Diffusive halfspace solution (solution=’dhs’) for ee-fields, [SlHM10].

  • Diffusive direct- and reflected field and airwave (solution=’dsplit’) for ee-fields, [SlHM10].

  • Diffusive direct- and reflected field and airwave (solution=’dtetm’) for ee-fields, split into TE and TM mode [SlHM10].

Parameters:
src, reclist of floats or arrays

Source and receiver coordinates [x, y, z] (m):

For N sources or receivers, the x- and y-coordinates must be of size N or 1 (in the latter case it will be expanded to N); z is always a single value.

In the case of the diffusive halfspace, z is assumed to be at the interface or below.

resfloat

Horizontal resistivity rho_h (Ohm.m).

Alternatively, res can be a dictionary. See the main manual of empymod too see how to exploit this hook to re-calculate etaH, etaV, zetaH, and zetaV, which can be used to, for instance, use the Cole-Cole model for IP.

freqtimearray_like

Frequencies f (Hz) if signal==None, else times t (s); (f, t > 0).

solutionstr, default: ‘fs’

Defines which solution is returned:

  • ‘fs’ : Full fullspace solution (ee-, me-, em-, mm-fields); f-domain.

  • ‘dfs’ : Diffusive fullspace solution (ee-fields only).

  • ‘dhs’ : Diffusive halfspace solution (ee-fields only).

  • ‘dsplit’ : Diffusive direct- and reflected field and airwave (ee-fields only).

  • ‘dtetm’ : as dsplit, but direct fielt TE, TM; reflected field TE, TM, and airwave (ee-fields only).

signal{None, 0, 1, -1}, default: None

Source signal:

  • None: Frequency-domain response

  • -1 : Switch-off time-domain response

  • 0 : Impulse time-domain response

  • +1 : Switch-on time-domain response

abint, default: 11

Source-receiver configuration.

electric source

magnetic source

x

y

z

x

y

z

electric

receiver

x

11

12

13

14

15

16

y

21

22

23

24

25

26

z

31

32

33

34

35

36

magnetic

receiver

x

41

42

43

44

45

46

y

51

52

53

54

55

56

z

61

62

63

64

65

66

anisofloat, default: 1.0

Anisotropy lambda = sqrt(rho_v/rho_h) (-).

epermH, epermVfloat, default: 1.0

Relative horizontal/vertical electric permittivity epsilon_h/epsilon_v (-). If epermH is provided but not epermV, isotropic behaviour is assumed. These parameters are ignored for the diffusive solution.

mpermH, mpermVfloat, default: 1.0

Relative horizontal/vertical magnetic permeability mu_h/mu_v (-); #mpermH = #mpermV = #res. If mpermH is provided but not mpermV, isotropic behaviour is assumed. These parameters are ignored for the diffusive solution.

verb{0, 1, 2, 3, 4}, default: 2

Level of verbosity:

  • 0: Print nothing.

  • 1: Print warnings.

  • 2: Print additional runtime

  • 3: Print additional start/stop, condensed parameter information.

  • 4: Print additional full parameter information

squeezebool, default: True

If True, the output is squeezed. If False, the output will always be of ndim=3, (nfreqtime, nrec, nsrc).

Returns:
EMEMArray, (nfreqtime, nrec, nsrc)

Frequency- or time-domain EM field (depending on signal):

  • If rec is electric, returns E [V/m].

  • If rec is magnetic, returns H [A/m].

EMArray is a subclassed ndarray with .pha and .amp attributes (only relevant for frequency-domain data).

The shape of EM is (nfreqtime, nrec, nsrc). However, single dimensions are removed.

If solution=’dsplit’, three ndarrays are returned: direct, reflect, air.

If solution=’dtetm’, five ndarrays are returned: direct_TE, direct_TM, reflect_TE, reflect_TM, air.

Examples

In [1]: import empymod
   ...: import numpy as np
   ...: src = [0, 0, 0]
   ...: rec = [np.arange(1, 11)*500, np.zeros(10), 200]
   ...: res = 50
   ...: EMfield = empymod.analytical(src, rec, res, freqtime=1, verb=0)
   ...: EMfield[0]
   ...: 
Out[1]: (4.030914049602561e-08-9.691638183648923e-10j)