icoFoam中 在哪个地方体现了使用线性系统求解器?



  • 大家好,在“icoFoam解析”(http://www.dyfluid.com/icoFoam.html) 中,在求解速度时,在哪个地方体现了使用线性系统求解器(如 fvSolution里面的PBICG)?怎么没有看到啊,公式(14)中,系数Ap为对角矩阵,根本用不到线性求解器,直接除过去就好。有理解错的地方希望大家指出。



  • @hongfu2233 说:

    PBICG

    Hi,

    举例公式14,这是针对一个网格上的公式,因此如果你10万的网格,那么就是10万个公式,组成10万阶矩阵。在求解的时候可以使用矩阵求解器。



  • 0_1459048045491_中心差分.png (icoFoam解析,公式7) 中心差分不应该是这样吗(都使用同一时刻的速度,黄色标记部分),为何icoFoam使用 要预测的时间步的速度 和 当前已知的时间步上的速度 进行平均?



  • @hongfu2233 首先我建议你看网页版,公式书写更规范并且随时更新一些小问题。预测速度$u^r$和当前时间步速度$u^n$是互相匹配的,实际上都是n时间步的速度。可以使用你的公式。但通常,教材里面用n表示已知时间步的量,如果用$u^n_p$表示要求的p点速度,有点混乱。



  • 多谢东岳大神啊,回到公式(14),如你所说,我若是10万网格,那么就有十万个公式,组成10万阶矩阵,Ax=b。但是仔细观察公式(14),这10万阶系数矩阵A是个对角阵啊,直接除过去就好,x=b/A,感觉没有必要用各种复杂的矩阵求解器啊。请您指点一下。



  • @hongfu2233 简单来说(我在手机)

    1. 考虑Ax=b,如果说$x=A^{-1}b$,那么你需要求A的逆,这对于大型矩阵是不现实的。你可以试试简单的5*5矩阵,求逆很费事。比如高斯消去法,缺点是占用内存大,循环步骤多。
    2. 另一种是采用lu分解直接求解,但是cfd中一般是稀疏矩阵,lu分解后会破坏矩阵的稀疏性,占用大量内存。
    3. 因此一般采用迭代法,进了迭代法,通常我们对矩阵进行预条件,然后各种求解技术得以应用。比如共轭剃度法,

    可以看看这个: 链接文本

    这部分内容在应用数学里面说的很详细,cfd书里面比较范范,你可以看看saas的有一本书,书名记不得了,只记得作者。😳



  • @李东岳 多谢啊,这个我有所了解。可能我没有说清楚。仔细观察公式(14),系数矩阵A是个对角阵啊,直接除过去就好,x=b/A,感觉没有必要用各种复杂的矩阵求解器啊。



  • @hongfu2233 a是对角阵,但是还有临点的呢。



  • @李东岳 临点不都是已知的量吗(用了已知时间步的量)?正如我第二个问题所问。在“icoFoam解析”中,公式14下面一行字也写了:“仔细观察公式(14),除了$u^r_p$均为已知。”



  • @hongfu2233 所有和速度有关的量都进入方程左边,ap, an都在方程左边。比如:

    2u1+u2=0
    u1+2u2+u3=0
    u2+2u3=0

    提取矩阵就是:

    2 1 0
    1 2 1
    0 1 2



  • @李东岳 多谢啦,从公式14,总感觉系数矩阵是对角阵,如下式
    2u1 =-u2 (此时的u2及其系数都是当前已知时间步的值)
    2u2 =-u1-u3(此时的u1、u3及其系数都是当前已知时间步的值)
    2u3=-u2 (同上)
    提取矩阵
    A=
    2 0 0
    0 2 0
    0 0 2
    b={-u2 -u1-u3 -u2}'
    因为“仔细观察公式(14),除了$u^r_p$均为已知。”可能我看的不够仔细,我再仔细揣摩一下,多谢大神解答。



  • 你的u1 u2 u3是需要求的,就是x列向量,不可以放到b,b是已知量。→_→



  • @李东岳 想明白了,多谢东岳大神!


Log in to reply