MATLAB在固体物理中的应用:绘制晶体结构图‌

写在前面

最近在复习考研复试《固体物理》这一门课,去年学的内容已经忘干净了,所以就翻开前几页。突然看到了面心立方和体心立方结构图,想到了去年室友用Mathematica做了晶胞的结构图,于是就手痒痒自己也想来做一个。

具体物理内容不会涉及到多少,但还是要求大家能对“简单立方结构”、“体心立方结构”、“面心立方结构”有一个简单的理解,因为我比较懒,所以我就不放这些基础内容凑字数了。

用MATLAB跑出来的效果图为

面心立方-MATLAB跑出来的图

我的所有程序都放在我的Github: https://github.com/HanpuLiang/Something-Small中。

基本的思考

如果我们想要做一个类似于这样子的结构图的话,我们需要知道些什么?

想要达成的效果(图源百度)

如果我们想要做成这么大个超胞的话,又需要在上面的基础上怎么做?

超胞示意图(图源我自己)

有过做计算的同学已经想到了,需要计算物理中,描述晶胞中原子位置的文件POSCAR,然后把POSCAR拖到VESTA中就可以上面这幅图了。

所以我们这里模拟POSCAR来输入参数:

- 晶胞参数:描述晶胞大小的参数。

- 超胞大小:当晶胞数量大于1个并且周期性变化时,用三个数字描述其在三个方向上的晶胞叠加数目。

- 各个原子的坐标:没有这个还怎么画出来原子啊。

基本参数

晶胞参数

晶胞参数包括6个值:三条边a1, a2, a3和三个角alpha, beta, gamma,如下图所示

晶胞参数

因为编写程序的复杂程度问题,我们这里只考虑alpha != 90度, beta=gamma=90度这样的情况。如果不这样的话,那就有点难了,需要考虑这个晶胞斜向的角度。

超胞大小

超胞大小是用来形容我们这个超胞到底由几个晶胞组成,以及他们的排列方式是怎么样子的。就比如下图中,沿着a1方向的层数为1个,沿着a2方向的层数为3,沿着a3方向的层数为2.所以我们就可以设定为[1, 3, 2]。

值得注意的是,这里我用的并不是x, y, z轴的方向!!!因为如果alpha!=90度的话,那么a2方向就不和y轴平齐了,所以为了保证两个晶胞相连,就必须要沿着晶轴方向拓展。

超胞大小

原子位置

这个没什么好说的,如果我们建立好了超胞,那么直接在对应的坐标画上原子就好。

写在后面

因为BiLiBiLi没办法放代码,所以下面大家可以去我的博客进行学习代码咯。

知乎: https://zhuanlan.zhihu.com/p/60002045

CSDN: https://mp.csdn.net/mdeditor/88728165

简书: https://www.jianshu.com/p/b0dcd4684606

我的所有程序都放在我的Github: https://github.com/HanpuLiang/Something-Small中。

如果喜欢的话麻烦点个赞,加个收藏,来个关注呦。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空