用Perl脚本实现MS批量任务

用Perl脚本实现MS批量任务
以前看过一个用Windows的batch批处理批量提交计算任务的帖子,可实用性不高。昨天研究了一下用perl脚本控制ms任务的方法,写了两个用castep收敛性测试的脚本,跟大家参考。perl脚本的编写和执行技巧可以参考ms 的联机帮助文档,对于重复性的劳动,脚本还是很有帮助的:D

1. 截断能收敛测试脚本

#!perl

use strict;
use MaterialsScript qw(:all);

# initial files preparation
my $myDoc=$Documents{"WO3.xsd"};#定义要计算的模型文件
my $myStudyTable=Documents->new("energy-encut.std");#新建StudyTable存放计算结构,第一列是截断能,第二列是体系总能
my $mySheet=$myStudyTable->ActiveSheet;
$mySheet->ColumnHeading(0)="Enegy Cutoff(eV)";
$mySheet->ColumnHeading(1)="Final Enegy(eV)";

# castep single calculation
my $castep=Modules->CASTEP;
my $startEnergy=200;#测试起点:200 eV
my $endEnergy=500;#测试终点: 500 eV
my $intervalEnergy=20;#测试点间隔
my $sumIteration=($endEnergy-$startEnergy)/$intervalEnergy;

#循环计算每个截断能测试点的单点能
for(my $counter=0;$counter<=$sumIteration;++$counter){
my $energyCutoff=$startEnergy+$intervalEnergy*$counter;

$castep->ChangeSettings(
Settings(Quality=>"Fine",
UseCustomEnergyCutoff=>"Yes",
EnergyCutoff=>$energyCutoff));#这里设置截断能为测试点的截断能
$castep->Energy->Run($myDoc);

$mySheet->Cell($counter,0)=$energyCutoff;

#read final energy from castep output files
#下面这一段提取castep文件中的总能,即Final energy后面的结果
foreach my $line (@{$Documents{"WO3.castep"}->Lines}) {
if ($line=~/^Final energy/){
my $finalEnergy = substr($line,31,15);
print $energyCutoff,"",$finalEnergy,"";
$mySheet->Cell($counter,1)=$finalEnergy;#将总能结果放入StudyTable
}}
}

2. k点收敛测试脚本

#!perl

use strict;
use MaterialsScript qw(:all);

# initial files preparation
my $myDoc=$Documents{"WO3.xsd"};
my $myStudyTable=Documents->new("energy-kpts.std");
my $mySheet=$myStudyTable->ActiveSheet;
$mySheet->ColumnHeading(0)="k-points";
$mySheet->ColumnHeading(1)="Final Enegy(eV)";

# castep single calculation
my $castep=Modules->CASTEP;
my $start=1;
my $end=12;
my $interval=1;
my $sum=($end-$start)/$interval;

for(my $counter=0;$counter<=$sum;++$counter){
my $kpts=$start+$interval*$counter;
$castep->ChangeSettings(
Settings(Quality=>"Fine",
UseCustomEnergyCutoff=>"Yes",EnergyCutoff=>400,
KPointDerivation=>"CustomGrid",ParameterA=>$kpts,ParameterB=>$kpts,ParameterC=>$kpts));
$castep->Energy->Run($myDoc);
$Documents{"WO3.castep"}->SaveAs("$kpts.txt");

$mySheet->Cell($counter,0)=$kpts."x".$kpts."x".$kpts;
#read final energy from castep output files
foreach my $line (@{$Documents{"$kpts.txt"}->Lines}) {
if ($line=~/^Final energy/){
my $finalEnergy = substr($line,31,15);
print $kpts."x".$kpts."x".$kpts."".$finalEnergy,"";
$mySheet->Cell($counter,1)=$finalEnergy;
}}
}

推荐阅读

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    计算机蓝屏故障的计算机蓝屏解决方案

    计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

    IE脚本错误如何做Web脚本错误解决技巧

    IE脚本错误如何做Web脚本错误解决技巧,,这个问题是由于这样的事实,对网页的HTML源代码和客户端脚本不正确的工作,如微软Jscript或Visual Basic脚本

    计算机自动关机的原因是什么

    计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一种用于高速计算的电子计算机。它可以进行数值计算和逻辑计算,还具有存储记忆

    电脑功率计算|电脑功率计算公式

    电脑功率计算|电脑功率计算公式,,电脑功率计算公式  从设计角度出发一般取300w/台基本都可以满足要求,可以从以下几个方面分析一下电脑功

    如何设置计算机视图视图的统一视图

    如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

    的故障_计算机解决无法打印文档

    的故障_计算机解决无法打印文档,,核心提示:最近,打印机出现了一个奇怪的现象,在打印正常之前,打印机不能打印最近的突然,提示发送打印作业,计算

    PC计算机:AMDCPU核心细节

    PC计算机:AMDCPU核心细节,,核心提示:AthlonXP的核心型athlonxp有4种不同的核心类型,但都有个共同点:他们都使用socketa接口,他们都使用PR标称值

    分析计算机减速的原因

    分析计算机减速的原因,,核心提示:做以上九点,我相信你的爱是快的。当然,如果速度很慢,你应该考虑硬件升级。学习电脑组装,就来吧… 有很多人说