从盒子中的各向同性湍流场计算湍流能量谱

计算科学 流体动力学 数值分析 正则 fftw
2021-12-17 15:18:24

我使用伪光谱方法在给定的时间从 DNS 获得了我的 3 维速度流场 u、v 和 w。我需要计算能谱(在傅立叶空间中)作为波数大小的函数,即E(k)作为一个函数k. 我使用的能谱方程如下:

E(k)=u^iu^idA(k)

在哪里dA(k)=4πk2dk,u^i是的 FFTu^iu^i是转置共轭u^i.k=kx2+ky2+kz2, 在哪里ki是沿 i 的波数。它从N/2N/21. FFT 是使用 FFTW 进行的。

在数值上,我创建了 2 个 3 维数组,其中包含跨越整个 3D 域E的能谱和mk波数幅度。它们被初始化如下(nx,ny,nz是沿线的点数x,yz轴):

do k = 1, nz
  do j = 1, ny
    do i = 1, nx
      mk(i,j,k) = dsqrt(kx(i)**2 + ky(j)**2 + kz(k)**2)
      E(i,j,k) = 4*pi*(mk(i,j,k)**2)*(dconjg(uhat(i,j,k))*uhat(i,j,k)+dconjg(vhat(i,j,k))*vhat(i,j,k)+dconjg(what(i,j,k))*what(i,j,k))
    end do
  end do
end do

现在是令人困惑的部分。我需要执行一种称为“装箱”的技术。这涉及将波数范围分成适当相等的部分,并取落入每个部分的能量的平均值。为此,我将 2 个 3D 数组折叠成长Emk为 1D 的数组1:nx*ny*nz然后,我按 mk 的升序对 E 进行排序(按波数幅度的升序对能谱进行排序)。最后,我添加E了特定 bin 范围之间的连续值,除以添加的值的数量并写入文件以进行绘图。

在此处输入图像描述 红色曲线表示正确的结果。绿色的是我的代码产生的结果。可以看出,绿色显示了总体趋势,但还不够。还会出现几个尖峰。谁能指出我程序中的差异?我愿意应要求分享代码。

编辑:在实施詹姆斯的建议后,我的结果有了显着改善。(此外,我在将参考文献中的结果数字化时也犯了一个错误)。改进后的结果如下所示。

但是,参考曲线仍然比我的曲线多走几个波数。对于下一个波数,我的代码会产生一个尖峰。

在此处输入图像描述

1个回答

导致高波数光谱参差不齐的一个问题是那里的采样不足。例如,考虑您的分箱过程的 2D 模拟:

在此处输入图像描述

您不想从红色区域采样,因为当您越过大小半径时,它们的采样率会越来越低|kx|=|ky|.