Пример #1
0
    def __init__(self, shape, extent=None, origin=None, dimensions=None,
                 time_dimension=None, dtype=np.float32, comm=None):
        self._shape = as_tuple(shape)
        self.extent = as_tuple(extent or tuple(1. for _ in self.shape))
        self.dtype = dtype
        origin = as_tuple(origin or tuple(0. for _ in self.shape))

        if dimensions is None:
            # Create the spatial dimensions and constant spacing symbols
            assert(self.dim <= 3)
            dim_names = self._default_dimensions[:self.dim]
            dim_spacing = tuple(self._const(name='h_%s' % n, value=v, dtype=self.dtype)
                                for n, v in zip(dim_names, self.spacing))
            self.dimensions = tuple(SpaceDimension(name=n, spacing=s)
                                    for n, s in zip(dim_names, dim_spacing))
        else:
            self.dimensions = dimensions

        self.origin = tuple(self._const(name='o_%s' % d.name, value=v, dtype=self.dtype)
                            for d, v in zip(self.dimensions, origin))
        # TODO: Raise proper exceptions and logging
        assert (self.dim == len(self.origin) == len(self.extent) == len(self.spacing))
        # Store or create default symbols for time and stepping dimensions
        if time_dimension is None:
            spacing = self._const(name='dt', dtype=self.dtype)
            self.time_dim = TimeDimension(name='time', spacing=spacing)
            self.stepping_dim = self._make_stepping_dim(self.time_dim, name='t')
        elif isinstance(time_dimension, TimeDimension):
            self.time_dim = time_dimension
            self.stepping_dim = self._make_stepping_dim(self.time_dim)
        else:
            raise ValueError("`time_dimension` must be None or of type TimeDimension")

        self._distributor = Distributor(self.shape, self.dimensions, comm)
Пример #2
0
    def __init__(self,
                 shape,
                 extent=None,
                 origin=None,
                 dimensions=None,
                 time_dimension=None,
                 dtype=np.float32,
                 subdomains=None,
                 comm=None):
        self._shape = as_tuple(shape)
        self._extent = as_tuple(extent or tuple(1. for _ in self.shape))
        self._dtype = dtype

        if dimensions is None:
            # Create the spatial dimensions and constant spacing symbols
            assert (self.dim <= 3)
            dim_names = self._default_dimensions[:self.dim]
            dim_spacing = tuple(
                self._const(name='h_%s' % n, value=v, dtype=self.dtype)
                for n, v in zip(dim_names, self.spacing))
            self._dimensions = tuple(
                SpaceDimension(name=n, spacing=s)
                for n, s in zip(dim_names, dim_spacing))
        else:
            self._dimensions = dimensions

        # Initialize SubDomains
        subdomains = tuple(i for i in (Domain(), Interior(),
                                       *as_tuple(subdomains)))
        for i in subdomains:
            i.__subdomain_finalize__(self.dimensions, self.shape)
        self._subdomains = subdomains

        origin = as_tuple(origin or tuple(0. for _ in self.shape))
        self._origin = tuple(
            self._const(name='o_%s' % d.name, value=v, dtype=self.dtype)
            for d, v in zip(self.dimensions, origin))

        # Sanity check
        assert (self.dim == len(self.origin) == len(self.extent) == len(
            self.spacing))

        # Store or create default symbols for time and stepping dimensions
        if time_dimension is None:
            spacing = self._const(name='dt', dtype=self.dtype)
            self._time_dim = TimeDimension(name='time', spacing=spacing)
            self._stepping_dim = self._make_stepping_dim(self.time_dim,
                                                         name='t')
        elif isinstance(time_dimension, TimeDimension):
            self._time_dim = time_dimension
            self._stepping_dim = self._make_stepping_dim(self.time_dim)
        else:
            raise ValueError(
                "`time_dimension` must be None or of type TimeDimension")

        self._distributor = Distributor(self.shape, self.dimensions, comm)
Пример #3
0
    def __init__(self,
                 shape,
                 extent=None,
                 origin=None,
                 dimensions=None,
                 time_dimension=None,
                 dtype=np.float32):
        self.shape = as_tuple(shape)
        self.extent = as_tuple(extent or tuple(1. for _ in shape))
        self.dtype = dtype
        origin = as_tuple(origin or tuple(0. for _ in shape))

        if dimensions is None:
            # Create the spatial dimensions and constant spacing symbols
            assert (self.dim <= 3)
            dim_names = self._default_dimensions[:self.dim]
            dim_spacing = tuple(
                Constant(name='h_%s' % name, value=val)
                for name, val in zip(dim_names, self.spacing))
            self.dimensions = tuple(
                SpaceDimension(name=name, spacing=spc)
                for name, spc in zip(dim_names, dim_spacing))
        else:
            self.dimensions = dimensions

        self.origin = tuple(
            Constant(name='o_%s' % dim.name, value=val)
            for dim, val in zip(self.dimensions, origin))
        # TODO: Raise proper exceptions and logging
        assert (self.dim == len(self.origin) == len(self.extent) == len(
            self.spacing))
        # Store or create default symbols for time and stepping dimensions
        if time_dimension is None:
            self.time_dim = TimeDimension(name='time',
                                          spacing=Constant(name='dt'))
            self.stepping_dim = SteppingDimension(name='t',
                                                  parent=self.time_dim)
        elif isinstance(time_dimension, TimeDimension):
            self.time_dim = time_dimension
            self.stepping_dim = SteppingDimension(name='%s_s' %
                                                  time_dimension.name,
                                                  parent=self.time_dim)
        else:
            raise ValueError(
                "`time_dimension` must be None or of type TimeDimension")