## 
# column operator demo
##
from rsf.proj import *
import sys,wplot
sys.path.append('../../PYUTIL')
from difLOP import *
from smoLOP import *
from columnLOP import *
from DPTEST import *

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

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

# ------------------------------------------------------------
Flow('s2D',None,
    '''
    spike nsp=1 mag=1 k1=8 k2=13
    n1=%(nz)d o1=%(oz)g d1=%(dz)g label1="" unit1=""
    n2=%(nx)d o2=%(ox)g d2=%(dx)g label2="" unit2=""
    '''%par)
Result('s2D',wplot.igrey2d('',par))

if(do3D=='y'):
    Flow('s3D',None,
    '''
    spike nsp=1 mag=1 k1=8 k2=13 k3=6
    n1=%(nz)d o1=%(oz)g d1=%(dz)g label1="" unit1=""
    n2=%(nx)d o2=%(ox)g d2=%(dx)g label2="" unit2=""
    n3=%(ny)d o3=%(oy)g d3=%(dy)g label3="" unit3=""
    '''%par)
    Result('s3D','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))

# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------

# Laplacian
L2D = lapl2d(par['otype'],par['N'])
L2D.FORW(  's2D',   'lap2Dfor')
L2D.ADJT('lap2Dadj','lap2Dfor')
Result('lap2Dfor',wplot.igrey2d('',par))
Result('lap2Dadj',wplot.igrey2d('',par))

if(do3D=='y'):
    L3D = lapl3d(par['otype'],par['N'])
    L3D.FORW(  's3D',   'lap3Dfor')
    L3D.ADJT('lap3Dadj','lap3Dfor')
    Result('lap3Dfor','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    Result('lap3Dadj','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))

S2D = smo2d(3,3)
S2D.FORW(   's2D',  'smo2Dfor')
S2D.ADJT('smo2Dadj','smo2Dfor')
Result('smo2Dfor',wplot.igrey2d('',par))
Result('smo2Dadj',wplot.igrey2d('',par))

if(do3D=='y'):
    S3D = smo3d(3,3,3)
    S3D.FORW(  's3D',   'smo3Dfor')
    S3D.ADJT('smo3Dadj','smo3Dfor')
    Result('smo3Dfor','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    Result('smo3Dadj','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))

# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
C2D = columnop(par,[L2D,S2D])
C2D.FORW('s2D',['a2D','b2D'])
C2D.ADJT('m2D',['a2D','b2D'])
Result('a2D',wplot.igrey2d('',par))
Result('b2D',wplot.igrey2d('',par))
Result('m2D',wplot.igrey2d('',par))

DC2D = DPTEST(C2D,['m2D'],['a2D','b2D'])
DC2D.RUN()

if(do3D=='y'):
    C3D = columnop(par,[L3D,S3D])
    C3D.FORW('s3D',['a3D','b3D'])
    C3D.ADJT('m3D',['a3D','b3D'])
    Result('a3D','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    Result('b3D','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    Result('m3D','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    
    DC3D = DPTEST(C3D,['m3D'],['a3D','b3D'])
    DC3D.RUN()

End()
