计算化学公社

 找回密码 Forget password
 注册 Register
Views: 12363|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[MOPAC] 用MS的图形界面操作MOPAC计算的懒人包

[复制链接 Copy URL]

127

帖子

1

威望

1231

eV
积分
1378

Level 4 (黑子)

本帖最后由 Shannon 于 2014-12-31 03:56 编辑

如题,利用material studio强大的建模能力快速 输入几何结构到mopac中, mopac计算完得到的几何结构重新输入到material studio里面。 结果立等可取,找一个过渡态只需要2秒钟。
例如输入结构:


输出结构


如果在输入结构中测量了键长键角,输出的结构中也会直接显示出键长键角,连点鼠标看键长的操作也可以省掉。
代码如下(MATLAB代码):
主要执行文件
  1. [atomsfetched,xsdfile]= xml2atoms('TSoutput.xsd');
  2. [xyz_num,species] = atoms2xyz7name (atomsfetched);
  3. filename='rhotbTS'
  4. xyz2mopac_inpTS (filename,xyz_num,species);
  5. dos(['mopac2012 ',filename,'.mop'])
  6. %%
  7. [species,xyz_out] = findgeommopac([filename,'.out']);
  8. %output section
  9. xyz_num2atoms (xyz_out,atomsfetched);% no need to output anything, atomsfetched is merely a reference.
  10. xmlwrite( 'TSoutput.xsd',xsdfile) %将对象存入电脑
复制代码
用来读取从xsd文件中提取 需要的atom对象的程序:xsd读取代码用的是java的语法…读起来感觉可能会很奇怪。
  1. function [atomsfetched,xsdfile]= xml2atoms(pathofxmkl)
  2. xsdfile= xmlread(pathofxmkl);
  3. root=xsdfile.getDocumentElement;
  4. root.setAttribute('Version','6.0');
  5. root.setAttribute('WrittenBy','Materials Studio 6.0');
  6. tmpnode=root.getFirstChild;
  7. nodeofinterest=tmpnode.getNextSibling;

  8. for ix=0:nodeofinterest.getLength()-1% Java 是从0开始计数的!!!
  9.     currentitem=nodeofinterest.item(ix);%
  10.     if strcmp(char(currentitem.getClass),'class org.apache.xerces.dom.DeferredElementImpl')
  11. if currentitem.getTagName=='Molecule'
  12.     moleculeinfo=nodeofinterest.item(ix);
  13. end
  14.     end
  15. end

  16. ilist=1;
  17. for iy=0:moleculeinfo.getLength()-1

  18.       currentatomitem=moleculeinfo.item(iy);

  19.         if strcmp(char(currentatomitem.getClass),'class org.apache.xerces.dom.DeferredElementImpl')
  20.              if currentatomitem.getTagName=='Atom3d'
  21.                
  22. atomsfetched(ilist)=currentatomitem;
  23. ilist=ilist+1;
  24.              end
  25.         end
  26.   
  27. end
  28. end
复制代码
从atom对象中提取坐标信息:
  1. function [xyz_num,species] = atoms2xyz7name (atomsfetched)
  2. xyz_num=zeros(length(atomsfetched),3);
  3. for iz=1:length(atomsfetched)% 改用matlab语法
  4.    currentatom=atomsfetched(iz);
  5.    xyz_java_str(iz)=currentatom.getAttribute('XYZ');
  6.    xyz_matstr=char(xyz_java_str(iz)); % 转换java变量到matalb变量
  7.    xyz_matcell=strsplit(xyz_matstr,',');%从逗号那儿分割整个字符串
  8.    xyz_num(iz,:)= str2double(xyz_matcell);%转换字符形式为数字
  9.      species(iz)=currentatom.getAttribute('Components');
  10. end
  11. species=char(species);
  12. end
复制代码
将坐标信息写成mopac输入文件
  1. function output = xyz2mopac_inp (filename,xyz_num,species)
  2. mopacconfigure=['PM7 eps=78.54 TS  CHARGE=0 \n my mopac pre optimization \n Name card requried \n '];

  3. xyzinput='';
  4. [nspec,~]=size(xyz_num);
  5. for ispec=1:nspec
  6.     xyzinput = [xyzinput,species(ispec),' ',num2str(xyz_num(ispec,:),'%010.9f '),'\n'];
  7. end
  8. xyzinput=sprintf(xyzinput);

  9. inputfilesetting_mopac=[mopacconfigure,xyzinput];
  10. inputfile_mopac=sprintf(inputfilesetting_mopac);

  11. fid1=fopen([filename,'.mop'],'w');
  12. fprintf(fid1,'%s',inputfile_mopac)
  13. fclose(fid1);
  14. output=0;
  15. end
复制代码
从mopac程序输出文件中提取坐标信息
  1.   function [species,xyz] = findgeommopac(filename)
  2. fid=fopen(filename,'r');

  3. ix=1;
  4. while 1
  5.    iline= fgetl(fid);
  6.    if iline==-1
  7.     break
  8.    end
  9.     geominfo=regexp(iline,'CARTESIAN COORDINATES') ;
  10.    if ~isempty(geominfo)
  11.       filepositions(ix)=ftell(fid);
  12.       ix=ix+1;
  13.    end
  14.    
  15. end
  16. outputgeompst=filepositions(end);
  17. fseek(fid,outputgeompst,'bof'); % 鼠标位置转移到CARTESIAN COORDINATES的末尾,刚读取玩CARTESIAN COORDINATES这一行的时候
  18. fgetl(fid);
  19. iy=1;
  20. while 1
  21. currentdataline=  fgetl(fid) ;
  22.    if isempty(currentdataline)
  23.       break
  24.   end
  25.    data=strsplit(currentdataline);
  26.    species(iy)=data{3};
  27.    xyz(iy,1)=str2double(data{4});
  28.    xyz(iy,2)=str2double(data{5});
  29.    xyz(iy,3)=str2double(data{6});
  30.    iy=iy+1;
  31.    
  32. end

  33. fclose(fid);
  34. end
复制代码
将读取到的坐标重新输入material studio
  1. function useless =xyz_num2atoms (xyz_num,atomsfetched)
  2. for iz=1:length(atomsfetched)   
  3.    currentatom=atomsfetched(iz);
  4. current_atom_xyz= xyz_num(iz,:);% 读入当前需要写的坐标
  5. crt_atm_xyz_str = sprintf('%f,',current_atom_xyz);%撰写为逗号分开的string格式
  6. crt_atm_xyz_str=crt_atm_xyz_str(1:end-1);%散掉末尾多余的逗号
  7.   currentatom.setAttribute('XYZ', crt_atm_xyz_str);%写入对象中,atom对象直接饮用的是xsdfile这个 对象

  8. end
复制代码




Baidu IME_2014-12-30_14-36-19.jpg (51.66 KB, 下载次数 Times of downloads: 57)

Baidu IME_2014-12-30_14-36-19.jpg

Baidu IME_2014-12-30_14-36-28.jpg (49.47 KB, 下载次数 Times of downloads: 47)

Baidu IME_2014-12-30_14-36-28.jpg

评分 Rate

参与人数
Participants 1
eV +10 收起 理由
Reason
sobereva + 10

查看全部评分 View all ratings

6万

帖子

99

威望

5万

eV
积分
120173

管理员

公社社长

2#
发表于 Post on 2014-12-31 05:28:56 | 只看该作者 Only view this author
我一般用gview建模,保存成gjf文件后把坐标部分拷到.mop里,算完了之后用mopac2xyz转换成xyz文件再用VMD观看。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

1149

帖子

6

威望

6635

eV
积分
7904

Level 6 (一方通行)

3#
发表于 Post on 2014-12-31 20:54:11 | 只看该作者 Only view this author
sobereva 发表于 2014-12-31 05:28
我一般用gview建模,保存成gjf文件后把坐标部分拷到.mop里,算完了之后用mopac2xyz转换成xyz文件再用VMD观 ...

直接用PDBOUT关键词不就行了么。。。

6万

帖子

99

威望

5万

eV
积分
120173

管理员

公社社长

4#
发表于 Post on 2015-1-1 06:54:22 | 只看该作者 Only view this author
fhh2626 发表于 2014-12-31 20:54
直接用PDBOUT关键词不就行了么。。。


pdbout只能用于蛋白质(或者自己添上必要的信息),否则没法输出,不方便。
而且mopac2xyz转出来的xyz能便利地看优化轨迹,大体系的优化是mopac时下真正的用处,这需要关注优化过程。
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

146

帖子

0

威望

940

eV
积分
1087

Level 4 (黑子)

5#
发表于 Post on 2015-2-6 21:51:02 | 只看该作者 Only view this author
fhh2626 发表于 2014-12-31 20:54
直接用PDBOUT关键词不就行了么。。。

还有这个关键,太好了!!!

146

帖子

0

威望

940

eV
积分
1087

Level 4 (黑子)

6#
发表于 Post on 2015-2-6 21:52:10 | 只看该作者 Only view this author
sobereva 发表于 2015-1-1 06:54
pdbout只能用于蛋白质(或者自己添上必要的信息),否则没法输出,不方便。
而且mopac2xyz转出来的xyz ...

ubuntu 12.04.5, mopac2xyz 用不了 !

6万

帖子

99

威望

5万

eV
积分
120173

管理员

公社社长

7#
发表于 Post on 2015-2-7 08:13:58 | 只看该作者 Only view this author
北纬18° 发表于 2015-2-6 21:52
ubuntu 12.04.5, mopac2xyz 用不了 !

压缩包里有源代码,自行编译即可
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

12

帖子

0

威望

281

eV
积分
293

Level 3 能力者

8#
发表于 Post on 2016-12-3 12:08:42 | 只看该作者 Only view this author
这好多个代码怎么互相调用的,能举个例子吗

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-17 00:15 , Processed in 0.277663 second(s), 24 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list