虽然原子核的质量几乎对原子的电子性质没有影响(至少在玻恩-奥本海默近似下),但是不同的同位素有不同的热导性质。尤其是在 [CZZ05], [ZL05], [CFA+06]中,同位素掺杂对一维纳米结构和纳米管的性质产生了很重要的影响。因此,研究碳纳米管的部分发生同位素取代后热导性质的变化是非常有趣的 [JWL11]。
在本教程中,你将研究环状 14C 掺杂对碳纳米管的影响,尤其需要计算电子透射谱、声子透射谱、热导和热电优值ZT。你将通过 ATK-Classical 进行声子计算,通过 ATK-SE 计算电子透射。
本篇教程假设你已经学习完 Simple carbon nanotube device这篇教程,我们使用的碳纳米管器件就是通过该教程中的练习中创建的。如果你之前没有看过这篇教程,请首先看这篇文献,或者从这里cnt_device.py下载结构脚本。
本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。
将未掺杂过的碳纳米管器件结构拖拽到 Builder中。接着将你想转换成 14C 的 12C 原子进行标记:
首先需要对未掺杂碳纳米管的声子透射谱进行设置并运行计算。将结构传送到 Script Generator,同时加入下列模块:
注意 DynamicalMatrix 项是自动添加的。将输出文件名改为 cnt_phonons.nc
, 并对这三个模块的参数进行如下设置:
将其发送到 Job Manager 进行计算。当出现提示时,将脚本名改为cnt_phonons.py
,选择默认的“Local”,通过点击 运行脚本。
一旦未掺杂的碳纳米管计算完成,我们将引入 14C 杂质。在QuantumATK中,预设的元素是其同位素的平均值,因此在QuantumATK中碳的质量为12.0107amu。为了创建 14C,你需要对 Python 脚本进行简单的编辑:通过对衍生的 Python 类型中元素的质量进行修改,创建新的元素,并将其导入到可以使用的元素列表中。你可以根据下面所描述的那样改写脚本:
device_configuration
被定义的地方(447-450行),并紧接着在其后下面加上一段代码:# Define a new class where the C atom has mass 14.00 class C14(Carbon): @staticmethod def atomicMass(): return 14.00*Units.atomic_mass_unit PeriodicTable.ALL_ELEMENTS.append(C14) # Replace all atoms tagged "C14" with carbon-14 for index in device_configuration.indicesFromTags("C14"): device_configuration.elements()[index] = C14
cntc14_phonons.nc
(一共有三处)cntc14_phonons.py
并保存。使用 Job Manager 运行该脚本。VNL LabFloor 现在应该已经有掺杂和未掺杂碳纳米管的计算结果:
为了详细观察透射谱,你可以用 Transmission Analyzer 插件显示结果。如果同时选中这两个(按住“Ctrl”键),并用 Compare Data 插件,你可以在一个图表中绘制出两个透射谱。
上图的两个声子透射谱(蓝色:未掺杂碳纳米管;绿色:同位素掺杂碳纳米管)明显不同。差异来源于环状杂质 14C 造成的声子散射。你可以看到在低能区(长波区)声子谱是没有改变的,主要的改变是在高能区(短波区)。
你也可以利用位于 LabFloor 右手边的 Thermoelectric Coefficients 插件计算声子热导,$\kappa_\mathtt{ph}$。再次选择声子透射谱并点击 Thermoelectric Coefficients 插件中的“calculate”。同位素掺杂的碳纳米管声子热导 $\kappa_\mathtt{ph}$ 果然低于自然丰度分布的碳纳米管。在300K时差异较小,但是随着温度升高而增大。相同的影响也被[JWL11]报道,碳纳米管也被 14C 掺杂,只不过是团簇状。
仿造[JWL11]里的 Figure 11(b)作图是很有意思的。你可以通过使用 Python 脚本做到这一点。将下段 Python 代码保存成 plot_thermal_conductance.py
或者下载该代码。如果你想了解脚本是怎样工作的,你得看看QuantumATK手册中 PhononTransmissionSpectrum 章节的所有内容。
# Read the phonon transmission spectrum from file cnt_phonons.nc phonon_transmission_spectrum = nlread("cnt_phonons.nc",PhononTransmissionSpectrum)[0] # Define a temperature range temp = numpy.linspace(10,2000,21) # Calculate the phonon thermal conductance at each temperature conductances = [] for t in temp: conductance = phonon_transmission_spectrum.thermalConductance( phonon_temperature=[t]*Kelvin) conductance = conductance*10**9 conductances.append(conductance) # Now read the phonon transmission spectrum from file cntc14_phonons.nc ... phonon_transmission_spectrum_c14 = nlread("cntc14_phonons.nc",PhononTransmissionSpectrum)[0] # ... and calculate the relative phonon thermal conductance conductances_c14 = [] for t in temp: conductance_c14 = phonon_transmission_spectrum_c14.thermalConductance( phonon_temperature=[t]*Kelvin) conductance_c14 = conductance_c14*10**9 conductances_c14.append(conductance_c14) # Plot the phonon thermal conductances as function of temperature import pylab pylab.figure() pylab.plot(temp,conductances,label='CNT',linewidth=2.0) pylab.plot(temp,conductances_c14,label='14C-CNT',linewidth=2.0) pylab.xlabel("Temperature (K)") pylab.ylabel("Phonon Thermal Conductance (nW/K)") pylab.legend(loc="lower right") pylab.show()
在你保存 .nc文件的目录下运行脚本:
$ atkpython plot_thermal_conductance.py
热电品质因数 $ZT$ 有声子和电子两方面的贡献。因此,即使同位素掺杂没有影响电子输运性质,依然需要计算相关的电子透射谱。
再次从 Builder 里将碳纳米管器件结构发送到 Script Generator 里并加入两个模块:
将输出文件改名为cnt_electrons.nc并修改计算参数:
在 LabFloor你会找到 TransmissionSpectrum 项,你可以用 2D Plot 插件作出该图像。
很明显,电子透射谱在费米能级附近是非零的。然而,如果你放大,你将看到透射谱在费米能级处恰好为0。如果你需要研究透射谱的数据的话,通过 Text Representation 插件也是可以明显地看出来费米能级处透射谱为零。
现在你有计算热电输运性质的全部要素:电导、帕尔贴系数,塞贝克系数,声子和电子的热导,这些都是计算热电品质因数的要素。
在 LabFloor中同时选择 PhononTransmissionSpectrum 和 TransmissionSpectrum 项(点击的同时按住Ctrl键)。打开 Transmission Coefficient 插件,将费米能级移动到 0.04eV,相当于能带边缘。最后,点击 Calculate 计算所有的输运系数,尤其是室温下的热电品质因数 $ZT$。
通过点击 Plot,你也可以看到一个交互界面,这个交互界面里有输运系数值随能量变化的图象
如果你比较掺杂和未掺杂14C两个器件的ZT值,你会发现同位素掺杂会轻微的地提升ZT值,这个效果实际上是不是很明显。 在同一幅图中作出两种器件的ZT值随能量的变化是展示该效果的一种方法。一个较简单的Python脚本就可以做到。用下面一段脚本代码,或者下载脚本:plot_zt.py。
from AddOns.TransportCoefficients.Utilities import evaluateMoments from NL.CommonConcepts import PhysicalQuantity as Units # Set input parameters e_min = 0.0 e_max = 2.0 n_steps = 400 temperature = 300.00*Kelvin energies = numpy.linspace(e_min, e_max, n_steps) * eV # Read phonon transmission spectrum from file cnt_phonons.nc # and get the phonon conductance at the specified temperature phonon_transmission_spectrum = nlread('cnt_phonons.nc', PhononTransmissionSpectrum)[0] conductance_phonons = phonon_transmission_spectrum.thermalConductance(phonon_temperature=temperature) # Read phonon transmission spectrum from file cntc14_phonons.nc # and get the phonon conductance at the specified temperature phonon_transmission_spectrum_c14 = nlread('cntc14_phonons.nc', PhononTransmissionSpectrum)[0] conductance_phonons_c14 = phonon_transmission_spectrum_c14.thermalConductance(phonon_temperature=temperature) # Read electron transmission spectrum from file cnt_electrons.nc electron_transmission_spectrum = nlread("cnt_electrons.nc",TransmissionSpectrum)[0] # define lists for ZT data zzt = [] zzt_c14 = [] # Calculate the ZTs at each energy for energy in energies: # Calculate moments of the electron transmission spectrum k0, k1, k2 = evaluateMoments(electron_transmission_spectrum, temperature, energy) # Calculate transport properties. conductance = k0*Units.e**2 peltier = k1/(k0*Units.e) seebeck = k1/(k0*Units.e*temperature) thermal_electrons = (k2*k0-k1*k1)/(temperature*k0) total_thermal = thermal_electrons + conductance_phonons total_thermal_c14 = thermal_electrons + conductance_phonons_c14 zt = conductance*seebeck**2*temperature/total_thermal zt_c14 = conductance*seebeck**2*temperature/total_thermal_c14 zzt.append(zt) zzt_c14.append(zt_c14) # Plot the ZT as function of energy zzt = numpy.asarray(zzt)*1e3 zzt_c14 = numpy.asarray(zzt_c14)*1e3 import pylab pylab.plot(energies,zzt,'-',label='CNT',linewidth=1.0,color='b') pylab.plot(energies,zzt_c14,'--',label='14C-CNT',linewidth=1.0,color='r') pylab.xlabel('Energy (eV)') pylab.ylabel('ZT x 1000') pylab.legend(loc='upper center') pylab.show()
脚本会生成上面的图片,同位素掺杂提高了$ZT$,虽然不是很明显。
如果你对热电输运的更多细节产生兴趣,你可以看一看Graphene Thermoelectric effects这篇教程,研究热电性质与温度的各种关系。