FiPy求解linear system时的Matrix获取与手动设置咨询
FiPy框架两个技术问题解答
问题1:是否可通过缓存Matrix与RHS、运行1次迭代的solve/sweep操作,获取待求解的linear system?
可以实现,无需运行多轮迭代即可拿到完整的Ax=b线性系统
FiPy的离散组装逻辑和迭代求解逻辑是完全拆分的,完成方程定义、边界条件配置、求解变量初始化后,有两种方式可以拿到目标线性系统:
- 无需启动求解迭代:直接调用方程对象的组装接口,传入求解变量和对应边界条件,即可直接得到系数矩阵和右端向量,核心调用方式:
# eq为已定义的偏微分方程对象,var为待求解的场变量 coeff_matrix = eq.jacobian(var, bcs=eq.bcs) rhs_vector = eq.residualVector(var, bcs=eq.bcs) - 通过单步sweep获取缓存值:调用一次
sweep()方法时,FiPy会在进入迭代求解环节前先完成全量离散组装,组装完成后可直接从求解器缓存中读取构建好的Matrix和RHS对象,不需要等迭代流程执行完毕。
问题2:求解过程中使用的Matrix是否支持手动自定义设置?
完全支持手动自定义,常用的修改路径有两种
- 基于自动组装结果修改:FiPy组装得到的Matrix是所选后端(SciPy稀疏矩阵/PySparse/Trilinos分布式矩阵)的原生实例,拿到矩阵对象后,可直接按照对应后端的稀疏矩阵操作接口,自由调整矩阵元素值、修改稀疏结构,修改完成后直接传入求解流程即可正常使用。
- 全自定义跳过自带组装:可以完全不使用FiPy的离散组装逻辑,自行构造符合维度要求的稀疏系数矩阵和对应右端向量,直接调用FiPy封装的线性求解器接口传入自定义数据完成求解,没有额外的格式限制。
注意:如果修改了矩阵的稀疏结构或者维度,需要同步保证右端向量、边界条件映射的维度和修改后的矩阵匹配,否则会触发维度不匹配的运行错误。
内容的提问来源于stack exchange,提问作者Markiv
相关产品推荐
相关产品推荐

