Kernels

Kernel interface

class sumpy.kernel.Kernel(dim: int)[source]

Basic kernel interface.

is_complex_valued
is_translation_invariant
dim
get_base_kernel() Kernel[source]

Return the kernel being wrapped by this one, or else self.

replace_base_kernel(new_base_kernel: Kernel) Kernel[source]

Return the base kernel being wrapped by this one, or else new_base_kernel.

prepare_loopy_kernel(loopy_knl)[source]

Apply some changes (such as registering function manglers) to the kernel. Return the new kernel.

get_code_transformer()[source]

Return a function to postprocess the pymbolic expression generated from the result of get_expression() on the way to code generation.

abstract get_expression(dist_vec: ndarray) Expr[source]

Return a sympy expression for the kernel.

postprocess_at_source(expr, avec)[source]

Transform a kernel evaluation or expansion expression in a place where the vector a (something - source) is known. (“something” may be an expansion center or a target.)

The typical use of this function is to apply source-variable derivatives to the kernel.

postprocess_at_target(expr, bvec)[source]

Transform a kernel evaluation or expansion expression in a place where the vector b (target - something) is known. (“something” may be an expansion center or a target.)

The typical use of this function is to apply target-variable derivatives to the kernel.

Parameters:

expr – may be a sympy.core.expr.Expr or a sumpy.derivative_taker.DifferentiatedExprDerivativeTaker.

abstract get_global_scaling_const()[source]

Return a global scaling constant of the kernel. Typically, this ensures that the kernel is scaled so that \(\mathcal L(G)(x)=C\delta(x)\) with a constant of 1, where \(\mathcal L\) is the PDE operator associated with the kernel. Not to be confused with rscale, which keeps expansion coefficients benignly scaled.

get_args() list[KernelArgument][source]

Return list of KernelArgument instances describing extra arguments used by the kernel.

get_source_args() list[KernelArgument][source]

Return list of KernelArgument instances describing extra arguments used by kernel in picking up contributions from point sources.

class sumpy.kernel.KernelArgument(loopy_arg)[source]
loopy_arg

A loopy.KernelArgument instance describing the type, name, and other features of this kernel argument when passed to a generated piece of code.

Symbolic kernels

class sumpy.kernel.ExpressionKernel(dim, expression, global_scaling_const, is_complex_valued)[source]
expression

A pymbolic expression depending on variables d_1 through d_N where N equals dim. (These variables match what is returned from pymbolic.primitives.make_sym_vector() with argument “d”.) Any variable that is not d or a SpatialConstant will be viewed as potentially spatially varying.

global_scaling_const

A constant pymbolic expression for the global scaling of the kernel. Typically, this ensures that the kernel is scaled so that \(\mathcal L(G)(x)=C\delta(x)\) with a constant of 1, where \(\mathcal L\) is the PDE operator associated with the kernel. Not to be confused with rscale, which keeps expansion coefficients benignly scaled.

is_complex_valued
__init__(dim, expression, global_scaling_const, is_complex_valued)[source]
get_expression(scaled_dist_vec)[source]

Return expression as a sumpy.symbolic.Basic.

PDE kernels

class sumpy.kernel.LaplaceKernel(dim)[source]
class sumpy.kernel.BiharmonicKernel(dim)[source]
class sumpy.kernel.HelmholtzKernel(dim, helmholtz_k_name='k', allow_evanescent=False)[source]
class sumpy.kernel.YukawaKernel(dim, yukawa_lambda_name='lam')[source]
class sumpy.kernel.StokesletKernel(dim, icomp, jcomp, viscosity_mu='mu', poisson_ratio='0.5')[source]
class sumpy.kernel.StressletKernel(dim, icomp, jcomp, kcomp, viscosity_mu='mu')[source]
class sumpy.kernel.ElasticityKernel(dim, icomp, jcomp, viscosity_mu='mu', poisson_ratio='nu')[source]
class sumpy.kernel.LineOfCompressionKernel(dim=3, axis=2, viscosity_mu='mu', poisson_ratio='nu')[source]

A kernel for the line of compression or dilatation of constant strength along the axis “axis” from zero to negative infinity. This is used for the explicit solution to half-space Elasticity problem. See [1] for details.

[1]: Mindlin, R.: Force at a Point in the Interior of a Semi-Infinite Solid

https://doi.org/10.1063/1.1745385

Derivatives

These objects wrap other kernels and take derivatives of them in the process.

class sumpy.kernel.DerivativeBase(inner_kernel)[source]
class sumpy.kernel.AxisTargetDerivative(axis, inner_kernel)[source]
class sumpy.kernel.AxisSourceDerivative(axis, inner_kernel)[source]
class sumpy.kernel.DirectionalSourceDerivative(inner_kernel, dir_vec_name=None)[source]
class sumpy.kernel.DirectionalTargetDerivative(inner_kernel, dir_vec_name=None)[source]

Transforming kernels

class sumpy.kernel.KernelMapper[source]
class sumpy.kernel.KernelCombineMapper[source]
class sumpy.kernel.KernelIdentityMapper[source]
class sumpy.kernel.AxisSourceDerivativeRemover[source]
class sumpy.kernel.AxisTargetDerivativeRemover[source]
class sumpy.kernel.SourceDerivativeRemover[source]
class sumpy.kernel.TargetDerivativeRemover[source]
class sumpy.kernel.TargetPointMultiplier(axis, inner_kernel)[source]

Wraps a kernel \(G(x, y)\) and outputs \(x_j G(x, y)\) where \(x, y\) are targets and sources respectively.

class sumpy.kernel.DerivativeCounter[source]