The code emg3d [WeMS19] is a three-dimensional modeller for electromagnetic (EM) diffusion as used for instance in geophysical controlled-source EM (CSEM) surveys. This includes use cases in the search for resources such as groundwater, geothermal energy, hydrocarbons, and minerals, or civil engineering and environmental applications.

The core of the code is primarily based on [Muld06], [Muld07], and [Muld08]. You can read more about the background of the code in the Credits. An introduction to the underlying theory of multigrid methods is given in the Background Theory, and further literature is provided in the References. The code is currently restricted to regular, stretched grids. As a matrix-free multigrid solver it scales linearly with the number of cells for both CPU and RAM. This makes it possible to use emg3d for models with several millions of cells on a regular laptop.

What is emg3d? (Features)#

  • A community driven, open-source 3D CSEM modelling tool.

  • Can handle entire surveys with many sources, receivers, and frequencies, computing the solution in parallel.

  • Can model electric and magnetic dipoles and arbitrarily shaped electric wires.

  • Computes the gradient of the misfit function using the adjoint-state method.

  • Iterative, matrix-free multigrid solver, scaling linearly (CPU & RAM) with the number of unknowns, O(N).

  • Uses regular, stretched grids.

  • Handles triaxial electrical anisotropy, isotropic electric permittivity, and isotropic magnetic permeability.

  • Written purely in Python using the NumPy/SciPy-stack, where the most time- and memory-consuming parts are sped up through jitted Numba-functions; works cross-platform on Linux, Mac, and Windows.

  • Can solve in the complex-valued frequency domain or the real-valued Laplace domain. Includes routines to compute the 3D EM field in the time domain.

  • Command-line interface (CLI), through which emg3d can be used as forward modelling kernel in inversion routines written in any language.

What is it _not_?#

  • The code is meant to be used in Python or in a terminal. There is no GUI.

  • Some knowledge of EM fields in particular and numerical modelling in general is definitely helpful, as GIGO applies («garbage in, garbage out»). For example, placing your receivers very close to the computational boundary will result in bad or wrong responses.

  • It is not a model builder; there are other tools that can be used to generate complex geological models, for instance GemPy.