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)
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)
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")