SubDomain
self, *args, **kwargs) SubDomain(
Base class to define Grid subdomains.
To create a new SubDomain, all one needs to do is overriding :meth:define
. This method takes as input a set of Dimensions and produce a mapper
``M : Dimensions -> {d, ('left', N), ('middle', N, M), ('right', N)}``
so that:
* If ``M(d) = d``, then the SubDomain spans the entire Dimension ``d``.
* If ``M(d) = ('left', N)``, then the SubDomain spans a contiguous
region of ``N`` points starting at ``d``'s left extreme.
* ``M(d) = ('right', N)`` is analogous to the case above.
* If ``M(d) = ('middle', N, M)``, then the SubDomain spans a contiguous
region of ``d_size - (N + M)`` points starting at ``N`` and finishing
at ``d_sizeM - M``.
Examples
An “Inner” SubDomain, which spans the entire domain except for an exterior boundary region of thickness=3
, can be implemented as follows
>>> from devito import SubDomain
>>> class Inner(SubDomain):
= 'inner'
... name def define(self, dimensions):
... return {d: ('middle', 3, 3) for d in dimensions} ...
Like before, but now spanning the entire y
Dimension of a three-dimensional grid
>>> class InnerY(SubDomain):
= 'inner_y'
... name def define(self, dimensions):
... = dimensions
... x, y, z return {x: ('middle', 3, 3), y: y, z: ('middle', 3, 3)} ...
See Also
Domain : An example of preset SubDomain. Interior : An example of preset Subdomain.
Methods
Name | Description |
---|---|
define | Parametrically describe the SubDomain w.r.t. a generic Grid. |
define
define(dimensions)
Parametrically describe the SubDomain w.r.t. a generic Grid.
Notes
This method should be overridden by each SubDomain subclass. For more information, refer to SubDomain.__doc__
.