« 疯狂动物城 | Home | 解决MSC.Marc的收敛性问题 »

April 25, 2016

用MSC.Marc更快的求解

本文主要内容来自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求解方法介绍 高性能计算

Monthly Archives

About this Entry

This page contains a single entry by vincent published on April 25, 2016 2:54 PM.

疯狂动物城 was the previous entry in this blog.

解决MSC.Marc的收敛性问题 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.