用Perl脚本实现MS批量任务
来源:互联网 发布:软件编程培训中心 编辑:程序博客网 时间:2024/05/18 15:54
以前看过一个用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,"\t",$finalEnergy,"\n";
$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."\t".$finalEnergy,"\n";
$mySheet->Cell($counter,1)=$finalEnergy;
}}
}
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,"\t",$finalEnergy,"\n";
$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."\t".$finalEnergy,"\n";
$mySheet->Cell($counter,1)=$finalEnergy;
}}
}
- 用Perl脚本实现MS批量任务
- perl脚本实现批量生成手机号码存放到文件中
- 批量去掉pdf文件密码perl脚本
- shell 脚本批量安装perl包
- 用Perl实现一个批量文件转码工具
- 一个用FTP批量上传文件的perl脚本,支持目录上传
- 批量转换字符编码perl脚本iconvs-v0.5.pl
- 批量从NCBI后台下载指定数据的Perl脚本
- 批量从NCBI后台下载指定数据的Perl脚本
- 用shell脚本批量分发公钥,实现用…
- oracle数据库导出导入--perl脚本实现
- 用perl批量下butterfly的附件
- perl 脚本
- perl脚本
- 批量导入导出windows计划任务的批处理脚本
- Linux的crontab定时任务批量执行PHP脚本
- 用shell 批量处理任务
- Bash脚本实现批量作业并行化
- 控件之AutoCompleteTextView
- ubuntu openssh
- 寒假篇 -2
- HDU2159 FATE 二维费用背包-完全背包
- C# 获取dll入口点
- 用Perl脚本实现MS批量任务
- 教你把「显示桌面」快捷键 找回来!
- 银行家算法(java)
- hdu 1317 坑爹的数据!!hdu。。。你赢了。。。
- JSP中使用html中的<base>标签不起作用
- javascript 面向对象特性与编程实现
- 换要求 reinterpret_cast、C 样式转换或函数样式转换
- materials studio 中perl的使用
- Magento如何在XML配置文件中自定义页面title?