from rsfproj import *
import math
v0 = 0.5
gz = 0.8
gx = 0.6
nz = 601
nx = 1201
dz = 0.5/(nz-1)
dx = 1.0/(nx-1)
Flow('vel',None,
'''
math n1=%d d1=%g n2=%d d2=%g
output="%g+%g*x1+%g*x2"
''' % (nz,dz,nx,dx,v0,gz,gx))
Plot('vel',
'''
grey color=j allpos=y screenht=6 screenratio=%g
bias=%g wanttitle=n barreverse=y
label1=Depth unit1=km label2=Lateral unit2=km
scalebar=y barlabel=Velocity barunit=km/s
''' % ((nz-1.)/(nx-1.),v0))
angle = 130
angle2 = angle*math.pi/180
g = math.hypot(gx,gz)
px = math.sin(angle2)
pz = -math.cos(angle2)
nt = 1201
dt = 0.001
Flow('gt',None,
'math n1=%d d1=%g output="%g*x1" ' % (nt,dt,g))
Flow('den','gt',
'''
math output="%g*cosh(input)-%g*sinh(input)"
''' % (g,gx*px + gz*pz))
Flow('x','gt den',
'''
math den=${SOURCES[1]}
output="(%g*(1-cosh(input))+%g*sinh(input))/den"
''' % (gx*v0/g,px*v0))
Flow('z','gt den',
'''
math den=${SOURCES[1]}
output="(%g*(1-cosh(input))+%g*sinh(input))/den"
''' % (gz*v0/g,pz*v0))
Flow('ray','z x','cmplx ${SOURCES[:2]}',stdin=0)
Plot('ray',
'''
window j1=100 |
graph scalebar=y plotcol=7 plotfat=5 wanttitle=n
transp=y yreverse=y screenht=6 screenratio=%g
wantaxis=n min1=0 max1=0.5 min2=0 max2=1 pad=n
''' % ((nz-1.)/(nx-1.)))
Result('ray','vel ray','Overlay')
errs = []
steps = []
samples = range(1,nt/3,3)
for sample in samples:
nt2 = (nt-1)/sample
dt2 = dt*sample
eray = 'eray%d' % sample
Flow(eray,'ray','window j1=%d' % sample)
step = 'stp%d' % sample
Flow(step,None,'spike n1=1 mag=%g' % dt2)
steps.append(step)
ray = 'ray%d' % sample
Flow(ray,'vel',
'''
rays2 sym=n yshot=0 nr=1 a0=%g nt=%d dt=%g
''' % (angle,nt2,dt2))
err = 'err%d' % sample
Flow(err,[ray,eray],
'''
add scale=1,-1 ${SOURCES[1]} |
math output="abs(input)" |
real |
stack axis=1
''')
errs.append(err)
cat = 'rcat axis=1 ${SOURCES[1:%d]}' % len(samples)
Flow('err',errs,cat)
Flow('step',steps,cat)
graph = 'cmplx ${SOURCES[0:2]} | graph wanttitle=n '
for case in (0,1):
Plot('err'+str(case),'step err',graph + '''
label1="Time step" unit1=s label2=Error unit2=km
''',stdin=0)
graph = graph + 'symbol=x plotcol=2 '
Result('rayerr','err0 err1','Overlay')
End() |