Python在“计算材料学”教学中的应用探索

2021-09-30 04:29张亚超郑珊
教育教学论坛 2021年37期
关键词:实践教学

张亚超 郑珊

[摘 要] 以H2分子势能曲线的密度泛函理论计算为实践教学案例,探讨脚本语言Python在“计算材料学”教学中的可能应用。由于该课程实践性较强,传统教学方式既需要兼顾基础理论内容,又需要花费很大精力讲授各种计算软件的使用,无形中增大了学习难度。提出一种基于Python的计算材料学实验方案,引导学生通过实际材料计算和提问学习理论方法。Python语法简单、容易上手,且具备胶水语言的优势,可以无缝整合材料建模、理论计算、数据分析与可视化等全部过程,大大降低了教学复杂度,有助于提升学生的学习兴趣。

[关键词] 密度泛函理论;Python;实践教学;材料模拟

[作者简介] 张亚超(1985—),男,河南叶县人,博士,贵州师范学院贵州省纳米材料模拟与计算重点实验室副教授,主要从事计算材料学研究;郑 珊(1990—),女,贵州贵阳人,硕士,贵州师范学院化学与材料学院实验师,主要从事药物分子筛选与设计研究。

[中图分类号] G642.0   [文献标识码] A   [文章编号] 1674-9324(2021)37-0137-04    [收稿日期] 2021-04-16

隨着理论方法的发展与计算能力的提升,在物质科学相关研究领域,理论、实验与计算已经形成了三足鼎立的局面。为了适应这种学科发展需求,材料科学与工程专业的教学工作也不断与时俱进,逐步吸纳现代计算机技术[1],将其应用范围从传统的实验数据处理与可视化扩大到材料模拟与设计、材料基因工程等前沿领域。部分高校开设了“计算材料学”课程[2],致力于介绍前沿材料计算技术[3],培养学生的计算思维和动手能力。遗憾的是,该课程涉及多学科交叉和大量的专业软件使用[4],内容庞杂,操作极其烦琐,学生很容易在初期就失去信心和兴趣。本文提出一种基于Python脚本语言的计算材料实验设计方案,希望能通过实践带动理论课的学习。这种实践教学方案的实施,一方面为学生提供一个便利的计算材料工具箱,显著降低上机实践操作的复杂性,使学生能通过简单程序编写完成一般的材料模拟与设计工作,增强课程的趣味性与吸引力;另一方面鼓励学生通过实际材料模拟“发现”计算方法存在的问题,以更深入地理解该课程所涉及的基础理论知识。

一、“计算材料学”课程特点与教学改革

“计算材料学”涵盖较多的理论基础,涉及凝聚态物理、理论化学、数值分析、计算机编程等多个学科方向,教学难度较大。以作者所在的高校贵州师范学院为例,该课程开设在材料科学与工程专业大三下学期,教学内容包括从头算波函数理论、密度泛函理论、固体电子结构计算、赝势平面波方法、经典分子动力学、第一性原理分子动力学及蒙特卡罗模拟等,共48学时,其中理论讲授32学时,上机实践16学时。这要求学生在前五个学期必须系统学习一些必备的基础理论课程,包括高等数学、线性代数、C语言程序设计、量子力学、材料物理等。然而,在实际教学过程中发现,由于先修课程并未扎实掌握,学生在一个学期内很难完成这样的高强度学习。该课程的理论方法讲授部分涉及大量的公式推导,学生往往会因为一时跟不上进度而失去兴趣。上机实践环节又要求学生掌握较多的专业软件。例如,材料建模过程依赖商业软件如GaussView、Materials Studio等,这类软件往往安装于Windows系统,而大部分材料计算软件如SIESTA、Quantum Espresso、VASP等却在Linux环境下运行。在这种情况下,学生需要同时熟悉不同的操作系统,并需要频繁完成不同系统之间的数据传递。熟练掌握这些操作本身就需要一定的学习时间,学生短时间内极容易在计算环境搭建或命令行操作上遇到困难而陷入迷茫。

针对这种情况,笔者探索一种实践主导的教学模式,不再花费大量时间集中讲授理论方法,而是以一系列实验项目为切入点,通过开展计算机模拟和集体讨论来推进理论课学习。举例来说,通过“H2分子势能曲线的第一性原理计算”了解以Hartree-Fock理论为基础的从头算波函数方法的精度和计算量,熟悉分子体系计算所常用的原子轨道线性组合(LCAO)框架;通过“锐钛矿TiO2(101)表面电子结构计算”学习固体能带理论,掌握平面波(PW)展开和倒空间积分等重要概念,了解第一性原理赝势;通过“N2分子在Cu(111)表面的吸附解离”认识第一性原理分子动力学对化学过程模拟的重要性;通过“二维磁性材料相变的蒙特卡罗模拟”熟悉蒙特卡罗方法的基本原理。

这些实验项目全部通过Python脚本直接在远程Linux工作站上完成,容易引起学生的学习兴趣。Python运行环境和必备的计算模块已经事先在Linux工作站上部署好,学生在实验过程中可以专注于材料计算本身,而不必分心去解决技术困难。学生在动手编程调用计算模块的过程中,能够对计算参数的选择和收敛性测试有更细致的了解。通过比较不同方法的计算精度能够对理论方法所涉及的近似有更深刻的认识,这有助于激发学生的求知欲。这种化被动为主动的实践教学方式,将会提升学生的整体学习效率。

二、Python在材料模拟中的优势

Python作为一种简洁却强大、实用的脚本语言,特别适合于化学、物理和材料类专业的科研教学工作[5]。此处选用Python作为编程语言主要是基于它的以下几点明显优势:(1)语法简单,前期学过C语言的学生可以快速完成简单Python脚本的编写,学习成本很低。(2)完全免费,不用担心版权问题。(3)科学计算库比较丰富,如NumPy、SciPy、pandas、scikit-learn等,利于开展常规的数值分析工作,如插值与拟合、数值积分、微分方程求解、矩阵运算、数据挖掘与机器学习等。另外,采用matplotlib库可以直接实现计算结果的可视化,从图中分析结果的变化趋势比直接看数据直观得多。(4)Python是“胶水语言”,可将材料建模、电子/分子结构计算、材料性质提取与数据分析整合到一个脚本,一次运行便可获得结果,大大降低了材料模拟复杂度。例如,调用原子模拟环境软件包ASE(Atomic Simulation Environment),可以在统一框架下轻松实现原子尺度的材料模拟,包括结构优化、分子动力学模拟、研究化学过程势垒的NEB(Nudged Elastic Band)计算等。这类计算模块的开发为实现高通量材料模拟奠定了良好的基础。(5)Python有非常强大的软件包管理工具pip,仅用一个命令即可完成计算模块的在线安装或升级,自动解决各种计算库的依赖问题。

值得一提的是,盡管Python的计算速度与编译型语言C/C++和FORTRAN相比差距明显,这个问题很大程度上可以通过C语言扩展来解决:将速度较慢的模块用C语言实现,然后封装成库供Python调用。这种Python与C语言的有机结合既保证了计算速度,又保留了脚本语言的灵活性,有助于开展复杂的材料模拟。另外,基于Python面向对象的语言特性,更容易设计出可维护性强的计算程序。

三、具体教学案例

本部分以“H2分子势能曲线的密度泛函理论计算”为具体教学案例,展示这种教学方式的优势与可行性。根据实验目的,需要得到H2分子的结合能随H-H键长的变化关系。为了计算结合能Eb,必须先求出孤立H原子与H2分子的电子能量。此时,Eb=E(H2)-2E(H),其中原子能量E(H)与分子能量E(H2)通过密度泛函理论(DFT)计算获取。在Python脚本中,计算Eb的过程可以通过定义一个函数来方便地实现。此项目所用的Python代码如图1所示。该脚本仅仅利用30行代码就实现了H原子与H2分子的超胞模型构建、0.2~3.5A(步长0.05A)键长范围的DFT计算(采用三种不同泛函:LDA, PBE和PBE0),以及势能曲线作图。计算结果表明,无论(半)局域泛函还是杂化泛函,均无法正确描述H2分子的解离行为(图2)。当键长大于2.25A时,三种泛函所得势能曲线均越过零线(Eb=0水平线),意味着原子之间存在排斥作用。从物理上讲,当两个H原子相距足够远时,H-H之间化学键被打断,原子之间不再有相互作用,因此势能曲线应该趋近于零线。

通过这个项目,可以引导学生思考以下两个问题:(1)拟合势能曲线,计算H2分子的平衡键长re及解离能De,与实验结果(re=0.74A,De=4.52 eV)进行比较,讨论不同泛函的计算精度;(2)造成势能曲线尾部越过零线的原因是什么,如何改进?第二个问题实质上是理论化学领域著名的静态电子关联问题,根源在于DFT框架下多电子波函数的单Slater行列式表达。在实际计算中,针对这类问题往往需要采用高精度波函数方法,如多参考态组态相互作用(MRCI)方法[6]。

学生通过这个实验项目能学到什么东西呢?首先,在技术层面,学生通过练习可以学会如何调用ASE模块搭建分子模型、控制特定的结构参数,如原子间距,学习如何调用GPAW程序进行DFT计算,并利用Python提取计算结果完成结合能的计算,以及如何调用matplotlib库进行作图。其次,通过分析计算结果,了解DFT目前在处理静态相关问题上的局限,由此认识到在复杂材料计算中也可能存在这样的误差。另外,还可以借此理解波函数方法的优势,即通过增大多电子波函数基组,提高对电子相关的描述精度。学有余力的学生甚至可以通过查阅文献,思考如何在DFT框架下解决这个问题。一个常用的办法是引入对称性破缺波函数:控制两个H原子的自旋取向,一个向上,另一个向下,这实际上是一种单重态与三重态的混合态。然后采用自旋极化的DFT计算将能够得到趋近零线的势能曲线。

四、结论与展望

本文以H2分子势能曲线的DFT计算为例探讨了Python脚本语言在“计算材料学”实践教学中的应用。由于材料模拟的复杂性与前沿交叉特点,传统的理论讲授为主、上机实践为辅的教学模式不再适用于该课程的教学。本研究提出一种实践教学方案,将整个课程分解为一系列实验项目,引导学生在Linux工作站上编写Python脚本来完成实验。Python的“胶水语言”特点,有助于整合材料建模、计算与数据可视化,在材料模拟领域优势巨大。基于Python的编程实践有助于激发学生进一步的探索热情,为系统学习相关理论方法打下良好的基础。这种教学方式同样也适用于“计算化学”“计算生物学”等需要具备一定编程经验的课程。

参考文献

[1]高慧玲,李芸玲,刘露,等.《计算机在材料科学中的应用》课程教学探索[J].广东化工,2021,48(6):197-198.

[2]江建军,缪灵,梁培,等.计算材料学:设计实践方法[M].北京:高等教育出版社,2010:1-44.

[3]张跃,谷景华,尚家香,等.计算材料学基础[M].北京:北京航空航天大学出版社,2007:160-190.

[4]戴振翔,郑赣鸿,马永青.《材料结构设计与计算》课程的教学改革[J].教育教学论坛,2018(29):130-131.

[5]王浩,刘红瑜,韦淼今.Python在分析化学实验设计中的应用[J].大学化学,2020,35(9):198-204.

[6]杨传路,黄钰珺,张鑫,等.MRCI方法研究H2分子基态势能曲线和解析势能函数[J].鲁东大学学报(自然科学版),2004,20(1):10.

Application of Python in Computational Materials Science Teaching

ZHANG Ya-Chaoa, ZHENG Shanb

(a. Guizhou Provincial Key Laboratory of Computational Nano-Material Science; b. School of Chemistry and Materials Science, Guizhou Education University, Guiyang,Guizhou 550018, China)

Abstract: This paper explores possible application of Python scripting in computational materials science teaching, using density functional calculations of potential curve for H2 as a practical case. Due to strong practice orientation of this course, traditional training process is largely devoted to cover both theoretical methods and the usage of various computational packages, making it difficult to understand. Here, we propose a Python based experiment scheme, to encourage students to learn about theoretical methods through experience and by asking proper questions. Python is simple and easy to pick up. As a glue language, it is easily adapted for an seamless integration of materials model setup, computation, as well as data analysis and visualization. Thus, it will considerably simplify the complicated teaching activities and would also improve student interests.

Key words: density functional calculations; Python; practice teaching; materials simulations

猜你喜欢
实践教学
茶学专业校企合作实践教学探索
《电气工程毕业设计》 课程的教学设计
研究型学习在传热学实践教学中的应用
思想政治理论课实践教学研究述评
高职院校商务礼仪课程教学改革探索刍议
《数据库高级应用》教学创新方法研究