Skip to content

Commit 9240d4f

Browse files
committed
docs: clean up docs for HeatKernel
1 parent e9609c6 commit 9240d4f

1 file changed

Lines changed: 29 additions & 24 deletions

File tree

sumpy/kernel.py

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,61 +1612,66 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
16121612

16131613
@dataclass(frozen=True, repr=False)
16141614
class HeatKernel(ExpressionKernel):
1615-
r"""The Green's function for the heat equation given by
1616-
:math:`e^{-r^2/{4 \alpha t}}/\sqrt{(4 \pi \alpha t)^d}`
1617-
where :math:`d` is the number of spatial dimensions.
1615+
r"""The Green's function for the heat equation.
1616+
1617+
.. math::
1618+
1619+
\frac{\partial}{\partial t} K(t, \mathbf{x}, \mathbf{y})
1620+
- \alpha \Delta K(t, \mathbf{x}, \mathbf{y})
1621+
= \delta(t) \delta(\mathbf{x} - \mathbf{y})
16181622
16191623
.. note::
16201624
1621-
This kernel cannot be used in an FMM yet and can only
1622-
be used in expansions and evaluations that occur forward
1623-
in the time dimension.
1625+
This kernel cannot be used in an FMM yet and can only be used in
1626+
expansions and evaluations that occur forward in the time dimension.
16241627
"""
1625-
heat_alpha_name: str
16261628

16271629
mapper_method: ClassVar[str] = "map_heat_kernel"
16281630

1631+
heat_alpha_name: str
1632+
16291633
def __init__(self, spatial_dims: int, heat_alpha_name: str = "alpha"):
16301634
dim = spatial_dims + 1
1635+
alpha = sym.SpatialConstant(heat_alpha_name)
1636+
16311637
d = make_sym_vector("d", dim)
16321638
t = d[-1]
1633-
r = pymbolic_real_norm_2(d[:-1])
1634-
alpha = SpatialConstant(heat_alpha_name)
1639+
r = sym.pymbolic_real_norm_2(d[:-1])
1640+
16351641
expr = var("exp")(-r**2/(4 * alpha * t)) / var("sqrt")(t**(dim - 1))
16361642
scaling = 1/var("sqrt")((4*var("pi")*alpha)**(dim - 1))
16371643

1638-
super().__init__(
1639-
dim,
1640-
expression=expr,
1641-
global_scaling_const=scaling,
1642-
)
1643-
1644+
super().__init__(dim, expression=expr, global_scaling_const=scaling)
16441645
object.__setattr__(self, "heat_alpha_name", heat_alpha_name)
16451646

1647+
@override
1648+
def __reduce__(self) -> tuple[object, ...]:
1649+
return (self.__class__, (self.dim - 1, self.heat_alpha_name))
1650+
16461651
@property
16471652
@override
16481653
def is_complex_valued(self) -> bool:
16491654
return False
16501655

16511656
@override
1652-
def __repr__(self):
1657+
def __str__(self):
16531658
return f"HeatKnl{self.dim - 1}D"
16541659

16551660
@override
16561661
def get_args(self):
16571662
return [
1658-
KernelArgument(
1659-
loopy_arg=lp.ValueArg(self.heat_alpha_name, np.float64),
1660-
)]
1663+
KernelArgument(loopy_arg=lp.ValueArg(self.heat_alpha_name, np.float64))
1664+
]
16611665

16621666
@override
1663-
def get_pde_as_diff_op(self):
1667+
def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
16641668
from sumpy.expansion.diff_op import diff, laplacian, make_identity_diff_op
1669+
16651670
alpha = sym.Symbol(self.heat_alpha_name)
16661671
w = make_identity_diff_op(self.dim - 1, time_dependent=True)
1667-
time_diff = [0]*self.dim
1668-
time_diff[-1] = 1
1669-
return diff(w, tuple(time_diff)) - laplacian(w) * alpha
1672+
t_mi = (*([0] * (self.dim - 1)), 1)
1673+
1674+
return diff(w, t_mi) - alpha * laplacian(w)
16701675

16711676

16721677
# }}}
@@ -2489,7 +2494,7 @@ def map_expression_kernel(self, kernel: ExpressionKernel) -> ScalarKernel:
24892494
map_stresslet_kernel: Callable[[Self, StressletKernel], ScalarKernel] = map_expression_kernel # noqa: E501
24902495
map_brinkmanlet_kernel: Callable[[Self, BrinkmanletKernel], ScalarKernel] = map_expression_kernel # noqa: E501
24912496
map_brinkman_stress_kernel: Callable[[Self, BrinkmanStressKernel], ScalarKernel] = map_expression_kernel # noqa: E501
2492-
map_heat_kernel: Callable[[Self, HeatKernel], Kernel] = map_expression_kernel
2497+
map_heat_kernel: Callable[[Self, HeatKernel], ScalarKernel] = map_expression_kernel
24932498

24942499
def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> ScalarKernel:
24952500
return type(kernel)(kernel.axis, self.rec(kernel.inner_kernel))

0 commit comments

Comments
 (0)