# 
# sinc interpolation demo
#
from rsf.proj import *
import sys,geom,wplot
from sieLOP import *

from DPTEST import *
from LICGsolver import *
from LICGutils  import *

# ------------------------------------------------------------
do3D = 'y'
doINV = 'n'
# ------------------------------------------------------------

par = dict(
    nx=25, ox=0, dx=1.0,  lx='x', ux='',
    ny=21, oy=0, dy=1.0,  ly='y', uy='',
    nz=15, oz=0, dz=1.0,  lz='z', uz=''
    )
wplot.param(par)

# ------------------------------------------------------------
# coordinates
geom.circle('ss2D', 12.0,7.0, 8.0, 120, '',par)
Plot(  'ss2D',wplot.bbplot2d('plotcol=1 wantaxis=y symbol=*',par))
Result('ss2D','ss2D','Overlay')

Flow('spk2D',None,
    '''
    math output="cos(2*3.14*x1/10)*cos(2*3.14*x2/20)"
    n1=%(nz)d o1=%(oz)g d1=%(dz)g
    n2=%(nx)d o2=%(ox)g d2=%(dx)g
    '''%par,stdin=0)
Plot(  'spk2D',wplot.igrey2d('color=e',par))

if(do3D=='y'):
    geom.sphere('ss3D', 12.0,11.0,7.0, 8.0, 120,60, '',par)

    Flow('spk3D',None,
    '''
    math output="cos(2*3.14*x1/15)*cos(2*3.14*x2/20)*sin(2*3.14*x3/25)"
    n1=%(nz)d o1=%(oz)g d1=%(dz)g
    n2=%(nx)d o2=%(ox)g d2=%(dx)g
    n3=%(ny)d o3=%(oy)g d3=%(dy)g
    '''%par,stdin=0)
    Result('spk3D','byte gainpanel=a pclip=100|'
        + wplot.igrey3d('color=e',par))

# ------------------------------------------------------------
L2D = sie2d('ss2D',par)
L2D.FORW('spk2D',   'spk2Dfor')
L2D.ADJT('spk2Dadj','spk2Dfor')

Result('spk2Dfor','graph title="" min2=-1 max2=+1')
Plot(  'spk2Dadj',wplot.igrey2d('color=e',par))
Result('spk2Dadj',['spk2Dadj','ss2D'],'Overlay')

D2D = DPTEST(L2D,['spk2Dadj'],['spk2Dfor'])
D2D.RUN()

if(do3D=='y'):
    L3D = sie3d('ss3D',par)
    L3D.FORW('spk3D',   'spk3Dfor')
    L3D.ADJT('spk3Dadj','spk3Dfor')
    
    Result('spk3Dfor','graph title="" min2=-1 max2=+1')
    Result('spk3Dadj','byte gainpanel=a pclip=100|'
               + wplot.igrey3d('color=e',par))
    
    D3D = DPTEST(L3D,['spk3Dadj'],['spk3Dfor'])
    D3D.RUN()

# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
if(doINV == 'y'):
    NITER = 11
    
    Flow('zer2D','spk2D','math output=0')
    I2D = LICG('I2D',par, Lop=L2D, d=['spk2Dfor'], xo=['zer2D'], xf=['inv2D'], niter=NITER)
    I2D.iterate()
    plotOFUN('I2D',NITER,par)

    Result('inv2D',['spk2D','inv2D'],
        '''
        cat axis=3 space=n ${SOURCES[1:2]} |
        byte gainpanel=a pclip=100 |
        ''' + wplot.igrey2d('color=e',par))

    if(do3D=='y'):
        Flow('zer3D','spk3D','math output=0')
        I3D = LICG('I3D',par, Lop=L3D, d=['spk3Dfor'], xo=['zer3D'], xf=['inv3D'], niter=NITER)
        I3D.iterate()
        plotOFUN('I3D',NITER,par)

        Result('inv3D',['spk3D','inv3D'],
        '''
        cat axis=4 space=n ${SOURCES[1:2]} |
        byte gainpanel=a pclip=100 |
        ''' + wplot.igrey4d('color=e',par))
                
End()
