TensorFunction
- class devito.types.TensorFunction(*args, **kwargs)[source]
Bases:
AbstractTensor
Tensor valued Function represented as a Matrix. Each component is a Function or TimeFunction.
A TensorFunction and the classes that inherit from it takes the same parameters as a DiscreteFunction and additionally:
- Parameters
name (str) – Name of the symbol.
grid (Grid, optional) – Carries shape, dimensions, and dtype of the TensorFunction. When grid is not provided, shape and dimensions must be given. For MPI execution, a Grid is compulsory.
space_order (int or 3-tuple of ints, optional) – Discretisation order for space derivatives. Defaults to 1.
space_order
also impacts the number of points available around a generic point of interest. By default,space_order
points are available on both sides of a generic point of interest, including those nearby the grid boundary. Sometimes, fewer points suffice; in other scenarios, more points are necessary. In such cases, instead of an integer, one can pass a 3-tuple(o, lp, rp)
indicating the discretization order (o
) as well as the number of points on the left (lp
) and right (rp
) sides of a generic point of interest.shape (tuple of ints, optional) – Shape of the domain region in grid points. Only necessary if
grid
isn’t given.dimensions (tuple of Dimension, optional) – Dimensions associated with the object. Only necessary if
grid
isn’t given.dtype (data-type, optional) – Any object that can be interpreted as a numpy data type. Defaults to
np.float32
.staggered (tuple of Dimension, optional) – Define how the TensorFunction is staggered.
initializer (callable or any object exposing the buffer interface, optional) – Data initializer. If a callable is provided, data is allocated lazily.
allocator (MemoryAllocator, optional) – Controller for memory allocation. To be used, for example, when one wants to take advantage of the memory hierarchy in a NUMA architecture. Refer to default_allocator.__doc__ for more information.
padding (int or tuple of ints, optional) –
Deprecated since version shouldn’t: be used; padding is now automatically inserted.
Allocate extra grid points to maximize data access alignment. When a tuple of ints, one int per Dimension should be provided.
symmetric (bool, optional) – Whether the tensor is symmetric or not. Defaults to True.
diagonal (Bool, optional) – Whether the tensor is diagonal or not. Defaults to False.
staggered – Staggering of each component, needs to have the size of the tensor. Defaults to the Dimensions.
- property is_diagonal
Whether the tensor is diagonal.
- is_symmetric(simplify=True)
Check if matrix is symmetric matrix, that is square matrix and is equal to its transpose.
By default, simplifications occur before testing symmetry. They can be skipped using ‘simplify=False’; while speeding things a bit, this may however induce false negatives.
Examples
>>> from sympy import Matrix >>> m = Matrix(2, 2, [0, 1, 1, 2]) >>> m Matrix([ [0, 1], [1, 2]]) >>> m.is_symmetric() True
>>> m = Matrix(2, 2, [0, 1, 2, 0]) >>> m Matrix([ [0, 1], [2, 0]]) >>> m.is_symmetric() False
>>> m = Matrix(2, 3, [0, 0, 0, 0, 0, 0]) >>> m Matrix([ [0, 0, 0], [0, 0, 0]]) >>> m.is_symmetric() False
>>> from sympy.abc import x, y >>> m = Matrix(3, 3, [1, x**2 + 2*x + 1, y, (x + 1)**2, 2, 0, y, 0, 3]) >>> m Matrix([ [ 1, x**2 + 2*x + 1, y], [(x + 1)**2, 2, 0], [ y, 0, 3]]) >>> m.is_symmetric() True
If the matrix is already simplified, you may speed-up is_symmetric() test by using ‘simplify=False’.
>>> bool(m.is_symmetric(simplify=False)) False >>> m1 = m.expand() >>> m1.is_symmetric(simplify=False) True
- property space_dimensions
Spatial dimensions.
- space_order
The space order for all components.