Kwant的官网为:https://kwant-project.org/。在官网上有安装指导、API文档、例子介绍等。这里简单整理了下,学习更多可访问官网。Kwant对应的文献是这篇:Kwant: a software package for quantum transport, New J. Phys. 16, 063065 (2014)。
安装方法我是采用conda(conda是最简单的安装方法,此外也可以用pip等):
conda install -c conda-forge kwant
此外,可阅读另外几篇博文:
1. 计算电导的一个例子:
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/2033
"""
import kwant
import numpy as np
from matplotlib import pyplot
def make_system():
a = 1 # 晶格常数
lat = kwant.lattice.square(a) # 创建晶格,方格子
syst = kwant.Builder() # 建立中心体系
t = 1.0 # hopping值
W = 5 # 中心体系宽度
L = 40 # 中心体系长度
# 给中心体系赋值
for i in range(L):
for j in range(W):
syst[lat(i, j)] = 0
if j > 0:
syst[lat(i, j), lat(i, j-1)] = -t # hopping in y-direction
if i > 0:
syst[lat(i, j), lat(i-1, j)] = -t # hopping in x-direction
sym_left_lead = kwant.TranslationalSymmetry((-a, 0)) # 电极的平移对称性,(-a, 0)代表远离中心区的方向,向左
left_lead = kwant.Builder(sym_left_lead) # 建立左电极体系
# 给电极体系赋值
for j in range(W):
left_lead[lat(0, j)] = 0
if j > 0:
left_lead[lat(0, j), lat(0, j - 1)] = -t
left_lead[lat(1, j), lat(0, j)] = -t # 这里写一个即可,因为平移对称性已经声明了
syst.attach_lead(left_lead) # 把左电极接在中心区
sym_right_lead = kwant.TranslationalSymmetry((a, 0))
right_lead = kwant.Builder(sym_right_lead)
for j in range(W):
right_lead[lat(0, j)] = 0
if j > 0:
right_lead[lat(0, j), lat(0, j - 1)] = -t
right_lead[lat(1, j), lat(0, j)] = -t
syst.attach_lead(right_lead) # 把右电极接在中心区
kwant.plot(syst) # 把电极-中心区-电极图画出来,通过图像可以看出有没有写错
syst = syst.finalized() # 结束体系的制作。这个语句不可以省。这个语句是把Builder对象转换成可计算的对象。
return syst
def make_system_with_less_code():
a = 1 # 晶格常数
lat = kwant.lattice.square(a) # 创建晶格,方格子
syst = kwant.Builder() # 建立中心体系
t = 1.0 # hopping值
W = 5 # 中心体系宽度
L = 40 # 中心体系长度
# 中心区
syst[(lat(x, y) for x in range(L) for y in range(W))] = 0
syst[lat.neighbors()] = -t # 用neighbors()方法
# 电极
lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))
lead[(lat(0, j) for j in range(W))] = 0
lead[lat.neighbors()] = -t # 用neighbors()方法
syst.attach_lead(lead) # 左电极
syst.attach_lead(lead.reversed()) # 用reversed()方法得到右电极
kwant.plot(syst) # 把电极-中心区-电极图画出来,通过图像可以看出有没有写错
syst = syst.finalized() # 结束体系的制作。这个语句不可以省。这个语句是把Builder对象转换成可计算的对象。
return syst
def main():
syst = make_system()
# syst = make_system_with_less_code() # 和上面的一样,只是用更少的代码写
energies = np.linspace(-4, 4, 200)
data = []
for energy in energies:
smatrix = kwant.smatrix(syst, energy) # compute the transmission probability from lead 0 to lead 1
data.append(smatrix.transmission(1, 0))
pyplot.plot(energies, data)
pyplot.xlabel("energy [t]")
pyplot.ylabel("conductance [e^2/h]")
pyplot.show()
# pyplot.savefig('conductance' + '.eps')
if __name__ == '__main__':
main()
计算结果为:
2. 查看方格子哈密顿量
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/2033
"""
import kwant
import matplotlib.pyplot as plt
def main():
L = 3
W = 2
lat = kwant.lattice.square(a=1, norbs=1) # 定义lattice
print('\nlat:\n', lat)
syst = kwant.Builder() # 定义中心区的Builder
print('\nsyst:\n', syst)
syst_finalized = syst.finalized()
hamiltonian = syst_finalized.hamiltonian_submatrix() # 查看哈密顿量
print('\nhamiltonian_1(定义):\n', hamiltonian)
syst[(lat(x, y) for x in range(L) for y in range(W))] = 0 # 晶格初始化为0
kwant.plot(syst) # 画出syst的示意图
syst_finalized = syst.finalized()
hamiltonian = syst_finalized.hamiltonian_submatrix() # 查看哈密顿量
print('\nhamiltonian_2(初始化):\n', hamiltonian)
syst[lat.neighbors()] = 1 # 添加最近邻跃迁
kwant.plot(syst) # 画出syst的示意图
syst_finalized = syst.finalized()
hamiltonian = syst_finalized.hamiltonian_submatrix() # 查看哈密顿量
print('\nhamiltonian_3(最近邻赋值):\n', hamiltonian)
lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0))) # 定义电极的Builder
lead[(lat(0, j) for j in range(W))] = 0 # 电极晶格初始化
lead[lat.neighbors()] = 1 # 添加最近邻跃迁
syst.attach_lead(lead) # 中心区加上左电极
syst.attach_lead(lead.reversed()) # 用reversed()方法得到右电极
# 画出syst的示意图
kwant.plot(syst)
# 查看哈密顿量(加了电极后,并不影响syst哈密顿量)
syst_finalized = syst.finalized()
hamiltonian = syst_finalized.hamiltonian_submatrix()
print('\nhamiltonian_4(加了电极后):\n', hamiltonian)
if __name__ == '__main__':
main()
计算结果为:
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】
请问Kwant可以计算复杂一点的原胞吗,比如二维的面心立方原胞,并且里面的耦合很复杂
具体你可以看下官方的文档,看怎么搭建其他的格子。我目前用的不多,不大了解,我猜是可以的。
kwant.smatrix(syst, energy) 中syst是这个系统,energy是什么
费米能
请问博主,kwant建模的时候可以建多个原子层的体系吗?还是说只支持单原子层的模型
应该也能算,具体我也没怎么用过,不大熟悉。可以参考这个例子:https://kwant-project.org/doc/1/tutorial/graphene,然后试着做推广,搭建超原胞格子。
请问Kwant对笔记本的要求高吗?一个普通的游戏本可以吗?
要求不高,随便一台电脑都可以。也看计算的体系大小吧,几十到几百几千的原子,都能算得动。如果上万的话,估计内存就不够了,而且计算时间会特别长。一般都是从小开始做测试,有必要的话再增加体系大小。
安装完import kwant 出现warining
RuntimeWarning: MUMPS is not available, SciPy built-in solver will be used as a fallback. Performance can be very poor in this case.
不影响使用,但是conda install -c conda-forge mumps之后仍然有warning
请问您的运行有这个warning吗?
参考链接:"MUMPS is not available"
谢谢~已经搞定了~是包与包版本依赖的问题。
```shell{.line-numbers}
conda install -c conda-forge kwant
conda pandas
conda holoviews
conda matplotlib==3.1.0
conda matplotlib-base==3.1.0
```
另外你最近的PRB我有关注,很不错。我也在学习topological semimetal的输运方面的计算。
conda install
嗯,感谢关注,有需要也可以加联系方式交流。
请问你怎么解决的呢?我也出现了这个警告
目前我也不清楚解决方法。这个是MUMPS的官方下载地址:http://mumps.enseeiht.fr/index.php?page=dwnld,还没试过。其他人如果知道怎么解决这个问题,可以留言。
很有用,按照顺序install就行了。不明觉厉!
你好,你是怎么搞定的呀,没太看懂你的回答
话说Kwant能用来做器件仿真吗,就是说能不能给定两端电源电势差,然后通过泊松方程自洽迭代计算得到中心区的势能,以此改变中心区的哈密顿量矩阵,然后再解薛定谔方程。
我看Kwant的手册势能V貌似需要手动给出,不知道您是否了解这方面?我之前用的是NanoTCAD但是python2.X的依赖有点太老了,而且对三维的支持也不太友好。
两端电极,打错了
我对这方面不是很了解,目前用的不多。你可以多看看官方文档,甚至是kwant源码。
您好!我在anaconda promp中输入了您的安装语句,报错了:
CondaHTTPError: HTTP 000 CONNECTION FAILED for url
Elapsed: -
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
'https://conda.anaconda.org/conda-forge/noarch'
请问这个问题怎么解决啊 搞了好半天没解决,感谢!
这个我不大了解,可以网上搜下出这个bug是什么原因。
一个简单的办法是确认下基础python环境。要先安装一下anaconda,有一些基础包后再安装别的。
如果anaconda安装不多包,也可以卸载后重新安装试试。如果实在不行,也可以用官网上说的其他安装方法,比如用pip。可以多尝试一些方法,配置环境是稍微麻烦了些。
依然感谢~我是已经安装完anaconda的,等我再试试~
```shell{.line-numbers}
conda create -n kwant python=3.6
conda install -c conda-forge kwant
```
我也遇到过,这个可能是conda-forge被屏蔽有关,网络不稳定。隔天试一下就可以了。