刚开始使用这个库的时候,需要记很多函数,而且要按照文档中的规则来组建系统。之前多次想放弃使用,感觉自己去写原始代码心里会更踏实点。之后在文献中又多次看到别人在使用这个Kwant库,觉得还是可以入手试试,毕竟如果学会了,调用函数计算一些物理量或画一些图还是比较方便的。
入门例子可参考博文:
这里整理了一些常用的Kwant库方法,内容不全,主要是参照官方的API文档: https://kwant-project.org/doc/ 。
Kwant里有六个核心模块:
这六个模块中有一些方法比较常用,被定义为高级的方法 (Top level package),可以用kwant直接调用。这里列出来:
- kwant.builder.Builder可以直接写成kwant.Builder。
- kwant.lattice.TranslationalSymmetry可以直接写成 kwant.TranslationalSymmetry 。
- kwant.plotter.plot可以直接写成kwant.plot。
- kwant.solvers.default中的有:
- kwant.solvers.default.greens_function可以直接写成kwant.greens_function;
- kwant.solvers.default.ldos可以直接写成kwant.ldos;
- kwant.solvers.default.smatrix可以直接写成kwant.smatrix;
- kwant.solvers.default.wave_function可以直接写成kwant.wave_function。
每个模块中都有很多内容,这边只做个简单笔记,不定期更新和补充。
1. kwant.builder
该模块是整个体系的最高级别(High-level construction of systems)。
(1)kwant.builder.Builder(或kwant.Builder)
- syst = kwant.Builder() # 定义一个Builder对象
- syst.attach_lead() # Builder对象的attach_lead方法,加电极
- syst = syst.finalized() # Builder对象的finalized方法,返回可解的样本
- syst.hamiltonian_submatrix() # 获取哈密顿量
(2)kwant.builder.Site
(3)kwant.builder.HoppingKind
(4)kwant.builder.SimpleSiteFamily
(5)kwant.builder.BuilderLead
(6)kwant.builder.SelfEnergyLead
(7)kwant.builder.ModesLead
2. kwant.lattice
该模块用来制作布拉菲格子 (Bravais lattices)。
(1)kwant.lattice.TranslationalSymmetry ( 或kwant.TranslationalSymmetry )
(2)kwant.lattice.general
(3)kwant.lattice.Monatomic
(4)kwant.lattice.Polyatomic
此外,Kwant库提供了几个现成的布拉菲格子 (library of lattices):
- kwant.lattice.chain 一维链
- kwant.lattice.square 方格子
- kwant.lattice.cubic 立方格子
- kwant.lattice.triangular 三角格子
- kwant.lattice.honeycomb 蜂窝格子
- kwant.lattice.kagome 笼目格子
3. kwant.plotter
该模块用来画图(Plotting of systems)。
(1)kwant.plotter.plot(或kwant.plot)
(2)kwant.plotter.map
(3)kwant.plotter.current
(4)kwant.plotter.bands
(5)kwant.plotter.spectrum
(6)kwant.plotter.streamplot
4. kwant.solvers
该模块是计算一些物理量的库(Library of solvers)
(1)kwant.solvers.default.smatrix(或kwant.smatrix)
(2)kwant.solvers.default.greens_function(或kwant. greens_function)
(3)kwant.solvers.default.wave_function(或kwant. wave_function)
(4)kwant.solvers.default.ldos(或kwant.ldos)
(5)kwant.solvers.common.SMatrix
(6)kwant.solvers.common.GreensFunction
5. kwant.operator
该模块计算一些算符和可观测量(Operators and Observables)。
(1)kwant.operator.Density
(2)kwant.operator.Current
(3)kwant.operator.Source
6. kwant.physics
该模块包括了一些和物理有关的算法(Physics-related algorithms)。
(1)kwant.physics.Bands
(2)kwant.physics.modes
(3)kwant.physics.selfenergy
(4)kwant.physics.two_terminal_shotnoise
(5)kwant.physics.PropagatingModes
(6)kwant.physics.StabilizedModes
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】
你好,我已经构建了一个以六边形为单位的矩形模型,我该怎么去掉它的一部分或者在它的两侧加一部分让他变成宽窄宽样式的模型呢
有两种方法。一种是电极和中心区宽度本身就是不一样的,然后设置电极和中心区的连接的位置;还有一种方法是把去掉的部分加无穷大的势能,数值上可以加上1e6, 1e8或者其他,那部分就类似于真空的势垒。
您好,我想请教一下怎么用kwant构建硅烯模型
和石墨烯类似吧,参数会不一样,可以看官方的文档。我也不大熟悉
您好,我想请教一下怎么用kwant构建长方形石墨烯模型(指石墨烯的散射范围是长方形)和怎么运用公式计算能级(e^2/h)并打印图表
晶格选择蜂窝六角晶格,然后构建一定长宽的中心区系统,接上电极算电导。可以参考方格子的例子:Kwant:一个计算紧束缚模型量子输运性质的Python包。具体可以看Kwant官网的模块和函数的说明以及例子:https://kwant-project.org/doc/。
如果用honeycomb创建石墨烯晶格的话,就不能使用你的方法去创建电极和为中心和电极赋值,请问有什么方法可以吗,搞了好久了都没搞好
我没算过,但我想应该也是可以的吧,定义kwant.lattice.honeycomb后,可以照样按要求或步骤赋值,和kwant.lattice.square差不多。如果去看kwant.lattice.honeycomb源码的话,其实也是接近于从头写。例如用这个kwant.lattice.general构造石墨烯也是可以,参考这个链接:https://kwant-project.org/doc/1/tutorial/graphene。
您好我想请教一下怎么用kwant构造具有一定夹角的双层晶格结构。比如具有一定夹角两层正方晶格形成的新的晶格。
我觉得关键是要确定两层之间的跃迁形式。不同角度的双层晶格构造是需要费点时间和精力,比如用kwant.lattice.general构造超胞,参考这个例子:https://kwant-project.org/doc/1/tutorial/graphene。
第二层的坐标可以通过第一层坐标的旋转(旋转矩阵的作用)得到,坐标的旋转可以参考这篇:画转角石墨烯示意图(附python代码)。
我没怎么用这个软件,不是很熟悉,以上是个人见解,仅作参考。