From cc9f83363e2a599c964fdc3dabab3f7329e6b7d5 Mon Sep 17 00:00:00 2001 From: Peter Fu Date: Tue, 30 May 2017 09:15:19 -0500 Subject: [PATCH] Add grad operator, document --- pytential/symbolic/primitives.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pytential/symbolic/primitives.py b/pytential/symbolic/primitives.py index 57b3ff97..bcf94008 100644 --- a/pytential/symbolic/primitives.py +++ b/pytential/symbolic/primitives.py @@ -84,6 +84,12 @@ Elementary numerics Calculus ^^^^^^^^ .. autoclass:: Derivative +.. autofunction:: dd_axis +.. autofunction:: d_dx +.. autofunction:: d_dy +.. autofunction:: d_dz +.. autofunction:: grad_mv +.. autofunction:: grad Layer potentials ^^^^^^^^^^^^^^^^ @@ -452,6 +458,9 @@ class Derivative(DerivativeBase): def dd_axis(axis, ambient_dim, operand): + """Return the derivative along (XYZ) axis *axis* + (in *ambient_dim*-dimensional space) of *operand*. + """ d = Derivative() unit_vector = np.zeros(ambient_dim) @@ -469,6 +478,23 @@ d_dy = partial(dd_axis, 1) d_dz = partial(dd_axis, 2) +def grad_mv(ambient_dim, operand): + """Return the *ambient_dim*-dimensional gradient of + *operand* as a :class:`pymbolic.geometric_algebra.MultiVector`. + """ + + d = Derivative() + return d.resolve( + d.dnabla(ambient_dim) * d(operand)) + + +def grad(ambient_dim, operand): + """Return the *ambient_dim*-dimensional gradient of + *operand* as a :class:`numpy.ndarray`. + """ + return grad_mv(ambient_dim, operand).as_vector() + + # {{{ potentials def hashable_kernel_args(kernel_arguments): -- GitLab