The methods in this package numerically solve some differential equations commonly faced in geophysical inverse problems. The functionality of this package revolves around the mutable
Expt types. Julia's multiple dispatch is used to overload
Base methods whenever possible. Which means, if one is familiar with the
Base methods of Julia, then (almost) no additional syntax is required to use this package. Easy!
While performing a given experiment, firstly, most of the memory necessary is allocated while creating the
Expt variables. Then these variables are input to in-place functions (e.g.,
update!) which as per Julia convention ends with an exclamation mark, to actually perform the experiment task. For example, the current
Expt types within the realm of this package include:
SeisForwExptis the seismic (acoustic) forward modeling experiment;
SeisInvExptis the type for seismic inversion experiment, including migration;
PoissonExptis type for the solving the Poisson experiment.
Some of the commonly used (and exported) mutable types to create the
Expt variables are:
Mediumfor bundling medium parameters together;
AGeomstores acquisition geometry related parameters;
SrcWavallocates source signals input to an experiment;
Dataallocated the output records that are fitted during inversion.
To get started, as an example, simply load a seismic inversion experiment already defined in our package gallery into REPL:
using GeoPhyInv # load package (after installation) pa=SeisInvExpt(Fdtd(), LS(), :pizza); # "pizza" is the name of the experiment
Then, simply use
update! to perform least-squares inversion.
It is necessary to input the evenly-spaced spatial and temporal grids while creating the
Expt variables. These grids can be simply created using
Base.range in Julia, as shown below.
zgrid=range(0,stop=1000.0,length=201) # create vertical grid from 0 to 1000 m xgrid=range(0,stop=1000.0,length=201) # create horizontal grid mgrid=[zgrid, xgrid] # spatial-grid bundle @info string("spatial sampling intervals (dz,dx)=", step.(mgrid)) tgrid=range(0,stop=1.0,step=0.001) # a temporal grid from 0 to 1.0 s