使用有限差分的方形板上二维瞬态传热的 V 循环多重网格

计算科学 有限差分 多重网格 传播热量
2021-12-24 09:44:21

我目前正在开发一个程序来使用 V 循环多重网格解决方形板上的 2D 瞬态热传导。虽然我的程序能够达到稳态解,但它的计算时间比使用 Gauss-seidel 方法运行问题要长。

问题案例:0.1 m x 0.1 m 的方形板,温度固定。顶部:20°C,其他三边为 40°C。假设材料属性恒定,不产生内部热量,且网格长度相等Δx=Δy.

参数:热扩散(α=23.1×106) (现在使用钢作为指导),Δt=0.01

方法:隐式有限差分法。

T2(i,j)=T1+FO(T2(i1,j)+T2(i+1,j)+T2(i,j+1)+T2(i,j1)1+4FO

在哪里FO是傅立叶数αΔt/Δx2.

  • 第 1 步:预平滑 - 使用上面显示的隐式有限差分法。该问题通过 2 个红黑高斯赛德尔周期平滑。

  • 第 2 步:计算残差 - 使用计算残差

res=T1+FO[T2(i1,j)+T2(i+1,j)+T2(i,j+1)+T2(i,j1)]1+4FOT2(i,j)

  • 步骤 3:使用全权重限制残差

  • 第 4 步:求解残差方程,误差的初始猜测为零。我通过使用解决它

    error(i,j)=res(i,j)+FO[error(i1,j)+error(i+1,j)+error(i,j1)+error(i,j+1)]1+4FO

我不确定我是否使用正确的方程来求解残差方程并且随着网格尺寸的减小Δx因此将增加傅立叶数 (FO) 会改变 。所以我相信这可能是我的程序的问题,但我不确定,因为没有很多关于此的信息。(我一直在寻找几个星期)。我将非常感谢你们的帮助。如果有人需要任何其他信息,请发表评论。 错误减少率

2个回答

关于您的多重网格问题比 Gauss-Seidel 花费更长的时间:

  1. 可能是您没有非常有效地对插值/限制操作进行编码。您是否确保充分利用矩阵的稀疏性?我们将粗网格算子写成类似 RAI,但您不应该直接将矩阵相乘。这三个都是稀疏矩阵,你可以通过聪明地节省很多乘法。

  2. 在您的图中,multigrid 收敛的迭代次数比 GS 少,因此它正在做一些事情——在大多数情况下,您需要的迭代次数少于使用 multigrid 的一半。它收敛到正确的答案,所以这让我相信你可能已经正确编码了它。但是,GS 似乎根本没有进行很多迭代。20 次迭代对于 GS 来说并不算多。您从多重网格中获得的好处充其量是微乎其微的,因为 GS 在这个问题上并不是真的那么慢。使用多重网格的目的是在它们收敛非常缓慢的情况下(即,在具有低频误差模式的情况下)加速像 GS 这样的平滑器。由于没有太多要加速的东西,设置多重网格的开销可能与从多重网格获得的加速相当(如果不大于的话)......

多重网格的一大好处是迭代次数通常与问题大小无关(或至少不敏感)。GS不能说同样的话。所以你可以尝试更大的问题来看看你是否得到了加速,你可以尝试用你知道会产生低频错误模式的东西来解决问题(GS应该努力解决这个问题)。

另外,附带评论:除非您实际上以 43 位精度进行计算,否则您的结果在公差以下是没有意义的1015或者。我建议把这部分从你的情节中删掉。在所有实际应用中,我认为您不需要超越1012.

您的残差计算不正确。如果[A]{u}={b}是你的线性方程组,残差是res={b}[A]{uk},在哪里uk是近似值。

在您的情况下,它应该计算为:

res=T1+FO[T2(i1,j)+T2(i+1,j)+T2(i,j+1)+T2(i,j1)](1+4FO)T2(i,j)

如您所见,它只需要乘以(1+4FO)