徐尔骐
如何快速上手CTR模拟?——GenX软件入门
2025-6-30 17:41
阅读:187

本文旨在教大家使用开源软件GenX来进行CTR模拟,本文主要参考GenX软件的CTR模拟官方教程,网址如下https://aglavic.github.io/genx/doc/tutorials/sxrd.html

虽然该软件有官方教程,同时在Github上有开源代码,但是官方给出的教程对于CTR物理过程的介绍比较简略,Python代码也比较零散且版本相对老旧,在学习过程中会有一定的难度,不利于大家快速上手进行模拟。因此在本文中我们会从CTR的基本物理原理和GenX软件的基本使用方法出发,详细介绍利用GenX软件进行CTR模拟的全过程,希望这篇文章可以帮助大家更快上手GenX软件的CTR模拟。本文的灵感来自于北京大学物理学院鞠光旭老师开设的《X射线晶体学》课程的实践项目,在此特别感谢课上和老师同学们的积极交流讨论,以及叶云浩和杨歆浩同学在代码上的帮助,本文也可以为接下来选修该课程的学弟学妹们提供参考。另外,本文主要介绍GenX软件进行CTR模拟的过程,侧重于将其背后的物理过程用代码进行实现,所以对于CTR的详细物理原理和实验过程在此不多赘述,本文主要面向已经有一定固体物理、X射线晶体学理论基础和Python代码基础的读者,对于0基础的读者,可以先使用文章中的代码进行CTR模拟,之后我也会专门写一篇关于CTR理论和实验的原理介绍,同时也欢迎学弟学妹们选修《X射线晶体学》课程系统学习。

在正式开始模拟之前,首先简单介绍一下什么是CTR (Crystal Truncation Rod),即晶体截断杆技术。它是一种X射线表/界面散射技术,是由布拉格衍射峰强度分布沿表面法线方向延伸所产生的散射条纹。其物理本质在于晶体表面的几何截断破坏了原有的三维周期性结构,使得沿法线方向(垂直于样品表面)的周期性不再延续。根据傅里叶变换原理,X 射线散射信号因此在倒易空间中不再局限于理想布拉格点,而是沿垂直表面方向延伸,以杆状分布,晶体截断杆因此得名。沿 CTR 的衍射强度分布能够以原子尺度精度揭示晶体表面结构信息,但传统实验室衍射仪分辨率不够,导致在XRD (X-Ray Diffraction) 实验中往往只能获得布拉格衍射峰的信号,而无法有效捕捉到布拉格峰两侧的信号。因此CTR实验往往依托大科学装置同步辐射光源进行实现,这大大增加了实验周期和实验成本,在实验前进行CTR模拟是十分有必要的,可以提高实验的准确性。另外,CTR模拟的代码经简单修改后还可以进一步应用于CTR实验数据处理工作,从而通过拟合得到材料的厚度、组分、表/界面粗糙度等关键信息,所以CTR模拟是与CTR实验不可分割,相辅相成的一项重要技术。

接下来我们再简单介绍一下GenX软件,GenX软件是一款成熟的开源软件,可以用于CTR、XRR (X-Ray Reflectivity) 模拟以及实验数据拟合。其内置了GUI界面操作和Python代码编写两种操作模式,其中GUI界面操作方式比较简单,大家看官方教程即可;Python代码编写的方式自由度更高,修改效率更高,相对难度也更高,因此以下教程主要基于Python代码编写。首先我们打开软件可以看到四个选项,这里我们选择“SurfaceXRD”模块进行CTR模拟,加载完毕后在左上角的“Settings”中选择“Data Loader",将其调至“sls_sxrd”模式并应用,然后在右下角打开“Script”模块进行代码编写,完成后在左上角点击“Simulate”即可在右上角的图像模块中看到模拟得到的CTR图像。以上是整个软件进行CTR模拟的简易操作流程,更多功能大家可以自行尝试探索。

至此,我们简单介绍了CTR理论和GenX软件,现在我们正式开始CTR模拟。以GaN 基材料为例,我们首先需要构建相应的晶胞,一般的GaN基材料具有纤锌矿结构,其晶格由两个六方密排结构沿c轴方向平移3/8c套构而成,晶胞的定义可以写成如下形式

runoob-code (8).png

定义完晶胞之后,我们要在晶胞中放上原子,对于GaN基材料一个原胞中分别有两个不等价的Ga原子和N原子,GaN材料一个原胞中的原子可以写成如下形式

runoob-code (7).png

可以看到每个原子需要定义其原子id、元素种类、原子位置、Debye-Waller因子以及占据数,通过修改占据数,用In或Al原子替换Ga原子,我们还可以定义InGaN材料和AlGaN材料中的原子如下

runoob-code (6).png

在InGaN材料中,我们保证Ga和In原子占据相同的晶格位点,因此两者的占据数之和是1,AlGaN材料同理。

接下来我们考虑模拟InGaN/GaN异质结构和AlGaN/GaN异质结构,因此我们还需要定义薄膜层的应力应变情况。这里我们结合Vegard's Law和Hooke's Law,根据GaN、InN、AlN的晶格常数和弹性力常数以及薄膜中合金的组分和弛豫度可以得到薄膜层面外c晶格常数的值如下

runoob-code (5).png

至此我们已经定义了CTR模拟中要使用的材料,另外我们还需要定义所用的实验装置,即入射X射线的参数,包括X射线的波长,入射角度以及几何限制,这里考虑的是对称衍射,所以选用的几何限制是入射角等于出射角,GenX中还支持固定入射角或者固定出射角

runoob-code (4).png

想要得到X射线的入射角度,我们还需要考虑我们要测量的布拉格点,即 (hkl),例如这里考虑对称衍射布拉格点 (002),由此我们可以算出对应的X射线入射角度

runoob-code (3).png

以上代码利用到了下面的两个公式,首先由布拉格点 (hkl) 计算出了对应的面间距,然后再由布拉格定律将面间距转化为入射角度,即可算出对应的X射线入射角度

image.png

image.png

最后考虑材料的对称性问题,这一步主要是利用材料的对称性提高计算效率,理论上即使这一步不进行设置,默认使用对称性最低的P1空间群程序也可以正常运行,但是计算效率会相对更低,耗时更长,所以在模拟较大的结构时考虑对称性可以大大提高计算效率。GaN基材料对应的空间群是P63mc群,这里以其子群P3群为例

runoob-code (2).png

对于其他材料的情况,可能用到的其他空间群的Python代码写法可以参考如下网址https://github.com/aglavic/genx/blob/master/genx/genx/models/symmetries.py

至此准备工作已经全部完成,现在我们开始定义模拟函数以及所需的参数,例如这里我们考虑InGaN/GaN和AlGaN/GaN的异质结构,因此要设定InGaN和AlGaN薄膜层的厚度,并将薄膜层置于GaN衬底之上

runoob-code (1).png

然后利用下面的两个公式,根据原子散射因子、结构因子以及X射线强度之间的关系即可模拟出对应的CTR图像

image.png

image.png

runoob-code.png

首先来看InGaN/GaN异质结构,其CTR模拟结果如下

image.png

从图中可以看出,在GaN衬底的布拉格衍射峰左侧还有一个InGaN薄膜层的布拉格衍射峰,这是因为In原子半径大于Ga原子,所以InGaN薄膜对应的c晶格常数比GaN衬底更大,根据晶格和倒格子的关系,其对应的倒易空间坐标更小,即图中的l值更小。通过修改InGaN薄膜层中的In原子组分浓度和弛豫度我们还可以得到不同的InGaN薄膜层布拉格衍射峰的峰位和强度。另外,我们看到在布拉格衍射峰两侧的CTR信号中出现了明显的震荡,这是由于两层材料间电子密度不同导致的。通过修改InGaN薄膜层的厚度我们则可以得到布拉格衍射峰两侧信号不同的震荡周期。同理我们可以对如下的AlGaN/GaN异质结构的CTR图像进行分析,这里不再赘述。

image.png

除了最简单的异质结构,利用GenX软件我们还可以实现各种各样复杂结构的CTR模拟,在此附上下面这张GaN/InGaN/GaN量子阱结构的CTR图像作为启发,大家可以自行尝试修改代码,进行各类结构的CTR模拟。

image.png

在本文的最后,为节省大家的时间成本,附上完整版的代码供大家参考,欢迎大家与我交流讨论。

runoob-code.png

由于科学网直接提交Python代码格式会被打乱,为了方便大家阅读,遂将代码全部改为图片格式。

转载本文请联系原作者获取授权,同时请注明本文来自徐尔骐科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3590700-1491813.html?mobile=1

收藏

分享到:

下一篇
当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?