@@ -907,36 +907,26 @@ def __padding_dtype__(self):
907907 return np .float32
908908
909909 def __padding_setup_smart__ (self , ** kwargs ):
910- nopadding = ((0 , 0 ),)* self .ndim
911-
912- if not self .__padding_dtype__ :
913- return nopadding
914-
915- # The padded Dimension
916- if not self .space_dimensions :
917- return nopadding
918- d = self .space_dimensions [- 1 ]
910+ padding = [(0 , 0 )]* self .ndim
919911
920- # Last space Dimension is not the most inner Dimension
921- if d != self .dimensions [- 1 ]:
922- return nopadding
912+ if not self .__padding_dtype__ or not self ._padded_dimensions :
913+ return tuple (padding )
923914
924915 mmts = configuration ['platform' ].max_mem_trans_size (self .__padding_dtype__ )
925916
926- snp = self ._size_nopad [d ]
927- remainder = snp % mmts
928- if remainder == 0 :
929- # Already a multiple of `mmts`, no need to pad
930- return nopadding
931- else :
917+ for d in self ._padded_dimensions :
918+ snp = self ._size_nopad [d ]
919+ remainder = snp % mmts
920+ if remainder == 0 :
921+ # Already a multiple of `mmts`, no need to pad
922+ continue
923+
932924 from devito .symbolics import RoundUp # noqa
933925 v = RoundUp (snp , mmts ) - snp
934926 if v .is_Integer :
935927 v = int (v )
936928
937- dpadding = (0 , v )
938- padding = [(0 , 0 )]* self .ndim
939- padding [self .dimensions .index (d )] = dpadding
929+ padding [self .dimensions .index (d )] = (0 , v )
940930
941931 return tuple (padding )
942932
@@ -987,6 +977,18 @@ def dimensions(self):
987977 """Tuple of Dimensions representing the object indices."""
988978 return DimensionTuple (* self ._dimensions , getters = self ._dimensions )
989979
980+ @property
981+ def _padded_dimensions (self ):
982+ try :
983+ d = self .space_dimensions [- 1 ]
984+ except IndexError :
985+ return ()
986+
987+ if d is self .dimensions [- 1 ]:
988+ return (d ,)
989+ else :
990+ return ()
991+
990992 @cached_property
991993 def space_dimensions (self ):
992994 """Tuple of Dimensions defining the physical space."""
0 commit comments