我正在用 C++ 编写晶格规范理论模拟,为了计算可观测量,我需要计算具有反周期边界条件的光子场 A_mu 的 3d 拉普拉斯算子的格林函数。所以允许的反周期动量集是 (pi/L)(2k+1), k ∈ (0..L-1)。我用傅里叶变换编写了并行代码,但它太慢了,不适合计算。我想知道可以使用 FFTW(以及一般的 DFT)来完成此类任务吗?
将数组大小加倍,从
L
到 2*L
,并使用反周期条件 f(x+L) = -f(x)
填充后半部分。在多维设置中,您可以依次对每个维度执行此操作。您现在可以计算 FFT、根据需要对其进行操作并计算 IFFT。结果的前半部分是与您的域相对应的部分,另一半您只需忽略即可。
根据您在频域中应用的操作,您可能会使用较小的变换大小:例如,如果您的操作需要在每个数据点周围进行
K
采样以获得合理的近似值,那么您可以使用以下内容填充数据每侧都有 K
样本(左侧的填充也可以放在数组的末尾,因为 FFT 假定周期性)。这会留下从填充数组中最左边的值到最右边的值的边缘效应,但这种边缘效应发生在远离域的 K
样本处,因此对其影响不大。如果 K
接近 L/2
或更大,则将数组大小加倍是更简单的解决方案。