用Perl脚本实现MS批量任务
发布时间:2020-12-16 00:29:26 所属栏目:大数据 来源:网络整理
导读:以前看过一个用Windows的batch批处理批量提交计算任务的帖子,可实用性不高。昨天研究了一下用perl脚本控制ms任务的方法,写了两个用castep收敛性测试的脚本,跟大家参考。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",249)">? ? ? ? ? ? ? ? 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点收敛测试脚本 my $myDoc=$Documents{"WO3.xsd"}; my $myStudyTable=Documents->new("energy-kpts.std"); $mySheet->ColumnHeading(0)="k-points"; 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; ? ? ? ? ? ? ? ? KPointDerivation=>"CustomGrid",ParameterA=>$kpts,ParameterB=>$kpts,ParameterC=>$kpts)); ? ? ? ? $Documents{"WO3.castep"}->SaveAs("$kpts.txt"); ? ? ? ? foreach my $line (@{$Documents{"$kpts.txt"}->Lines}) { ? ? ? ? ? ? print $kpts."x".$kpts."x".$kpts."t".$finalEnergy,1)=$finalEnergy; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |