我正在研究 C 中的域分解代码,该代码使用 CHOLMOD 来近似每个子域中 PDE 的网格值。我遇到的问题是这些方法使用矩阵市场格式,这通常不是问题,但我已经有一个计算二维数组的方法,它是 Ax=b 求解中的稀疏矩阵 A。我不确定如何使用 CHOLMOD 中的方法将其转换为稀疏矩阵,或者是否有办法在每次循环调用时保存 Matrix Market 文本文件并以某种方式将其放入 A = cholmod_read_sparse 或其他内容中。任何见解将不胜感激!
CHOLMOD 实施
计算科学
有限差分
线性求解器
稀疏矩阵
C
2021-12-25 12:16:51
2个回答
最有效的方法是直接使用 CHOLMOD 的 C API 并直接调用它,而不将矩阵保存到磁盘,请参阅我对这个问题的回答以获取示例(另请参阅 CHOLMOD 文档)。CHOLMOD 使用标准 CRS(压缩行存储)表示。它在很多地方都有解释,例如参见这个 wikipedia entry。
显然,也可以按照您的建议,使用 Matrix Market 格式将矩阵写入磁盘并通过生成随附的示例程序来调用 CHOLMOD,但这会效率较低,并且需要与直接调用 CHOLMOD 一样多的编程工作. 如果您不是使用 C/C++ 或具有 CHOLMOD 绑定的语言进行编程,您可能需要这样做。对您来说最简单的解决方案是使用坐标格式。如果性能是一个问题,您可以使用 CRS 格式(更多的编程工作)。两者都在这里解释。
我确实希望A你组装的是一个稀疏矩阵。否则,使用稀疏的 Cholesky 分解是没有意义的。那么,如果你在组装过程中没有这样做,你应该尽快把它变成稀疏矩阵格式。
然后 - 不知道你在什么环境中,所以我只能猜测 - 将矩阵直接传递给cholmod它将为你转换它(至少在 python 界面中)而不进行保存/加载会更有效使用matrix market format.
其它你可能感兴趣的问题