跳转到主要内容

非交互式平衡2D量子输运模拟框架

项目描述

pypi license pypi version pypi status Python implementation Python versions Python wheel pipeline status coverage report

非交互式平衡输运模拟框架 (TINIE)

概述

我们向您展示了一款代码,该代码可以计算在垂直和恒定磁场中,具有任意放置的蓄水池的2D空腔、量子点或势阱中的电导和电流。此代码可用于涉及2D电子输运的广泛计算。与此代码的竞争对手相比,主要区别在于TINIE不需要提供自由参数。此代码使用mpi4py并行化,允许在多个处理器之间分配计算任务。

安装

该代码是一个Python包(使用Python 3.6编写)。在非并行模拟中,tinie可以在不使用MPI支持的HDF5-库的情况下运行,但并行模拟需要使用带有MPI支持的HDF5库及其Python包装器h5py(有关安装说明,请参阅并行HDF5 – h5py文档)。

tinie可以使用

pip进行安装

$ pip install tinie

tinie安装了一个命令行界面工具集,您可以使用以下命令测试其功能

$ tinie_prepare
$ tinie

已为该包实现了全面的测试套件,并可以从git仓库的根目录使用

python3 setup.py test

启动。

包功能

该包包含可用于计算包含中心区域(2DEG)和一些引线的特定系统的耦合的工具。计算耦合后,可以继续计算引线中的传输系数和部分电流。所有计算都在Hartee原子单位中完成。安装该包后,可以按以下方式启动简单测试运行

$ tinie_prepare
$ tinie

包结构

该代码使用面向对象编程编写,其功能可以简要描述如下:首先创建

Lead

Center

对象,并将它们作为输入传递给

Coupling

对象,然后将所有这些传递给

SystemDump

对象,该对象计算所有耦合和哈密顿量,并将数据写入hdf5文件。然后使用

SystemFetch

从该hdf5文件读取数据。该数据传递到

Calculator

接口,其中

SelfEnergy

接口使用

Coupling

Lead

的本征能量计算自能和率算符。

之后,将所有引线的自能和中心的本征能量传递到

GreenFunction

接口,该接口评估了先进(green_adv)和退后(green_ret)格林函数,完成

Calculator

的初始化。从那里,代码可以计算传输矩阵 transmat和部分电流

partial_current

在引线中,其中fd是Fermi-Dirac能量分布。此外,还可以计算其他传输属性,例如特定温度下的电导率。此外,我们还包含了计算态密度和局域态密度的可能性。

代码的模块化结构允许您实现自己的导电通道(“引线”)、量子点(“中心区域”)和通过继承自 LeadCenterCoupling 类来实现耦合。以下各节将解释如何具体实现这些类。

示例:TINIE与ITP2D的使用

为了更好地展示TINIE的使用,我们将通过一个示例问题来说明。我们将计算一个磁场的量子点系统中两个引线的传输性质。具体来说,我们将从ITP2D获取中心区域的信息,ITP2D是一个与TINIE接口的薛定谔方程本征值求解器。以下工作流程是使用TINIE解决大多数传输问题的典型流程

步骤0:计算中心区域的哈密顿量和波函数。只要是我们选择的任何本征值求解器与TINIE兼容,我们就可以获得这些信息。量子点可以用形式为 Vharmonic 的径向谐振势来模拟。在ITP2D中解决该模型的前25个状态(磁场强度为 Bis1)的方法如下

$ itp2d -v -n 20 -l 12 -s 100 -p "harmonic(1)" -B 1.0 -o ITP2D_FILE_PATH

在这里,中心区域占据了一个 6to6 的区域,同时在x和y方向上中心对齐。更多关于ITP2D的用法信息可以在其 bitbucket 页面 上找到。

步骤1:传输系统准备步骤。在这一步中,计算引线的耦合矩阵。假设我们希望计算中心区域和引线之间的重叠耦合,并且我们想要在范围 0to2 内改变每个引线的探针能量,能量间隔为 dEis0.001。在这种情况下,中心区域的前5个状态就足够用于计算了。我们的引线是这样的

  • 引线0被限制在x方向的 -10to-4 区域内,在y方向的 -5to5 区域内,并且从左侧连接到引线;

  • 引线1被限制在x方向的 4to10 区域内,在y方向的 -5to5 区域内,并且从右侧连接到引线。

在这种情况下,两个引线在y方向上具有强度为 omega0=1 的谐振势,在x方向上具有粒子在盒子势。这些信息足以开始系统准备。为此,使用 tinie_prepare 脚本,如下所示

$ tinie_prepare -dE 1e-3 -B 1.0 -ctr "itp2d(ITP2D_FILE_PATH,(0,4))" -l 2 -ld "finharm(left,1.0,dir)" "finharm(right,1.0,dir)" -xlim "[-10.0,-4.0]" "[4.0,10.0]" -ylim "[-5.0,5.0]" "[-5.0,5.0]" -Elim "[0.0,2.0]" "[0.0,2.0]" -cpl "overlap()" "overlap()" -o TINIE_PREPARE_FILE_PATH

这会产生包含传输系统耦合信息的 PREPTINIEFile,这些信息可以用于后续步骤的不同传输计算。

步骤 2: 传输计算步骤。从这里开始才是真正的乐趣所在,之前的步骤在某种程度上只是准备工作。为了计算系统的各种传输属性,例如传输、电导和电流,我们设定系统的温度为 T=1,化学势 mu=1,并在引线上设定偏置电压为 V0=0.5 在引线 0 和 V1=1.5。此外,我们调整探针电子的能量间隔为 w0=0.01,并将格林函数边界参数设置为 eta=0.1。有了这些信息,我们可以使用 tinie 脚本如下

$ tinie -i TINIE_PREPARE_FILE_PATH -dw 1e-2 -eta 1e-1 -T 1.0 -mu 1.0 -V 0.5 1.5 -o TINIE_FILE_PATH

这会产生包含所有上述传输量以及更多内容的 TINIEFile,其内容的详细描述见下文各节。

除了传输属性之外,我们还可以通过 tinie_dos 脚本计算系统的局部和标准密度态(LDOS/DOS)。为此,除了上述参数外,用户还需要指定LDOS应评估的能量以及包含中心区域波函数的文件位置。然后我们使用脚本的如下方式

$ tinie_dos -i TINIE_PREPARE_FILE_PATH -psi ITP2D_FILE_PATH --wf-range 0 4 -w 1.0 2.0 3.0 -dw 1e-2 -eta 1e-1 -T 1.0 -mu 1.0 -V 0.5 1.5 -o TINIE_DOS_FILE_PATH

在此,我们在探针能量 win123 处评估LDOS。此计算的结果存储在 TINIEDOSFile 中,其内容的详细信息可在下文各节中找到。

步骤 3: 可视化结果。为此,可以使用 tinie_draw 脚本。假设我们想要在能量范围 0to5 内绘制系统的传输、电导、总电流和 DOS,以及探针能量 w=1 处的 LDOS。然后我们使用以下命令

$ tinie_draw -i TINIE_FILE_PATH -idos TINIE_DOS_FILE_PATH -E 0.0 5.0 --ldos-E 1.0 --transmission --conductance --total-currents --dos --ldos -o FIGURE_PATH

这将产生上述数量的美观 LaTeX 渲染的图表。下面我们展示了脚本生成的电导、DOS 和 LDOS 的示例图表。

电导

DOS

LDOS

image8

image9

image10

二维系统中的量子传输计算从未如此简单过!

当前实现系统类别

截至目前,以下系统类别已实现

  • Center 对象,位于 transport_calculator/systems/central_region

  • Itp2dCenter:与 itp2d 兼容的接口。

  • CustomCenter:自定义预定义中心区域哈密顿量 Hc 的容器。

  • Lead 对象,位于 transport_calculator/systems/leads。请注意,为了表达简洁,已经省略了波函数归一化。代码中的波函数都是归一化的。

  • FiniteHarmonicLead:由波函数 FiniteHarmonicLeadWF 描述的 Lead,其中 HermiteL 是 l 阶的 Hermite 多项式,qexpromegacomegac0,其中 omega0 是量子谐振子的频率,B 是磁场强度。公式以 Hartee 原子单位给出。x 和 y 坐标波函数取决于 Lead 对齐方式。

  • BoxLead:粒子在盒子 Lead 由波函数 BoxLeadWF 描述,其中 LxLy 分别是盒子的长度和宽度,klrange

  • CustomLead:用于自定义预定义 Lead 区域哈密顿量 HL

  • Coupling 对象,位于 transport_calculator/systems/couplings

  • OverlapCoupling:类型为 Voverlap 的强耦合,其中 psiLi 是 Lead 的第 i 个本征函数,psiCj 是中央区域的第 j 个本征函数,Omega 是 Lead 和量子点的重叠区域。

  • 紧束缚耦合:非重叠电极与中心区域之间的弱耦合,类型如Vtightbinding,其中thetaOmegaL是耦合的电极区域,而OmegaC是耦合的中心区域。

  • 单层耦合:非重叠电极边界与中心区域之间的弱耦合,类型如Vonelayer

  • 自定义耦合:自定义预定义耦合矩阵的容器V。仅与自定义中心自定义电极对象兼容。

这些元素的实现细节可以在源代码中查看,其中包含丰富的见解和有用的注释。

添加您自己的自定义系统类

如前所述,代码已被设计为尽可能允许最大程度的扩展自由度。特别是,您可以引入额外的中心区域、电极区域和耦合方法。您需要做的就是创建自己的类文件在tinie/systems中的相应文件夹中,并确保您正在创建的类继承自基本抽象类之一(中心电极耦合)。以下是可以找到的函数列表,您必须(正确地)实现这些函数,以便您的自定义类可以完全集成到传输方案中

  • 中心区域

    • __init__(*attrs):初始化器

    • get_type_specific_parameters():检索子特定的额外参数

    • get_energies():检索中心区域哈密顿量Hc

    • get_potential():检索中心区域的势能值

    • get_state(n):检索第n个波函数

    • get_states():检索网格上的所有波函数

    • get_number_of_states():检索中心区域中的状态数

    • get_sliced_state(n, width, side):检索网格切片上的第n个波函数

    • get_sliced_states(width, side):检索网格切片上的所有波函数

    • get_boundary_state(n, side):检索在某个边界上评估的第n个波函数

    • get_coordinate_ranges():检索x和y坐标范围

    • get_coordinates():检索坐标网格

    • get_slice_coordinates(width, side):获取切割坐标网格

    • get_boundary_coordinates(side):获取边界坐标范围

  • 铅区

    • __init__(*attrs):初始化器

    • set_magnetic_field_strength(B):设置磁场强度

    • set_energy_spacing(delta_E):设置铅区能级间距

    • get_type_specific_parameters():检索子特定的额外参数

    • get_energies():获取铅区哈密顿量HL

    • get_state_point(x, y, n):在单点评估第n个状态波函数xy

    • get_state(x_points, y_points, n, mode):在自定义/离散网格上获取第n个状态波函数

    • get_number_of_states():获取铅区中的状态数量

    • get_boundary_state(n, num_boundary_points):获取在铅区边界上评估的第n个波函数

    • get_boundary(num_boundary_points):获取指定离散化的边界网格

  • 耦合区

    • __init__(Center_object, Lead_object, *attrs):初始化器,设置中心和铅对象以进行耦合矩阵计算

    • get_coupling_matrix_element(i, j):获取耦合矩阵元素Vij,即第i个铅状态和第j个中心状态之间的耦合

    • get_coupling_matrix():获取耦合矩阵bfV

关于输入/输出参数类型的详细信息可以在源代码中找到。在为相应的自定义对象正确实现所有这些函数并相应扩展解析器接口后,代码扩展将与原始代码完全一致!

包中包含的脚本

tinie 包含一些脚本,可以帮助简化软件的使用

tinie_prepare

此脚本准备耦合系统并将其保存为 tinie_prepare hdf5 文件,其中包含以下属性和数据集

属性

描述

类型

文件类型,必须是“PREPTINIEFile”

center/type

中心区域的类型

中心区域中的状态数量

中心区域中的参数

center/parameters

中心区域的类型相关参数

leads/num_leads

铅的数量

leads/lead_n/type

第n个铅的类型

leads/lead_n/num_states

第n个铅中的状态数量

leads/lead_n/energy_spacing

第n个铅的能量间距

leads/lead_n/parameters

第n个铅的类型相关参数

couplings/num_couplings

耦合数量

couplings/coupling_n/type

第n个铅和中心区域之间的耦合类型

数据集

描述

center/hamiltonian

中心区域的哈密顿量

center/potential

中心区域的势能值

leads/lead_n/hamiltonian

第n个铅区域的哈密顿量

leads/lead_n/x_axis_limits

第n个铅的x轴限制

leads/lead_n/y_axis_limits

第n个铅的y轴限制

leads/lead_n/energy_limits

第n个铅的能量限制

couplings/coupling_n/coupling_matrix

第n个铅和中心区域之间的耦合矩阵

这些数据集中的某些数据以分块/压缩格式存储,以便进行更密集的模拟。所有模拟参数都通过解析器用户界面进行调整,该界面接受以下参数(如果感到困惑,请运行 tinie_prepare --help 以获取帮助!)

参数

描述

-dE

导能间距

-B

磁场强度

-xlim, --x-axis-limits

每个导线的x轴极限,输入格式为 [x_min_0, x_max_0] [x_min_1, x_max_1] ...

-ylim` --y-axis-limits

每个导线的y轴极限,输入格式为 [y_min_0, y_max_0] [y_min_1, y_max_1] ...

-Elim --energy-limits

每个导线的能量极限,输入格式为 [E_min_0, E_max_0] [E_min_1, E_max_1] ...

-ctr --center-type

中心区域类型,输入格式为 "ctr_type(*ctr_params)"

-l --lead-number

铅的数量

-ld --lead-types

导线区域类型,输入格式为 "ld0_type(*ld0_params)" "ld1_type(*ld1_params)" ...

-cpl` --coupling-types

耦合区域类型,输入格式为 "cpl0_type(*cpl0_params)" "cpl1_type(*cpl1_params)" ...

-o, --output-file

保存preptinie文件的路径

tinie

此脚本读取preptinie hdf5文件,执行传输计算,并将结果保存到具有以下属性和数据的tinie hdf5文件中

属性

描述

类型

文件类型,必须是“TINIEfile”

evaluated_chemical_potential

系统的化学势mu

evaluated_bias_voltage

系统导线的偏置电压

evaluated_temperature

系统的温度

omega_spacing

探头能量间距

lead_energy_spacing

导能间距

eta

在格林函数中使用的微小数eta

number_of_couplings

系统中耦合的数量

数据集

描述

partial_currents

每个导线之间的部分电流矩阵

total_currents

每个导线的总电流

omega_dependent_partial_currents

部分电流矩阵的能量分布

omega_ldos_dependent_total_currents

总电流的能量分布

transmission

探头能量作为函数的传输矩阵

transmission_error

传输的虚部

conductance

系统电导矩阵

其中一些数据集以分块/压缩格式存储,以支持数据密集型模拟。所有传输计算参数都通过解析器用户界面进行调整,该界面接受以下参数(输入 tinie --help 以获取帮助!)

参数

描述

-dw`, ``--delta-omega

探头能量间距

-eta

计算格林函数时使用的微小虚常数

--mu, --chem-pot

系统评估的化学势

-V, --lead-bias

系统评估的铅偏置,以表单形式输入V_0 V_1 ...

-T--temperature

系统评估的温度

-i--input-file

tinie_prepare输出文件的路径

-o, --output-file

输出文件的路径

--wide-band--no-wide-band

用户可以指定的布尔标志,以确定是否使用宽带近似方法(或是否不使用)

-S--self-energy

从该路径读取自定义自能数组的路径

-G--rate-operator

从该路径读取自定义率算符数组的路径

请注意,如果您希望使用宽带近似方法,则必须指定自能或率算符或两者都指定!

tinie_dos

此脚本读取preptinie hdf5文件和包含中心区域本征函数的文件,计算DOS/LDOS,并将结果保存到具有以下属性和数据的dostinie hdf5文件中

属性

描述

类型

文件类型,必须是“TINIEDOSFile”

数据集

描述

dos

态密度值

ldos

局域态密度值

x

系统中心区域x轴的值

y

系统中心区域y轴的值

omega_dos

DOS评估的能量

omega_ldos

LDOS评估的能量

其中一些数据集以分块/压缩格式存储,以支持数据密集型模拟。所有DOS/LDOS计算参数都通过用户界面进行解析,该界面接受以下参数(如果你感到迷茫,请输入 tinie_dos --help!)

参数

描述

-w--omega-ldos

LDOS应评估的探针能量

-dw--delta-omega

探头能量间距

-eta

在格林函数计算中使用的小虚数常数

--mu, --chem-pot

系统评估的化学势

-V, --lead-bias

系统评估的铅偏置,以V_0 V_1 ...的形式输入

-T--temperature

系统评估的温度

-i--input-file

tinie_prepare输出文件的路径

--psi--wf-file

从该路径读取中心区域波函数的路径

-o, --output-file

保存tinie_dos文件的路径

--dos--no-dos

布尔值,决定是否计算DOS

--ldos--no-ldos

布尔值,决定是否计算LDOS

tinie_draw

此脚本从tinie hdf文件中读取数据,创建漂亮的透射/背散射/电流/态密度图,并将它们保存。此脚本具有解析用户界面,您可以在其中指定以下绘图参数

参数

描述

-i--input-file

tinie文件的路径

-idos--input-dos-file

tinie_dos文件的路径

-o, --output-file

图的基准路径

-E--energy-rangs

绘制图形的能量范围

--transmission--no-transmission

布尔值,决定是否绘制传输

--backscattering--no-backscattering

布尔值,决定是否绘制背散射

--partial-currents--no-partial-currents

布尔值,决定是否绘制部分电流

--total-currents--no-total-currents

布尔值,决定是否绘制总电流

--dos--no-dos

布尔值,决定是否绘制DOS

--ldos--no-ldos

布尔值,决定是否绘制LDOS

--norm-ldos--no-norm-ldos

布尔值,决定是否将LDOS归一化到1

--ldos-E

在对应探针能量的索引处评估LDOS

--stability--no-stability

布尔值,决定是否绘制数值稳定性测试

make_system_files

此脚本生成自定义哈密顿量或耦合矩阵,并将其保存为.npy文件,作为CustomCenter/CustomLead/CustomCoupling对象的参数传递。它们也可以用于生成宽带近似中的自定义自能/率算符。运行脚本,按照说明操作,其余便是历史。

当然,这些脚本仅提供了一些基本功能扩展。根据用户的最终目标,可能需要添加额外的脚本或代码修改。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

tinie-1.0.6.tar.gz (16.4 MB 查看哈希值)

上传时间

构建分布

tinie-1.0.6-py3-none-any.whl (16.5 MB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面