# 
# scalar acoustic FDTD demo 
#
from rsf.proj import *
import sys
sys.path.append('../../PYUTIL')
import awe,geom,wplot,wavedemo
from safdmLOP 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 |'%par['nxsou'] +
    '''
    put label1="s" unit1="" label2=%(lt)s unit2=%(ut)s
    o3=0 d3=1 label3="" unit3=""
    '''%par)
if(do3D=='y'):
    Flow('din3D','wav',
    'window | spray axis=1 n=%d o=0 d=1 |'%(par['nxsou']*par['nysou']) +
    '''
    put label1="s" unit1="" label2=%(lt)s unit2=%(ut)s
    o3=0 d3=1 label3="" unit3=""
    '''%par)

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

AV2D = saFDM2d('vp2D','ro2D',par,'ss2D','rr2D','wforV2D')
BV2D = saFDM2d('vp2D','ro2D',par,'ss2D','rr2D','wadjV2D')
CV2D = saFDM2d('vp2D','ro2D',par,'ss2D','rr2D')
AV2D.FORW('din2D'  ,'dforV2D')
BV2D.ADJT('dadjV2D','dforV2D')                

for j in (['C2D','V2D']):
    for i in ['wfor','wadj']:
        Result(i+j,wplot.igrey2d('pclip=99.9',par))    
    for i in ['dfor','dadj']:
        Result(i+j,'transp | grey title="" %(labelattr)s'%par)

if(do3D=='y'):
    AC3D = saFDM3d('vp3D','',par,'ss3D','rr3D','wforC3D')
    BC3D = saFDM3d('vp3D','',par,'ss3D','rr3D','wadjC3D')
    CC3D = saFDM3d('vp3D','',par,'ss3D','rr3D')
    AC3D.FORW('din3D'  ,'dforC3D')
    BC3D.ADJT('dadjC3D','dforC3D')
    
    AV3D = saFDM3d('vp3D','ro3D',par,'ss3D','rr3D','wforV3D')
    BV3D = saFDM3d('vp3D','ro3D',par,'ss3D','rr3D','wadjV3D')
    CV3D = saFDM3d('vp3D','ro3D',par,'ss3D','rr3D')
    AV3D.FORW('din3D'  ,'dforV3D')
    BV3D.ADJT('dadjV3D','dforV3D')                
    
    for j in (['C3D','V3D']):
        for i in ['wfor','wadj']:
            Result(i+j,'byte gainpanel=a pclip=99|'+wplot.igrey4d('',par))    
        for i in ['dfor','dadj']:
            Result(i+j,'transp | grey gainpanel=a title="" %(labelattr)s'%par)
        
# ------------------------------------------------------------
DC2D = DPTEST(CC2D,['dadjC2D'],['dforC2D'])           
DC2D.RUN()  
DV2D = DPTEST(CV2D,['dadjV2D'],['dforV2D'])           
DV2D.RUN()

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

End()
