コード例 #1
0
 def symbolic_shape(self):
     """
     The symbolic shape of the object. This includes the domain, halo, and
     padding regions. While halo and padding are known quantities (integers),
     the domain size is given as a symbol.
     """
     halo = [Add(*i) for i in self._size_halo]
     padding = [Add(*i) for i in self._size_padding]
     domain = [i.symbolic_size for i in self.indices]
     ret = tuple(Add(i, j, k) for i, j, k in zip(domain, halo, padding))
     return EnrichedTuple(*ret, getters=self.dimensions)
コード例 #2
0
    def _extent_padding(self):
        """
        The number of grid points in the padding region.
        """
        left = tuple(zip(*self._padding))[0]
        right = tuple(zip(*self._padding))[1]

        Extent = namedtuple('Extent', 'left right')
        extents = tuple(Extent(i, j) for i, j in self._padding)

        return EnrichedTuple(*extents, getters=self.dimensions, left=left, right=right)
コード例 #3
0
ファイル: basic.py プロジェクト: xj361685640/devito
    def _size_nodomain(self):
        """Number of points in the padding+halo region."""
        left = tuple(i for i, _ in np.add(self._halo, self._padding))
        right = tuple(i for _, i in np.add(self._halo, self._padding))

        sizes = tuple(Size(i, j) for i, j in np.add(self._halo, self._padding))

        return EnrichedTuple(*sizes,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #4
0
ファイル: basic.py プロジェクト: xj361685640/devito
    def _offset_owned(self):
        """Number of points before the first and last owned elements."""
        left = tuple(self._offset_domain)
        right = tuple(np.add(self._offset_halo.left, self._size_domain))

        offsets = tuple(Offset(i, j) for i, j in zip(left, right))

        return EnrichedTuple(*offsets,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #5
0
ファイル: basic.py プロジェクト: xj361685640/devito
    def _size_padding(self):
        """Number of points in the padding region."""
        left = tuple(zip(*self._padding))[0]
        right = tuple(zip(*self._padding))[1]

        sizes = tuple(Size(i, j) for i, j in self._padding)

        return EnrichedTuple(*sizes,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #6
0
ファイル: basic.py プロジェクト: xj361685640/devito
    def _size_owned(self):
        """Number of points in the owned region."""
        left = tuple(self._size_halo.right)
        right = tuple(self._size_halo.left)

        sizes = tuple(Size(i.right, i.left) for i in self._size_halo)

        return EnrichedTuple(*sizes,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #7
0
    def symbolic_shape(self):
        """
        The symbolic shape of the object. This includes:

            * the domain, halo, and padding regions. While halo and padding are
              known quantities (integers), the domain size is represented by a symbol.
            * the shifting induced by the ``staggered`` mask.
        """
        symbolic_shape = super(DiscreteFunction, self).symbolic_shape
        ret = tuple(Add(i, -j) for i, j in zip(symbolic_shape, self.staggered))
        return EnrichedTuple(*ret, getters=self.dimensions)
コード例 #8
0
 def aindices(self):
     aindices = []
     for i, fi in zip(self, self.findices):
         if q_monoaffine(i, fi, self.findices):
             aindices.append(fi)
         elif isinstance(i, Dimension):
             aindices.append(i)
         else:
             dims = {i for i in i.free_symbols if isinstance(i, Dimension)}
             aindices.append(dims.pop() if len(dims) == 1 else None)
     return EnrichedTuple(*aindices, getters=self.findices)
コード例 #9
0
    def _extent_halo(self):
        """
        The number of grid points in the halo region.
        """
        left = tuple(zip(*self._halo))[0]
        right = tuple(zip(*self._halo))[1]

        Extent = namedtuple('Extent', 'left right')
        extents = tuple(Extent(i, j) for i, j in self._halo)

        return EnrichedTuple(*extents, left=left, right=right)
コード例 #10
0
ファイル: basic.py プロジェクト: vkrGitHub/devito_fork_vkr
    def _size_halo(self):
        """Number of points in the halo region."""
        left = tuple(zip(*self._halo))[0]
        right = tuple(zip(*self._halo))[1]

        Size = namedtuple('Size', 'left right')
        sizes = tuple(Size(i, j) for i, j in self._halo)

        return EnrichedTuple(*sizes,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #11
0
    def _offset_domain(self):
        """
        The number of grid points between the first (last) allocated element
        (possibly in the halo/padding region) and the first (last) domain element,
        for each dimension.
        """
        left = tuple(np.add(self._extent_halo.left, self._extent_padding.left))
        right = tuple(np.add(self._extent_halo.right, self._extent_padding.right))

        Offset = namedtuple('Offset', 'left right')
        offsets = tuple(Offset(i, j) for i, j in np.add(self._halo, self._padding))

        return EnrichedTuple(*offsets, left=left, right=right)
コード例 #12
0
ファイル: basic.py プロジェクト: vkrGitHub/devito_fork_vkr
    def _offset_halo(self):
        """Number of points before the first and last halo elements."""
        left = tuple(self._size_padding.left)
        right = tuple(
            np.add(np.add(left, self._size_halo.left), self._size_domain))

        Offset = namedtuple('Offset', 'left right')
        offsets = tuple(Offset(i, j) for i, j in zip(left, right))

        return EnrichedTuple(*offsets,
                             getters=self.dimensions,
                             left=left,
                             right=right)
コード例 #13
0
ファイル: types.py プロジェクト: tccw/devito
    def _offset_halo(self):
        """
        The number of grid points between the first (last) allocated element
        (possibly in the halo/padding region) and the first (last) halo element,
        for each dimension.
        """
        left = self._extent_padding.left
        right = self._extent_padding.right

        Offset = namedtuple('Offset', 'left right')
        offsets = tuple(Offset(i, j) for i, j in self._padding)

        return EnrichedTuple(*offsets, getters=self.dimensions, left=left, right=right)
コード例 #14
0
ファイル: basic.py プロジェクト: jakubbober/devito
 def aindices(self):
     retval = []
     for i, fi in zip(self, self.findices):
         dims = {j for j in i.free_symbols if isinstance(j, Dimension)}
         if len(dims) == 1:
             retval.append(dims.pop())
         elif isinstance(i, Dimension):
             retval.append(i)
         elif q_constant(i):
             retval.append(fi)
         else:
             retval.append(None)
     return EnrichedTuple(*retval, getters=self.findices)
コード例 #15
0
    def _size_outhalo(self):
        """Number of points in the outer halo region."""
        if self._distributor is None:
            return self._size_inhalo

        left = [self._distributor.glb_to_loc(d, i, LEFT, strict=False)
                for d, i in zip(self.dimensions, self._size_inhalo.left)]
        right = [self._distributor.glb_to_loc(d, i, RIGHT, strict=False)
                 for d, i in zip(self.dimensions, self._size_inhalo.right)]

        Size = namedtuple('Size', 'left right')
        sizes = tuple(Size(i, j) for i, j in zip(left, right))

        return EnrichedTuple(*sizes, getters=self.dimensions, left=left, right=right)
コード例 #16
0
 def symbolic_shape(self):
     """
     Return the symbolic shape of the object. This includes the padding,
     halo, and domain regions. While halo and padding are known quantities
     (integers), the domain size is represented by a symbol.
     """
     halo_sizes = [sympy.Add(*i, evaluate=False) for i in self._extent_halo]
     padding_sizes = [
         sympy.Add(*i, evaluate=False) for i in self._extent_padding
     ]
     domain_sizes = [i.symbolic_size for i in self.indices]
     ret = tuple(
         sympy.Add(i, j, k, evaluate=False)
         for i, j, k in zip(domain_sizes, halo_sizes, padding_sizes))
     return EnrichedTuple(*ret, getters=self.dimensions)
コード例 #17
0
 def index_mode(self):
     retval = []
     for i, fi in zip(self, self.findices):
         dims = {j for j in i.free_symbols if isinstance(j, Dimension)}
         if len(dims) == 0 and q_constant(i):
             retval.append(AFFINE)
         elif len(dims) == 1:
             candidate = dims.pop()
             if fi in candidate._defines and q_affine(i, candidate):
                 retval.append(AFFINE)
             else:
                 retval.append(IRREGULAR)
         else:
             retval.append(IRREGULAR)
     return EnrichedTuple(*retval, getters=self.findices)
コード例 #18
0
 def _size_domain(self):
     """Number of points in the domain region."""
     return EnrichedTuple(*self.shape, getters=self.dimensions)
コード例 #19
0
ファイル: basic.py プロジェクト: vkrGitHub/devito_fork_vkr
 def indices_ref(self):
     """The reference indices of the object (indices at first creation)."""
     return EnrichedTuple(*self.function.indices, getters=self.dimensions)
コード例 #20
0
 def glb_numb(self):
     """The global indices owned by the calling MPI rank."""
     assert len(self.mycoords) == len(self.decomposition)
     glb_numb = [i[j] for i, j in zip(self.decomposition, self.mycoords)]
     return EnrichedTuple(*glb_numb, getters=self.dimensions)
コード例 #21
0
 def decomposition(self):
     """The Decompositions, one for each decomposed Dimension."""
     return EnrichedTuple(*self._decomposition, getters=self.dimensions)
コード例 #22
0
 def glb_shape(self):
     """Shape of the decomposed domain."""
     return EnrichedTuple(*self._glb_shape, getters=self.dimensions)
コード例 #23
0
 def decomposition(self):
     """The :class:`Decomposition`s, one for each decomposed :class:`Dimension`."""
     return EnrichedTuple(*self._decomposition, getters=self.dimensions)
コード例 #24
0
ファイル: distributed.py プロジェクト: RajatRasal/devito
 def glb_numb(self):
     """Return the global numbering of this process' domain section."""
     assert len(self._comm.coords) == len(self._glb_numbs)
     glb_numb = [i[j] for i, j in zip(self._glb_numbs, self._comm.coords)]
     return EnrichedTuple(*glb_numb, getters=self.dimensions)
コード例 #25
0
 def _size_nopad(self):
     """Number of points in the domain+halo region."""
     sizes = tuple(i+sum(j) for i, j in zip(self._size_domain, self._size_halo))
     return EnrichedTuple(*sizes, getters=self.dimensions)
コード例 #26
0
 def _offset_domain(self):
     """Number of points before the first domain element."""
     offsets = tuple(np.add(self._size_padding.left, self._size_halo.left))
     return EnrichedTuple(*offsets, getters=self.dimensions)
コード例 #27
0
ファイル: distributed.py プロジェクト: RajatRasal/devito
 def glb_shape(self):
     return EnrichedTuple(*self._glb_shape, getters=self.dimensions)