Вы находитесь на странице: 1из 11

Computers & Geosciences 104 (2017) 1–11

Contents lists available at ScienceDirect

Computers & Geosciences


journal homepage: www.elsevier.com/locate/cageo

Case study

A MATLAB based 3D modeling and inversion code for MT data MARK



Arun Singh , Rahul Dehiya, Pravin K. Gupta, M. Israil
Department of Earth Sciences, Indian Institute of Technology Roorkee, Roorkee 247667, India

A R T I C L E I N F O A BS T RAC T

Keywords: The development of a MATLAB based computer code, AP3DMT, for modeling and inversion of 3D
Magnetotelluric Magnetotelluric (MT) data is presented. The code comprises two independent components: grid generator
MATLAB code and modeling/inversion code. The grid generator code performs model discretization and acts as an
Numerical modeling interface by generating various I/O files. The inversion code performs core computations in modular form –
Inversion
forward modeling, data functionals, sensitivity computations and regularization. These modules can be readily
Parallelization
extended to other similar inverse problems like Controlled-Source EM (CSEM). The modular structure of the
code provides a framework useful for implementation of new applications and inversion algorithms. The use of
MATLAB and its libraries makes it more compact and user friendly. The code has been validated on several
published models. To demonstrate its versatility and capabilities the results of inversion for two complex models
are presented.

1. Introduction basic mathematical formulae required for implementation. Section 2


provides the basic theory for forward modeling and inversion along
Several 3D electromagnetic data inversion approaches and parallel with main components for sensitivity computations. For detailed
computer codes were developed during the first decade (notably, discussion one can refer (Egbert and Kelbert, 2012). The program is
Newman and Alumbaugh (2000), Zhdanov and Hursan (2000), divided into two parts. The first part includes grid generator and I/O
Haber et al. (2004), Newman and Boggs (2004), Siripunvaraporn and subprograms (functions in MATLAB) while the second part includes
Egbert (2009), Avdeev and Avdeeva (2009), etc.). Most of these codes modeling/inversion. Section 3 describes the overview of the program
were focused on inversion with a particular computational approach. including grid generator for common models with cuboids and/or
Recently, Egbert and Kelbert (2012) and Kelbert et al. (2014) polyhedron shaped target bodies and forward/inverse modeling. The
presented a Fortran code, ModEM, with its emphasis on modular main feature of grid generator is its robustness in handling complex
implementation of the basic components of inversion - forward geological features needed to simulate responses for complex 3D
modeling, model parametrization and regularization, data functionals, structures. Such an efficient grid generator is useful when performing
sensitivity computation and inversion algorithms which are reusable block inversion (Singh et al., 2014). A detailed description and
and readily extensible. This and most of the previous codes are written implementation of inversion and sensitivity computations is also
in Fortran programming language. Many of these algorithms permit provided in this section. These subprograms, along with a coarse
interchangeability and re-usability of various subprograms thereby grained parallelization (Section 4), can be directly used for a wide range
providing a code base for development of new inversion algorithms. of problems. The key feature of AP3DMT is its capability to accom-
However, it is difficult for a new researcher to make desired changes for modate modifications in the forward problem (e.g., different forward
experimentation. MATLAB provides a solution to this problem and we solver, different types of responses, model parameters, etc.) and their
have developed the present code, AP3DMT, on MATLAB platform. easy implementation without any modifications in other subprograms
AP3DMT provides a basic framework for 3D modeling and inversion like, inversion subprogram. In Section 5, we provide details about the
which is flexible for rapid development and experimentation with actual computations for both forward problem (i.e. forward solutions,
different schemes of inversion, parametrization and regularization. evaluation of EM field components, etc.) and sensitivity computations.
This code will provide a basic framework to researchers who are In Section 6, we demonstrate the code versatility for grid generation
conversant with MATLAB and willing to use or develop its capabilities and inversion with the help of two synthetic examples.
for future applications.
In the present paper, main focus is on program structure with some


Corresponding author.
E-mail address: arunsingh2626@gmail.com (A. Singh).

http://dx.doi.org/10.1016/j.cageo.2017.03.019
Received 19 February 2016; Received in revised form 22 March 2017; Accepted 24 March 2017
Available online 27 March 2017
0098-3004/ © 2017 Elsevier Ltd. All rights reserved.
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

This transformation reduces (3) to


ϕ (m , dobs) = (dobs − F (m))T (dobs − F (m)) + λ mT m , (4)
∼ 1/2
where, F (m) = F (C m m + m 0). After minimizing (4) in transform
domain the model parameters are transformed back into the space of
the original model parameter m͠ = C1/2 m m + m 0 . For details one can
refer to Kelbert et al. (2008). We have implemented both quasi-linear
inversion and non-linear inversion using conjugate gradient for the
minimization of (4).

2.2.1. Quasi-linear inversion


In this approach, the objective functional is first approximated by a
Taylor series expansion. The quadratic approximation of the objective
functional is then minimized to produce a series of the updated models.
In the Gauss Newton (GN) method only the first derivative in the
Fig. 1. Staggered finite difference grid for the 3D MT forward problem. Since the PDE is
Hessian matrix of Newton's method is retained but the second-order
formulated in terms of electric field components, these are defined on cell edges and the
magnetic field components are defined on center of the cell faces.
derivative is discarded. This leads to an iterative sequence of approx-
imate solutions as,
2. Theory (JT J + λ I) δ mn = JT r − λ mn , (5)
where mn are the model parameters at the nth
iteration, J is Jacobian
2.1. Forward modeling
and r = dobs − F (mn) is the residual. (5) is solved for δmn and the new
updated model parameter vector is obtained as mn +1 = mn + δ mn . For
The electric field E are simulated by solving the vector Helmholtz
stability this linearized scheme generally requires some form of step
equation, given below, in frequency domain (assuming eiωt time
length damping (Marquardt, 1963; Rodi and Mackie, 2001).
dependence),
Alternatively, instead of solving for δm one can solve for mn+1 using
∇ × ∇ × E + iωμσ E = 0, (1) Occam approach (Constable et al., 1987; Parker, 1994). In Occam's
where ω is the angular frequency, μ is the magnetic permeability and σ algorithm (5) is written as
is the conductivity. Magnetic fields corresponding to an electric field l,
(JT J + λ I) mn +1 = JT d (6)
solution E can be expressed as H = (−iωμ)−1∇ × E .
where dl= dobs
− F (m) + Jmn . In data space, (Siripunvaraporn and
(1) is approximated on a staggered-grid (Yee, 1966), as shown in
Fig. 1, using finite difference (FD) formulation. The linear system, for Egbert, 2000; Siripunvaraporn et al., 2005) the solution of (6) is
frequency f, resulting after symmetric scaling can be expressed as written as

Am e = s, (2) mn +1 = JT bn ; l.
(JJT + λ I) bn = d (7)
where Am is a frequency dependent Ne × Ne sparse symmetric To avoid explicit computation and storage of J, (6) and (7) are solved
complex matrix with 13 non-zero elements per row; s is the Ne with a memory efficient Krylov subspace iterative solver such as
dimensional source vector and e is the Ne dimensional vector repre- conjugate gradients (CG). In this approach, the product of matrix
senting electric fields at the Ne internal nodes. This sparse linear system and an arbitrary vector such as (JT J + λ I) m is computed and this can
is solved iteratively using bi-conjugate gradient stabilized (BiCGSTAB) be performed at the cost of just two forward problems. Following
scheme which belongs to a class of Krylov subspace techniques. The Newman and Alumbaugh (1997), at the nth inversion iteration, the
incomplete LU decomposition of the diagonal sub-block matrix regularization parameter λ for GN is determined as λ = rsum /2n−1 where,
(Mackie et al., 1994) is used for pre-conditioning. rsum is the largest row sum of real (JT J).
For stable and accurate solutions of (2) at low frequencies, a
divergence correction is periodically applied (Smith, 1996) by solving 2.2.2. Non-linear inversion using conjugate gradient
a Poisson-like equation with pre-conditioned conjugate gradients (CG). In this approach, (4) is directly minimized using a gradient based
Smith (1996) has shown that the convergence is improved by applying optimization technique like non-linear conjugate gradient (NLCG)
divergence correction and it thereby significantly reduces the computa- (Rodi and Mackie, 2001; Newman and Boggs, 2004; Kelbert et al.,
tional time needed for solution of (2). 2014). Here, the gradient of (4) with respect to the variation in model
parameter m is computed as,
2.2. Inversion
∂ϕ
= −2JT r + 2λ mn ,
All the inversion algorithms aim at finding a meaningful model m͠ , a ∂m mn (8)
M - dimensional model parameter vector, while fitting the data dobs of
and it is used to a compute new ‘conjugate’ search direction. The ‘line
dimension Nd to an acceptable level in a stable manner. We consider
search’ is used to minimize the penalty functional along this direction
minimization of the penalty functional defined as
and it requires solving forward problem few times and the gradient is
∼ ∼ recomputed. Basic computational steps for NLCG include solving
ϕ (m͠ , dobs) = (dobs − F (m͠ ))T C−1
d (d
obs − F (m͠ )) + λ (m͠ − m 0)T C−1
m (m͠
forward problem for model parameter mn and multiplication of JT by
− m 0), (3)
the residual r. However, for the regularization parameter approach

where F (m͠ ) is the forward mapping, Cd is the data covariance matrix, described above, this scheme does not work because varying the
m 0 is the apriori model, Cm is the model covariance matrix or regularization parameter would compromise the orthogonality of
regularization term and λ is the trade-off parameter. Cd is generally search directions (Egbert, 2012). Following Kelbert et al. (2008),
diagonal hence, it can be eliminated from definition of penalty NLCG iterations are performed for fixed value of λ and when misfit
functional by simply rescaling of data and forward mapping. Both m 0 stalls i.e. difference between misfits of two previous iterations is less
and Cm can also be eliminated from (3) by setting m = C−1/2
m (m ͠ − m 0) . than a predefined threshold, λ is reduced by a predetermined factor (10

2
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

in present study). for the first polarization. Performing such operation for all the model
The schemes for minimizing (4), as discussed above, are expressed parameters results in a Ne × M matrix. However, columns of P af can
in terms of data and model parameter vectors dobs and m, forward also be written as αEA′mi, f where, E is the Ne × Ne diagonal matrix and
mapping F (m), Jacobian J (or JT ), data and model covariance matrices A′mi, f is now a column vector of length Ne. Hence, P af can be written as
Cd and Cm . The modular implementation of any inversion algorithm αEA′m, f with A′m, f being a Ne × M matrix. Thus Pf can be written for
can be readily carried out using these components. In the next section both the polarizations as
we briefly discuss and provide formulation of Jacobian J in terms of the
⎡ E a 0 ⎤ ⎡ P ⎤ ⎡ P af ⎤
forward solver, model parameterization and the numerical simulation Pf = α ⎢ ⎥ ⎢ ⎥ = ⎢ ⎥.
of the necessary observation operator as implemented in AP3DMT ⎣ 0 E b ⎦ ⎣ P ⎦ ⎢⎣ P bf ⎥⎦ (16)
code.
The components E and E are diagonal matrices with electric fields
a b

corresponding to the two source polarizations, a and b, as their


2.3. Data sensitivities
elements and P represents A′m, f . The elements of real and frequency
independent operator P depend on the numerical grid and model
The computation of predicted data d f (forward mapping Ff (m)), for
parameter and these are inexpensive to compute.
a single frequency f, involves two steps; (i) solving the vector Helmholtz
The matrix Lf is defined as
Eq. (1) for electric field e and, (ii) computing the predicted data like
impedance at observation sites using these fields. After using FD Lf = [Laf Lbf ]. (17)
approximation, the PDE is transformed into the matrix Eq. (2). The
predicted data set is obtained at the observation points via A row of matrix Lf has two blocks, each of length Ne, which multiply to
the perturbations in electric field for the two polarizations and sums
d jf = Ffj (m) = ψj (e (m), m) j = 1, …, nobs. (9) together to yield the total perturbation in the data. For detailed
expression of Lf for impedance and vertical magnetic field TFs see
where, ψj is generally a non-linear function of e (and possibly m ).
Appendix A. The relevant formula for apparent resistivity and phase
Using chain rule, the expression for the Jacobian matrix of the forward
are given by Egbert and Kelbert (2012) and for phase tensor by Patro
mapping Ff (m), is given as
et al. (2013) and Kristina et al. (2015). Thus, Jf can be expressed in the
Jikf = ∂k F fi (m) = ∑ ∂j ψ i (e)∂k e j (m) + ∂k ψ i (m), matrix form as
(10) ⎡ A−1 0 ⎤ ⎡ P af ⎤
j

Jf = [Laf Lbf ] ⎢ ⎥ ⎢ ⎥ = La A−1 P a + Lb A−1 P b .


m, f
where, ∂k signifies partial differentiation with respect to the kth ⎢⎣ 0 A−1 ⎥⎢Pa ⎥ f m, f f f m, f f
m, f ⎦ ⎣ f ⎦ (18)
argument of a function [reading ψ (m) as ψ (m1, m2, …, m M )]. Let Gf , Lf
and Qf , the partial derivative matrices, for the frequency f, be defined Generally, the data set is obtained for a range of frequencies. Thus,
as both the vectors, observed and predicted, can be decomposed into
Lijf = ∂j ψ i (e) en, mn G jkf = ∂k e j (m) mn , Qikf = ∂k ψ i (m) en, mn , ( f = 1, …, Nf ) independent blocks, corresponding to each frequency.
(11)
⎡ d1 ⎤ ⎡ F1 (m) ⎤ ⎡ dobs ⎤
where e n is the solution of (2) for model parameter mn . Hence, the ⎢ ⎥ ⎢ ⎥ ⎢ 1 ⎥
Jacobian at mn can be written in matrix notation as d = ⎢ ⋮ ⎥ = ⎢ ⋮ ⎥; dobs = ⎢ ⋮ ⎥ .
⎢⎣ d Nf ⎥⎦ ⎢⎣ FNf (m)⎥⎦ ⎢ d obs ⎥
⎣ Nf ⎦ (19)
Jf = Lf Gf + Qf . (12)
Similarly, the full Jacobain J can be decomposed using its components
Now, differentiating (2) with respect to model parameter we obtain,
as,
⎡ ⎤
⎡ L1 0 0 ⎤ ⎡ A−1 0 ⎤ ⎡ P1 ⎤ ⎡ L1A−1 ⎤
∂e ⎥ = − ∂ (Am, f e n)
Am, f ⎢ , m,1 0 ⎥⎢ ⎥ ⎢ m,1P1 ⎥
⎢⎣ ∂m m = mn ⎥
⎦ ∂m (13) ⎢ ⎥⎢
mn J = ⎢ 0 ⋱ 0 ⎥⎢ 0 ⋱ 0 ⎥⎢ ⋮ ⎥ = ⎢ ⋮ ⎥
⎢⎣ 0 0 L Nf ⎥⎦ ⎢ 0 0 A−1 ⎥ ⎢ P ⎥ ⎢ L A−1 P ⎥
or, ⎣ m, Nf ⎦ ⎣ Nf ⎦ ⎣ Nf m, Nf Nf ⎦ (20)
Am, f Gf = Pf . (14) and its transpose as
here e n is considered independent from the parameter vector m. JT = [P1T A−1 T T −1 T
m,1L1 ⋯ P Nf Am, Nf L Nf ] (21)
Combining (12) and (14) and noting the fact that for 3D MT data
Qf = 0 , we get Jacobian in a matrix form as here, ATm, f
= Am, f (symmetric matrix).
Further, the model parameter m is real but all the computations are
Jf = Lf A−1
m, f Pf , (15) efficiently performed using complex arithmetic. Data may be real (e.g.,
phase) or complex (e.g., impedance, vertical magnetic field TFs). For
where, (i) the operator Pf , defines the product of sensitivity of the
the penalty functional (4), we have assumed that the data set is real,
coefficient matrix (with respect to the model parameter) and electric
∂e that is, both real and imaginary parts of a complex observation are
field; (ii) the forward solver, A−1
m, f (maps Pf to ∂m ); (iii) sensitivity
treated as independent elements of the data set d, and the operator J
functional, Lf (maps perturbation in the EM solution to perturbation in
has been recast as real mapping from model parameter to data vector.
∂e ∂d pred
f
the predicted data i.e. ∂m to ∂m ).
To evaluate the impedance tensor and the vertical magnetic field 3. Overview of the AP3DMT program
transfer functions (TFs), the EM field solutions for two modes of
polarizations, corresponding to E-W and N-S polarized (say a and b) The AP3DMT program is divided into two independent parts. The
uniform source, are required (e = (e a, e b)). Thus, the rows of Jacobian first part, using a graphic user interface (GUI), deals with the grid
are formed from the components of these two source polarizations. generator and the I/O functions while the second part performs the
The columns of operator P af , for single frequency index, f, and for modeling/inversion computations. The organization of AP3DMT is
the first polarization, a, are defined as αA′mi, f e a for (i=1,…, M). Here, shown in Fig. 3. Figs. 6 and 7 show the block diagrams of modeling and
A′mi, f is the Ne × Ne diagonal matrix obtained after the differentiation of inversion codes. Table 1 lists the major functions used in the program.
the coefficient matrix with respect to model parameter mi with each Details of file preparation and of modeling/inversion are given in the
element scaled by (iωμ)−1, α being the scalar iωμ , e a is the electric field following subsections.

3
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Table 1 provide an input model file (.xls file) which contains stations, manual
Main functions used for grid generation and sensitivity computations (* D′Errico, 2006). grids (if any) and model description (synthetic and/or initial guess) on
different sheets. In this file, the model is described in terms of layers,
Functions Purpose Description
target bodies and modeling domain. The cuboid shaped target bodies
gridfit* Grid Generation Models a surface on a 2D grid from are defined using seven parameters (six for location and one for
scattered or semi-scattered z(x,y) resistivity) whereas, the polyhedron shaped bodies are defined using
inhull* Grid Generation Tests if a set of points are inside a
three times the total number of vertices for location description and
convex hull
grid3D Grid Generation Grid generation and resistivity matrix one parameter for resistivity. The program uses information from GUI
construction and the.xls file and generates four files to be subsequently used in
intercoeff Forward Solution Compute interpolation coefficients inversion code (see Fig. 3). These files include parameter file, data file
ForwardResp Forward Solution Compute Predicted Data and Field (data corresponding to all data types and for all stations and frequen-
Solutions (optional)
cies) and model file (synthetic and/or apriori model).
BoundCond Forward Solution Set Source and Boundary Conditions
DiscreteSolver Forward Solution Forward Solver A−1
In this code, the main component is a grid generation program
OutInterp Forward Solution Data Functional which efficiently handles arbitrarily shaped target bodies along with
JacobJob Jacobian Multiply Jacobian or its transpose by topography (or bathymetry). Some examples are given here under.
computations vector
LpJob Jacobian Multiply Data Sensitivity, L by vector
3.1.1. Cuboid bodies
computations
LTpJob Jacobian Multiply L transpose by vector For cuboid shaped target bodies, the grids are generated on the
computations basis of skin depths across an interface. First, the domain of modeling
PpJob Jacobian Multiply Solver Sensitivity P, by vector is divided into regions on the basis of target bodies and a resistivity
computations
matrix is constructed. For example, let us consider two blocks of
PTpJob Jacobian Multiply P transpose by vector
computations resistivities ρa and ρb (1 and 100 Ω-m respectively with each of
dimensions 40 × 20 × 10 km) placed adjacent to each other and in a
half space of resistivity ρh (10 Ω-m) (see Fig. 4a). At an interface (say
3.1. Preparation of files vertical interface number ‘2′‘, Fig. 4b), the minimum skin depth, δ ,
among the two different regions, is computed (columns between
When the main function ProgramRun is called, a GUI pops up interface 1–2 and interface 2–3) and then two grid lines are generated
allowing the user to fill the necessary details like, dimension, type of on either side of the interface with spacing equal to δ/4 and then δ/3
grid (manual or automatic), impedance units, field variation, frequen- and so on. This approach ensures fine grids near the conductivity
cies, solver details and inversion parameters (see Fig. 2). The user must contrast to obtain accurate results in these areas. The coarseness of the
grid, increases as one moves away from the interface (see Fig. 5a). The

Fig. 2. Figure showing Graphic User Interface (GUI) for providing user input.

4
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Fig. 3. Schematic representation of AP3DMT showing grid generation, file making and inversion part.

coarseness of the grid can be easily increased by preserving the overall assigned of the target body resistivity else that of the background. For
pattern but changing period used for skin depth computation. Once the the construction of resistivity matrix for some complex model like, a
grids are generated, final resistivity matrix is created where each helical conductor in half space see the Supplementary material.
element represents a discretized cell of constant resistivity.
Alternatively, manual grids can also be provided in the input file but
3.1.3. Topography
one must ensure that a grid line passes through each interface. This
To incorporate topography (and/or bathymetry), we first model, in
feature makes the code more user friendly as the user can assign
the form of z(x,y), a surface from the scattered or semi-scattered data
desired grids as per the requirement.
using the MATLAB function gridfit. Although gridfit is not an inter-
polant, it builds a surface over a complete lattice (models grids in xy
plane), extrapolating smoothly into the corners. Once the surface has
3.1.2. Polyhedron bodies
been modeled, a uniform grid in the vertical direction is generated till
To represent the complex geological features and structures,
the maximum elevation (depression) is reached. Later, based on these
polyhedrons are best suited. For example, consider a body of resistivity
surface values the resistivity matrix is modified.
ρa (5 Ω-m with dimensions 80 × 28 × 16 km with top at 4 km depth),
with its major axis making an angle of 45° with respect to y-axis,
embedded in half space a of resistivity ρh (100 Ω-m) (see Fig. 4c). This 3.2. Modeling/Inversion
polyhedron body (oblique block) is initially approximated by a cuboid
abcd (length and breadth along cartesian coordinate system) which In any inversion scheme, the basic working vectors are: data dobs ,
encapsulates the whole target body (Fig. 4c) and a resistivity matrix is model parameter vector m , EM field solution e and source field s .
created. Uniform grids of specified size (2 km) are generated for this For an MT problem, the complete data set (dobs ) is multi-frequency,
region as a stair case model which is better suited for such bodies. In multi-receiver and multi-component. For example, there are set of
other regions of the model, the grids are generated on the basis of skin frequencies, each requiring separate solutions for the two independent
depth criteria, as discussed above (see Fig. 5b). After grids generation, source polarizations. For each frequency, there will be number of sites
construction of the resistivity matrix begins. All the cell centers of the and for each site there will be multi-component data, e.g., there are
cuboid (encapsulating all the polyhedron bodies) are checked using the four complex components in impedance tensor and two in vertical
MATLAB function inhull which tests whether a point is inside a convex magnetic field TFs.
hull or not. If the cell center lies inside a convex hull then the cell is The data set is organized according to three attributes which are

Fig. 4. (a) Top view of a model with 2 blocks of resistivity ρa and ρb Ω-m placed adjacent to each other and embedded in ρh Ω-m half space. (b) Model is discretized into regions on the
basis of target bodies. (c) Top view of a model with ρa Ω-m body, major axis rotated by 45°, embedded in ρh Ω-m half space.

5
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Fig. 5. Schematic diagram showing top view of the (a) 3D model with conductive (1 Ω-m) and resistive (100 Ω-m) prisms buried in a layered Earth (Mackie et al., 1993) with grids at
z=0 km. Period of 1 s was used for computing the skin depth. (b) 5 Ω-m body, major axis rotated anticlockwise by 45° with respect to y-axis, embedded in 100 Ω-m half space with grids
at z=4.37 km.

referred to as transmitter, data type and receiver (observation sites). up computations, parallelization over frequency is implemented.
These three attributes are read from one data file and are stored as In summary, the interaction among various components of
fields of a structured array defined as CData in the code. This structure Jacobian (sensitivity functional L; solver A−1
m ; operator P) is efficiently
array also stores other parameters like solver information (from and smoothly managed in sensitivity function JacobJob. As we discuss
parameter file), etc. The attribute transmitter consists of a list of in the next section, a coarse grain parallelization, over frequency,
frequencies to setup and solve the forward problem. Fields in attribute similar to that of Siripunvaraporn and Egbert (2009), is also imple-
data type define the data functionals such as impedance, vertical mented.
magnetic field TFs, phase tensor, etc. and are accessed by name. The
attribute receiver provides information about all the unique observa-
tion sites (Cartesian coordinate system). Thus, the full data vector (dobs ) 4. Parallelization
is an array corresponding to different frequencies. Each, in turn, stores
all the components corresponding to all the data types for all the active AP3DMT implements a coarse grained parallelization over forward
receivers. A binary array is used to keep track of certain missing problem. Implementation of parallelization over number of frequencies
components, if any, in the data set. is quite simple. Fig. 8 explains the basic scheme of implementation.
The data vector structure allows for mixing of different data types MATLAB's inbuilt function parfor is used which executes loop itera-
and simplifies addition of new data types by adding new fields tions in parallel. The command matlabpool (parpool in 2015a version)
corresponding to the new data type. Addition of new data type starts a pool, with the pool size specified by parallel preferences and the
simultaneously allows computing predicted data and/or sensitivity default profile or one can manually start a pool with desired number of
calculations for all the active receivers by solving the forward problem workers. After initialization, one processor acts as the master, and the
only once. others act as workers. The master performs the main job of the code
The main feature of AP3DMT is its easy implementation of until a step requiring parallel computations (like forward problem or
linearized inversion scheme that can be expressed in terms of (dobs ), multiplication of Jacobian with a vector) is reached i.e. parfor loop
m, e, s, forward mapping F (m), Jacobian J and the model and data over number of frequencies. At this point the master sends a message
covariance matrices Cm and Cd respectively. During the inversion, indicating nature of the task and the necessary input data to all the
various operations are performed like, multiplication of data by C−1/2 d
active workers. The worker performs the task for a single frequency by
and C1/2 1/2
d , multiplication of model parameters by C m , C m or C m ,
−1/2 calling appropriate functions like FwdResTotal. When the task has
multiplication of J with arbitrary model space vector vm and JT with been performed, it returns the solution to master. These functions are
arbitrary data space vector vd . The Jacobian function is further same as called in the sequential version. Note, that in absence of any
modularized, using the decomposition given in (15), to implement pool parfor is equivalent to for.
multiplication by J (or JT ) using the operators L , P and the solver for The communication between master and worker can be minimized
discrete system matrix A−1 m (or their adjoints) (Figs. 6 and 7). To speed by transferring some fixed components or data to all the active workers
in the beginning itself and storing there to avoid transfer during each

Predicted Data

Obtain model m, numerical Set source and BCs


grid and source information
Master
Call forward solver, compute
EM fields
Worker
Store or write data d
Compute data using data
Parallel Computation functional

Fig. 6. Schematic representation of AP3DMT for forward modeling. Frequency Parallelization is implemented for computing forward responses.

6
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Read models m, m0
Read data dobs from file
and other information

Compute misfit or full Compute predicted data


penalty functional f(m), field solutions e
Generic Inversion

Sensitivity functional, L Jacobian Computations, J Solver Sensitivities, P

Inversion Algorithms
Forward Solver, A-1 Parallel Computation
(NLCG, GN-CG, DCG)

Fig. 7. Schematic representation of AP3DMT for inverse modeling. Frequency Parallelization is implemented for multiplication of J and JT with model and data space vectors
respectively.

evaluation of field at observation sites. These functions have no direct


interaction with the inversion and Jacobian functions, hence, a wide
range of specific implementations can be accommodated with appro-
priate modifications.
Forward modeling forms the core of inversion. In AP3DMT, we are
solving for electric fields at the cell edges. The function ForwardResp
implements the forward problem and returns the predicted data and an
array of EM solutions e (optionally) corresponding to all the frequen-
cies. These solutions can be saved and used for subsequent sensitivity
calculations (e.g., gradient of the penalty functional).
The forward modeling function includes (i) parameter mapping to
edges, AverageSigma, (ii) setting up boundary conditions, BoundCond,
(iii) computing EM field at grid nodes, DiscreteSolver and (iv) the
predicted data at observation points OutInterp. First, the model
parameters are mapped on to the edges of numerical grid. Currently,
the model parameters, σ, are defined as log conductivity. For each grid
node the average conductivity, σ , is defined as weighted average of
exp(σ ) of four surrounding cells to each edge. If any other mapping
scheme is used, like harmonic mean instead of arithmetic mean, then
only changes in this function are required with other portions remain-
ing unchanged. Afterwards, BoundCond is called where right hand side
vector, s, is formed and stored as a column vector depending on the
application. The array s is a matrix with two columns corresponding to
the two independent sources of polarization. Either the total field or the
scattered field solution can be computed. Arbitrary sources and the
boundary data can be easily incorporated for another technique like
CSEM. In DiscreteSolver the coefficient matrix, with boundary condi-
Fig. 8. Pseudo-code for the parallelization over frequencies of a task like forward
tions enforced, is formed and stored in a sparse format. The coefficient
response. matrix is made symmetric simply by multiplying each row by integra-
tion volume elements and the implementation of the transposed solver
parallel call. is straightforward. The forward solver, in DiscreteSolver, is called and
the field solutions are obtained. The OutInterp uses the previously
computed interpolation functional and electric fields to evaluate the
5. Numerical implementation
desired data at all receivers. For computation of sensitivity, additional
components may be returned (e.g., all elements of impedance tensor)
In this section, we describe the implementation of forward and
for some data types like apparent resistivity and phase. The whole
inverse modeling in detail. For efficient memory usage, a sparse storage
process from BoundCond to OutInterp is looped over frequencies and
is used where ever needed like, coefficient matrix, interpolation
all the data and solutions are assembled together in ForwardResp. To
matrices, etc. Inbuilt functions for dot-product, norm, Hadamard
accommodate new solutions from new sources, the structure array may
product, etc. are used for basic manipulation of various arrays. Each
be used.
time a function is called, the required space is allocated for various
The data functionals F (m) can be expressed in terms of (i) electric
temporary working arrays. Once the job is completed, all the temporary
field; (ii) magnetic field (mapped from electric field); (iii) interpolation
arrays are cleared and just the requisite solution is returned.
operator for electric and magnetic fields and (iv) functionals of the
measured field components, e.g., impedance and/or vertical magnetic
5.1. Forward modeling
field TFs. To evaluate this data functional, appropriate interpolation
functional on the basis of observation sites are designed. The function
Forward Modeling is performed by a group of functions dealing
interpcoeff is simple and it computes the basic interpolation func-
with basic numerical grid, model parameters, field arrays, forward
tionals (λex , λey , λbx , etc. in sparse storage) required to evaluate
solver and interpolation functional. This functional is essential for

7
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Ex , E y , Hx , Hy and Hz at the site and applies these to solutions for both and phase or phase tensor, first the perturbations in impedance are
polarizations. For computation of magnetic field from electric field, the computed and therefrom the perturbations in the desired datatype are
transformation h = Te (T is a transformation matrix) has been computed. LpJobs performs the product of Lf with vef to form
incorporated in the interpolation coefficients so that this functional vdf = Lf vef . LTpJobs multiplies this vector by the appropriate data
can be applied directly to the field vector. The transformation matrix T components to form LTf vdf . Here, instead of implementing LTf vdf , we
is scaled by (−iωμ)−1 to keep it real and frequency independent. After have implemented (v dTf Lf )T . This does away with the need to imple-
computing, h fields are multiplied by (−iωμ)−1 to take care of the scaling ment LTf .
factor. Once the field components are computed, the impedance tensor For the addition of new data type or mixing different data types,
and/or the vertical magnetic field TFs or any other transformations appropriate changes are required in OutInterp, LpJobs and LTpJobs
required for a particular data type (e.g., apparent resistivity or phase) for computing the predicted data and the sensitivity calculations.
can be computed. Multiple data types are supported with appropriate
selection. The interpolation implemented in the current version is
5.2.2. Forward solver
based on tri-linear interpolation coefficients. Since these interpolation
The function DiscreteSolver is common to the forward modeling,
coefficients are stored in a sparse format and do not affect other
and sensitivity computations. This function includes the standard
modules, other functions would remain unchanged (e.g., calculation of
BiCGSTAB iterative solver (MATLAB library) for solving (2) with the
impedance). Further, addition of new data types or their combinations
incomplete LU decomposition for pre-conditioning and the pre-condi-
will not demand any changes to interpolation aspect.
tioned conjugate gradients for divergence correction. For each fre-
For a different numerical discretization like, finite element method
quency, the output vector ve consists of two sets of solutions corre-
with a non-structured grid, changes in the construction of coefficient
sponding to the two modes of polarizations, requiring two solver calls
matrix and boundary conditions (if any) are required. Since the system
with different right hand side vectors (boundary conditions) for each
matrix is explicitly formed and stored, any change in its structure will
frequency. The DiscreteSolver implements the general solver, allowing
not affect the matrix solver which is not the case when the forward
for boundary conditions and solution for both the forward problem and
operator is implemented using a matrix-free approach.
its transpose. Addition of new sources can be easily incorporated by
appropriate boundary conditions and additional solver calls for new
5.2. Inversion
solutions. Also, it is very easy to replace one solver with another like
replacing BiCGSTAB with QMR (Quasi-Minimal Residual). With
In inversion algorithm the main operators are forward operator,
MATLAB inbuilt solvers and preconditioners (like incomplete
data and model covariance matrices and Jacobian. As discussed earlier,
Cholesky, Incomplete LU, Modified Incomplete LU, etc.), one can test
the main task is the multiplication of these operators with vectors like,
various numerical implementations easily.
C−1/2
d with data vector, C−1/2
m with model parameter vector, J by model
space vector, etc. Since these are standalone operators with no direct
interaction with the inversion function, a new inversion algorithm can 5.2.3. Solver sensitivity
be easily implemented. Symmetric covariance operators, both data and One of the main components of Jacobian is Pf , which defines the
model, are standalone with input and output being the data vector or product of the sensitivity of the coefficient matrix Am, f to the model
model parameter vector. For data covariances, full matrix can be parameters (log conductivity) with the electric field. (13) Provides the
provided. However, for our inversion tests, we have used diagonal error derivative of the field with respect to the parameters. This derivative
covariances into error functional for noisy measurements; these are can be interpreted as the field due to a collection of sources described
generally based on the standard deviations of the measurements. The as the product of derivatives of Am, f and the field vector e. As discussed
model covariances are much more complicated, like C−1 m can be earlier, the operator Pf consists of two components. The first part
represented by DT D where D is a finite difference approximation of provides the scaled derivative of the coefficient matrix with respect to
the gradient or the Laplacian (∇2) operator, as in Occam inversion the model parameters (see (13)). For a FD approximation, only the
(Constable et al., 1987), or as defined by Kelbert et al. (2008). A model diagonal elements of the matrix Am, f depend on conductivity elements
covariance file (optional) allows the user to turn off the smoothening in the form of iωμσ . Here, σ is the volume average of the conductivity of
across the domain boundaries, and also allows the model parameters nearby cells. Hence, each parameter contributes to twelve internal
within a domain to be frozen (e.g., water, air in case of topography, nodes. This results in a maximum of twelve non-zero elements per
etc.). Since this function is completely independent of other functions, parameter. The derivatives of Am, f are made real and frequency
various covariance operators can be easily implemented and tested for independent by simply scaling these with the factor (iωμ)−1. Once these
3D EM problems. The multiplication of J (or J T ) with a vector is derivatives are obtained, these are multiplied with the model parameter
performed using the components of J as discussed earlier: (i) the vector to perform the operation Pvm . This product can be viewed as
M
operator P; (ii) the forward solver; (iii) the sensitivity functional, L. ∑i =1 mi A′mi, f where A′mi, f is a column vector of length Ne with only 12
Details of how these components are formed for a single frequency f, non-zero elements with their indices defined by the mapping. These
are given below. non-zero elements are −Vexp i (mi ) where, Vi is the integration volume
for the ith cell having parameter mi defined as log conductivity.
5.2.1. Sensitivity functional Afterwards, this vector is multiplied element by element with the
The function LpJobs implements the sensitivity functionals for use electric field solution e n , corresponding to frequency f, and finally by
in sensitivity computations. This function performs the linearization of iωμ to obtain the final solution Pf vm in PpJob. For the transpose case,
the data functional with respect to variations in the EM solution e . these steps are reversed in PTpJob. In this function, first the input
Here, the Lf matrix is not explicitly formed, rather the product of Lf vector vef is multiplied element by element with the electric field e n
and vector vef or of LTf and vector vdf is computed using the components resulting in vef = (v e af , v e bf ) (solutions for two source polarization).
of Lf . If the measured component is EM field itself, then Lf simply Finally, the operation iωμ[PT (v e af + v e bf )] is performed resulting in a
computes the interpolated values (using Ex , E y , etc.) at the sites and model parameter vector vmf .
stores them in a vector. For datatype like Impedance or vertical The multiplication of J with the model parameter vector vm is
magnetic field TFs the components of Lf include the interpolation parallelized over frequency. Master sends a copy of vm and other
and transformation matrices (λex , λey , λbx etc.), the magnetic field and necessary information to each worker. Each worker computes
the impedance values at the observation sites (see Appendix A for vdf = Lf A−1
m, f Pf vm . The product vsf = Pf vm results in a matrix with two
detailed expression of L). For other datatype viz. apparent resistivity columns for the two modes of polarization. Hence, for vef = A−1 m, f vsf , the

8
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

matrix solver is called twice for different right hand side vectors.
Finally, the product vdf = Lf vef is obtained using the linear combination
of product of each block of Lf matrix and column of vef (see (18)). If the
operation JTf vdf is required (like JT J in GN-CG) then the same worker
performs the operation vmf = P Tf A−1 T
m, f Lf vdf . If only the gradient is
required, like in NLCG, then the master sends the residual vector r f ,
corresponding to each frequency, to each worker and the workers
compute the gradient. Once the gradient is computed for each
frequency, the linear sum is computed and final JT vd is formed.
JacobJob implements all these three tasks viz. Jvm , JT vd and JT Jvm
computations depending on the call. JJT vd is computed using the
combination of JT vd and Jvm .

6. Results
Fig. 10. Ratio between model parameters of the inverse models as obtained by AP3DMT
The AP3DMT code has been tested and validated over a variety of and ModEM.
3D standard models available in literature. For demonstration, we have
selected two synthetic test models. The first test model is a ‘checker- then increase logarithmically downwards. AP3DMT is used to compute
board’ conductivity distribution, Rubick Model, (Egbert and Kelbert, the impedance tensor for 12 periods logarithmically spaced between
2012) and the second is Dublin Test Model 2 (DTM2) (Groom and 0.01 and 10000 s at 49 sites, located on circles of different radii from
Bailey, 1991; Miensopust et al., 2013). These two data sets were the center of the hemisphere except one at the center. An error floor of
inverted using NLCG algorithm on HP Z620, Intel Xeon E2643, 32 GB 5% of |Zxy Z yx |1/2 is assigned to the impedance tensor. For inversion,
with 8 cores for parallelization. again a homogeneous model of 100 Ω-m, discretized into 54 × 54 × 37
The first model consists of 10 and 1000 Ω-m blocks in a homo- cells (500 m × 500 m × 50 m , vertical extent increasing with depth) is
geneous 100 Ω-m half-space (Fig. 9a). For comparison of inversion used as apriori and initial model. In 42 NLCG iterations the nRMS
results, the synthetic data and the initial guess model are taken from error reduced from 18.3 to 1.12. The inverted model thus obtained is
the test files provided along with the ModEM code. This data set shown in Fig. 11 (right panel). The circular shape of the hemisphere
includes the impedance tensor and the vertical magnetic field TFs and the correct order of resistivity were recovered. The correct
sampled at 225 sites distributed on a regular 2D array with 80 and representation of the circular body is limited due to the use of
40 km spacing in x- and y- directions respectively for 12 periods, rectangular meshing. Table 2 summarizes the above results in a tabular
logarithmically spaced between 10 and 10000 s. Errors floor is set as form along with the run time and other details.
3% of |Zxy Z yx |1/2 for impedance tensor and 0.03 for vertical magnetic For both these models and for the other models tested, the edges of
TFs. For computation of this data, authors of ModEM code discretized the target bodies are not represented by a sharp boundary as in the true
the test model into 67 × 67 × 60 cells (excluding cells in air), with model. The resistivity gradually changes across the boundary of a
nominal resolution of 20 km horizontally. For inversion a homoge- structure resulting in smearing out of structures. This is so because the
neous model of 100 Ω-m, discretized into same number of cells, is used current code is based on smooth model approach.
as apriori and initial model. In 58 NLCG iterations the normalized
root-mean-square (nRMS) error reduced from 12.38 to 1.06. The
inverted model thus obtained is shown in Fig. 9b. Fig. 10 shows the 7. Conclusions
ratio between model parameters of the inverted models as obtained by
AP3DMT and ModEM. The main model features present in the test We have presented the development of a MATLAB based code,
model are recovered. As expected, there is some degradation in the AP3DMT, for modeling and inversion of 3D MT data. The capability of
features below the conductive structures. this program for performing inversion is demonstrated through two
The second model DTM2, Fig. 11 (left panel), consists of a synthetic test models. The key feature is its compactness and simplicity
hemisphere of 10 Ω-m and radius of 5 km directly beneath the surface and its potential as a tool for rapid development and testing of new
of a homogeneous 300 Ω-m half space. The origin of the coordinate applications. Basic functions are simple and readily available. Thus, it
system has been taken as the center of the hemisphere. The model is would be easy to replace one scheme with another one like replacing
discretized into 54 × 54 × 42 cells with horizontal cell dimensions of NLCG with quasi-Newton (e.g., Nocedal and Wright, 2000; Newman
500 m. Cell thicknesses are 500 m in the upper 5 km of the model and and Boggs, 2004) or one iterative solver with another one. AP3DMT

Fig. 9. (a) Resistivity model for 3D test, with site locations shown at top (Egbert and Kelbert, 2012), and (b) inverse solution obtained with AP3DMT after 58 iterations by fitting full
impedances and vertical field TFs. In the cut-away view the upper surface shown is at 2 km depth, but the structures shown extend to the surface.

9
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

Fig. 11. A plan view of true model and the inversion model. The black dots represent the used sites.

provides a natural platform for development and comparison of not BiCGSTAB, ILU, etc. may be considered both as its strength and
only inversion search algorithms but also various modeling schemes or weakness. Use of these global functions make the code more versatile,
its components like iterative solvers, preconditioners and modified compact and user friendly which will open opportunities for develop-
finite differences schemes. ment and experimentation. It may be mentioned that the MATLAB
Use of MATLAB platform and its in-built functions such as functions have multiple checks and are therefore slower than the

Table 2
List of inversion results. Beside the model name, information about the data, mesh and inversion parameters are given as well as the number of iterations, RMS value (initial/final) and
target tolerance (TT).

Model Name Info Data Mesh

Rubick 58 iterations 225 sites 67 × 67 × 60 cells (same as for forward)


RMS 12.38/1.06 Impedance & VTF ∼9939 m × ∼20011 m × ∼500 m center cell
TT = 10−6 (forward & gradient) 12 periods (10 − 10000 s) starting model: 100 Ω m half-space
49.25 h, 9.9 GB (8 cores) Error floor 3% of |Zxy Z yx |1/2 for Z
HP Z620, Intel Xeon E2643 3.30 GHz, 32 GB and 0.03 for VTF

DTM2 42 iterations 49 sites 54 × 54 × 42 cells (forward)


RMS 18.3/1.12 Impedance 54 × 54 × 37 cells (inversion)
TT = 10−6 (forward & gradient) 24 periods (0.01 − 1000 s) ∼500 m × ∼500 m × ∼50 m center cell
30.69 h, 5.8 GB (8 cores) Error floor 5% of |Zxy Z yx |1/2 for Z (vertical extent increasing with depth)
HP Z620, Intel Xeon E2643 3.30 GHz, 32 GB starting model: 100 Ω m half-space

10
A. Singh et al. Computers & Geosciences 104 (2017) 1–11

corresponding functions of a Fortran code. However, in a MATLAB authors are thankful to Ministry of Earth Sciences, Govt. of India for
code the implementation, parallelization etc. are much easier. providing computational facilities. The authors are thankful to Institute
Computer Center, IIT Roorkee for providing MATLAB-2013. The
Acknowledgment authors are also thankful to Gary Egbert and Anna Kelbert for
providing ModEM code.We also thank Jef Caers (the editor) and the
Two of the authors, Arun Singh and Rahul Dehiya, are grateful to three anonymous reviewers, for their detailed comments, which helped
Ministry of Human Resource Development, Govt. of India for provid- us to improve this paper.
ing financial support during the preparation of this manuscript. The

Appendix A. Expression of L for impedance

Let Z be a 2×2 impedance tensor with its elements defined as Z11, Z12, Z 21 and Z22. For a single frequency, the data d can be written as
⎡ Z11 ⎤
⎢ ⎥
Z
d = ⎢ 12 ⎥
⎢ Z21 ⎥
⎢⎣ Z22 ⎥⎦ (A.1)
where, each block (i = 1, 2; j = 1, 2) is a complex column vector (of length equal to number of sites) with elements representing the corresponding
components of impedance values at the observation sites.
The matrix L (complex) takes the form as
⎡ ∂Z11 ⎤
⎢ ∂e ⎥ ⎡ Bx (λex − Z11λbx − Z12 λby ) Bay (λex − Z11λbx − Z12 λby ) ⎤
a

⎢ ∂Z12 ⎥ ⎢ b ⎥
⎢ ⎥ ⎢ Bx (λex − Z11λbx − Z12 λby ) Bby (λex − Z11λbx − Z12 λby ) ⎥
L = ⎢ ∂Z∂e ⎥ = ⎢ a ⎥
− Z22 λby ) Bay (λey − Z21λbx − Z22 λby )⎥
⎢ ∂e ⎥ ⎢ x ey
21 B (λ − Z21λbx

⎢ ∂Z22 ⎥ ⎣ Bbx (λey − Z 21λbx ⎥
− Z 22 λby ) Bby (λey − Z 21λbx − Z22 λby ) ⎦
⎣ ∂e ⎦ (A.2)
with each block of size nobs × Ne . In (A.2), Bkx and Bky (k = a, b ) are diagonal matrices with elements as inverse of magnetic fields at local sites,
Zik (i = 1, 2; j = 1, 2) represents the diagonal matrices with elements as impedance values at local sites and λex , λey and λbx , λby are interpolation and
transformation matrices respectively. Note that the transformation matrices λbx , λby are real and frequency independent, hence care must be taken
while performing any operation involving these matrices. For example Z11λbx will become α Z11λbx where α is −iωμ)−1.
For VTFs only first 2 rows in (A.2) exists with λex replaced by λbz and vertical field TFs matrices by impedance matrices.

Appendix B. Supplementary data

Supplementary data associated with this article can be found in the online version at http://dx.doi.org/10.1016/j.cageo.2017.03.019.

References parameters. J. Soc. Ind. Appl. Math. 11, 431–441.


Miensopust, M.P., Queralt, P., Jones, A.G., The 3D MT-modellers, 2013. Magnetotelluric
3-D inversion-a review of two successful workshops on forward and inversion code
Avdeev, D.B., Avdeeva, A., 2009. 3D magnetotelluric inversion using a limited-memory testing and comparison. Geophys. J. Int., 193, 1216–1238.
quasi-newton optimization. Geophysics 74 (3), F45–F57. Newman, G.A., Alumbaugh, D.L., 1997. Three-dimensional massively parallel
Constable, S.C., Parker, R.L., Constable, C.G., 1987. Occam's inversion: a practical electromagnetic inversion - i. Geophys. J. Int. 128, 345–354.
algorithm for generating smooth models from electromagnetic sounding data. Newman, G.A., Alumbaugh, D.L., 2000. Three-dimensional magnetotelluric inversion
Geophysics 52 (3), 289–300. using non-linear conjugate gradients. Geophys. J. Int. 140, 410–424.
Egbert, G.D., 2012. Hybrid conjugate gradient-occam algorithms for inversion of multi- Newman, G.A., Boggs, P.T., 2004. Solution accelerators for large-scale three-dimensional
frequency and multi-transmitter em data. Geophys. J. Int. 190, 255–266. electromagnetic inverse problems. Inverse Probl. 20, 151–170.
Egbert, G.D., Kelbert, A., 2012. Computational recipes for electromagnetic inverse Nocedal, J., Wright, S.J., 2000. Numerical Optimization. Springer, New York, USA.
problems. Geophys. J. Int. 189, 167–251. Parker, R.L., 1994. Geophysical Inverse Theory. Princeton University Press, Princeton,
Groom, R.W., Bailey, R.C., 1991. Analytic investigations of the effects of near-surface New Jersey.
three-dimensional glavanic scatterers on mt tensor decompositions. Geophysics 56 Patro, K.P., Uyeshima, M., Siripunvaraporn, W., 2013. Three-dimensional inversion of
(4), 496–518. magnetotelluric phase tensor data. Geophys. J. Int. 192 (2), 58–66.
Haber, E., Ascher, U.M., Oldenburg, D.W., 2004. Inversion of 3D electromagnetic data in Rodi, W.L., Mackie, R.L., 2001. Nonlinear conjugate gradients algorithm for 2-D
frequency and time domain using an inexact all-at-once approach. Geophysics 69 magnetotelluric inversion. Geophysics 66 (1), 174–187.
(5), 1216–1228. Singh, A., Dehiya, R., Gupta, P.K., Israil, M., 2014. Development of block inversion
J. D’Errico, (2006). Surface Fitting using gridfit, MATLAB Central File Exchange. algorithm and its comparison with cell inversion scheme. 22th Workshop on
Retrieved Sep 26, 2015. Electromagnetic Induction Weimar, Germany.
Kelbert, A., Egbert, G.D., Schultz, A., 2008. Non-linear conjugate gradient inversion for Siripunvaraporn, W., Egbert, G.D., 2000. An efficient data-subspace inversion method
global em induction: resolution studies. Geophys. J. Int. 173 (2), 365–381. for 2-D magnetotelluric data. Geophysics 65 (3), 791–803.
Kelbert, A., Meqbel, N., Egbert, G.D., Tandon, K., 2014. Modem: a modular system for Siripunvaraporn, W., Egbert, G.D., 2009. WSINV3DMT: vertical magnetic field transfer
inversion of electromagnetic geophysical data. Comput. Geosci. 66, 40–53. function inversion and parallel implementation. Earth Planet. Inter 173 (3–4),
Kristina, T., Oliver, R., Egbert, G.D., 2015. 3-d Joint inversion of the magnetotelluric 317–329.
phase tensor and vertical magnetic transfer functions. Geophys. J. Int. 203, Siripunvaraporn, W., Egbert, G.D., Lenbury, Y., Uyeshima, M., 2005. Three dimensional
1128–1148. magnetotelluric inversion: data-space method. Earth Planets Space 150 (13), 3–14.
Mackie, R.L., Madden, T.R., Wannamaker, P.E., 1993. Three-dimensional Smith, J.T., 1996. Conservative modeling of 3-D electromagnetic fields: 2. Biconjugate
magnetotelluric modeling using difference equations: theory and comparisons to gradient solution and an accelerator. Geophysics 61 (5), 1319–1324.
integral equation solutions. Geophysics 58, 215–226. Yee, K., 1966. Numerical solution of initial boundary value problems involving maxwell's
Mackie, R.L., Smith, J.T., Madden, T.R., 1994. 3-Dimensional electromagnetic modeling equations in isotropic media. IEEE Trans. Antennas Propag. 14, 302–307.
using finite-difference equations-the magnetotelluric example. Radio Sci. 29 (4), Zhdanov, M., Hursan, G., 2000. 3D electromagnetic inversion based on quasi analytical
923–935. approximation. Inverse Probl. 16, 1297–1322.
Marquardt, D.W., 1963. An algorithm for least-squares estimation of nonlinear

11