1616def  double_rtm (model , wavelet , src_coords , res , res_o , rec_coords , space_order = 8 ):
1717    """ 
1818    """ 
19-     _ , u , _  =  forward (model , src_coords , None , wavelet , space_order = space_order ,
20-                       save = True )
21- 
22-     # Illumination 
23-     illum  =  Function (name = "I" , grid = model .grid , space_order = 0 )
24-     Operator (Inc (illum , u ** 2 ))()
19+     _ , u , illum , _  =  forward (model , src_coords , None , wavelet , space_order = space_order ,
20+                              illum = True , save = True )
2521
2622    # RTMs 
27-     rtm ,  _   =  gradient (model , res , rec_coords , u , space_order = space_order )
28-     rtmo ,  _   =  gradient (model , res_o , rec_coords , u , space_order = space_order )
23+     rtm   =  gradient (model , res , rec_coords , u , space_order = space_order )[ 0 ] 
24+     rtmo   =  gradient (model , res_o , rec_coords , u , space_order = space_order )[ 0 ] 
2925    return  rtm .data , rtmo .data , illum .data 
3026
3127
32- def  cig_grad (model , src_coords , wavelet , rec_coords , res , offsets , isic = False , space_order = 8 , omni = False ):
28+ def  cig_grad (model , src_coords , wavelet , rec_coords , res , offsets , ic = "as" , space_order = 8 , omni = False ,  illum = False ):
3329    """ 
3430    """ 
3531    u  =  forward (model , src_coords , None , wavelet , space_order = space_order , save = True )[1 ]
36-     # Setting adjoint wavefieldgradient  
32+     # Setting adjoint wavefield  
3733    v  =  wavefield (model , space_order , fw = False )
3834
3935    # Set up PDE expression and rearrange 
4036    pde  =  wave_kernel (model , v , fw = False )
4137
4238    # Setup source and receiver 
4339    go_expr  =  geom_expr (model , v , src_coords = rec_coords ,
44-                        wavelet = res , fw = False )
40+                          wavelet = res , fw = False )
4541    # Setup gradient wrt m with all offsets 
4642    ohs  =  make_offsets (offsets , model , omni )
47-     x  =  u .indices [1 ]
4843
4944    # Subsurface offsets. 
50-     hs  =  (h .shape [0 ] for  h  in  ohs .values ())
51-     hd  =  (h .indices [0 ] for  h  in  ohs .values ())
45+     hs  =  tuple (h .shape [0 ] for  h  in  ohs .values ())
46+     hd  =  tuple (h .indices [0 ] for  h  in  ohs .values ())
5247    gradm  =  Function (name = "gradm" , grid = model .grid , shape = (* hs , * u .shape [1 :]),
53-                      dimensions = (* hd , * model .grid .dimensions ), space_order = 0 )
48+                     dimensions = (* hd , * model .grid .dimensions ))
49+ 
5450    uh , vh  =  shifted_wf (u , v , ohs )
55-     g_expr  =  grad_expr (gradm , uh , vh , model , ic = isic )
51+     g_expr  =  grad_expr (gradm , uh , vh , model , ic = ic )
5652
5753    # Create operator and run 
58-     subs  =  model .spacing_map 
59-     op  =  Operator (pde  +  go_expr  +  g_expr ,subs = subs , name = "cig_sso" , opt = opt_op (model ))
54+     subs  =  model .grid .spacing_map 
55+     op  =  Operator (pde  +  go_expr  +  g_expr , subs = subs , name = "cig_sso" , opt = opt_op (model ))
56+ 
6057    try :
6158        op .cfunction 
6259    except :
63-         op  =  Operator (pde  +  go_expr  +  g_expr ,subs = subs , name = "cig_sso" , opt = 'advanced' )
60+         op  =  Operator (pde  +  go_expr  +  g_expr ,  subs = subs , name = "cig_sso" , opt = 'advanced' )
6461        op .cfunction 
62+ 
6563    # Get bounds from offsets 
6664    dim_kw  =  make_kw (ohs , DimensionTuple (* u .shape [1 :], getters = model .grid .dimensions ))
6765    op (dt = model .critical_dt , ** dim_kw )
@@ -70,7 +68,7 @@ def cig_grad(model, src_coords, wavelet, rec_coords, res, offsets, isic=False, s
7068    return  gradm .data 
7169
7270
73- def  cig_lin (model , src_coords , wavelet , rec_coords , dm_ext , offsets , isic = False , space_order = 8 , omni = False ):
71+ def  cig_lin (model , src_coords , wavelet , rec_coords , dm_ext , offsets , ic = "as" , space_order = 8 , omni = False ):
7472    """ 
7573    """ 
7674    nt  =  wavelet .shape [0 ]
@@ -83,7 +81,7 @@ def cig_lin(model, src_coords, wavelet, rec_coords, dm_ext, offsets, isic=False,
8381
8482    # Set up PDE expression and rearrange 
8583    pde  =  wave_kernel (model , u )
86-     qlin  =  ext_src (model , u , dm_ext , oh , isic = isic )
84+     qlin  =  ext_src (model , u , dm_ext , oh , ic = ic )
8785    fact  =  1  /  (model .damp / dt  +  (model .m  *  model .irho )/ dt ** 2 )
8886    pdel  =  wave_kernel (model , ul ) +  [Inc (ul .forward , fact  *  qlin )]
8987
@@ -92,7 +90,7 @@ def cig_lin(model, src_coords, wavelet, rec_coords, dm_ext, offsets, isic=False,
9290    go_exprl  =  geom_expr (model , ul , rec_coords = rec_coords , nt = nt )
9391    _ , rcvl  =  src_rec (model , ul , rec_coords = rec_coords , nt = nt )
9492    # Create operator and run 
95-     subs  =  model .spacing_map 
93+     subs  =  model .grid . spacing_map 
9694    op  =  Operator (pde  +  go_expr  +  pdel  +  go_exprl ,
9795                  subs = subs , name = "extborn" , opt = opt_op (model ))
9896    op .cfunction 
@@ -104,7 +102,7 @@ def cig_lin(model, src_coords, wavelet, rec_coords, dm_ext, offsets, isic=False,
104102    return  rcvl .data 
105103
106104
107- def  ext_src (model , u , dm_ext , oh , isic = False ):
105+ def  ext_src (model , u , dm_ext , oh , ic = "as" ):
108106    # Extended perturbation 
109107    hs  =  (h .shape [0 ] for  h  in  oh .values ())
110108    hd  =  (h .indices [0 ] for  h  in  oh .values ())
@@ -137,6 +135,8 @@ def shifted_wf(u, v, ohs):
137135    uh  =  u 
138136    vh  =  v 
139137    for  k , v  in  ohs .items ():
138+         if  v .shape [0 ] ==  1 :
139+             continue 
140140        uh  =  uh ._subs (k , k - v )
141141        vh  =  vh ._subs (k , k + v )
142142    return  uh , vh 
@@ -152,6 +152,6 @@ def _shift(u, oh):
152152def  make_kw (ohs , shape ):
153153    kw  =  dict ()
154154    for  d , v  in  ohs .items ():
155-         kw ['%s_m'  %  d .name ] =  - np .min (v .data )
156-         kw ['%s_M'  %  d .name ] =  shape [d ] -  np .max (v .data )
155+         kw ['%s_m'  %  d .name ] =  - np .min (v .data . view ( np . ndarray ) )
156+         kw ['%s_M'  %  d .name ] =  shape [d ] -  np .max (v .data . view ( np . ndarray ) )
157157    return  kw 
0 commit comments