# Dimension

``Dimension()``

Symbol defining an iteration space.

A Dimension represents a problem dimension. It is typically used to index into Functions, but it can also appear in the middle of a symbolic expression just like any other symbol.

Dimension is the root of a hierarchy of classes, which looks as follows (only the classes exposed to the level of the user API are shown)::

``````                               Dimension
|
---------------------------
|                         |
DerivedDimension            DefaultDimension
|
---------------------
|                   |
SubDimension   ConditionalDimension``````

## Parameters

Name Type Description Default
name str Name of the dimension. required
spacing symbol A symbol to represent the physical spacing along this Dimension. `h_name`

## Examples

Dimensions are automatically created when a Grid is instantiated.

``````>>> from devito import Grid
>>> grid = Grid(shape=(4, 4))
>>> x, y = grid.dimensions
>>> type(x)
<class 'devito.types.dimension.SpaceDimension'>
>>> time = grid.time_dim
>>> type(time)
<class 'devito.types.dimension.TimeDimension'>
>>> t = grid.stepping_dim
>>> type(t)
<class 'devito.types.dimension.SteppingDimension'>``````

Alternatively, one can create Dimensions explicitly

``````>>> from devito import Dimension
>>> i = Dimension(name='i')``````

Or, when many “free” Dimensions are needed, with the shortcut

``````>>> from devito import dimensions
>>> i, j, k = dimensions('i j k')``````

A Dimension can be used to build a Function as well as within symbolic expressions, as both array index (“indexed notation”) and free symbol.

``````>>> from devito import Function
>>> f = Function(name='f', shape=(4, 4), dimensions=(i, j))
>>> f + f
2*f(i, j)
>>> f[i + 1, j] + f[i, j + 1]
f[i, j + 1] + f[i + 1, j]
>>> f*i
i*f(i, j)``````

## Attributes

Name Description
is_AbstractSub bool(x) -> bool
is_Block bool(x) -> bool
is_Conditional bool(x) -> bool
is_Custom bool(x) -> bool
is_Default bool(x) -> bool
is_Derived bool(x) -> bool
is_Dimension bool(x) -> bool
is_Incr bool(x) -> bool
is_Modulo bool(x) -> bool
is_MultiSub bool(x) -> bool
is_NonlinearDerived bool(x) -> bool
is_Space bool(x) -> bool
is_Stencil bool(x) -> bool
is_Stepping bool(x) -> bool
is_Sub bool(x) -> bool
is_SubIterator bool(x) -> bool
is_Time bool(x) -> bool
is_Virtual bool(x) -> bool
spacing Symbol representing the physical spacing along the Dimension.
symbolic_incr The increment value while iterating over the Dimension.
symbolic_max Symbol defining the maximum point of the Dimension.
symbolic_min Symbol defining the minimum point of the Dimension.
symbolic_size Symbolic size of the Dimension.

## Methods

Name Description
class_key Overrides sympy.Symbol.class_key such that Dimensions always

### class_key

``class_key()``

Overrides sympy.Symbol.class_key such that Dimensions always preceed other symbols when printed (e.g. x + h_x, not h_x + x).

Back to top