Jerkwin分享 http://blog.sciencenet.cn/u/Jerkwin

博文

八面体与截角八面体团簇的构建及代码实现

已有 8697 次阅读 2014-12-16 07:51 |个人分类:我的工具箱|系统分类:科研笔记

2013-08-16 13:53:46 初稿2014-12-15 17:17:19 修正代码bug, 增加网络版工具

八面体和截角八面体构型在纳米金属团簇的结构中比较常见, 在展示或计算时我们都需要构建这些结构$.$

原理:正方体切除6顶点得正八面体, 正八面体切除6顶点得截角八面体

具体方法:长度以原子个数计, 以简单立方晶胞为例, 面心立方、体心立方晶胞同理

  • 根据需要大小构建相应的超晶胞, 设其边长为Nedg

  • {±Nedg±Nedg±Nedg} 6个面依次切取超晶胞, 只保留面内的部分, 得正八面体团簇

  • X=±Ntop,Y=±Ntop,Z=±Ntop 6个面上下左右前后依次截取所得正八面体, 得截角八面体, Ntop为切除四面体的边长

截角八面体有6个四边形面和8个六边形面, 设Nrec和Nhex分别为四边形边长和六边形边长, 它们与正方体边长和切除四面体边长的关系如下:

NhexNtop=Nedg2Ntop=Nrec1NrecNedg=Ntop+1=Nhex+2Ntop

利用这些关系我们便可以得到任意边长的截角八面体了.

正八面体(边长7)

截角八面体(边长3)

截角八面体(面心立方, 边长3)

截角八面体(体心立方, 边长3)

基于JavaScript的在线工具(2014-12-15更新)

虽然我发了这篇博文, 但还是经常有人向我询问怎么创建, 为了尽量避免浪费时间, 我现在将其做成一个在线小工具, 只要你选好参数, 就可以得到相应的团簇坐标. 建议使用谷歌的Chrome浏览器, 因为我没有在其他浏览器上进行测试.

如果你需要创建八面体或截角八面体团簇, 请移步这里. 若发现问题, 敬请告示.

代码# Language: bash################################################################################# A script to generate Octahedron/Truncated Octahedron of SC/BCC/FCC# Jicun LI # 2013-08-17: Demo# 2014-12-15: fix bug################################################################################awk 'BEGIN { YesBCC=0; YesFCC=0Nrec=3; Nhex=3; YesCut=1# Nhex=N-2*Ntop; Nrec=Ntop+1Ntop=Nrec-1Nedg=Nhex+2*Ntopa=1; b=1; c=1; Reps=1-1/Nedg+1E-3Ntot=0for(i=-Nedg; i<=Nedg; i++){for(j=-Nedg; j<=Nedg; j++){for(k=-Nedg; k<=Nedg; k++){Ntot=Ntot+1x=i*a; y=j*b; z=k*cS[Ntot]="C"; X[Ntot]=x; Y[Ntot]=y; Z[Ntot]=zif(YesBCC){Ntot=Ntot+1S[Ntot]="BCC";X[Ntot]=x+0.5*a; Y[Ntot]=y+0.5*b; Z[Ntot]=z+0.5*c}elseif(YesFCC){Ntot=Ntot+1S[Ntot]="FCC";X[Ntot]=x+0.5*a; Y[Ntot]=y+0.5*b; Z[Ntot]=zNtot=Ntot+1S[Ntot]="FCC";X[Ntot]=x+0.5*a; Y[Ntot]=y;       Z[Ntot]=z+0.5*cNtot=Ntot+1S[Ntot]="FCC";X[Ntot]=x;       Y[Ntot]=y+0.5*b; Z[Ntot]=z+0.5*c}}}}Natm=0Ncut=Nedg-Ntop-0.5001;Na=Nedg; Nb=Nedg; Nc=Nedg;Ra=1/(Na*a); Rb=1/(Nb*b); Rc=1/(Nc*c)for(i=1; i<=Ntot; i++){x=X[i]; y=Y[i]; z=Z[i]if( x*Ra+y*Rb+z*Rc<Reps &&  x*Ra-y*Rb+z*Rc<Reps &&-x*Ra+y*Rb+z*Rc<Reps &&-x*Ra-y*Rb+z*Rc<Reps &&  x*Ra+y*Rb-z*Rc<Reps &&  x*Ra-y*Rb-z*Rc<Reps &&-x*Ra+y*Rb-z*Rc<Reps &&-x*Ra-y*Rb-z*Rc<Reps ){if(YesCut){if(-Ncut*a<x && x<Ncut*a &&-Ncut*b<y && y<Ncut*b &&-Ncut*c<z && z<Ncut*c){Natm=Natm+1; YesIn[i]=1}}else{Natm=Natm+1; YesIn[i]=1}}}print Natmprint "BCC= " YesBCC,"FCC= " YesFCC,"Nhex= " Nhex,"Nrec= " Nrecfor(i=1; i<=Ntot; i++){if(YesIn[i]) printf "%5s %8.3f %8.3f %8.3fn", S[i], X[i], Y[i], Z[i]}} '

参考

  1. http://en.wikipedia.org/wiki/Truncated_octahedron

图片表格公式代码完整版请参看八面体与截角八面体团簇的构建及代码实现

https://wap.sciencenet.cn/blog-548663-851361.html

上一篇:物理化学中的标准态符号
下一篇:动态网页数据的简单获取方法
收藏 IP: 130.184.197.*| 热度|

1 孟利军

该博文允许注册用户评论 请点击登录 评论 (4 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-15 20:41

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部