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

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

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

wavedemo.coord2d(par)
wavedemo.model2d(par)
if(do3D=='y'):
    wavedemo.coord3d(par)
    wavedemo.model3d(par)
    
# ------------------------------------------------------------
wavedemo.difflet(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 = deFDM2d('kk2D',par,'ss2D','rr2D','wforC2D')
BC2D = deFDM2d('kk2D',par,'ss2D','rr2D','wadjC2D')
CC2D = deFDM2d('kk2D',par,'ss2D','rr2D')
AC2D.FORW('din2D'  ,'dforC2D')
BC2D.ADJT('dadjC2D','dforC2D')

AX2D = deFDM2d('kk2D',par,'ss2D','rr2D','wforX2D',custom='dabc=y')
BX2D = deFDM2d('kk2D',par,'ss2D','rr2D','wadjX2D',custom='dabc=y')
CX2D = deFDM2d('kk2D',par,'ss2D','rr2D',          custom='dabc=y')
AX2D.FORW('din2D'  ,'dforX2D')
BX2D.ADJT('dadjX2D','dforX2D')

for j in (['C2D','X2D']):
    for i in ['wfor','wadj']:
        Result(i+j,
            wplot.igrey2d('allpos=y color=j',par))
    for i in ['dfor','dadj']:
        Result(i+j,
            '''
            window j2=25 | transp | 
            grey title="" pclip=100 allpos=y color=j %(labelattr)s
            '''%par)

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

    AX3D = deFDM3d('kk3D',par,'ss3D','rr3D','wforX3D',custom='dabc=y')
    BX3D = deFDM3d('kk3D',par,'ss3D','rr3D','wadjX3D',custom='dabc=y')
    CX3D = deFDM3d('kk3D',par,'ss3D','rr3D',          custom='dabc=y')
    AX3D.FORW('din3D'  ,'dforX3D')
    BX3D.ADJT('dadjX3D','dforX3D')
    
    for j in (['C3D','X3D']):
        for i in ['wfor','wadj']:
            Result(i+j,'byte gainpanel=a pclip=99.0 allpos=y|'
                       +wplot.igrey4d('color=j'+par['CENTER'],par))
        for i in ['dfor','dadj']:
            Result(i+j,
                '''
                window j2=25 | transp | 
                grey title="" pclip=100 allpos=y color=j %(labelattr)s
                '''%par)

# ------------------------------------------------------------
DC2D = DPTEST(CC2D,['dadjC2D'],['dforC2D'])           
DC2D.RUN()
DX2D = DPTEST(CX2D,['dadjX2D'],['dforX2D'])           
DX2D.RUN()

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

End()
