用Perl脚本实现MS批量任务

5 篇文章 3 订阅
以前看过一个用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;
    }}
}
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,关于使用Perl脚本实现石墨烯表面的官能团修饰,我需要更多的背景信息才能回答你的问题。Materials Studio是一个功能强大的材料模拟软件,其中包含了多种模拟方法和工具,可以用于研究各种材料的性质和行为。而Perl是一种非常灵活和强大的编程语言,可以用于处理文本、数据分析、网络编程等多种任务。因此,在Materials Studio中使用Perl脚本,可以为材料模拟和分析提供更多的自定义功能和灵活性。 具体地说,如果您想使用Perl脚本实现石墨烯表面的官能团修饰,您需要首先了解石墨烯的结构和性质,以及Materials Studio中的计算方法和工具。然后,您可以编写一个Perl脚本,使用Materials Studio提供的API和工具,来实现您的具体需求。例如,您可以使用Materials Studio中的原子和分子建模工具,构建石墨烯的模型,然后使用Perl脚本来添加官能团、改变原子位置等操作。最后,您可以使用Materials Studio中的计算模块,计算修饰后石墨烯的性质和行为,以进一步了解官能团修饰对石墨烯的影响。 需要注意的是,使用Perl脚本实现石墨烯表面的官能团修饰并不是一件简单的任务,需要具备一定的编程和材料科学知识。如果您对此感兴趣,建议您先学习相关的知识和技能,并结合Materials Studio的官方文档和教程,逐步深入理解和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值