用MSC.Marc更快的求解

  • Posted on
  • by

本文主要内容来自Solving Faster with MSC Marc,根据本人理解增加了一些参考文献。

非线性计算需要成千上万次的迭代才能完成。减少收敛的迭代次数和减少每次迭代的时间可以加快求解速度。本文将讨论一些加速迭代和减少迭代步时间的方法。

介绍

对于非线性分析,每个迭代步的工作包括:

  • 更新刚度矩阵(Assembly,刚度矩阵组装)
  • 求解静态方程,根据{F}=[K]{U}得到{U}
  • 回代{U}以计算收敛性和结果(Recovery,结果回代)

也就是说,每次迭代就等效于一次线性静态计算。提高以上三个部分的任一过程的速度都可以加快求解速度。

注:MSC.Marc支持分布式共享内存并行计算(DMP),但是要求第三方软件的支持,配置不是很方便,本文不讨论DMP。最近几年,Marc增加了共享内存并行计算(SMP),性能的提高既明显又可靠,本文所介绍的方法基于SMP。关于SMP的配置,需要启用MPI服务,具体方法不再介绍。

内存,内存,内存

保证Marc在合理的时间计算完的最重要的方法是让内存适合模型。这就要求用尽量多的内存,以及尽量减少模型的大小。

打开任务管理器,观察marc.exe进程,如果其占用的内存接近系统物理内存大小,那就该考虑升级内存或者减小模型。

更快的刚度矩阵组装和结果回代

当今大部分的计算机都有多个CPU内核,充分利用额外的处理能力可以减少计算时间。

使用并行计算可以提高刚度矩阵组装和结果回代的性能。这在Marc 2010以后的版本都是支持的。启用办法在Jobs->Properties->Run->Parallelization/GPU->Assembly And Recovery,激活其中的Multiple Threads。

矩阵求解

Marc有一些不同的求解 {F}=[K]{U}方程的办法。一些求解器支持并行计算,并行矩阵计算不要求额外的license,因此没理由不使用。

Multi-frontal sparse

这是支持最多特性的求解器,也是Marc的默认求解器,支持并行计算,一般比Pardiso solver慢。

Pardiso direct-sparse

这是Multi-frontal sparse的很好的替代,支持接近Multi-frontal sparse的特性但是求解更快。该方法支持并行计算。在一个16核的机器上的计算结果表明相对于单CPU计算效率提高了11倍。关于Pardiso算法,可以参考该文献[1]

CASI iterative

该迭代求解器假设了{F}=[K]{U}的解,然后使用假设改进假设。该过程不断重复直到达到收敛极限。需要注意的是这些迭代和非线性方程无关。

该方法的优点是使用了比直接计算方法少得多的内存,缺点是只适用于表现良好的实体单元网格。

使用哪个求解器

如果模型只包含实体单元,CASI求解器一般是最有效的。计算一两个迭代步,比较和Pardiso direct-sparse的差别。

对于其它模型,建议从Pardiso求解器开始,并设置最多内核数目的并行计算。不要指望超线程。只在Pardiso求解器有问题的时候切换到multi-frontal sparse。

结论和建议

如果使用Marc 2010及更高版本软件,充分利用并行计算,并选择合适的求解器:

  • 使用Pardiso direct-sparse及尽量多的内核进行并行计算
  • 对于实体单元,分析CASI迭代求解器是否相对于Pardiso可以提高效率
  • 激活组装和回代的并行计算

[1] 于超 大规模稀疏矩阵PARDISO求解方法介绍 高性能计算