@@ -844,7 +844,7 @@ def __init_finalize__(self, *args, **kwargs):
844844
845845 # Averaging mode for off the grid evaluation
846846 self ._avg_mode = kwargs .get ('avg_mode' , 'arithmetic' )
847- if self ._avg_mode not in ['arithmetic' , 'harmonic' ]:
847+ if self ._avg_mode not in ['arithmetic' , 'harmonic' , 'safe_harmonic' ]:
848848 raise ValueError ("Invalid averaging mode_mode %s, accepted values are"
849849 " arithmetic or harmonic" % self ._avg_mode )
850850
@@ -878,8 +878,8 @@ def __halo_setup__(self, **kwargs):
878878 halo = tuple (kwargs .get ('halo' , ((0 , 0 ),)* self .ndim ))
879879 return DimensionTuple (* halo , getters = self .dimensions )
880880
881- def __padding_setup__ (self , ** kwargs ):
882- padding = tuple (kwargs . get ( ' padding' , ((0 , 0 ),)* self .ndim ) )
881+ def __padding_setup__ (self , padding = None , ** kwargs ):
882+ padding = tuple (padding or ((0 , 0 ),)* self .ndim )
883883 return DimensionTuple (* padding , getters = self .dimensions )
884884
885885 @cached_property
@@ -984,7 +984,7 @@ def c0(self):
984984 def _eval_deriv (self ):
985985 return self
986986
987- @cached_property
987+ @property
988988 def _grid_map (self ):
989989 """
990990 Mapper of off-grid interpolation points indices for each dimension.
@@ -1044,14 +1044,13 @@ def _evaluate(self, **kwargs):
10441044 return self
10451045
10461046 io = self .interp_order
1047- if self . _avg_mode == 'harmonic' :
1048- retval = 1 / self
1049- else :
1050- retval = self
1047+ retval = self . subs ({ i . subs ( subs ): self . indices_ref [ d ]
1048+ for d , i in mapper . items ()})
1049+ if 'harmonic' in self . _avg_mode :
1050+ retval = retval . safe_inv ( retval , safe = 'safe' in self . _avg_mode )
10511051
10521052 # Apply interpolation from inner most dim
10531053 for d , i in mapper .items ():
1054- retval = retval ._subs (i .subs (subs ), self .indices_ref [d ])
10551054 retval = retval .diff (d , deriv_order = 0 , fd_order = io , x0 = {d : i })
10561055
10571056 # Evaluate. Since we used `self.function` it will be on the grid when
@@ -1060,9 +1059,9 @@ def _evaluate(self, **kwargs):
10601059 retval = retval .subs (subs )
10611060
10621061 # If harmonic averaging, invert at the end
1063- if self . _avg_mode == 'harmonic' :
1064- from devito . finite_differences . differentiable import SafeInv
1065- retval = SafeInv ( retval , self .function . subs ( subs ) )
1062+ if 'harmonic' in self . _avg_mode :
1063+ retval = retval . safe_inv ( self . function . subs ( subs ),
1064+ safe = 'safe' in self ._avg_mode )
10661065
10671066 return retval
10681067
0 commit comments