@@ -849,7 +849,7 @@ def __init_finalize__(self, *args, **kwargs):
849849
850850 # Averaging mode for off the grid evaluation
851851 self ._avg_mode = kwargs .get ('avg_mode' , 'arithmetic' )
852- if self ._avg_mode not in ['arithmetic' , 'harmonic' ]:
852+ if self ._avg_mode not in ['arithmetic' , 'harmonic' , 'safe_harmonic' ]:
853853 raise ValueError ("Invalid averaging mode_mode %s, accepted values are"
854854 " arithmetic or harmonic" % self ._avg_mode )
855855
@@ -989,7 +989,7 @@ def c0(self):
989989 def _eval_deriv (self ):
990990 return self
991991
992- @cached_property
992+ @property
993993 def _grid_map (self ):
994994 """
995995 Mapper of off-grid interpolation points indices for each dimension.
@@ -1049,14 +1049,13 @@ def _evaluate(self, **kwargs):
10491049 return self
10501050
10511051 io = self .interp_order
1052- if self . _avg_mode == 'harmonic' :
1053- retval = 1 / self
1054- else :
1055- retval = self
1052+ retval = self . subs ({ i . subs ( subs ): self . indices_ref [ d ]
1053+ for d , i in mapper . items ()})
1054+ if 'harmonic' in self . _avg_mode :
1055+ retval = retval . safe_inv ( retval , safe = 'safe' in self . _avg_mode )
10561056
10571057 # Apply interpolation from inner most dim
10581058 for d , i in mapper .items ():
1059- retval = retval ._subs (i .subs (subs ), self .indices_ref [d ])
10601059 retval = retval .diff (d , deriv_order = 0 , fd_order = io , x0 = {d : i })
10611060
10621061 # Evaluate. Since we used `self.function` it will be on the grid when
@@ -1065,9 +1064,9 @@ def _evaluate(self, **kwargs):
10651064 retval = retval .subs (subs )
10661065
10671066 # If harmonic averaging, invert at the end
1068- if self . _avg_mode == 'harmonic' :
1069- from devito . finite_differences . differentiable import SafeInv
1070- retval = SafeInv ( retval , self .function . subs ( subs ) )
1067+ if 'harmonic' in self . _avg_mode :
1068+ retval = retval . safe_inv ( self . function . subs ( subs ),
1069+ safe = 'safe' in self ._avg_mode )
10711070
10721071 return retval
10731072
0 commit comments