「Pylith」常见报错及解决方案(不定期更新)

Linear solve did not converge due to DIVERGED_ITS iterations 100

这通常是由于网格间距过小,程序在调用PETSC计算时,无法在指定次数内迭代收敛到给定的收敛阈值,可以

  1. 在建立网格文件时,扩大网格间距(mesh size),直至迭代计算能顺利完成.
  2. 调大迭代次数: 在pylithapp.cfg中找到Convergence paameters对应模块,调整ksp_max_it的数值(但不宜超过500,否则即使顺利完成计算,结果仍十分不稳定)
  3. 调整收敛阈值(不建议): 同调大迭代次数类似,调整对应部分的ksp_rtolksp_atol即可.

Could not find final slip at (* * *) using spatial database Final slip

这是由于修改后的断层滑移分布与指定断层的linear slip function不匹配,给定的滑移量在同一材料范围内无法满足线性关系,一般可以

  1. 修改断层滑移分布至满足线性分布,示例文件中一般放在spatialdb/finalslip.spatialdb类似的文件中
  2. 不采用linear slip function,而使用默认的滑移分布求解方案,直接将对应*.cfg文件中指定slip.query_type的一行注释掉即可.

Mesh missing group of vertices ‘***’ for subdomain output

在修改范例的geometry文档时,对应边界条件surface的ID号可能也会改变,需要在mesh_***.joucreate_bc.jou中,找到add group对应行,重新指定边界surface的ID号.
当然更好的办法是直接在创建surface的时候给其起好名字(如name 'surface_example'),这样之后创建边界条件时,就可以指定其名字而非之后会变动的ID号了

Material id ‘*‘ for cell ‘*‘ does not match the id of any available materials or interfaces

这是由于读取的网格文件对应材料的block ID*.cfg中确定问题时的material ID不匹配造成的,调整为相吻合的ID号即可

Surface *** has no facet

具体原因仍不明白,但个人摸索的办法是建立geometry时,对应surface的控制点坐标要尽量是整数,如50km,100km等,如果有找到好办法的欢迎评论告诉我.