我使用 FFTW 开发了 Navier-Stokes 方程的伪谱求解器。我根据标准三角函数(正弦、余弦及其组合)测试了我对 NS 方程右手边 (RHS) 的表述。例如,我设置
density = sin 5x
x_velocity = 5cos 5y + 6sin7z
y_velocity = 4sin4y + cos x
z_velocity = 1
pressure = cos z
将这些值提供给求解器,它计算了 NS 方程的 RHS。我手动做了同样的事情,并将结果与求解器获得的结果进行了比较。结果非常一致。准确答案与求解器计算的结果之间的最大误差E-13约为128*128*128 grid.
接下来,我使用了以下形式的不同功能:
density = constant1+constant2*(tanh(x-constant3)-tanh(x-constant4))
x_velocity = 0
y_velocity = 0
z_velocity = 0
temperature = 1
pressure -> from ideal gas equation connecting density, temperature and pressure
密度根据常数适当调整,周期为2*pi。根据给定的这些值计算 x 动量 Navier Stokes 的 RHS 并将其与我的答案(手动计算)进行比较,我得到了E-03.
此外,使用这些值作为变量的初始值并通过龙格-库塔 4 方案及时向前移动,我得到的密度值似乎很快就发散了。大约 30 个时间步后,我得到了 NaN。
当使用非三角周期函数时,我注意到精度下降有什么具体原因吗?
1.与为什么我的代码在及时前进时似乎会产生不稳定的结果有关吗?
我不介意在此处粘贴代码,但它非常大。
我想我会绘制初始密度及其变化。但事实证明我不能,因为我没有足够的声誉这样做。
初始图 (@t = 0.0s) 是一个密度图,看起来像一个矩形波,其中 tanh 函数用于平滑各个角处的波。
在 t = 0.10 秒左右(时间步长为 0.01 秒,因此,经过 10 次迭代),它会出现尖峰并变得不可微(仍然是连续的)。

