@@ -1042,7 +1042,7 @@ def __fd_setup__(self):
10421042
10431043 @cached_property
10441044 def _fd_priority (self ):
1045- return 1 if self .staggered in [ NODE , None ] else 2
1045+ return 1 if not self .staggered or all ( s == 0 for s in self . staggered ) else 2
10461046
10471047 @property
10481048 def is_parameter (self ):
@@ -1066,18 +1066,26 @@ def __staggered_setup__(cls, dimensions, **kwargs):
10661066 * 0 to non-staggered dimensions;
10671067 * 1 to staggered dimensions.
10681068 """
1069- stagg = kwargs .get ('staggered' , None )
1070- if stagg is CELL :
1069+ stagg = kwargs .get ('staggered' )
1070+ if stagg is None :
1071+ return tuple ()
1072+ elif stagg is CELL :
10711073 staggered = (sympy .S .One for d in dimensions )
1072- elif stagg in [None , NODE ]:
1074+ elif stagg in [NODE ]:
10731075 staggered = (sympy .S .Zero for d in dimensions )
10741076 elif all (is_integer (s ) for s in as_tuple (stagg )):
10751077 # Staggering is already a tuple likely from rebuild
10761078 assert len (stagg ) == len (dimensions )
1077- return tuple ( stagg )
1079+ staggered = stagg
10781080 else :
1079- staggered = (sympy .S .One if d in as_tuple (stagg ) else sympy .S .Zero
1080- for d in dimensions )
1081+ staggered = []
1082+ for d in dimensions :
1083+ if d in as_tuple (stagg ):
1084+ staggered .append (sympy .S .One )
1085+ elif - d in as_tuple (stagg ):
1086+ staggered .append (sympy .S .NegativeOne )
1087+ else :
1088+ staggered .append (sympy .S .Zero )
10811089 return tuple (staggered )
10821090
10831091 @classmethod
@@ -1097,9 +1105,12 @@ def __indices_setup__(cls, *args, **kwargs):
10971105 assert len (args ) == len (dimensions )
10981106 staggered_indices = tuple (args )
10991107 else :
1100- # Staggered indices
1101- staggered_indices = (d + i * d .spacing / 2
1102- for d , i in zip (dimensions , staggered ))
1108+ if not staggered :
1109+ staggered_indices = (d for d in dimensions )
1110+ else :
1111+ # Staggered indices
1112+ staggered_indices = (d + i * d .spacing / 2
1113+ for d , i in zip (dimensions , staggered ))
11031114 return tuple (dimensions ), tuple (staggered_indices ), staggered
11041115
11051116 @property
@@ -1392,7 +1403,6 @@ def __fd_setup__(self):
13921403 @classmethod
13931404 def __indices_setup__ (cls , * args , ** kwargs ):
13941405 dimensions = kwargs .get ('dimensions' )
1395- staggered = kwargs .get ('staggered' )
13961406
13971407 if dimensions is None :
13981408 save = kwargs .get ('save' )
@@ -1407,7 +1417,7 @@ def __indices_setup__(cls, *args, **kwargs):
14071417 dimensions .insert (cls ._time_position , time_dim )
14081418
14091419 return Function .__indices_setup__ (
1410- * args , dimensions = dimensions , staggered = staggered
1420+ * args , dimensions = dimensions , staggered = kwargs . get ( ' staggered' )
14111421 )
14121422
14131423 @classmethod
@@ -1446,7 +1456,7 @@ def __shape_setup__(cls, **kwargs):
14461456
14471457 @cached_property
14481458 def _fd_priority (self ):
1449- return 2.1 if self .staggered in [ NODE , None ] else 2.2
1459+ return 2.1 if not self .staggered or all ( s == 0 for s in self . staggered ) else 2.2
14501460
14511461 @property
14521462 def time_order (self ):
@@ -1600,7 +1610,7 @@ def __indices_setup__(cls, **kwargs):
16001610 # Sanity check
16011611 assert not any (d .is_NonlinearDerived for d in dimensions )
16021612
1603- return dimensions , dimensions , ( sympy . S . Zero for _ in dimensions )
1613+ return dimensions , dimensions
16041614
16051615 def __halo_setup__ (self , ** kwargs ):
16061616 pointer_dim = kwargs .get ('pointer_dim' )
0 commit comments