【摘要】 在年初的MS建模公开课上面,我们简单提到过该脚本工具的使用。此后,一直有同学来问要脚本资源和使用方法。今天借着推送脚本干货的机会,和大家说一下怎么去操作的问题。

在年初的模拟计算MS建模公开课上面,我们简单提到过该脚本工具的使用。此后,一直有同学来问要脚本资源和使用方法。今天借着推送脚本干货的机会,和大家说一下怎么去操作的问题。

 

想听MS建模公开课的小伙伴,可扫描下方二维码进行购买,更多计算好课也可进入店铺购买

 

 

首先说明一下,该脚本不是我写的,而是官方给了使用的模板,见MS帮助文件的以下路径:

 

Scripting in Materials Studio > MaterialsScript API > Tools > Disorder > StatisticalDisorder

 

我们只是做了修改,我们给出的脚本是:

 

#!perl


use strict;
use Getopt::Long;
use MaterialsScript qw(:all);


my $disorderedStructure = $Documents{"Ag2.xsd"};
my $results = Tools->Disorder->StatisticalDisorder->GenerateSuperCells
($disorderedStructure,2,2,2);
my $table = $results->StudyTable;

 

perl脚本头部就不多解释了,这里是定义一个叫做disorderedStructure的标量,里面是一个叫做Ag2.xsd的文件,该文件包含了分数占据合金体系。然后通过调用StatisticalDisorder工具中的GenerateSuperCells function完成该工作(Generates disordered structures based on atom mixtures and occupancy)。

 

01GenerateSuperCells function官方的语法说明

 

object = task->GenerateSuperCells(<source>, <settings>)

 

Source这里放入的是3D Atomistic Document,所以这里直接用$disorderedStructure指向了那个Ag2.xsd

 

后面的如果写为1,1,1代表使用原来的晶胞,不做超胞。如果超胞可以自行更高数值(谨慎操作,一不小心就一等几万年),此处是2*2*2超胞

 

GenerateSuperCells后面括号里面可以定义的参数远不止这些,还有其他的用法,可以参考Scripting in Materials Studio > MaterialsScript API > Tools > Disorder > StatisticalDisorder > GenerateSuperCells

 

02如何构建混合占据的3D Atomistic Document

 

比如金银1:3的合金构建。

 

1.导入一个Au或者Ag的晶胞,这个在MS自带的结构中就有。我这里导入的是Ag。

 

然后选中某个原子(因为对称性问题,你选中了一个其实就是选中了全部,我们此时就是要改变全部的)

 

 

2.在左边的Properties窗口找到Is Mixture Atom并双击,

 

 

3.按照下图添加Au原子在改位置,

 

 

4.修改其中金银在此处的比例,并点击OK。即可得到金银比例为1:3的合金

 

 

5.将该文件另存为Ag2.xsd以示区别。

 

6.再点击看着蓝色的Ag原子,左边Properties窗口的参数就变了,

 

 

唯理计算友情提醒:聪明的同学肯定想到了cif文件的语法中本身就有分数占据的定义方法,就是那个_atom_site_occupancy ,那么能不能通过导入定义好分数占据的cif来直接生成Ag2.xsd?答案是否定的。因为MS不能很好识别分数占据cif,而且你够建好的Ag2.xsd也是无法导出成分数占据cif的。分数占据相关说明

 

03如何运行脚本

 

此时需要把我们提供的Disorder.pl放到和Ag2.xsd在同一路径下。然后点击图中的下拉三角,设置脚本在什么地方运行,这种耗时费力的计算,建议用服务器算。当然本文例子计算量很小,办公电脑就能做,选择my computer就可以。

 

然后点击Run on server。当然你也可以直接点击那个三角形的运行按键,那个就是直接在当前电脑做。

 

 

一般不会有报错的情况,如果出现报错,大家仔细看一下,分数占据时候指定的比例,能不能在指定的超胞结构中实现,如果无法实现要扩胞或者及时修改。比如某体系扩胞后总共32个原子,你这边指定9:1的合金结构就属于为难软件了。

 

当前的计算体系,我以1*1*1的胞去生成,得到如下结构

 

 

Report中写入如下信息:

 

Enumeration of Disorder:
Substitutions:
Ag:0.75 (a)
Au:0.25 (b)
Weighted Configurations: 1 out of 4
4:baaa

 

原本一个胞内4个原子,替换掉其中一个就是对的,那么理论上有4种可能的结构,但其实都等效于上述看到的结构,所以才会在报告中那么去写。

 

2*2*2的胞报告如下:

 

Enumeration of Disorder:
Substitutions:
Ag:0.75 (a)
Au:0.25 (b)
Weighted Configurations: 8043 out of 10518300
32:baaaaaabbaaaaaababaaaabaabaaaaba
192:baaaaaabbaaaaaabbaaaaaababaaaaba
32:baaaaaabbaaaaaabbaaaaaabbaaaaaab
192:baabaaaaaaaabaabbaaaaaabaaabbaaa
384:baabaaaaaaaabaabbaaaaaababaaaaba
192:baabaaaaaaaabaabbaaaaaabbaaaaaab


 

能够看懂1*1*1 的,再看这个没有难度了。

 

无论是哪个计算,算完后打开Ag2_Disorder.std,双击Structures那一列 任意一个结构都能够出现符合比例要求的结构。

 

本期附件为1*1*1和2*2*2计算的原始文件,使用2019和2020版可以直接打开,其他版本同学可以使用里面提供的脚本文件,自行创建合金结构去学习使用。

 

大家应该感受到了2*2*2的数据量之巨,有没有办法少生成点?大家可以参考如下脚本写法去设置:

 

my $disorderTask = Tools->Disorder->StatisticalDisorder;
my $results = $disorderTask->GenerateSuperCells
($disorderedStructure,
2,2,2,
Settings(MaxStructures => 100));
my $table = $results->StudyTable;
print "The limit on the number of disordered structures was exceeded!\n"
if ($results->ExceededMaxStructures);

 

本文留下2个思考:

 

1.如果把这个枚举脚本,用作生成原子空穴,那么该如何设置?

 

2.用2*2*2超胞生成的合金和用1*1*1生成之后再去超胞变成2*2*2,两者有什么区别?

 

附件获取

科学指南针-模拟计算联盟

公众号后台回复:0625

 

本文所有内容文字、图片和音视频资料,版权均属科学指南针网站所有,任何媒体、网站或个人未经本网协议授权不得以链接、转贴、截图等任何方式转载。