# 
# telegrapher equation FDTD demo 
#
from rsf.proj import *
import sys
sys.path.append('../../PYUTIL')
import awe,geom,wplot,wavedemo,wfldplot
from tefdmLOP import *
from DPTEST import *

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

# ------------------------------------------------------------
par = wavedemo.param()
wplot.param(par)

wavedemo.coord2d(par)
wavedemo.model2d(par)
if(do3D=='y'):
    wavedemo.coord3d(par)
    wavedemo.model3d(par)
    
# ------------------------------------------------------------
wavedemo.wavelet(par)

Flow('din2D','wav',
    '''
    window | 
    spray axis=1 n=%d o=0 d=1 | 
    spray axis=2 n=2 o=0 d=1 |
    '''%par['nxsou'] +
    '''
    put label1="s" unit1="" label2='' unit2=''
    o4=0 d4=1 label4="" unit4=""
    '''%par)
if(do3D=='y'):
    Flow('din3D','wav',
    '''
    window | 
    spray axis=1 n=%d o=0 d=1 | 
    spray axis=2 n=3 o=0 d=1 |
    '''%(par['nxsou']*par['nysou']) +
    '''
    put label1="s" unit1="" label2='' unit2=''
    o4=0 d4=1 label4="" unit4=""
    '''%par)

# ------------------------------------------------------------
AC2D = teFDM2d('vp2D','ko2D',par,'ss2D','rr2D','wforC2D')
BC2D = teFDM2d('vp2D','ko2D',par,'ss2D','rr2D','wadjC2D')
CC2D = teFDM2d('vp2D','ko2D',par,'ss2D','rr2D')
AC2D.FORW('din2D'  ,'dforC2D')
BC2D.ADJT('dadjC2D','dforC2D')

if(do3D=='y'):
    AC3D = teFDM3d('vp3D','ko3D',par,'ss3D','rr3D','wforC3D')
    BC3D = teFDM3d('vp3D','ko3D',par,'ss3D','rr3D','wadjC3D')
    CC3D = teFDM3d('vp3D','ko3D',par,'ss3D','rr3D')
    AC3D.FORW('din3D'  ,'dforC3D')
    BC3D.ADJT('dadjC3D','dforC3D')

# ------------------------------------------------------------
nframes = int((par['nt']-1)/par['jsnap']+1)

for j in (['C2D']):
    for i in ['wfor','wadj']:
        wfldplot.w2d(i+j,nframes,par,
            posU=[3,1],posT=[],custom='pclip=99.9')
    for i in ['dfor','dadj']:
        Result(i+j,'transp plane=23 | transp | grey gainpanel=a title="" %(labelattr)s'%par)
        
if(do3D=='y'):
    for j in (['C3D']):
        for i in ['wfor','wadj']:
            wfldplot.w3d(i+j,nframes,par,
                posU=[3,0,1],posT=[],custom='pclip=99',dx=-10,dy=-7.5)
        for i in ['dfor','dadj']:
            Result(i+j,'transp plane=23 | transp | grey gainpanel=a title="" %(labelattr)s'%par)
            
# ------------------------------------------------------------
DC2D = DPTEST(CC2D,['dadjC2D'],['dforC2D'])           
DC2D.RUN()  

if(do3D=='y'):
    DC3D = DPTEST(CC3D,['dadjC3D'],['dforC3D'])           
    DC3D.RUN()  

End()
