From 48eda9aa637c8e4ad305014a041f06fc74b3da9c Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 7 Oct 2015 07:38:04 -0500 Subject: [PATCH] Tweak Discretization.empty, add .zeros --- meshmode/discretization/__init__.py | 28 ++++++++++++++++++++------- meshmode/discretization/connection.py | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/meshmode/discretization/__init__.py b/meshmode/discretization/__init__.py index 60887532..7ff136de 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 251ef6c9..f27a0e2f 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") -- GitLab