Splittings
A splitting bundles the softening function and decomposition parameters matched to a specific kernel. It splits $K = K_0 + K_1 + \dots + K_L$ where $K_0$ has compact support $|r| \le a$ and each $K_l$ is smooth (and itself compactly supported for $l < L$).
A splitting s must implement:
short_range(s, r)→ $K_0(r)$long_range_level(s, l, r)→ $K_l(r)$ for $l = 1, \dots, L-1$top_level(s, r)→ $K_L(r)$short_range_grad,long_range_level_grad,top_level_gradrequires_neutralising_background(s)→Bool
MultilevelSummation.HardyC2Cubic — Type
HardyC2Cubic{T}(a::T, L::Int)Hardy et al. 2015 C² cubic softening / splitting matched to the Coulomb kernel 1/r. The kernel is decomposed as
k_0(r) = 1/|r| - (1/a₁) γ(|r|/a₁) , a₁ = a
k_l(r) = (1/aₗ) γ(|r|/aₗ) - (1/aₗ₊₁) γ(|r|/aₗ₊₁) , l = 1,…,L-1
k_L(r) = (1/a_L) γ(|r|/a_L)with aₗ = 2^{l-1} a and the C² cubic softening
γ(R) = 1 - (1/2)(R² - 1) + (3/8)(R² - 1)² for R ≤ 1
γ(R) = 1/R for R > 1Valid only when paired with Coulomb. Compatibility is verified at calculator construction; here we just supply the components.
MultilevelSummation.short_range — Function
short_range(splitting, r::SVector{D,T}) -> TThe short-range kernel component K_0(r) of a kernel splitting, supported on |r| ≤ a (the splitting's cutoff).
MultilevelSummation.long_range_level — Function
long_range_level(splitting, l::Integer, r::SVector{D,T}) -> TThe level-l "middle" kernel component K_l(r) of a kernel splitting, defined for l = 1, …, L-1. Compactly supported on |r| ≤ 2^l a.
MultilevelSummation.top_level — Function
top_level(splitting, r::SVector{D,T}) -> TThe top-level kernel component K_L(r) of a kernel splitting. Not compactly supported in general (handled by direct summation on the top grid).
MultilevelSummation.short_range_grad — Function
short_range_grad(splitting, r::SVector{D,T}) -> SVector{D,T}The gradient of short_range with respect to r.
MultilevelSummation.long_range_level_grad — Function
long_range_level_grad(splitting, l::Integer, r::SVector{D,T}) -> SVector{D,T}The gradient of long_range_level with respect to r.
MultilevelSummation.top_level_grad — Function
top_level_grad(splitting, r::SVector{D,T}) -> SVector{D,T}The gradient of top_level with respect to r.
MultilevelSummation.requires_neutralising_background — Function
requires_neutralising_background(splitting) -> BoolWhether the splitting requires zeroing the (single-point) top-level grid charge for fully periodic systems. true for the Coulomb-matched HardyC2Cubic splitting; false for splittings of fast-decaying kernels.
MultilevelSummation.level_scale — Function
level_scale(splitting, l::Integer) -> TThe kernel-scale parameter a_l = 2^{l-1} · a at level l of the splitting.