Simple Metallic Chain
This notebook demonstrates a quantum transport calculation using the JunPy package. The goal is to compute the density of states and transmission values for a two-probe device. We manually construct the tight-binding Hamiltonian by setting the onsite energies and hopping parameters.
Import Necessary Libraries
We use the built-in module junpy.factory.stack to create a simple two-probe device and its tight-binding Hamiltonian.
import matplotlib.pyplot as plt
import numpy as np
import junpy as jp
from junpy.factory import stack
%config InlineBackend.figure_format = 'svg'
%config InlineBackend.rc = {'font.size': 12}
Build Device
For demonstration, we assume there are 3 sites in the central region and 1 site in each of the left and right electrode unit cells. The spin-polarized onsite energies for each site are set to np.array([[-0.5, 0], [0, 0.5]]), where -0.5 corresponds to spin-up and 0.5 corresponds to spin-down. The hopping energies are set to -1. The spin polarization angles are aligned along the $z$ direction, with values set to 0 radians.
# on-site energy
eA = np.array([[-0.5, 0], [0, 0.5]])
eB = np.array([[-0.5, 0], [0, 0.5]])
eC = np.array([[-0.5, 0], [0, 0.5]])
# hopping energy
t = np.array([[-1, 0], [0, -1]])
# spin polarization angle in unit of radian
sA, sB, sC, = 0, 0, 0
We first create an empty builder using stack.TwoProbeDeviceBuilder() to construct the device:
builder = stack.TwoProbeDeviceBuilder()
The following statements construct the Hamiltonian parameters for the two-probe device. Here, builder.L, builder.C, and builder.R represent the left, central, and right regions, respectively. The left and right regions are semi-infinite electrodes. To construct the Fermi function, we need to set the reservoir chemical potential and temperature. In this example, the reservoir chemical potentials are set to 0, and the temperatures are set to 100 K. For each region, the add(energy, hopping, nsites, spin, bias) function is used to create a layer containing the Hamiltonian parameters. Here, energy refers to the onsite energy, hopping specifies the hopping energy, nsites is the number of sites in the layer, spin is the spin polarization angle in radians, and bias represents the energy shift of the onsite energy.
# left electrode
builder.L.set(chemicalPotential=0, temperature=100)
builder.L.add(eA, t, nsites=1, spin=sA, bias=0)
# central region
builder.C.add(eA, t, nsites=1, spin=sA, bias=0)
builder.C.add(eB, t, nsites=3, spin=sB, bias=0)
builder.C.add(eC, t, nsites=1, spin=sC, bias=0)
# right electrode
builder.R.set(chemicalPotential=0, temperature=100)
builder.R.add(eC, t, nsites=1, spin=sC, bias=0)
The coupling energies between the layers also need to be specified. We assume that all coupling energies are set to t.
# define coupling between layers
builder.set_layer_coupling(all=t)
The default transport direction is the $z$ direction. To construct a 2D or 3D device, we can set the translation symmetry in the $x$ and $y$ directions. In this example, we construct a simple 1D two-probe device, so the translation symmetry is disabled.
# define translation symmetry
builder.set_translationSymmetry(x=False, y=False)
Once the construction is finished, use create_device to build the device.
# create device
device = builder.create_device()
Calculate Density of States
calcr_dos = jp.DensityOfStates(
device=device,
energies=np.linspace(-3, 3, 61),
kpoints=jp.SymmetryKspaceSampling((1,1,1)),
etaSigma=0.01)
jp.run(calcr_dos, savefile=False)
Show code cell output
JunPy version---------------------------: 0.15.0.post29+ga5b3260
Parallelization information
BLAS Vendor-----------------------------: MKL
Total number of MPI processes-----------: 1
OMP_NUM_THREADS-------------------------: 1
MKL_NUM_THREADS-------------------------: unset
OPENBLAS_NUM_THREADS--------------------: unset
Calculating density of states... (2024-08-14 20:01:57)
Device information
bias (mu2-mu1)--------------------------: 0
central.numberOfSites-------------------: 5
central.spinType------------------------: SpinType.GeneralSpin
lead1.numberOfSites---------------------: 1
lead1.spinType--------------------------: SpinType.GeneralSpin
lead1.direction-------------------------: -3
lead1.temperature-----------------------: 100
lead1.chemicalPotential-----------------: 0
lead2.numberOfSites---------------------: 1
lead2.spinType--------------------------: SpinType.GeneralSpin
lead2.direction-------------------------: 3
lead2.temperature-----------------------: 100
lead2.chemicalPotential-----------------: 0
Energy sampling
samplingName----------------------------: CustomSampling
range-----------------------------------: [-3.0000e+00, 3.0000e+00]
number----------------------------------: 61
K-space sampling
samplingName----------------------------: SymmetryKspaceSampling
gridNumber------------------------------: (1, 1, 1)
isTimeReversalSymmetry------------------: True
numReducedKpoints-----------------------: 1
Runtime message
Integrate over energy and k-space...
Start MPI execution...
--> 6.6% finished (Elapsed time: 0:00:00.004573)
--> 11.5% finished (Elapsed time: 0:00:00.001699)
--> 16.4% finished (Elapsed time: 0:00:00.001630)
--> 21.3% finished (Elapsed time: 0:00:00.001487)
--> 26.2% finished (Elapsed time: 0:00:00.001480)
--> 31.1% finished (Elapsed time: 0:00:00.001430)
--> 36.1% finished (Elapsed time: 0:00:00.001932)
--> 41.0% finished (Elapsed time: 0:00:00.001499)
--> 45.9% finished (Elapsed time: 0:00:00.001404)
--> 50.8% finished (Elapsed time: 0:00:00.001315)
--> 55.7% finished (Elapsed time: 0:00:00.001314)
--> 60.7% finished (Elapsed time: 0:00:00.001766)
--> 65.6% finished (Elapsed time: 0:00:00.001617)
--> 70.5% finished (Elapsed time: 0:00:00.001195)
--> 75.4% finished (Elapsed time: 0:00:00.001387)
--> 80.3% finished (Elapsed time: 0:00:00.001412)
--> 85.2% finished (Elapsed time: 0:00:00.001434)
--> 90.2% finished (Elapsed time: 0:00:00.001451)
--> 95.1% finished (Elapsed time: 0:00:00.001334)
--> 100.0% finished (Elapsed time: 0:00:00.001556)
Wait for other processes...
--> finished (Elapsed time: 0:00:00.000186)
Gather results from other processes...
--> finished (Elapsed time: 0:00:00.000293)
Density of states report
Energy_eV D_up-up D_dn-dn D_Re-up-dn D_Im-up-dn
-3.000000e+00 1.256112e-03 9.353190e-05 0.000000e+00 0.000000e+00
-2.900000e+00 2.050678e-03 1.113836e-04 0.000000e+00 0.000000e+00
-2.800000e+00 3.807053e-03 1.340980e-04 0.000000e+00 0.000000e+00
-2.700000e+00 8.907812e-03 1.634881e-04 0.000000e+00 0.000000e+00
-2.600000e+00 3.611755e-02 2.022652e-04 0.000000e+00 0.000000e+00
-2.500000e+00 5.699298e+00 2.546209e-04 0.000000e+00 0.000000e+00
-2.400000e+00 2.635411e+00 3.272927e-04 0.000000e+00 0.000000e+00
-2.300000e+00 1.839267e+00 4.316354e-04 0.000000e+00 0.000000e+00
-2.200000e+00 1.511842e+00 5.879337e-04 0.000000e+00 0.000000e+00
-2.100000e+00 1.326195e+00 8.352035e-04 0.000000e+00 0.000000e+00
-2.000000e+00 1.203896e+00 1.256112e-03 0.000000e+00 0.000000e+00
-1.900000e+00 1.115984e+00 2.050678e-03 0.000000e+00 0.000000e+00
-1.800000e+00 1.049216e+00 3.807053e-03 0.000000e+00 0.000000e+00
-1.700000e+00 9.966793e-01 8.907812e-03 0.000000e+00 0.000000e+00
-1.600000e+00 9.544100e-01 3.611755e-02 0.000000e+00 0.000000e+00
-1.500000e+00 9.199549e-01 5.699298e+00 0.000000e+00 0.000000e+00
-1.400000e+00 8.916953e-01 2.635411e+00 0.000000e+00 0.000000e+00
-1.300000e+00 8.685007e-01 1.839267e+00 0.000000e+00 0.000000e+00
-1.200000e+00 8.495421e-01 1.511842e+00 0.000000e+00 0.000000e+00
-1.100000e+00 8.341881e-01 1.326195e+00 0.000000e+00 0.000000e+00
-1.000000e+00 8.219456e-01 1.203896e+00 0.000000e+00 0.000000e+00
-9.000000e-01 8.124258e-01 1.115984e+00 0.000000e+00 0.000000e+00
-8.000000e-01 8.053250e-01 1.049216e+00 0.000000e+00 0.000000e+00
-7.000000e-01 8.004137e-01 9.966793e-01 0.000000e+00 0.000000e+00
-6.000000e-01 7.975308e-01 9.544100e-01 0.000000e+00 0.000000e+00
-5.000000e-01 7.965804e-01 9.199549e-01 0.000000e+00 0.000000e+00
-4.000000e-01 7.975308e-01 8.916953e-01 0.000000e+00 0.000000e+00
-3.000000e-01 8.004137e-01 8.685007e-01 0.000000e+00 0.000000e+00
-2.000000e-01 8.053250e-01 8.495421e-01 0.000000e+00 0.000000e+00
-1.000000e-01 8.124258e-01 8.341881e-01 0.000000e+00 0.000000e+00
0.000000e+00 8.219456e-01 8.219456e-01 0.000000e+00 0.000000e+00
1.000000e-01 8.341881e-01 8.124258e-01 0.000000e+00 0.000000e+00
2.000000e-01 8.495421e-01 8.053250e-01 0.000000e+00 0.000000e+00
3.000000e-01 8.685007e-01 8.004137e-01 0.000000e+00 0.000000e+00
4.000000e-01 8.916953e-01 7.975308e-01 0.000000e+00 0.000000e+00
5.000000e-01 9.199549e-01 7.965804e-01 0.000000e+00 0.000000e+00
6.000000e-01 9.544100e-01 7.975308e-01 0.000000e+00 0.000000e+00
7.000000e-01 9.966793e-01 8.004137e-01 0.000000e+00 0.000000e+00
8.000000e-01 1.049216e+00 8.053250e-01 0.000000e+00 0.000000e+00
9.000000e-01 1.115984e+00 8.124258e-01 0.000000e+00 0.000000e+00
1.000000e+00 1.203896e+00 8.219456e-01 0.000000e+00 0.000000e+00
1.100000e+00 1.326195e+00 8.341881e-01 0.000000e+00 0.000000e+00
1.200000e+00 1.511842e+00 8.495421e-01 0.000000e+00 0.000000e+00
1.300000e+00 1.839267e+00 8.685007e-01 0.000000e+00 0.000000e+00
1.400000e+00 2.635411e+00 8.916953e-01 0.000000e+00 0.000000e+00
1.500000e+00 5.699298e+00 9.199549e-01 0.000000e+00 0.000000e+00
1.600000e+00 3.611755e-02 9.544100e-01 0.000000e+00 0.000000e+00
1.700000e+00 8.907812e-03 9.966793e-01 0.000000e+00 0.000000e+00
1.800000e+00 3.807053e-03 1.049216e+00 0.000000e+00 0.000000e+00
1.900000e+00 2.050678e-03 1.115984e+00 0.000000e+00 0.000000e+00
2.000000e+00 1.256112e-03 1.203896e+00 0.000000e+00 0.000000e+00
2.100000e+00 8.352035e-04 1.326195e+00 0.000000e+00 0.000000e+00
2.200000e+00 5.879337e-04 1.511842e+00 0.000000e+00 0.000000e+00
2.300000e+00 4.316354e-04 1.839267e+00 0.000000e+00 0.000000e+00
2.400000e+00 3.272927e-04 2.635411e+00 0.000000e+00 0.000000e+00
2.500000e+00 2.546209e-04 5.699298e+00 0.000000e+00 0.000000e+00
2.600000e+00 2.022652e-04 3.611755e-02 0.000000e+00 0.000000e+00
2.700000e+00 1.634881e-04 8.907812e-03 0.000000e+00 0.000000e+00
2.800000e+00 1.340980e-04 3.807053e-03 0.000000e+00 0.000000e+00
2.900000e+00 1.113836e-04 2.050678e-03 0.000000e+00 0.000000e+00
3.000000e+00 9.353190e-05 1.256112e-03 0.000000e+00 0.000000e+00
Calculation of density of states finished (2024-08-14 20:01:57)
Elapsed time----------------------------: 0:00:00.054571
# shape: (#kpoints, #energies, #spin)
dos = calcr_dos.densityOfStates(spin='diag')
plt.plot(calcr_dos.energies, dos[0,:,0], '.-', label='spin-up')
plt.plot(calcr_dos.energies, dos[0,:,1], '.-', label='spin-down')
plt.xlabel('Energy (eV)')
plt.ylabel('DOS (1/eV)')
plt.legend()
plt.show()
Calculate Transmission
calcr_trans = jp.Transmission(
device=device,
energies=np.linspace(-3, 3, 61),
kpoints=jp.SymmetryKspaceSampling((1,1,1)),
etaSigma=1e-4,
)
jp.run(calcr_trans, savefile=False)
Show code cell output
JunPy version---------------------------: 0.15.0.post29+ga5b3260
Parallelization information
BLAS Vendor-----------------------------: MKL
Total number of MPI processes-----------: 1
OMP_NUM_THREADS-------------------------: 1
MKL_NUM_THREADS-------------------------: unset
OPENBLAS_NUM_THREADS--------------------: unset
Calculating transmission... (2024-08-14 20:02:20)
Device information
bias (mu2-mu1)--------------------------: 0
central.numberOfSites-------------------: 5
central.spinType------------------------: SpinType.GeneralSpin
lead1.numberOfSites---------------------: 1
lead1.spinType--------------------------: SpinType.GeneralSpin
lead1.direction-------------------------: -3
lead1.temperature-----------------------: 100
lead1.chemicalPotential-----------------: 0
lead2.numberOfSites---------------------: 1
lead2.spinType--------------------------: SpinType.GeneralSpin
lead2.direction-------------------------: 3
lead2.temperature-----------------------: 100
lead2.chemicalPotential-----------------: 0
Energy sampling
samplingName----------------------------: CustomSampling
range-----------------------------------: [-3.0000e+00, 3.0000e+00]
number----------------------------------: 61
K-space sampling
samplingName----------------------------: SymmetryKspaceSampling
gridNumber------------------------------: (1, 1, 1)
isTimeReversalSymmetry------------------: True
numReducedKpoints-----------------------: 1
Runtime message
Integrate over energy and k-space...
Start MPI execution...
--> 6.6% finished (Elapsed time: 0:00:00.003585)
--> 11.5% finished (Elapsed time: 0:00:00.001882)
--> 16.4% finished (Elapsed time: 0:00:00.001779)
--> 21.3% finished (Elapsed time: 0:00:00.002063)
--> 26.2% finished (Elapsed time: 0:00:00.001690)
--> 31.1% finished (Elapsed time: 0:00:00.001729)
--> 36.1% finished (Elapsed time: 0:00:00.002109)
--> 41.0% finished (Elapsed time: 0:00:00.002407)
--> 45.9% finished (Elapsed time: 0:00:00.001634)
--> 50.8% finished (Elapsed time: 0:00:00.001618)
--> 55.7% finished (Elapsed time: 0:00:00.001521)
--> 60.7% finished (Elapsed time: 0:00:00.001520)
--> 65.6% finished (Elapsed time: 0:00:00.001730)
--> 70.5% finished (Elapsed time: 0:00:00.002024)
--> 75.4% finished (Elapsed time: 0:00:00.001649)
--> 80.3% finished (Elapsed time: 0:00:00.001612)
--> 85.2% finished (Elapsed time: 0:00:00.001697)
--> 90.2% finished (Elapsed time: 0:00:00.002344)
--> 95.1% finished (Elapsed time: 0:00:00.001554)
--> 100.0% finished (Elapsed time: 0:00:00.001243)
Wait for other processes...
--> finished (Elapsed time: 0:00:00.000009)
Gather results from other processes...
--> finished (Elapsed time: 0:00:00.000113)
Transmission report
Energy_eV T_up-up T_dn-dn T_Re-up-dn T_Im-up-dn
-3.000000e+00 7.716049e-12 5.451332e-15 0.000000e+00 0.000000e+00
-2.900000e+00 2.559462e-11 9.265870e-15 0.000000e+00 0.000000e+00
-2.800000e+00 1.073804e-10 1.618547e-14 0.000000e+00 0.000000e+00
-2.700000e+00 6.715972e-10 2.915862e-14 0.000000e+00 0.000000e+00
-2.600000e+00 1.020449e-08 5.441482e-14 0.000000e+00 0.000000e+00
-2.500000e+00 4.826224e-01 1.057711e-13 0.000000e+00 0.000000e+00
-2.400000e+00 1.000000e+00 2.156665e-13 0.000000e+00 0.000000e+00
-2.300000e+00 1.000000e+00 4.655865e-13 0.000000e+00 0.000000e+00
-2.200000e+00 1.000000e+00 1.077732e-12 0.000000e+00 0.000000e+00
-2.100000e+00 1.000000e+00 2.723300e-12 0.000000e+00 0.000000e+00
-2.000000e+00 1.000000e+00 7.716049e-12 0.000000e+00 0.000000e+00
-1.900000e+00 1.000000e+00 2.559462e-11 0.000000e+00 0.000000e+00
-1.800000e+00 1.000000e+00 1.073804e-10 0.000000e+00 0.000000e+00
-1.700000e+00 1.000000e+00 6.715972e-10 0.000000e+00 0.000000e+00
-1.600000e+00 1.000000e+00 1.020449e-08 0.000000e+00 0.000000e+00
-1.500000e+00 1.000000e+00 4.826224e-01 0.000000e+00 0.000000e+00
-1.400000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-1.300000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-1.200000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-1.100000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-9.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-8.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-7.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-6.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-5.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-4.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-3.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-2.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
-1.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
0.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
2.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
3.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
4.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
5.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
6.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
7.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
8.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
9.000000e-01 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.100000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.200000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.300000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.400000e+00 1.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00
1.500000e+00 4.826224e-01 1.000000e+00 0.000000e+00 0.000000e+00
1.600000e+00 1.020449e-08 1.000000e+00 0.000000e+00 0.000000e+00
1.700000e+00 6.715972e-10 1.000000e+00 0.000000e+00 0.000000e+00
1.800000e+00 1.073804e-10 1.000000e+00 0.000000e+00 0.000000e+00
1.900000e+00 2.559462e-11 1.000000e+00 0.000000e+00 0.000000e+00
2.000000e+00 7.716049e-12 1.000000e+00 0.000000e+00 0.000000e+00
2.100000e+00 2.723300e-12 1.000000e+00 0.000000e+00 0.000000e+00
2.200000e+00 1.077732e-12 1.000000e+00 0.000000e+00 0.000000e+00
2.300000e+00 4.655865e-13 1.000000e+00 0.000000e+00 0.000000e+00
2.400000e+00 2.156665e-13 1.000000e+00 0.000000e+00 0.000000e+00
2.500000e+00 1.057711e-13 4.826224e-01 0.000000e+00 0.000000e+00
2.600000e+00 5.441482e-14 1.020449e-08 0.000000e+00 0.000000e+00
2.700000e+00 2.915862e-14 6.715972e-10 0.000000e+00 0.000000e+00
2.800000e+00 1.618547e-14 1.073804e-10 0.000000e+00 0.000000e+00
2.900000e+00 9.265870e-15 2.559462e-11 0.000000e+00 0.000000e+00
3.000000e+00 5.451332e-15 7.716049e-12 0.000000e+00 0.000000e+00
Calculation of transmission finished (2024-08-14 20:02:20)
Elapsed time----------------------------: 0:00:00.046322
# shape: (#kpoints, #energies, #spin)
trans = calcr_trans.transmission(spin='diag')
plt.plot(calcr_trans.energies, trans[0,:,0], '.-', label='spin-up')
plt.plot(calcr_trans.energies, trans[0,:,1], '.-', label='spin-down')
plt.xlabel('Energy (eV)')
plt.ylabel('Transmission')
plt.legend()
plt.show()