LU-SGS求解器
-
这涉及到非线性误差和线性代数求解器误差的相对关系。
迭代开始前的初始残差基本可以认为是非线性误差,一般线性求解器的收敛准则都设置为下降2个量级,也就是relTol 0.01,甚至有的是relTol 0.1。大部分情况LU-SGS应该是足够了的。
其实线性代数问题只要愿意迭代,总有收敛的时候,精度只受条件数和机器精度限制,和你采用什么数值方法没关系,只是收敛效率有所区别。但是非线性问题的精度和采用的格式、步长啥的关系都比较大了。
但是即使线性代数问题解到1e-16,下一个时间步或者非线性迭代步的初始误差又回去了,通常是1e-3左右,和CFL数一般呈正相关,所以线性代数问题解到1e-16没有意义,只要解到1e-5左右就好了,CFL数越大可以考虑继续减少线性问题的求解精度。
-
刚才看了一下一楼那个论文,从方程12,13来看应该确认了LU-SGS是一个非迭代的求解器。测试来看LU-SGS应该可以达到稳态外循环每一步收敛的要求(relTol 0.01或者0.1),但是瞬态的情况下,是需要收敛的。且在可压缩高速密度基求解器中,连外循环都没有。不过文章中说他也可以适用于瞬态算法,看起来LUSGS主要用于高速可压缩流。
另外,
rhoCentralFoam
中,以及一些文献中,高马赫数都要采取通量分裂处理,这个原因是什么?
在我的多相流算法中,也采用了通量分裂处理,不过我们那个的原因只是为了数值稳定,再详细的我就不在这说了有点跑题。可压缩流中不进行通量分裂会如何?我再仔细看看那个文章再继续讨论。
-
最近着手做matrix-free的LU-SGS实现,本质上是不需要matrix数据结构的。但同时也遇到多重网格如何与之协同工作的问题。目前还只是尝试阶段,希望顺利
-
@youmengtian
感觉MG和LUSGS好像不是一路的吧。不过LU-SGS当个smoother应该问题不大。 -
@youmengtian
明显Jacobian Free和matrix free不是一回事儿吧。JFNK虽然是Jacobian free,但是Krylov没有preconditioner不是很好使,加preconditioner又很难避免要存、算矩阵,至少算矩阵系数是免不了的,不过这个preconditioner反正是approximation,似乎不需要非常consistent。而且preconditioner整的不好就是并行的性能瓶颈。
-
@youmengtian
Jacobian free是不算Jacobian,JFNK的方法压根就没出现Jacobian,既不存,也不算;Matrix free主要是不存系数矩阵,至于这个矩阵是不是Jacobian无所谓的,但是一般多少都有点儿关系。Matrix free不代表不算矩阵元素,preconditioner免不了要算全部或者部分矩阵元素的,但是往往算完之后可以扔掉一些,不用都存下来。SGS就是一例,按照LU-SGS的搞法,就是Matrix free的,计算过程中用到了某些系数,就算一下,用完了就扔了,下次要用再算。 -
@youmengtian
没,网上有个那个Chun Shen的代码,AETK,我正在看。
https://github.com/chengdi123000/AETKv1 -