The file cp9.py
is provided to you at the computing resources website. This file implements a significant portion of the code you will need for today.
You will also need to download the seismic data for the challenge problem. cp9.py
has the code required to load it. Be sure to put it in the same directory as your cp9.py
script.
In cp9.py
there is a section with comments describing how to set up an initial velocity model. Tunable parameters are marked with #### TUNABLE PARAMETER ####
comments. Helpful plotting code is marked with #### PLOT ####
.
In this problem, you will attempt to recover an unknown medium from the provided seismic data.
Use the theoretical and computational tools (PySIT) you have developed and used over the last two weeks to attempt to answer the following questions about the unknown domain.
Be sure to look at the details section for important information.
Question 1: What is the background velocity of the medium? How did you come to this conclusion? What indications do you have that you are correct?
Question 2: How many reflectors are there and what is their location? How did you come to this conclusion?
Question 3: What is the amplitude of the reflectors? How did you come to this conclusion?
Properties of the physical and computational domain:
mesh.x.delta
and mesh.z.delta
)Properties of the data:
There are 210 recievers, one at each pixel at depth \(z=0.05\)
Data is recorded from \(T=0\) until T=4$
There are 6824 data points per trace
\(\Delta t \approx 0.00073277\) (available exactly in the variable shot.dt
)
The PySIT solver will automatically interpolate this data as needed
The reciever data array shot.receivers.data
has shape (nt, nr)
Known properties of the medium:
Helpful PySIT routines:
The reciever data can be plotted with pysit.vis.display_seismogram(shot)
A single trace can be plotted with plt.plot(shot.receivers.data[:,x_idx])
The migration operator can be applied to the residual with the code (where C0 is the model about which you wish to do migration m0 = solver.ModelParameters(mesh,{'C': C0}) g = objective.compute_gradient(shots, m0)
You can plot the resulting migrated image with pysit.vis.plot(g.data, mesh) Note that g
is not a numpy
array, but g.data
is. Additionally, you may want to pass an optional color limit argument clim=(lower, upper)
to pysit.vis.plot
to help see small details. Good values for upper
and lower
can be found by glancing at the colorbar obtained with plt.colorbar()
.
After running an inversion, the resulting velocity is found in result.C
, which can be visualized by plotting with pysit.vis.plot(result.C, mesh)
To view a single depth slice of the result, you can reshape the resulting velocity vector and plot it C_reshape = reshape_pysit_vector_to_grid(result.C, mesh) plt.plot(C_reshape[105, :]) # Reshaped vector is indexed (x_idx,z_idx)
cp9.py
has an example for plotting the value of the objective function