openfoam中cyclic周期性边界的问题
-
@dzw05
最近在研究processorFvPatch
,来挖个坟补充下~~
对于并行耦合边界条件,在方程组迭代求解中的“耦合”过程在矩阵-向量乘法(Amul
)中的实现如下:
1、initMatrixInterfaces
:只负责初始化边界数据,将耦合边界内侧(本地)的数据传送到外侧(相邻进程)。
2、本地数据与向量相乘,参考程迪的描述。
3、updateMatrixInterfaces
:使用第一步初始化得到的数据来耦合外侧变量($C\cdot x_n $).
并行边界条件中,对于一个本地进程来说耦合过程是单向的,只将外侧数据耦合到本地,但是对于一个耦合边界面来说耦合过程是双向的,即面两侧的进程都需要耦合外侧数据($C=C_L+C_U$ 一侧是$C_L$另一侧是$C_U$)。
耦合边界类使用的接口是initInterfaceMatrixUpdate
,updateInterfaceMatrix
,这两个接口的实现在对应的子类边界条件中,如何想研究何以找找。 -
@Micro
个人观点,线性方程组求解来说,感觉目前主要用的是克雷洛夫子空间方法+多重网格方法这两个大类,已经能在理论上比较好的解决求解方程组了(复杂度大概在O(N^2)~O(NlogN))。当然对于不同线性代数库对这些方法的实现效率有高有底(针对体系结构和并行的优化可能不同),但是感觉如果优化到位大概也就是到那个程度了,在同一套系统上不会有数量级的差距。
我之前做实验发现,对于有些多物理量耦合在一起的分块矩阵,通用的预条件器好像对降低条件数作用比较有限(主要也是由于物理上的特殊性造成的),针对某一类物理问题,似乎需要一些特殊的预条件器来有效的降低条件数,听说预条件这方面的论文也挺多的,不过比较偏数学,我不太懂。