| 查看: 632 | 回复: 0 | |||
[交流]
计算化学多任务及数据提取 – perl程序的应用
|
|
有时,我们需要进行较为重复的多任务计算并从输出文件中提取数据。例如一维和二维势能面计算,可能多达几千个任务。所以,不可能每个任务都由手工操作,一定要通过自动化的程序实现。Perl语言的文档数据处理极为强大,易学易用,且已内嵌到Linux中(windows需安装程序)。这里通过一个例子,达到抛砖引玉的作用。即使从未接触过perl,也能迅速开始计算工作。当然,如果需要更多,还需对perl多加学习。 这是一个一维势能面计算,原始g09输入文件m062x.com中的zzz为势能面的一维变量。所以在循环中(变量为$step),每一次将原始输入文件复制为新文件,并将zzz替换为$step,然后计算。这是gaussian09的例子,当然可以改成任何其它计算程序。最后从g09输出文件提取能量数值并写入表格 m062x.summary。 最后,感谢Alex最初提供给我一个例子,使我进入perl应用的领域,极大地提高了效率。 #!/usr/bin/perl -w # MODULES # ----------------------------------------------- use strict; use sigtrap; use diagnostics; use File::Copy; # ----------------------------------------------- my $summary = "m062x.summary"; open (SUM, "> $summary" or die "Cannot open $summary : $!\n";printf SUM "# STEP\t\t\t\tEnergy\n"; foreach my $step ('0.0001','0.25','0.50','0.75','1.00','1.25','1.50','1.75','2.00') { printf SUM "\t\%16.8E", $step; my $origfname = "m062x.com"; my $newfname = "m062x-$step.com"; my $newfnamet = "m062x-$step.log"; copy($origfname, $newfname) or die "Copy failed: $!"; system("perl -p -i -e s/'zzz'/$step/g $newfname" ;my $return = system("g09 $newfname 2>&1" ;die "System failed ($return)\n\n" if ($return != 0); my $ener; # EXTRACT INFO FROM OUTPUT open (OUT, "< $newfnamet" or die "Cannot open $newfnamet : $!\n";while (<OUT> {$ener = (split /\s+/)[5] if (/SCF Done:/); } close OUT; printf SUM "\t\%16.8E", $ener; printf SUM "\n"; } # ----------------------------------------------- exit 0; 转载自 http://blog.sciencenet.cn/blog-2854406-1076151.html |
» 猜你喜欢
假如你的研究生提出不合理要求
已经有8人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复












or die "Cannot open $summary : $!\n";
回复此楼