原文链接:http://www.physics.rutgers.edu/pythtb/usage.html
主PythTB模块由以下三个部分组成:
- pythtb.tb_model 紧束缚模型的主类
- pythtb.wf_array 计算Berry相位的类
- pythtb.w90用于与Wannier90代码接口的类,该代码允许基于第一性原理密度泛函理论计算构建紧密绑定模型。
class pythtb.tb_model
(dim_k, dim_r, lat=None, orb=None, per=None, nspin=1)
这是PythTB包的主类,它包含了紧密绑定模型的所有信息。
参数:
- dim_k – k空间的维数,也就是指定有多少个方向被认为是周期性的。
- dim_r – 实空间的维数,即指定有多少实空间格向量以及需要多少坐标来指定轨道坐标。
注意:参数dim_r可以大于dim_k!例如,一个聚合物是一个三维分子(需要三个坐标来指定轨道位置),但它只有一个方向上的周期性。因此,对于聚合物,我们应该让dim_k等于1,dim_r等于3。
- lat – 在笛卡尔坐标系中(任意单位)包含格向量的数组。在下面的例子中,第一个晶格向量的坐标是[1.0,0.5],而第二个是[0.0,2.0]。默认情况下,格向量是单位矩阵
- orb – 包含所有紧束缚轨道的约化坐标的阵列。在下面的例子中,第一个轨道定义为约化坐标[0.2,0.3]。因此它的笛卡尔坐标是0.2乘以第一个晶格向量加上0.3乘以第二个晶格向量。如果球体是一个整数,那么代码就假定有这么多轨道都在单元格的原点。默认情况下,该代码将在原点假定一个单一轨道。
- per – 这是一个可选的参数,给出了一组具有周期性的格向量。在下面的例子中,只有向量[0.0,2.0]被认为是周期性的(因为per=[1])。默认情况下,所有的晶格向量都是周期性的。如果dim_k小于dim_r,则默认情况下第一个dim_k向量被认为是周期性的。
- nspin – 为每个轨道假定的显式自旋分量数。nspin允许的值是1和2。如果nspin是1,那么这个模型是无自旋的,如果nspin是2,那么它是一个明显的自旋模型,每个轨道都假定有两个自旋分量。该参数缺省值为1。当然,即使将nspin设置为1,也可以进行自旋计算,但是用户必须知道哪个轨道对应于哪个自旋分量。
# Creates model that is two-dimensional in real space but only
# one-dimensional in reciprocal space. Second lattice vector is
# chosen to be periodic (since per=[1]). Three orbital
# coordinates are specified.
tb = tb_model(1, 2,
lat=[[1.0, 0.5], [0.0, 2.0]],
orb=[[0.2, 0.3], [0.1, 0.1], [0.2, 0.2]],
per=[1])
Methods
set_onsite
(onsite_en, ind_i=None, mode=’set’)
定义紧束缚轨道的在位能。我们可以为一个紧密束缚的轨道设定能量,也可以一次性设定能量。
警告:在PythTB的早期版本中,这个函数被称为set_sites。为了向后兼容,我们仍然可以使用这个名称,但是这个特性将在未来的版本中被删除。
参数:
- onsite_en – 可以是每个轨道的在位能(以任意单位计算),也可以是单个的在位能(在这种情况下,必须给出ind_i参数)。在nspin为1(无自旋)的情况下,每个在位能是一个单一的数字。如果nspin是2,那么现场能量可以作为一个数字,或作为四个数字的数组,或2×2矩阵。如果给出一个单独的数值,则解释为上、下自旋分量的在位能。如果给定一个四个数的数组,这些分别是I、sigma_x、sigma_y和sigma_z(即2×2单位矩阵和三个泡利自旋矩阵)的系数。最后,还可以给出完整的2×2矩阵。如果从未调用此函数,则假定在位能为零。
- ind_i – 所需要改变在位能的紧束缚轨道的指数。只有当onsite_en是单个数字(而不是列表)时,才需要指定此参数。
- mode – 类似于函数set_hop*中的参数模式。说明onsite_en参数的使用方式。它可以从零开始设定在位能量值,重置或增加。
- ”set” – 默认值。在位能设置为onsite_en参数值。在每个紧束缚的轨道上只能使用一次“set”。
- ”reset” – 指定在位能到给定值。对于同一个轨道,这个函数可以调用多次。
- ”add” – 增加了先前在位能的价值。对于同一个轨道,这个函数可以调用多次。
Example usage:
# Defines on-site energy of first orbital to be 0.0,
# second 1.0, and third 2.0
tb.set_onsite([0.0, 1.0, 2.0])
# Increases value of on-site energy for second orbital
tb.set_onsite(100.0, 1, mode="add")
# Changes on-site energy of second orbital to zero
tb.set_onsite(0.0, 1, mode="reset")
# Sets all three on-site energies at once
tb.set_onsite([2.0, 3.0, 4.0], mode="reset")
set_hop
(hop_amp, ind_i, ind_j, ind_R=None, mode=’set’, allow_conjugate_pair=False)
H_{ij}(R)=\lang\phi_{0i}|H|\phi_{Rj}\rang
其中$\langle\phi_{0i}(R)$表示单位原胞内第$i$个轨道,$|\phi_{Rj}$表示$R$晶格矢量对应的原胞中第$j$个轨道,$H$是哈密顿。(严格地说,这个术语指定了从$j+R$位置到i位置的跳变幅度,而不是反之。)
警告:不需要在$i \rightarrow j+R$方向和相反的$j \rightarrow i-R$方向上指定跳跃,因为这是自动完成的。如果你想在两个方向上指定跳跃,请参见参数allow_conjugate_pair的描述。
警告:在PythTB的早期版本中,这个函数被称为add_hop。为了向后兼容,我们仍然可以使用这个名称,但是这个特性将在未来的版本中被删除。
参数:
- hop_amp –跳跃振幅; 可以是实数或者复数, 等于$H_{ij}(R)$.如果nspin是2,那么跳幅可以是一个数字,或者是四个数字的数组,或者是2×2矩阵。如果给出一个数字,则将其解释为上下自旋分量的跳变幅度。如果给定一个四个数的数组,这些分别是I、sigma_x、sigma_y和sigma_z(即2×2单位矩阵和三个泡利自旋矩阵)的系数。最后,还可以给出完整的2×2矩阵。
- ind_i – 内积$\langle\phi_{oi}|H|\phi_{R,j}\rangle$左矢的轨道指标。这个轨道被假定在原点单元中。
- ind_j – 内积$\langle\phi_{oi}|H|\phi_{R,j}\rangle$右矢的轨道指标。这个轨道并不需要在原点单元中;它的单元格位置由参数ind_R决定。
- ind_R – 指向右矢轨道所在的单元格的晶格向量(约简坐标中的整数数组)。为了一致性,坐标的数量必须等于实际空间中的维度(dim_r参数),但是只使用ind_R的周期方向。如果倒易空间是零维的(如在分子中),则不需要指定此参数。
- mode – 类似于函数set_site中的参数模式。说明hop_amp参数的使用方式。它可以从头设置跳跃项的值,重置它,或添加它。
- ”set” – 默认值。跳跃项设置为hop_amp参数值。对于ind_i, ind_j, ind_R的每个三元组,只能使用一次“set”。
- ”reset” – 指定在位能到给定值。对于相同的三元组ind_i, ind_j, ind_R,可以多次调用此函数。
- ”add” – 增加跳跃项的前一个值。对于相同的三元组ind_i, ind_j, ind_R.R,可以多次调用此函数。如果set_hop被调用时allow_conjugate_pair设置为True,那么用户可能同时指定了$i \rightarrow j+R$和共轭对$j \rightarrow i-R$。在这种情况下,“set”,“reset”和“add”参数将把三元组ind_i, ind_j, ind_R和共轭三元组ind_j, ind_i, -ind_R视为不同的。
- allow_conjugate_pair – 缺省值为False。如果设置为True,代码将允许用户指定跳跃$i \rightarrow j+R$,即使已经指定了共轭对跳跃$j \rightarrow i-R$。如果指定了两个术语,代码仍然会对每项计数两次。