## 
# anisotropic elastic FDTD demo 
##
from rsf.proj import *
import sys
sys.path.append('../../PYUTIL')
import awe,geom,wplot,wavedemo,wfldplot
from aefdmLOP 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('idat2D','wav',
    '''
    window | spray axis=1 n=%d | 
    '''%par['nxsou'] +
    '''
    put label1="s" unit1="" |
    spray axis=2 n=2 o=0 d=1 |
    put o2=0 d2=1 label2="c" unit2=""
    '''%par)
if(do3D=='y'):
    Flow('idat3D','wav',
    '''
    window | spray axis=1 n=%d | 
    '''%(par['nxsou']*par['nysou']) +
    '''
    put label1="s" unit1="" |
    spray axis=2 n=3 o=0 d=1 |
    put o2=0 d2=1 label2="c" unit2=""
    '''%par)

Flow( ['odatC2D','owflC2D'],['idat2D','cc2D','ro2D','ss2D','rr2D'],
    '''
    ../CODE/EWEFD2D.x
    ompchunk=%(ompchunk)d  ompnth=%(ompnth)d
    verb=y free=n snap=%(snap)s jsnap=%(jsnap)d jdata=%(jdata)d
    nb=%(nb)d 
    ccc=${SOURCES[1]}
    den=${SOURCES[2]}
    sou=${SOURCES[3]}
    rec=${SOURCES[4]}
    wfl=${TARGETS[1]}
    ''' % par)

if(do3D=='y'):
    Flow( ['odatC3D','owflC3D'],['idat3D','cc3D','ro3D','ss3D','rr3D'],
    '''
    ../CODE/EWEFD3D.x
    ompchunk=%(ompchunk)d  ompnth=%(ompnth)d
    verb=y free=n snap=%(snap)s jsnap=%(jsnap)d jdata=%(jdata)d
    nb=%(nb)d 
    ccc=${SOURCES[1]}
    den=${SOURCES[2]}
    sou=${SOURCES[3]}
    rec=${SOURCES[4]}
    wfl=${TARGETS[1]}
    ''' % par)
    
# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------
# ------------------------------------------------------------

Flow('din2D','wav',
    '''
    window | 
    spray axis=1 n=%d o=0 d=1 | 
    spray axis=2 n=5 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=9 o=0 d=1 |
    '''%(par['nxsou']*par['nysou']) +
    '''
    put label1="s" unit1="" label2='' unit2=''
    o4=0 d4=1 label4="" unit4=""
    '''%par)

# ------------------------------------------------------------
AC2D = aeFDM2d('cc2D','ro2D',par,'ss2D','rr2D','wforC2D')
BC2D = aeFDM2d('cc2D','ro2D',par,'ss2D','rr2D','wadjC2D')
CC2D = aeFDM2d('cc2D','ro2D',par,'ss2D','rr2D')
AC2D.FORW('din2D'  ,'dforC2D')
BC2D.ADJT('dadjC2D','dforC2D')

if(do3D=='y'):
    AC3D = aeFDM3d('cc3D','ro3D',par,'ss3D','rr3D','wforC3D')
    BC3D = aeFDM3d('cc3D','ro3D',par,'ss3D','rr3D','wadjC3D')
    CC3D = aeFDM3d('cc3D','ro3D',par,'ss3D','rr3D')
    AC3D.FORW('din3D'  ,'dforC3D')
    BC3D.ADJT('dadjC3D','dforC3D')
          
# ------------------------------------------------------------
nframes = int((par['nt']-1)/par['jsnap']+1)

wfldplot.w2d('owflC2D',nframes,par,
            posU=[3,1],posT=[],custom='pclip=99')
if(do3D=='y'):
    wfldplot.w3d('owflC3D',nframes,par,
            posU=[3,0,1],posT=[],custom='pclip=99',dx=-10,dy=-7.)

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

for j in (['C2D']):
    for i in ['wfor','wadj']:
        wfldplot.w2d(i+j,nframes,par,
            posU=[3,1],posT=[6,2,8],custom='pclip=99')

if(do3D=='y'):
    for j in (['C3D']):
        for i in ['wfor','wadj']:
            wfldplot.w3d(i+j,nframes,par,
                posU=[3,0,1],posT=[6,4,2,5,8,7],custom='pclip=99',dx=-10,dy=-7.)
       
# ------------------------------------------------------------
DC2D = DPTEST(CC2D,['dadjC2D'],['dforC2D'])
DC2D.RUN()

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

End()
