非交互式平衡2D量子输运模拟框架
项目描述
非交互式平衡输运模拟框架 (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
接口,该接口评估了先进(Calculator
的初始化。从那里,代码可以计算传输矩阵在引线中,其中是Fermi-Dirac能量分布。此外,还可以计算其他传输属性,例如特定温度下的电导率。此外,我们还包含了计算态密度和局域态密度的可能性。
代码的模块化结构允许您实现自己的导电通道(“引线”)、量子点(“中心区域”)和通过继承自 Lead、Center 或 Coupling 类来实现耦合。以下各节将解释如何具体实现这些类。
示例:TINIE与ITP2D的使用
为了更好地展示TINIE的使用,我们将通过一个示例问题来说明。我们将计算一个磁场的量子点系统中两个引线的传输性质。具体来说,我们将从ITP2D获取中心区域的信息,ITP2D是一个与TINIE接口的薛定谔方程本征值求解器。以下工作流程是使用TINIE解决大多数传输问题的典型流程
步骤0:计算中心区域的哈密顿量和波函数。只要是我们选择的任何本征值求解器与TINIE兼容,我们就可以获得这些信息。量子点可以用形式为 的径向谐振势来模拟。在ITP2D中解决该模型的前25个状态(磁场强度为
)的方法如下
$ itp2d -v -n 20 -l 12 -s 100 -p "harmonic(1)" -B 1.0 -o ITP2D_FILE_PATH
在这里,中心区域占据了一个 的区域,同时在x和y方向上中心对齐。更多关于ITP2D的用法信息可以在其 bitbucket 页面 上找到。
步骤1:传输系统准备步骤。在这一步中,计算引线的耦合矩阵。假设我们希望计算中心区域和引线之间的重叠耦合,并且我们想要在范围 内改变每个引线的探针能量,能量间隔为
。在这种情况下,中心区域的前5个状态就足够用于计算了。我们的引线是这样的
引线0被限制在x方向的
区域内,在y方向的
区域内,并且从左侧连接到引线;
引线1被限制在x方向的
区域内,在y方向的
区域内,并且从右侧连接到引线。
在这种情况下,两个引线在y方向上具有强度为 的谐振势,在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: 传输计算步骤。从这里开始才是真正的乐趣所在,之前的步骤在某种程度上只是准备工作。为了计算系统的各种传输属性,例如传输、电导和电流,我们设定系统的温度为 ,化学势
,并在引线上设定偏置电压为
在引线 0 和
。此外,我们调整探针电子的能量间隔为
,并将格林函数边界参数设置为
。有了这些信息,我们可以使用 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
在此,我们在探针能量 处评估LDOS。此计算的结果存储在 TINIEDOSFile 中,其内容的详细信息可在下文各节中找到。
步骤 3: 可视化结果。为此,可以使用 tinie_draw 脚本。假设我们想要在能量范围 内绘制系统的传输、电导、总电流和 DOS,以及探针能量
处的 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 |
---|---|---|
二维系统中的量子传输计算从未如此简单过!
当前实现系统类别
截至目前,以下系统类别已实现
Center 对象,位于 transport_calculator/systems/central_region
Itp2dCenter:与 itp2d 兼容的接口。
CustomCenter:自定义预定义中心区域哈密顿量
的容器。
Lead 对象,位于 transport_calculator/systems/leads。请注意,为了表达简洁,已经省略了波函数归一化。代码中的波函数都是归一化的。
FiniteHarmonicLead:由波函数
描述的 Lead,其中
是 l 阶的 Hermite 多项式,
,
,
,其中
是量子谐振子的频率,
是磁场强度。公式以 Hartee 原子单位给出。x 和 y 坐标波函数取决于 Lead 对齐方式。
BoxLead:粒子在盒子 Lead 由波函数
描述,其中
和
分别是盒子的长度和宽度,
。
CustomLead:用于自定义预定义 Lead 区域哈密顿量
Coupling 对象,位于 transport_calculator/systems/couplings
OverlapCoupling:类型为
的强耦合,其中
是 Lead 的第 i 个本征函数,
是中央区域的第 j 个本征函数,
是 Lead 和量子点的重叠区域。
紧束缚耦合:非重叠电极与中心区域之间的弱耦合,类型如
,其中
,
是耦合的电极区域,而
是耦合的中心区域。
单层耦合:非重叠电极边界与中心区域之间的弱耦合,类型如
。
自定义耦合:自定义预定义耦合矩阵的容器
。仅与自定义中心和自定义电极对象兼容。
这些元素的实现细节可以在源代码中查看,其中包含丰富的见解和有用的注释。
添加您自己的自定义系统类
如前所述,代码已被设计为尽可能允许最大程度的扩展自由度。特别是,您可以引入额外的中心区域、电极区域和耦合方法。您需要做的就是创建自己的类文件在tinie/systems中的相应文件夹中,并确保您正在创建的类继承自基本抽象类之一(中心、电极或耦合)。以下是可以找到的函数列表,您必须(正确地)实现这些函数,以便您的自定义类可以完全集成到传输方案中
中心区域
__init__(*attrs):初始化器
get_type_specific_parameters():检索子特定的额外参数
get_energies():检索中心区域哈密顿量
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 |
系统的化学势 |
evaluated_bias_voltage |
系统导线的偏置电压 |
evaluated_temperature |
系统的温度 |
omega_spacing |
探头能量间距 |
lead_energy_spacing |
导能间距 |
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c9374487f36e6d636a0c03026a966a4f976b789252c545dbc1498c6cf41bf39b |
|
MD5 | 1f1d4f774b3a88eada8ebc622b5d3b23 |
|
BLAKE2b-256 | 1af3ed69f8dbbe6c56e8f608702ca49351b5f0a88437760375180544fe9cf487 |
tinie-1.0.6-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e09eb668289e127f8586f3063dc412d599c1fadf00dbc5a40d69f98074fb729a |
|
MD5 | eb97e8d58b38f4313bf6d32f914246d2 |
|
BLAKE2b-256 | c9391d5c1d3d3200753e549ad256b6b0eefe783d7f33695ca959f458c4e4da13 |