| 查看: 674 | 回复: 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 |
» 猜你喜欢
急招9月入学博士,要有4级、最晚7月硕士毕业。精密电机驱控课题;学位材料
已经有6人回复
有没有快的中文核心比较快录用的,纳米材料光催化
已经有4人回复
本人42,博士刚毕业,现在找不到工作,怎么办?:(
已经有21人回复
河北省自然基金
已经有6人回复
博士申请
已经有5人回复
有人投过CCC中国控制会议吗?
已经有3人回复
3,4-二羟基苯乙酮如何纯化?
已经有5人回复
国基评审
已经有10人回复
2026-博士申请
已经有4人回复
考研调剂
已经有3人回复












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