![]() |
![]() |
![]() |
![]() | From modeling to full waveform inversion: A hands-on tour using Madagascar | ![]() |
![]() |
It is convenient to perform adjoint simulation when reconstructing the incident wavefield backwards. The computation of FWI gradient can be done on the fly by adding several lines:
Of course, to apply the steepest descent method for minimization of the misfit function for waveform inversion, a step length has to be determined at each iteration. You may use the estimation proposed by Pica et al. (1990, in the appendix) in your FWI code as RSFSRC/user/pyang/Mfwi2d.c.
The workflow for synthetic FWI test based on Marmousi model follows the several steps:
from rsf.proj import * # marmvel.hh contains Marmousi model which can # be downloaded from the server using Fetch. Fetch('marmvel.hh','marm') Flow('vel','marmvel.hh', ''' dd form=native | window j1=8 j2=8 | sfsmooth rect1=3 rect2=3| put label1=Depth unit1=m label2=Lateral unit2=m ''') Plot('vel', ''' grey color=j mean=y title="Marmousi model" scalebar=y bartype=v barlabel="V" barunit="m/s" screenratio=0.45 color=j labelsz=10 titlesz=12 ''') Flow('shots','vel', ''' sfmodeling2d csdgather=n fm=4 amp=1 dt=0.0015 ns=7 ng=288 nt=2800 sxbeg=4 szbeg=2 jsx=45 jsz=0 gxbeg=0 gzbeg=3 jgx=1 jgz=0 ''') Plot('shots','grey color=g title=shot label2= unit2=',view=1) Plot('shot1','shots', 'window n3=1 f3=0| grey title=shot1 label2=Lateral unit2=m') Plot('shot3','shots', 'window n3=1 f3=2| grey title=shot3 label2=Lateral unit2=m') Plot('shot5','shots', 'window n3=1 f3=4| grey title=shot5 label2=Lateral unit2=m') Plot('shot7','shots', 'window n3=1 f3=6| grey title=shot7 label2=Lateral unit2=m') Result('shotsnap','shot1 shot3 shot5 shot7', 'SideBySideAniso',vppen='txscale=2.') # smoothed velocity model Flow('smvel','vel','smooth repeat=6 rect1=8 rect2=10') Plot('smvel', ''' grey title="Initial model" wantitle=y allpos=y color=j pclip=100 scalebar=y bartype=v barlabel="V" barunit="m/s" screenratio=0.45 color=j labelsz=10 titlesz=12 ''' ) Result('marm','vel smvel','TwoRows') # use the over-smoothed model as initial model for FWI Flow('vsnaps grads objs illums','smvel shots', ''' sffwi2d shots=${SOURCES[1]} grads=${TARGETS[1]} objs=${TARGETS[2]} illums=${TARGETS[3]} niter=10 precon=y rbell=1 ''') Result('vsnaps', ''' grey title="Updated velocity" allpos=y color=j pclip=100 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap1','vsnaps', ''' window n3=1|grey title="Updated velocity, iter=1" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap2','vsnaps', ''' window n3=1 f3=1|grey title="Updated velocity, iter=2" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap4','vsnaps', ''' window n3=1 f3=3|grey title="Updated velocity, iter=4" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap6','vsnaps', ''' window n3=1 f3=5|grey title="Updated velocity, iter=6" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap8','vsnaps', ''' window n3=1 f3=7|grey title="Updated velocity, iter=8" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Plot('vsnap10','vsnaps', ''' window n3=1 f3=9|grey title="Updated velocity, iter=10" allpos=y color=j pclip=100 labelsz=10 titlesz=12 scalebar=y bartype=v barlabel="V" barunit="m/s" ''') Result('vsnap','vsnap1 vsnap2 vsnap4 vsnap6 vsnap8 vsnap10', 'TwoRows') Result('objs', ''' sfput n2=1 label1=Iteration unit1= unit2= label2= | graph title="Misfit function" dash=0 plotfat=5 grid=y yreverse=n ''') End() |
![]() |
---|
marm
Figure 4. Top: True Marmousi model; bottom: Initial model for FWI |
![]() ![]() ![]() |
![]() |
---|
shotsnap
Figure 5. Shots from true Marmousi model |
![]() ![]() ![]() |
![]() |
---|
vsnap
Figure 6. Inverted velocity during iterations |
![]() ![]() ![]() |
![]() |
---|
objs
Figure 7. The misfit function decreases during iterations |
![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() | From modeling to full waveform inversion: A hands-on tour using Madagascar | ![]() |
![]() |