将 FFTW 与反周期边界条件结合使用

问题描述 投票:0回答:1

我正在用 C++ 编写晶格规范理论模拟,为了计算可观测量,我需要计算具有反周期边界条件的光子场 A_mu 的 3d 拉普拉斯算子的格林函数。所以允许的反周期动量集是 (pi/L)(2k+1), k ∈ (0..L-1)。我用傅里叶变换编写了并行代码,但它太慢了,不适合计算。我想知道可以使用 FFTW(以及一般的 DFT)来完成此类任务吗?

c++ fft fftw
1个回答
0
投票

将数组大小加倍,从

L
2*L
,并使用反周期条件
f(x+L) = -f(x)
填充后半部分。在多维设置中,您可以依次对每个维度执行此操作。您现在可以计算 FFT、根据需要对其进行操作并计算 IFFT。结果的前半部分是与您的域相对应的部分,另一半您只需忽略即可。

根据您在频域中应用的操作,您可能会使用较小的变换大小:例如,如果您的操作需要在每个数据点周围进行

K
采样以获得合理的近似值,那么您可以使用以下内容填充数据每侧都有
K
样本(左侧的填充也可以放在数组的末尾,因为 FFT 假定周期性)。这会留下从填充数组中最左边的值到最右边的值的边缘效应,但这种边缘效应发生在远离域的
K
样本处,因此对其影响不大。如果
K
接近
L/2
或更大,则将数组大小加倍是更简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.