diff --git a/meshmode/discretization/__init__.py b/meshmode/discretization/__init__.py index 6088753222fcdfde70e51b0cca237f2af2dd9f78..7ff136de9c3394dd1068cfe8f85e70c1f661ffbe 100644 --- a/meshmode/discretization/__init__.py +++ b/meshmode/discretization/__init__.py @@ -26,6 +26,7 @@ import numpy as np from pytools import memoize_method, memoize_method_nested import loopy as lp import pyopencl as cl +import pyopencl.array # noqa __doc__ = """ .. autoclass:: ElementGroupBase @@ -127,7 +128,9 @@ class Discretization(object): .. attribute :: groups - .. method:: empty(dtype, queue=None, extra_dims=None) + .. automethod:: empty + + .. automethod:: zeros .. method:: nodes() @@ -141,11 +144,6 @@ class Discretization(object): """ def __init__(self, cl_ctx, mesh, group_factory, real_dtype=np.float64): - """ - :arg order: A polynomial-order-like parameter passed unmodified to - :attr:`group_class`. See subclasses for more precise definition. - """ - self.cl_context = cl_ctx self.mesh = mesh @@ -170,7 +168,20 @@ class Discretization(object): def ambient_dim(self): return self.mesh.ambient_dim - def empty(self, dtype, queue=None, extra_dims=None): + def empty(self, queue=None, dtype=None, extra_dims=None): + """Return an empty DOF vector. + + :arg dtype: type special value 'c' will result in a + vector of dtype :attr:`self.complex_dtype`. If + *None* (the default), a real vector will be returned. + """ + if dtype is None: + dtype = self.real_dtype + elif dtype == "c": + dtype = self.complex_dtype + else: + dtype = np.dtype(dtype) + if queue is None: first_arg = self.cl_context else: @@ -182,6 +193,9 @@ class Discretization(object): return cl.array.empty(first_arg, shape, dtype=dtype) + def zeros(self, queue, dtype=None, extra_dims=None): + return self.empty(queue, dtype, extra_dims).fill(0) + def num_reference_derivative( self, queue, ref_axes, vec): @memoize_method_nested diff --git a/meshmode/discretization/connection.py b/meshmode/discretization/connection.py index 251ef6c961098041354d364e9fc61039595c313d..f27a0e2fa28e7f388f5655e1dae60949f9729d1c 100644 --- a/meshmode/discretization/connection.py +++ b/meshmode/discretization/connection.py @@ -215,7 +215,7 @@ class DiscretizationConnection(object): if not isinstance(vec, cl.array.Array): return vec - result = self.to_discr.empty(vec.dtype) + result = self.to_discr.empty(dtype=vec.dtype) if vec.shape != (self.from_discr.nnodes,): raise ValueError("invalid shape of incoming resampling data")