一、使用情景
当我们需要做一些重复性的工作时,例如,对多个结构进行几何优化、也就是相同的操作,此时,就可以使用Perl脚本一键完成该任务。
二、思路
使用for循环,循环体中完成重复性工作。
三、举例
以对多个结构文件进行几何优化为例,讲解如何使用Perl脚本实现批量化任务。
1.首先我们准备几个结构文件,以自然数命名,如1.xsd,2.xsd。
2.其次,在相同的目录下创建Perl脚本,如图
3.Perl脚本的编写
#!perl
use strict;
use Getopt::Long;
use MaterialsScript qw(:all);
#创建结果表,存储结构和对应的能量
my $statsDoc = Documents->New ("Str_Ene.std");
$statsDoc->ColumnHeading (0) = "Structure";
$statsDoc->ColumnHeading (1) = "energy";
for (my $i=1; $i<=5;$i++){
#指定工作的文件
my $doc = $Documents{"$i.xsd"};
#job
my $results = Modules->Forcite->GeometryOptimization->Run($doc, Settings(
Quality => 'Ultra-fine',
CurrentForcefield => 'COMPASS',
ChargeAssignment => 'Forcefield assigned',
MaxIterations => 50000));
#job后处理,将结果写入表格
$statsDoc->Cell($i-1,0) = $results->Structure;
$statsDoc->Cell($i-1,1) = $results->Structure->PotentialEnergy;
#删除多余文件
$Documents{"$i.xsd"}->Delete;
$Documents{"$i Convergence.xcd"}->Delete;
$Documents{"$i Energies.xcd"}->Delete;
$Documents{"Status.txt"}->Delete;
$Documents{"$i.txt"}->Delete;
}
4.运行结果
四、总结
循环体中可以更改不同的job和job完成后的处理,文件也可以采用不同的命名方式来写,以实现个性化需求。如果一个job结束之后是另外的job,则可以实现一个完整的工作流work flow,真正的解放双手,提高生产力,一键式操作。