SparseTimeFunction
- class devito.types.SparseTimeFunction(*args)[source]
Bases:
AbstractSparseTimeFunction
,SparseFunction
Tensor symbol representing a space- and time-varying sparse array in symbolic equations.
Like SparseFunction, SparseTimeFunction carries multi-dimensional data that are not aligned with the computational grid. As such, each data value is associated some coordinates. A SparseTimeFunction provides symbolic interpolation routines to convert between TimeFunctions and sparse data points. These are based upon standard [bi,tri]linear interpolation.
- Parameters:
name (str) – Name of the symbol.
npoint (int) – Number of sparse points.
nt (int) – Number of timesteps along the time Dimension.
grid (Grid) – The computational domain from which the sparse points are sampled.
coordinates (np.ndarray, optional) – The coordinates of each sparse point.
space_order (int, optional) – Discretisation order for space derivatives. Defaults to 0.
time_order (int, optional) – Discretisation order for time derivatives. Defaults to 1.
shape (tuple of ints, optional) – Shape of the object. Defaults to
(nt, npoint)
.dimensions (tuple of Dimension, optional) – Dimensions associated with the object. Only necessary if the SparseFunction defines a multi-dimensional tensor.
dtype (data-type, optional) – Any object that can be interpreted as a numpy data type. Defaults to
np.float32
.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.
Examples
Creation
>>> from devito import Grid, SparseTimeFunction >>> grid = Grid(shape=(4, 4)) >>> sf = SparseTimeFunction(name='sf', grid=grid, npoint=2, nt=3) >>> sf sf(time, p_sf)
Inspection
>>> sf.data Data([[0., 0.], [0., 0.], [0., 0.]], dtype=float32) >>> sf.coordinates sf_coords(p_sf, d) >>> sf.coordinates_data array([[0., 0.], [0., 0.]], dtype=float32)
Symbolic interpolation routines
>>> from devito import TimeFunction >>> f = TimeFunction(name='f', grid=grid) >>> exprs0 = sf.interpolate(f) >>> exprs1 = sf.inject(f, sf)
Notes
The parameters must always be given as keyword arguments, since SymPy uses
*args
to (re-)create the Dimension arguments of the symbolic object.- property data
The domain data values, as a numpy.ndarray.
Elements are stored in row-major format.
Notes
With this accessor you are claiming that you will modify the values you get back. If you only need to look at the values, use
data_ro()
instead.
- property data_domain
The domain data values.
Elements are stored in row-major format.
Notes
Alias to
self.data
.With this accessor you are claiming that you will modify the values you get back. If you only need to look at the values, use
data_ro_domain()
instead.
- property data_ro_domain
Read-only view of the domain data values.
- property data_ro_with_halo
Read-only view of the domain+outhalo data values.
- property data_with_halo
The domain+outhalo data values.
Elements are stored in row-major format.
Notes
With this accessor you are claiming that you will modify the values you get back. If you only need to look at the values, use
data_ro_with_halo()
instead.
- property dimensions
Tuple of Dimensions representing the object indices.
- property dtype
The data type of the object in the generated code, represented as a Python class:
numpy.dtype: basic data types. For example, np.float64 -> double.
ctypes: composite objects (e.g., structs), foreign types.
- property grid
The Grid on which the discretization occurred.
- guard(expr=None)
Generate guarded expressions, that is expressions that are evaluated by an Operator only if certain conditions are met. The introduced condition, here, is that all grid points in the support of a sparse value must fall within the grid domain (i.e., not on the halo).
- Parameters:
expr (expr-like, optional) – Input expression, from which the guarded expression is derived. If not specified, defaults to
self
.
- inject(field, expr, u_t=None, p_t=None, implicit_dims=None)[source]
Generate equations injecting an arbitrary expression into a field.
- Parameters:
field (Function) – Input field into which the injection is performed.
expr (expr-like) – Injected expression.
u_t (expr-like, optional) – Time index at which the interpolation is performed.
p_t (expr-like, optional) – Time index at which the result of the interpolation is stored.
implicit_dims (Dimension or list of Dimension, optional) – An ordered list of Dimensions that do not explicitly appear in the injection expression, but that should be honored when constructing the operator.
- interpolate(expr, u_t=None, p_t=None, increment=False)[source]
Generate equations interpolating an arbitrary expression into
self
.- Parameters:
expr (expr-like) – Input expression to interpolate.
u_t (expr-like, optional) – Time index at which the interpolation is performed.
p_t (expr-like, optional) – Time index at which the result of the interpolation is stored.
increment (bool, optional) – If True, generate increments (Inc) rather than assignments (Eq).
- property name
The name of the object.
- shape
Shape of the domain region. The domain constitutes the area of the data written to by an Operator.
Notes
In an MPI context, this is the local domain region shape.
- property space_order
The space order.
- property time_order
The time order.