一、使用情景

        当我们需要做一些重复性的工作时,例如,对多个结构进行几何优化、也就是相同的操作,此时,就可以使用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,真正的解放双手,提高生产力,一键式操作。

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐