我正在寻找解决以下问题的最快方法:
给定 3D 网格中的一些格点体积,一些点b_i
(边界)满足f(b_i)=0
,而另一个点a_0
满足f(a_0)= 1
。
所有其他点(非边界)都是周围 26 个点的某种线性组合。例如,我可能想要
f(i, j, k)= .05*f(i+1, j, k)+.1*f(i, j+1, k)+.07*f(i, j, k+1)+...
系数之和.05+.1+.07+...
将加起来1
。我的目标是解决卷中f(x_i)
的所有x_i
问题。
目前,我正在使用连续过松弛(SOR)方法,它基本上初始化了体积的边界,为每个点分配 26 个周围点的加权平均值,然后重复。SOR 方法只是在f(x_i)
最近一次迭代f(x_i)
之后和之前的迭代之后进行组合。
我想知道是否有人知道任何更快的方法来解决大约 102x102x48 大小的 3D 网格的这个问题。SOR 目前需要大约 500-1000 次迭代才能收敛到我想要的水平(取决于使用的系数)。我最愿意用matlab、idl、c++。有谁知道 SOR 与将问题转换为线性系统并使用矩阵方法(如 BCGSTAB)相比有多快?此外,哪种方法最有效(且最容易)并行化?我可以访问 250 个核心集群,并且一直在尝试使用 mpi 和 c++ 使 SOR 方法并行,但没有看到我想要的速度提高(理想情况下大约是 100 倍)。对于加快解决此问题的任何想法,我将不胜感激。谢谢。