Field data inversion (“Koenigsee”)

This minimalistic example shows how the Refraction Manager can be used to invert a field data set. Here, we consider the Koenigsee data set, which represents classical refraction seismics data set with slightly heterogeneous overburden and some high-velocity bedrock. The data file can be found in the pyGIMLi example data repository.


We import pyGIMLi and the refraction manager.

import pygimli as pg
from pygimli.physics import TravelTimeManager

The helper function pg.getExampleFile downloads the data set and saves it into a temporary location. Printing the data reveals that there are 714 data points using 63 sensors (shots and geophones) with the data columns s (shot), g (geophone), and t (traveltime). By default, there is also a validity flag.

data = pg.getExampleFile("traveltime/koenigsee.sgt", load=True, verbose=True)
print(data)

Out:

/tmp/gimli-org/example-data/traveltime/koenigsee.sgt
Data: Sensors: 63 data: 714, nonzero entries: ['g', 's', 't', 'valid']

Let’s have a look at the data in the form of traveltime curves.

fig, ax = pg.plt.subplots()
pg.physics.traveltime.drawFirstPicks(ax, data)
plot 04 koenigsee

We initialize the refraction manager.

mgr = TravelTimeManager()

# Alternatively, one can plot a matrix plot of apparent velocities which is the
# more general function also making sense for crosshole data.
ax, cbar = mgr.showData(data)
plot 04 koenigsee

Finally, we call the invert method and plot the result.The mesh is created based on the sensor positions on-the-fly.

mgr.invert(data, secNodes=3, paraMaxCellSize=5.0,
           zWeight=0.2, vTop=500, vBottom=5000,
           verbose=1)

ax, cbar = mgr.showResult(logScale=True)
mgr.drawRayPaths(ax=ax, color="w", lw=0.3, alpha=0.5)
plot 04 koenigsee

Out:

fop: <pygimli.physics.traveltime.TravelTimeManager.TravelTimeDijkstraModelling object at 0x7fb737d445a8>
Data transformation: <pygimli.core._pygimli_.RTrans object at 0x7fb759378d88>
Model transformation (cumulative):
         0 <pygimli.core._pygimli_.RTransLogLU object at 0x7fb737cb19e0>
min/max (data): 3.5e-04/0.029
min/max (error): 3.00%/3.00%
min/max (start model): 2.0e-04/0.0020
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
inv.iter 2 ... chi² = 9.45 (dPhi = 31.7%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 3 ... chi² = 8.01 (dPhi = 14.86%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 4 ... chi² = 6.82 (dPhi = 14.46%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 5 ... chi² = 5.8 (dPhi = 14.29%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 6 ... chi² = 5.41 (dPhi = 6.28%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 7 ... chi² = 5.11 (dPhi = 5.12%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 8 ... chi² = 4.79 (dPhi = 5.82%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 9 ... chi² = 4.36 (dPhi = 8.15%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 10 ... chi² = 4.14 (dPhi = 4.68%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 11 ... chi² = 3.96 (dPhi = 3.77%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 12 ... chi² = 3.83 (dPhi = 2.84%) lam: 20.0
--------------------------------------------------------------------------------
inv.iter 13 ... chi² = 3.75 (dPhi = 1.77%) lam: 20.0
################################################################################
#                 Abort criteria reached: dPhi = 1.77 (< 2.0%)                 #
################################################################################

<matplotlib.collections.LineCollection object at 0x7fb70f2d5898>

Show result and fit of measured data and model response. You may want to save your results too.

fig = mgr.showResultAndFit()
mgr.saveResult()
plot 04 koenigsee

Out:

'./20200904-13.20/TravelTimeManager'

You can play around with the gradient starting model (vTop and vBottom arguments) and the regularization strength lam. You can also customize the mesh.

Total running time of the script: ( 0 minutes 54.961 seconds)

Gallery generated by Sphinx-Gallery