一、使用场景
对多个构建出来的分子模型进行几何优化,使用AC模块装填分子,生成10帧构象,对AC盒子进行几何优化,找出最小能量帧作为后续MD的模型,将帧与能量存储在std文件中。
二、Perl代码编写
#!perl
use strict;
use Getopt::Long;
use MaterialsScript qw(:all);
my $numdoc = 5;
#Go-AC-GO-MD-density
for (my $i = 1; $i <= $numdoc; $i++){
#定义存储数据的文档
my $statsDoc = Documents->New ("Fla_Ene_$i.std");
$statsDoc->ColumnHeading (0) = "Flames";
$statsDoc->ColumnHeading (1) = "Energy";
#define working doc
my $doc = $Documents{"$i.xsd"};
#Go
my $results1 = Modules->Forcite->GeometryOptimization->Run($doc, Settings(
WriteLevel => "Silent",
Quality => 'Ultra-fine',
CurrentForcefield => 'COMPASS',
ChargeAssignment => 'Forcefield assigned',
MaxIterations => 50000));
#save,update
$results1->Structure->SaveAs("GO_$i.xsd");
$doc = $Documents{"GO_$i.xsd"};
#remove component and AC
my $acConstruction = Modules->AmorphousCell->Construction;
my $component = $doc;
if($i>1){
my $k = $i-1;
my $removedoc = $Documents{"GO_$k.xsd"};
$acConstruction->RemoveComponent($removedoc);
}
$acConstruction->AddComponent($component);
$acConstruction->Loading($component) = 50;
my $results2 = $acConstruction->Run(Settings(
Quality => 'Ultra-fine',
OptimizeGeometry => 'No',
Configurations => 10,
CurrentForcefield => 'COMPASS',
ChargeAssignment => 'Forcefield assigned'));
#update and delete
$results2->Trajectory->SaveAs("AC_$i.xtd");
$doc = $Documents{"AC_$i.xtd"};
$Documents{"Status.txt"}->Delete;
$Documents{"GO_$i.txt"}->Delete;
$Documents{"GO_$i.xtd"}->Delete;
#AC-Go
my $results3 = Modules->Forcite->GeometryOptimization->Run($doc, Settings(
WriteLevel => "Silent",
Quality => 'Ultra-fine',
CurrentForcefield => 'COMPASS',
MaxIterations => 50000));
#将帧与对应的能量保存在数据表中
my $OutTrajectory = $results3->Trajectory;
my $count = $OutTrajectory->NumFrames;
for(my $j = 1; $j <= $count; $j++){
$OutTrajectory->CurrentFrame = $j;
$statsDoc->Cell($j-1,0) = $j;
$statsDoc->Cell($j-1,1) = $OutTrajectory->FrameEnergy;
}
#save and delete
$results3->Trajectory->SaveAs("AC_GO_$i.xtd");
$Documents{"AC_$i.xtd"}->Delete;
#输出完成情况信息
printf "%d.xsd completed!\n",$i;
}