The kernel truncation method (KTM) is a commonly-used algorithm to compute the convolution-type nonlocal potential $\Phi(x)=(U\ast \rho)(x), ~x \in {\mathbb R^d}$, where the convolution kernel $U(x)$ might be singular at the origin and/or far-field and the density $\rho(x)$ is smooth and fast-decaying. In KTM, in order to capture the Fourier integrand's oscillations that is brought by the kernel truncation, one needs to carry out a zero-padding of the density, which means a larger physical computation domain and a finer mesh in the Fourier space by duality. The empirical fourfold zero-padding [ Vico et al J. Comput. Phys. (2016) ] puts a heavy burden on memory requirement especially for higher dimension problems. In this paper, we derive the optimal zero-padding factor, that is, $\sqrt{d}+1$, for the first time together with a rigorous proof. The memory cost is greatly reduced to a small fraction, i.e., $(\frac{\sqrt{d}+1}{4})^d$, of what is needed in the original fourfold algorithm. For example, in the precomputation step, a double-precision computation on a $256^3$ grid requires a minimum $3.4$ Gb memory with the optimal threefold zero-padding, while the fourfold algorithm requires around $8$ Gb where the reduction factor is $\frac{37}{64}\approx \frac{3}{5}$. Then, we present the error estimates of the potential and density in $d$ dimension. Next, we re-investigate the optimal zero-padding factor for the anisotropic density. Finally, extensive numerical results are provided to confirm the accuracy, efficiency, optimal zero-padding factor for the anisotropic density, together with some applications to different types of nonlocal potential, including the 1D/2D/3D Poisson, 2D Coulomb, quasi-2D/3D Dipole-Dipole Interaction and 3D quadrupolar potential.
翻译:内核蒸馏法 (KTM) 是一种常用的算法, 用来计算变异型的非本地潜在 $\ Phi(x) = (U\st\\rho) (x), ~x = 在 mathbb Rid} $(x) $ 美元, 在来源和/或远处, 密度 $\rho(x) 平滑和快速下降 。 在 KTM 中, 为了捕捉 Freier Integrand 的振动 $2x(x) = Phi(x) =(x) 3x(x) =(x) 3x(x) (x) (x) ), ~xxx(x) (x) (x) 美元, 在二元空间里, 圆内, eu exxx(x(x) (x) (xx) (x) (x) (x(xx) (x) (x) (x) (x(x) (x) (x) (x(x) (x) (x) (x(x(x))) (x) (x(x(x))) (x(x(x(x(x)))) (x(x(x)))) (x(x(x(x))))) (x) (x(x(x) (x(x(x)) (x(x(x(x(x)))))))) (x(x(x(x(x(x(x(x(x(x))))))))))))) (x(x(x(x(x(x(x(x))))))))) (x(x(x(x(x(x)))))) (x(x(x(x))))))) (x(x(x(x(x(x(x(x(x(x(x))))))))))) ((x)))) (x(x(x(x(x(x(x(x)))) ((x))))