up [pdf]
from rsf.proj import *

h1=1.
h2=0.75
t1=1.

Flow('x0',None,
     '''
     math
     n1=401 n2=401 n3=2
     o1=-1.8 o2=-0.45 o3=0.05235987756
     d1=0.009 d2=0.00225 d3=0.47123889804
     output="x1-x2*cos(x3)/sin(x3)"
     ''')
Flow('vk','x0','math output="(%g*sin(x3)^2-x2*x2)/(%g*sin(x3)^2-(x1*sin(x3)-x2*cos(x3))^2)" ' % (h2*h2,h1*h1))
Flow('vmask','vk','mask min=0 | dd type=float')
Flow('time','vk','math output="%g*sqrt(abs(input))" ' % (t1*h1/h2))

for case in range(2):
    v1 = (2.0,0.01)[case]
    tmean = (0.8,0.4)[case]

    r=v1*t1/2
    dt=2*h1/v1
    b=t1*t1/(t1*t1+dt*dt)
    r=r*r

    rx = 'rx%d' % case
    ry = 'ry%d' % case

    Flow(rx,'x0','scale dscale=%g' % (1/(1-b)))
    Flow(ry,['x0',rx],
         '''
         math x0=${SOURCES[0]} rx=${SOURCES[1]}
         output="(x0-rx)*cos(x3)/sin(x3)-x2*((x0-rx)^2-%g*rx*rx+%g)/(%g*sin(x3)^2-x2*x2)"
         ''' % (b,r,h2*h2))

    time = 'time-%d' % case

    Flow(time,[rx,ry,'time','vmask'],
         '''
         math rx=${SOURCES[0]} ry=${SOURCES[1]} output="%g-%g*rx*rx-ry*ry" |
         mask min=0 | dd type=float | 
         math t=${SOURCES[2]} m=${SOURCES[3]} output="input*m*abs(t-%g)"
         ''' % (r,b,tmean))

Flow('time4','time-0','window n3=1')
Flow('time2','time-0','window f3=1')
Flow('time3','time-1','window n3=1')
Flow('time1','time-1','window f3=1')

title = (
    "phi=30, v=10 m/s",
    "phi=30, v=2000 m/s",
    "phi=3, v=10 m/s",
    "phi=3, v=2000 m/s")

for n in range(4):
    time = 'time%d' % (n+1)
    Plot(time,
         '''
         contour title="AMO impulse response: %s"
         nc=%d c0=0.01 dc=0.02 transp=n yreverse=n 
         ''' % (title[n],(200,50,200,50)[n]))

Result('amoapp','time1 time3 time2 time4','TwoRows')

End()

sfmath
sfmask
sfdd
sfscale
sfwindow
sfcontour