|
|
|
|
GEO 365N/384S Seismic Data Processing Computational Assignment 6 |
In this part of the assignment, we will create a depth image of the Viking Graben data using post-stack reverse-time migration (RTM).
scons -cto remove (clean) previously generated files.
scons vdix.view
scons vdix.view vofz.view
scons rtm.viewTo watch a movie of reverse-time wave propagation which produced the image in Figure 8b, run
scons snaps.vpl
|
|---|
|
vpick
Figure 6. Picked DMO (time-migration) velocity in the Viking Graben dataset. |
|
|
|
|---|
|
vdix,vofz
Figure 7. Interval velocity estimated by Dix inversion in vertical time (a) and depth (b). |
|
|
|
|---|
|
slice,rtm
Figure 8. DMO stack of the Viking Graben dataset (a) and its depth migration by RTM (b). |
|
|
from rsf.proj import *
# Download pre-processed CMP gathers
# from the Viking Graben dataset
Fetch('paracdp.segy','viking')
# Convert to RSF
Flow('paracdp tparacdp','paracdp.segy',
'segyread tfile=${TARGETS[1]}')
# Convert to CDP gathers, time-power gain and high-pass filter
Flow('cmps','paracdp',
'''intbin xk=cdpt yk=cdp | window max1=4 |
pow pow1=2 | bandpass flo=5 |
put label3=Midpoint unit3=km o3=1.619 d3=0.0125''')
# Extract offsets
Flow('offsets mask','tparacdp',
'''headermath output=offset |
intbin head=$SOURCE xk=cdpt yk=cdp mask=${TARGETS[1]} |
dd type=float | scale dscale=0.001''')
# Window bad traces
Flow('maskbad','cmps',
'mul $SOURCE | stack axis=1 | mask min=1e-20')
Flow('mask2','maskbad mask',
'spray axis=1 n=1 | mul ${SOURCES[1]}')
# NMO stack with an ensemble of constant velocities
Flow('stacks','cmps offsets mask2',
'''stacks half=n v0=1.4 nv=121 dv=0.02
offset=${SOURCES[1]} mask=${SOURCES[2]}''',split=[3,'omp'])
# Taper midpoint
Flow('stackst','stacks','costaper nw3=100')
# Apply double Fourier transform (cosine transform)
Flow('cosft','stackst','pad n3=2401 | cosft sign1=1 sign3=1')
# Transpose f-v-k to v-f-k
Flow('transp','cosft','transp',split=[3,'omp'])
# Fowler DMO: mapping velocities
Flow('map','transp',
'''math output="x1/sqrt(1+0.25*x3*x3*x1*x1/(x2*x2))" |
cut n2=1''')
Flow('fowler','transp map',
'iwarp warp=${SOURCES[1]} | transp',split=[3,'omp'])
# Inverse Fourier transform
Flow('dmo','fowler','cosft sign1=-1 sign3=-1 | window n3=2142')
# Compute envelope for picking
Flow('envelope','dmo','envelope | scale axis=2',split=[3,'omp'])
#############################################################
# Improved Automatic Picking from Radii Interceptor
#############################################################
mute = Program('mute.c')
Flow('envmute','envelope %s'%(mute[0]),
'./${SOURCES[1]} t1=1.4 v1=3.2')
Flow('vpick','envmute','pick vel0=1.45 rect1=25 rect2=50')
Result('vpick',
'''
grey mean=y color=x scalebar=y title="DMO Velocity"
barreverse=y barlabel=Velocity barunit=km/s
''')
# Take a slice from mutting envelope
Flow('slice','dmo vpick','slice pick=${SOURCES[1]}')
Result('slice','grey title="DMO Stack"')
############################################################
# Dix conversion to interval velocity
############################################################
Flow('weight','envmute vpick','slice pick=${SOURCES[1]}')
Flow('vdix','vpick weight',
'dix rect1=25 rect2=50 weight=${SOURCES[1]}')
Result('vdix',
'''
grey allpos=y bias=1.3 clip=3.2
color=x scalebar=y title="Dix Velocity in Time"
barreverse=y barlabel=Velocity barunit=km/s
''')
Flow('vofz','vdix',
'''
time2depth velocity=$SOURCE intime=y nz=1001 z0=0 dz=0.005 |
put label1=Depth unit1=km
''')
Result('vofz',
'''
grey allpos=y bias=1.3 clip=3.2
color=x scalebar=y title="Dix Velocity in Depth"
barreverse=y barlabel=Velocity barunit=km/s
''')
###########################################################
# Zero-offset reverse-time migration
###########################################################
Flow('fft','vofz','transp | fft1 | fft3 axis=2 pad=1')
Flow('right left','vofz fft',
'''
transp | scale dscale=0.5 |
isolr2 seed=2016 dt=0.002 npk=50
fft=${SOURCES[1]} left=${TARGETS[1]}
''')
Flow('rtm snaps','slice left right',
'''
spline n1=2000 o1=0 d1=0.002 |
reverse which=1 |
transp |
fftexp0 mig=y snap=10 snaps=${TARGETS[1]}
left=${SOURCES[1]} right=${SOURCES[2]}
nz=1001 dz=0.005
''')
Result('rtm',
'''
window max1=3.125 |
grey title="Post-Stack Depth Migration" unit2=km
''')
Plot('snaps','grey title=Snapshots gainpanel=all unit2=km',view=1)
End()
|
|
|
|
|
GEO 365N/384S Seismic Data Processing Computational Assignment 6 |