泛型设计的MC算法在计算材料学中的研究与应用
2011-04-25王姝力罗迅
王姝力,罗迅
(湖南师范大学数学与计算机科学学院,湖南长沙 410081)
随着信息技术的发展,计算机模拟技术在材料学领域的应用越来越广泛,众多计算方法被用来估计各种材料学过程[1]。通过和应用蒙特卡罗方法的其他领域的对比,如物理领域[2]、化学领域[3]等的对比,蒙特卡罗方法在材料学领域的应用与他们有相似点也有相异点。相似点主要为都是运用蒙特卡罗的随机过程模拟实例,而不同点主要在于材料学领域中不可控制的物理因素很多。本文的主要内容则集中在Monte Carlo方法对模晶生长过程的研究与模拟。所谓模晶生长(Template Grain Growth,缩写为TGG),是材料学中的一种制备工艺的名称。在原始粉末材料分散放置一些已结晶的模板,对整个样品加热加压进行烧结,在这个过程中样品就会进行重结晶,形成新的结晶体。从直观上看,就是已结晶的模板“长大了”。在材料学理论中,这一过程的机理还缺乏完善的描述机制,因此计算机模拟是研究该过程的一个重要手段[4]。其中,Monte Carlo方法是比较常用的一种模拟方法。因此,用于模拟TGG的Monte Carlo算法的改进与变种也很多,如果为每一种TGG过程实现所有的Monte Carlo算法变种,势必造成大量的重复劳动。本文将泛型化程序设计思想引入到Monte Carlo算法构造中。泛型化程序设计思想允许研究人员在实现新的算法变种时,可以不必再重新构造算法的所有细节,而只需更改相关的模块。这不但有助于提高工作效率,还有助于突出研究的重点内容,帮助研究者将主要精力放在研究重点上。
1 基础MC方法的应用与实现
1.1 MC算法简介
Monte Carlo方法本质上是一种随机抽样的统计实验方法。文献[5]中指出用于晶粒生长的MC方法的基本构造原理,主要有4个关键点:栅格网络、抽样方法、改变策略和邻近点的选择。算法的基本思想是:用数字来代替每个晶粒的取向,先随机赋值,然后再随机选择一个晶粒,改变它的取向值,如果与周围的晶粒的数值一样,则合并成一个模板,然后继续随机选择,直到所有的晶粒都选择了一遍。这称为一个Monte Carlo步。当进行到一定数量的Monte Carlo步时或者达到了某个终止条件时,就可以停止模拟了。上述过程就是MC算法模拟TGG的整个流程。
1.2 MC算法的改进
上述过程是最基本的MC算法流程,除此之外,更深入细致的研究还要考虑到其他各种影响因素。例如文献[6]中提到了MC模拟步数与现实时间的关系,文献[7]提到了无模板的晶体生长模拟。因此,对MC的基本算法进行了如下改进:(1)使用六边形栅格代替正方形栅格,增加了晶体之间的接触,更靠近实际情况;(2)对晶粒取向的改变机制作出调整,既可以随机选择,也可以进行强制性选择,使得每一个晶粒都有一次机会改变其取向;(3)对于将要改变的取向值的选择,既可以在所有的取向值中进行随机选择(除了原值之外),也可以限定于只能选择周围晶粒的取向值;(4)对于能量计算,可以只计算与最近晶粒的能量,也可以计算与最近晶粒与第二邻近晶粒的能量之和;(5)对于温度的设定,温度的不同对晶粒的取向变化可通过调整随机参数来体现。
基础MC算法的实现如图1、图2所示。图1显示的是模拟前的晶粒、模板分布情况;图2显示的是模拟结束之后的分布情况。用不同的灰度值来表示不同的取向值,可以很清楚地看到,模拟后晶粒进行了合并与生长,原来较小的数量较多晶粒最后结合成了数量较少而体积更大的晶粒。
图1 模拟前晶粒分布示意图Fig.1 Schematic diagram of simulation before the grain distribution
图2 模拟结束后晶粒分布示意图Fig.2 Schematic diagram of simulation after the grain distribution
图3显示了为实现该算法而声明的类的部分源代码。
利用构造函数对类进行初始化(图中并未显示构造函数的声明),按照一定的规则调用MCS(void)函数,执行若干个蒙特卡洛步之后,模拟结束,此时可以计算晶粒的平均面积与平均半径并进行显示。而在每一个蒙特卡洛步执行时,都需要调用能量计算函数与邻近点选择策略。
2 泛型化设计的实现、分析与讨论
2.1 泛型化设计的实现
所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。在1.1和1.2的基础上,对MC算法进行泛型化设计改写。编写一个泛型架构和模块化函数,将已实现的各种MC方法的变种(1.2中提到的)整合到一个平台下。用MEC做一个简易的控制界面,如图4。泛型编程是将数据结构参数化。完成了一个MC模型程序设计的泛型架构的API接口,将各个功能模块化,例如能量计算、邻近点选择、抽样方法以及维数,这些算法与数据结构都加以模块化和封装化。在构造新的MC方法变种时,可以根据需要进行“组装”;也可以按照一定原型设计新的模块,与原有结构搭配。
图3 MC算法实现的部分类声Fig.3 Part of the class declaration of MC algorithm
具体的类声明如图5所示,其中的关键在于描述晶粒外形的数据泛型T与描述整个MC方法实施策略的泛型Type。在初始化时,根据需要选择合适的结构体 Type即可决定整个MC方法的具体实现策略,例如栅格的选择策略、邻近点的选择策略等等;而选择好T即可决定该MC方法是采用正方形还是六边形栅格,甚至是其他形状的栅格,这影响了能量计算的具体实现,以及模拟结束后面积与平均半径的计算方法。
图4 可视化的操作平台Fig.4 A control platform which is visual
图5 泛型化MC方法的类声明[7]Fig.5 Generic class declaration of the MC method
2.2 算法的性能分析
泛型程序设计可以编写完全一般化的程序,实现算法的可重复使用,提高了代码的书写速度,可节约大量的人力物力。当然,在运行某一具体策略的MC算法程序时,其效率与普通的非泛型设计的程序还是一样的,在算法复杂度上并不会有质的提高,甚至由于代码实现的复杂性,还会有所降低(当然,这种降低也不会是本质上的)。
表1显示了利用泛型程序设计思想实现的MC算法对TGG过程的模拟,由于采用了泛型化设计,预留了函数接口与类模板,因此可以很方便地实现各种模拟策略。从表1可以看到,泛型化MC算法运行良好,可以很方便地实现各种模拟策略的组合。另一方面,通过对比非泛型MC算法也可以看出,当外部条件保持一致时,两者在运行 时间上并无本质的区别。
表1 泛型MC算法和非泛型MC算法在时间上的对比[8]Table1 The comparison of generic MC algorithm and non generic MC algorithm in time
3 结论与讨论
计算材料学中对TGG过程的模拟,由于理论上的多样性与实际实验条件的复杂性,使得 MC模拟方法生出了许多变种。这实际上给研究人员研究与实现计算机模拟造成了一定的困难。本文在实现MC算法对TGG过程进行模拟的基础上,将泛型化设计思想应用于算法设计与程序构造。不但将算法的各个功能模块化,而且还为各个模块函数构造了类模板与泛型参数。实验表明,该泛型化MC算法运行良好,可以很方便地实现各种模拟策略,极大地节约了代码构造的时间、提高了效率。当然,另一方面也需要说明,泛型化程序设计节约的是代码构建的时间,而不是程序运行的时间,与非泛型化程序相比,在条件一致的情况下两者在算法复杂度上并没有质的区别。
目前国内研究蒙特卡罗算法的学者很多,但是对于泛型编程并且应用到材料学中的研究很少。泛型蒙特卡罗算法[9]在材料学上的应用是很有用的,尤其是在此基础上进行可视化[10]或者 3D化[11],就可以在进行实际的烧结过程中对应地实现计算机上的模拟,可以仔细地分析烧结过程中的每一步。
但是,由于烧结过程本身受到很多物理影响,比如:温度、湿度。这个在计算机的模拟中不好体现,所以我们的模拟只能近似模拟,而不能完全准确的模拟。
[1]张朝晖.计算机在材料科学与工程中的应用[M].长沙:中南大学出版社,2008:1-12.
[2]Binder,K,Monte Carlo methods in statistical phy sics[M].Berlin:Springer,1979:1-3.
[3]杨玉良,张红东.高分子科学中的Monte Carlo方法[M].上海:复旦大学出版社,1993:9.
[4]刑建东.晶体定向生长[M].西安:西安交通大学出版社,2008:31-35.
[5]Y.T.Liu,X.J.Guan,X.M.Shen,etc.On The Monte Carlo Simulation of Normal Grain G rowth[J].ACTA M ETA LLURGICA SINICA(English Letters),2008,21(4):282-288.
[6]S.M.Hafez Haghighat,A.Karimi Taheri,An analy tical and experimental investigation on the normal g rain growth in metals using the M onte Carlo method[J].Materials and Desig n,2007,28:2533-2539.
[7]Corbett C.Battaile.T he Kinetic M onte Carlo method:Foundation,implementation,and application[J].Comput.Methods Appl.Mech.Engrg,2008,197:3386-3398.
[8]张海.基于蒙特卡罗方法的晶粒生长模拟系统研究[D].中南大学,硕士学位论文,2007.
[9]O.M.Ivasishin,S.V.Shevchenko,N.L.Vasihev,ect.A 3-D M onte-Carlo(Potts)Model for Recrystallization and Grain Growth in Polycrystalline Materials[J].Materials Science and Engineering A,2006,433:216-232.
[10]O.M.Ivasishin,S.V.Shevchenko,S.L.Semiatin.Implementation of exact grain-boundary geometry into a 3-D Monte-Carlo(Potts)model for microstructure evolution[J].Acta Materialia,2009,57:2834-2844.
[11]A 3D Monte Carlo study of the effect of grain boundary anisotropy and particles on the size distribution of g rains after recrystallisation and grain g rowth[J].Computational Materials Science,2010,doi:10.1016/j.commatsci.2010(1):7.