首页 > 行业资讯 > 4步出图!相互作用能/结合能脚本:用法、视频、注解、代码全文!

4步出图!相互作用能/结合能脚本:用法、视频、注解、代码全文!

时间:2023-03-07 来源: 浏览:

4步出图!相互作用能/结合能脚本:用法、视频、注解、代码全文!

MS杨站长 计算材料学
计算材料学

jisuancailiao

计算材料学科研论坛,欢迎新手、专家、大师以及业余爱好者。

收录于合集

【DFT入门资料下载】

呕血整理 | 50篇DFT计算开山级必引论文集,MS、VASP、QE、Gaussian、CP2K等经典之作!

下载链接!36小时MS教学视频:建模、自由能、过渡态、吸附能、结合能、能带、态密度、光学、声子、溶剂化计算等!

10000个晶体结构CIF文件:MOF、MXenes、催化、电池、二维材料、钙钛矿、金属、纳米管等

炸裂!32个MS脚本,自由能/台阶图计算和绘制、界面电荷分布、差分电荷密度计算、批量提交作业等!

相互作用能,又称结合能,计算公式为:

E(interaction)=E(layer1+2) - E(layer1) - E(layer2)

研究两层(如无机表面与溶液、无机表面与聚合物、聚合物与聚合物)之间的相互作用时,需要跑 分子动力学 ,并对其中每一帧的两层结构分别拆开进行能量计算,并执行上述减法。

轨迹长达数万帧时, 手动操作可能得算1年,利用脚本只需不到1分钟

全脚本展示在本文最下方!
本次为大家介绍的是MS官方脚本-相互作用能的第4次改进版(第1版发布于2009年),针对Forcite/Gulp/Mesocite模块开发。
原作者为BIOVIA的Stephen Todd,该作者还有另一款针对DMol3开发的相互作用能的脚本,杨站长将在下次推文中发布。整个脚本已在最下方完全展示。
<iframe allowfullscreen="" class="video_iframe rich_pages" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FT3X5UC8oqd7v2Xgiape0IN5DYDondbObrCJiaBnyJkP6NzbwOiaqcXNicQo0bxS1DMxDINAkiaM8hU2mOUibLlU6YMVA%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_2685140052074856449" data-ratio="1.7777777777777777" src="http://www.cnmhg.com/e/admin126459646/showimg.php?url=https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_2685140052074856449" data-vidtype="2" data-w="1920" frameborder="0" style="border-radius: 4px;"></iframe>
该脚本及配合使用案例 添加下方微信好友,回复“ 脚本 ”下载(包含 32个脚本 )。
轨迹文件、脚本、运行结果皆包含在压缩包内的 InteractionEnergy 路径中。
脚本用法:
1:建好两层各自结构,用Build-Build Layers工具将两层组合在一起。
2. 采用Forcite模块,设置好系综等参数,跑分子动力学,得到轨迹*.xtd。
3. 打开脚本,将xtd文件名改成第2步得到的轨迹名称,点run on server运行,得到表格。

4. H列为相互作用能每平方埃,选中后点此功能作图。
杨站长注解:
1. 本脚本可以计算结构中两个层之间的相互作用,比如 金属表面与聚合物 之间、 金属氧化物与溶液 之间、 聚合物与聚合物 之间,只要能找到合适力场的,都可以计算。
2. 计算时,这两层必须被命名为Layer 1与Layer 2。
其实无须额外注意,一般采用build layer小工具构建的结构,默认名称就是这两者。两层结构均为电中性。
3. 本脚本只需要一个分子动力学的轨迹,无须调试。
4. 杨站长已将力场类型更改为COMPASS,如有需要请自行更改。
5. 本脚本采用的结合面为AB面,结合方向为C方向,三轴必须互相垂直。
6. 结构中必须有很厚的真空层,厚度必须大于非键截断半径。 这里很容易出错
7. 本脚本将创建一个表格,将计算结果中的能量、结合能、结合能每平方埃的数据输出进表格中。
关注杨站长B站 ,持续更新各种脚本教程:https://space.bilibili.com/669166168

全脚本展示:

#!perl # Author: Stephen Todd # This script calculates the interaction energy between two layers in a structure. # The layers have to be defined as sets called Layer 1 and Layer 2 - these are the # default names assigned by the Layer builder. # This also uses the default settings for Forcite - ie Universal with current charges. # You should change the settings if you want to use another forcefield or summation method. # This script also assumes that the surface area is in the AB-plane. # A study table is produced containing the layers, energies, interaction energy, and then # the interaction energy per angstrom^2. # Note. The input trajectory should have a large vaccuum, greater than the # cut-off you are using in the non-bond calculation. use strict ; use MaterialsScript qw (: all ); ################################################################################# # Begin user editable settings # my $filename = "Layer" ; # Name of the trajectory without extension my $energySettings = [   CurrentForcefield =>  "COMPASS" ];  # Change the ff if needed Modules->Forcite->ChangeSettings( $energySettings ); # # End user editable settings ################################################################################# # Defines the trajectory document my $doc = $Documents{ "$filename.xtd" }; # Create a new study table to hold the structures and energies and set the headings my $newStudyTable = Documents->New( "$filename" . "_IntEnergy.std" ); my $calcSheet = $newStudyTable->Sheets->Item( 0 ); $calcSheet->ColumnHeading( 0 ) = "$filename Cell" ; $calcSheet->ColumnHeading( 1 ) = "Energy of $filename Cell" ; $calcSheet->ColumnHeading( 2 ) = "Layer 1" ; $calcSheet->ColumnHeading( 3 ) = "Energy of Layer 1" ; $calcSheet->ColumnHeading( 4 ) = "Layer 2" ; $calcSheet->ColumnHeading( 5 ) = "Energy of layer 2" ; $calcSheet->ColumnHeading( 6 ) = "Interaction Energy" ; $calcSheet->ColumnHeading( 7 ) = "Interaction Energy per angstrom^2" ; # Get the total number of frames in the trajectory my $numFrames = $doc->Trajectory->NumFrames; print "Calculating interaction energy for $numFrames frames on $filename trajectory " ; # Calculates the area of the surface based on the surface being in the A-B plane my $length1 = $doc->Lattice3D->LengthA; my $length2 = $doc->Lattice3D->LengthB; my $surfaceArea = $length1 * $length2; print "The surface area is $surfaceArea angstroms^2 " ; # Initialise Forcite. If you want to change the settings, you can load them or # use a change settings command here. my $forcite = Modules->Forcite; # Starts to loop over the frames in the trajectory for ( my $count= 1 ; $count<=$numFrames; $count++) { print "Calculating energy for frame $count " ; # Define the frame of the trajectory $doc->Trajectorys->Item( 0 )->CurrentFrame = $count; # Create three documents to hold the temporary layers my $allDoc = Documents->New( "all.xsd" ); my $layer1Doc = Documents->New( "Layer1.xsd" ); my $layer2Doc = Documents->New( "Layer2.xsd" ); # Create a copy of the structure in temporary documents and delete # the layers that you don’t need. $allDoc->CopyFrom($doc); $layer1Doc->CopyFrom($doc); $layer1Doc->DisplayRange->Sets( "Layer 2" )->Atoms->Delete; $layer2Doc->CopyFrom($doc); $layer2Doc->DisplayRange->Sets( "Layer 1" )->Atoms->Delete; # Put the structures in a study table for safekeeping $calcSheet->Cell($count -1 , 0 ) = $allDoc; $calcSheet->Cell($count -1 , 2 ) = $layer1Doc; $calcSheet->Cell($count -1 , 4 ) = $layer2Doc; #Calculate the energies for all the layers and put in the study table $forcite->Calculation->Run($allDoc, [Task => ’Energy’ ]); $calcSheet->Cell($count -1 , 1 ) = $allDoc->PotentialEnergy; $forcite->Calculation->Run($layer1Doc, [Task => ’Energy’ ]); $calcSheet->Cell($count -1 , 3 ) = $layer1Doc->PotentialEnergy; $forcite->Calculation->Run($layer2Doc, [Task => ’Energy’ ]); $calcSheet->Cell($count -1 , 5 ) = $layer2Doc->PotentialEnergy; # Calculate the Interaction Energy from the cells in the Study Table my $totalEnergy = $calcSheet->Cell($count -1 , 1 ); my $layer1Energy = $calcSheet->Cell($count -1 , 3 ); my $layer2Energy = $calcSheet->Cell($count -1 , 5 ); my $interactionEnergy = $totalEnergy - ($layer1Energy + $layer2Energy); $calcSheet->Cell($count -1 , 6 ) = $interactionEnergy; my $interactionEnergyArea = $interactionEnergy / $surfaceArea; $calcSheet->Cell($count -1 , 7 ) = $interactionEnergyArea; # Discard the temporary documents $allDoc->Discard; $layer1Doc->Discard; $layer2Doc->Discard; } print "Calculation complete. " ;

Materials Studio

领取方式

公众号后台留言“ 脚本 ”,下载该脚本及配合使用案例。

脚本   免费获取

长按识别二维码回复: 脚本

长按识别二维码回复: 脚本

长按识别二维码回复: 脚本

长按识别二维码回复“脚本”,免费获取

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐