Carbon Chain (Part 1)
This example demonstrates the calculations of density of states (DOS) and transmission values for a two-probe carbon chain.
Import Necessary Libraries
import matplotlib.pyplot as plt
import numpy as np
import junpy as jp
from junpy.factory import nanodcal
%config InlineBackend.figure_formats = ['svg']
%config InlineBackend.rc = {'font.size': 12}
Load Device
We use the nanodcal.load_nanodcal_device function to load the structures and Hamiltonians from the results of Nanodcal.
filename = (
'jpdataset/nanodcal/twoprobe_carbon_chain/'
'LDA_SP_dC-3.0-ang/sys_6C-vac5ang-6C/v0.00/NanodcalStructObject.mat')
device = nanodcal.load_nanodcal_device(filename)
Calculate Density of States
The jp.DensityOfStates class is used to contruct a DOS calculation. We set the device parameter to input the loaded nanodcal object. energies specifies the energies points to be computed. etaSigma and etaGF set the infinitesimal imaginay number for the electrode self-energy and central Green’s function, respectively. Next, we use jp.run to start the calculation. Users can set the value of savefile to save the results, which can be loaded via the jp.load function.
calcr_dos = jp.DensityOfStates(
device=device,
energies=np.linspace(-4, 6, 101),
etaSigma=0.01,
etaGF=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-15 20:26:10)
Device information
bias (mu2-mu1)--------------------------: 0.0
central.numberOfSites-------------------: 12
central.spinType------------------------: SpinType.CollinearSpin
lead1.numberOfSites---------------------: 3
lead1.spinType--------------------------: SpinType.CollinearSpin
lead1.direction-------------------------: -3
lead1.temperature-----------------------: 0.0
lead1.chemicalPotential-----------------: -0.0
lead2.numberOfSites---------------------: 3
lead2.spinType--------------------------: SpinType.CollinearSpin
lead2.direction-------------------------: -3
lead2.temperature-----------------------: 0.0
lead2.chemicalPotential-----------------: -0.0
Energy sampling
samplingName----------------------------: CustomSampling
range-----------------------------------: [-4.0000e+00, 6.0000e+00]
number----------------------------------: 101
K-space sampling
samplingName----------------------------: GammaKspaceSampling
numReducedKpoints-----------------------: 1
Runtime message
Integrate over energy and k-space...
Start MPI execution...
--> 5.9% finished (Elapsed time: 0:00:00.157780)
--> 10.9% finished (Elapsed time: 0:00:00.098970)
--> 15.8% finished (Elapsed time: 0:00:00.103462)
--> 20.8% finished (Elapsed time: 0:00:00.107473)
--> 25.7% finished (Elapsed time: 0:00:00.124568)
--> 30.7% finished (Elapsed time: 0:00:00.148198)
--> 35.6% finished (Elapsed time: 0:00:00.155703)
--> 40.6% finished (Elapsed time: 0:00:00.245130)
--> 45.5% finished (Elapsed time: 0:00:00.164388)
--> 50.5% finished (Elapsed time: 0:00:00.164172)
--> 55.4% finished (Elapsed time: 0:00:00.173248)
--> 60.4% finished (Elapsed time: 0:00:00.196932)
--> 65.3% finished (Elapsed time: 0:00:00.176232)
--> 70.3% finished (Elapsed time: 0:00:00.161262)
--> 75.2% finished (Elapsed time: 0:00:00.167534)
--> 80.2% finished (Elapsed time: 0:00:00.157482)
--> 85.1% finished (Elapsed time: 0:00:00.126943)
--> 90.1% finished (Elapsed time: 0:00:00.107382)
--> 95.0% finished (Elapsed time: 0:00:00.112344)
--> 100.0% finished (Elapsed time: 0:00:00.110355)
Wait for other processes...
--> finished (Elapsed time: 0:00:00.000969)
Gather results from other processes...
--> finished (Elapsed time: 0:00:00.001050)
Density of states report
Energy_eV D_up D_dn
-4.000000e+00 1.127021e-02 1.639869e-02
-3.900000e+00 1.171425e-02 1.505244e-02
-3.800000e+00 1.221406e-02 1.395156e-02
-3.700000e+00 1.277625e-02 1.304498e-02
-3.600000e+00 1.340886e-02 1.229498e-02
-3.500000e+00 1.412165e-02 1.167322e-02
-3.400000e+00 1.492656e-02 1.115805e-02
-3.300000e+00 1.583837e-02 1.073276e-02
-3.200000e+00 1.687544e-02 1.038434e-02
-3.100000e+00 1.806097e-02 1.010255e-02
-3.000000e+00 1.942461e-02 9.879335e-03
-2.900000e+00 2.100494e-02 9.708339e-03
-2.800000e+00 2.285314e-02 9.584567e-03
-2.700000e+00 2.503874e-02 9.504137e-03
-2.600000e+00 2.765894e-02 9.464091e-03
-2.500000e+00 3.085441e-02 9.462258e-03
-2.400000e+00 3.483763e-02 9.497155e-03
-2.300000e+00 3.994724e-02 9.567916e-03
-2.200000e+00 4.676125e-02 9.674247e-03
-2.100000e+00 5.635972e-02 9.816404e-03
-2.000000e+00 7.102755e-02 9.995192e-03
-1.900000e+00 9.656241e-02 1.021198e-02
-1.800000e+00 1.527801e-01 1.046874e-02
-1.700000e+00 3.666036e-01 1.076811e-02
-1.600000e+00 1.080420e+01 1.111347e-02
-1.500000e+00 7.382336e+00 1.150910e-02
-1.400000e+00 4.811470e+00 1.196031e-02
-1.300000e+00 4.347782e+00 1.247368e-02
-1.200000e+00 4.229036e+00 1.305738e-02
-1.100000e+00 3.885855e+00 1.372157e-02
-1.000000e+00 3.466896e+00 1.447896e-02
-9.000000e-01 3.080558e+00 1.534567e-02
-8.000000e-01 3.359947e+00 1.634234e-02
-7.000000e-01 3.996898e+00 1.749580e-02
-6.000000e-01 1.068751e+01 1.884167e-02
-5.000000e-01 4.103285e+01 2.042818e-02
-4.000000e-01 2.729543e+01 2.232256e-02
-3.000000e-01 2.465248e+01 2.462150e-02
-2.000000e-01 2.394359e+01 2.746968e-02
-1.000000e-01 2.723034e+01 3.109440e-02
0.000000e+00 4.198225e+01 3.587518e-02
1.000000e-01 6.173473e+01 4.249738e-02
2.000000e-01 5.084898e+00 5.233560e-02
3.000000e-01 3.664255e+00 6.858646e-02
4.000000e-01 3.229684e+00 1.005915e-01
5.000000e-01 3.003310e+00 1.898167e-01
6.000000e-01 3.171835e+00 1.001302e+00
7.000000e-01 3.428784e+00 8.579854e+00
8.000000e-01 3.875359e+00 5.457506e+00
9.000000e-01 4.095121e+00 4.081743e+00
1.000000e+00 3.924991e+00 3.746982e+00
1.100000e+00 3.811351e+00 3.615943e+00
1.200000e+00 4.889778e+00 3.398703e+00
1.300000e+00 8.032514e+00 3.127002e+00
1.400000e+00 6.371544e+00 2.884156e+00
1.500000e+00 3.099948e-01 2.854206e+00
1.600000e+00 1.330055e-01 2.811669e+00
1.700000e+00 8.461705e-02 2.900643e+00
1.800000e+00 6.238306e-02 3.134286e+00
1.900000e+00 4.959117e-02 4.305620e+00
2.000000e+00 4.123443e-02 6.459996e+01
2.100000e+00 3.531526e-02 2.722599e+01
2.200000e+00 3.088445e-02 2.113562e+01
2.300000e+00 2.743347e-02 2.180168e+01
2.400000e+00 2.466486e-02 1.891568e+01
2.500000e+00 2.239253e-02 2.171674e+01
2.600000e+00 2.049371e-02 2.116281e+01
2.700000e+00 1.888388e-02 3.265226e+01
2.800000e+00 1.750276e-02 3.283530e+01
2.900000e+00 1.630609e-02 6.637641e+00
3.000000e+00 1.526056e-02 3.041749e+00
3.100000e+00 1.434060e-02 2.565953e+00
3.200000e+00 1.352617e-02 2.483527e+00
3.300000e+00 1.280138e-02 2.749144e+00
3.400000e+00 1.215340e-02 3.073155e+00
3.500000e+00 1.157179e-02 3.353360e+00
3.600000e+00 1.104796e-02 3.386515e+00
3.700000e+00 1.057474e-02 3.183820e+00
3.800000e+00 1.014615e-02 3.038609e+00
3.900000e+00 9.757130e-03 3.489639e+00
4.000000e+00 9.403365e-03 5.231762e+00
4.100000e+00 9.081178e-03 7.477820e+00
4.200000e+00 8.787404e-03 3.371269e+00
4.300000e+00 8.519308e-03 2.192419e-01
4.400000e+00 8.274517e-03 1.060757e-01
4.500000e+00 8.050964e-03 7.045838e-02
4.600000e+00 7.846843e-03 5.319246e-02
4.700000e+00 7.660571e-03 4.297442e-02
4.800000e+00 7.490755e-03 3.618328e-02
4.900000e+00 7.336172e-03 3.131745e-02
5.000000e+00 7.195740e-03 2.764516e-02
5.100000e+00 7.068507e-03 2.476743e-02
5.200000e+00 6.953630e-03 2.244791e-02
5.300000e+00 6.850366e-03 2.053728e-02
5.400000e+00 6.758058e-03 1.893631e-02
5.500000e+00 6.676129e-03 1.757628e-02
5.600000e+00 6.604071e-03 1.640793e-02
5.700000e+00 6.541440e-03 1.539497e-02
5.800000e+00 6.487852e-03 1.450996e-02
5.900000e+00 6.442972e-03 1.373179e-02
6.000000e+00 6.406518e-03 1.304389e-02
Calculation of density of states finished (2024-08-15 20:26:14)
Elapsed time----------------------------: 0:00:03.013240
The [calcr].densityOfStates function returns the calculated DOS values with the shape of (#kpoints, #energies, #spin). Setting spin='diag' indicates that the function will return both spin-up and spin-down values.
# 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
Similar to the DOS calculation, we use jp.Transmission to construct the transmission calculation.
calcr_trans = jp.Transmission(
device=device,
energies=np.linspace(-4, 6, 101),
etaSigma=0.01,
etaGF=0.01)
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-15 20:26:28)
Device information
bias (mu2-mu1)--------------------------: 0.0
central.numberOfSites-------------------: 12
central.spinType------------------------: SpinType.CollinearSpin
lead1.numberOfSites---------------------: 3
lead1.spinType--------------------------: SpinType.CollinearSpin
lead1.direction-------------------------: -3
lead1.temperature-----------------------: 0.0
lead1.chemicalPotential-----------------: -0.0
lead2.numberOfSites---------------------: 3
lead2.spinType--------------------------: SpinType.CollinearSpin
lead2.direction-------------------------: -3
lead2.temperature-----------------------: 0.0
lead2.chemicalPotential-----------------: -0.0
Energy sampling
samplingName----------------------------: CustomSampling
range-----------------------------------: [-4.0000e+00, 6.0000e+00]
number----------------------------------: 101
K-space sampling
samplingName----------------------------: GammaKspaceSampling
numReducedKpoints-----------------------: 1
Runtime message
Integrate over energy and k-space...
Start MPI execution...
--> 5.9% finished (Elapsed time: 0:00:00.179570)
--> 10.9% finished (Elapsed time: 0:00:00.124961)
--> 15.8% finished (Elapsed time: 0:00:00.124341)
--> 20.8% finished (Elapsed time: 0:00:00.130004)
--> 25.7% finished (Elapsed time: 0:00:00.146647)
--> 30.7% finished (Elapsed time: 0:00:00.173420)
--> 35.6% finished (Elapsed time: 0:00:00.187555)
--> 40.6% finished (Elapsed time: 0:00:00.211225)
--> 45.5% finished (Elapsed time: 0:00:00.197474)
--> 50.5% finished (Elapsed time: 0:00:00.187446)
--> 55.4% finished (Elapsed time: 0:00:00.221113)
--> 60.4% finished (Elapsed time: 0:00:00.199818)
--> 65.3% finished (Elapsed time: 0:00:00.212808)
--> 70.3% finished (Elapsed time: 0:00:00.179722)
--> 75.2% finished (Elapsed time: 0:00:00.185184)
--> 80.2% finished (Elapsed time: 0:00:00.186060)
--> 85.1% finished (Elapsed time: 0:00:00.144540)
--> 90.1% finished (Elapsed time: 0:00:00.171482)
--> 95.0% finished (Elapsed time: 0:00:00.173372)
--> 100.0% finished (Elapsed time: 0:00:00.136908)
Wait for other processes...
--> finished (Elapsed time: 0:00:00.000013)
Gather results from other processes...
--> finished (Elapsed time: 0:00:00.000059)
Transmission report
Energy_eV T_up T_dn
-4.000000e+00 3.568769e-25 1.086498e-23
-3.900000e+00 5.493207e-25 5.768998e-24
-3.800000e+00 9.184429e-25 3.357583e-24
-3.700000e+00 1.655759e-24 2.125167e-24
-3.600000e+00 3.193358e-24 1.452455e-24
-3.500000e+00 6.549973e-24 1.064571e-24
-3.400000e+00 1.424297e-23 8.311436e-25
-3.300000e+00 3.281372e-23 6.867108e-25
-3.200000e+00 8.020403e-23 5.968460e-25
-3.100000e+00 2.085829e-22 5.428753e-25
-3.000000e+00 5.795699e-22 5.146546e-25
-2.900000e+00 1.729808e-21 5.070578e-25
-2.800000e+00 5.582701e-21 5.183081e-25
-2.700000e+00 1.964410e-20 5.493327e-25
-2.600000e+00 7.614856e-20 6.038201e-25
-2.500000e+00 3.295224e-19 6.889433e-25
-2.400000e+00 1.619688e-18 8.169458e-25
-2.300000e+00 9.256830e-18 1.008095e-24
-2.200000e+00 6.356741e-17 1.296021e-24
-2.100000e+00 5.505632e-16 1.737447e-24
-2.000000e+00 6.495195e-15 2.430272e-24
-1.900000e+00 1.195445e-13 3.548076e-24
-1.800000e+00 4.565681e-12 5.407865e-24
-1.700000e+00 8.546694e-10 8.607290e-24
-1.600000e+00 1.911524e-04 1.431190e-23
-1.500000e+00 9.459319e-04 2.487799e-23
-1.400000e+00 1.860142e-03 4.525445e-23
-1.300000e+00 2.543458e-03 8.626567e-23
-1.200000e+00 2.878037e-03 1.726329e-22
-1.100000e+00 3.211477e-03 3.634836e-22
-1.000000e+00 3.744801e-03 8.074156e-22
-9.000000e-01 4.089340e-03 1.898336e-21
-8.000000e-01 5.569328e-03 4.742493e-21
-7.000000e-01 6.286368e-03 1.264843e-20
-6.000000e-01 6.752022e-03 3.621892e-20
-5.000000e-01 7.122807e-03 1.121337e-19
-4.000000e-01 7.547907e-03 3.786295e-19
-3.000000e-01 8.212986e-03 1.409789e-18
-2.000000e-01 9.534190e-03 5.871544e-18
-1.000000e-01 1.160203e-02 2.787783e-17
0.000000e+00 1.573092e-02 1.548968e-16
1.000000e-01 1.162909e-02 1.045907e-15
2.000000e-01 1.138167e-02 9.093653e-15
3.000000e-01 1.119427e-02 1.121634e-13
4.000000e-01 1.101313e-02 2.364180e-12
5.000000e-01 1.099336e-02 1.348291e-10
6.000000e-01 1.222977e-02 1.981699e-07
7.000000e-01 1.156938e-02 6.432205e-04
8.000000e-01 1.052950e-02 1.568219e-03
9.000000e-01 8.555938e-03 2.749335e-03
1.000000e+00 6.310701e-03 3.488483e-03
1.100000e+00 4.503891e-03 3.841601e-03
1.200000e+00 3.148973e-03 4.278159e-03
1.300000e+00 1.613886e-03 5.030354e-03
1.400000e+00 1.236328e-04 6.035115e-03
1.500000e+00 3.319599e-09 7.614844e-03
1.600000e+00 3.358661e-11 8.073908e-03
1.700000e+00 1.430975e-12 8.136489e-03
1.800000e+00 1.171936e-13 7.877373e-03
1.900000e+00 1.427212e-14 7.692115e-03
2.000000e+00 2.287498e-15 7.897747e-03
2.100000e+00 4.501481e-16 8.721847e-03
2.200000e+00 1.040753e-16 1.039420e-02
2.300000e+00 2.743403e-17 1.311429e-02
2.400000e+00 8.068509e-18 1.672900e-02
2.500000e+00 2.605106e-18 2.053977e-02
2.600000e+00 9.118984e-19 2.325163e-02
2.700000e+00 3.426417e-19 2.532241e-02
2.800000e+00 1.370907e-19 1.807458e-02
2.900000e+00 5.801814e-20 1.464895e-02
3.000000e+00 2.582793e-20 1.282680e-02
3.100000e+00 1.203745e-20 1.179520e-02
3.200000e+00 5.849759e-21 1.121240e-02
3.300000e+00 2.953763e-21 1.189348e-02
3.400000e+00 1.544954e-21 1.146806e-02
3.500000e+00 8.348074e-22 1.034134e-02
3.600000e+00 4.648907e-22 8.438088e-03
3.700000e+00 2.662484e-22 6.396584e-03
3.800000e+00 1.565206e-22 4.789009e-03
3.900000e+00 9.429024e-23 3.695378e-03
4.000000e+00 5.811813e-23 2.732662e-03
4.100000e+00 3.660265e-23 1.232044e-03
4.200000e+00 2.352538e-23 3.872268e-05
4.300000e+00 1.541371e-23 2.962225e-09
4.400000e+00 1.028486e-23 5.969100e-11
4.500000e+00 6.982854e-24 3.774545e-12
4.600000e+00 4.820343e-24 4.137508e-13
4.700000e+00 3.380984e-24 6.380405e-14
4.800000e+00 2.408125e-24 1.249691e-14
4.900000e+00 1.740903e-24 2.930559e-15
5.000000e+00 1.276899e-24 7.922661e-16
5.100000e+00 9.499194e-25 2.405968e-16
5.200000e+00 7.165752e-25 8.054888e-17
5.300000e+00 5.480379e-25 2.931281e-17
5.400000e+00 4.249060e-25 1.146937e-17
5.500000e+00 3.339619e-25 4.783388e-18
5.600000e+00 2.660954e-25 2.111488e-18
5.700000e+00 2.149573e-25 9.807882e-19
5.800000e+00 1.760756e-25 4.770711e-19
5.900000e+00 1.462689e-25 2.420031e-19
6.000000e+00 1.232526e-25 1.275714e-19
Calculation of transmission finished (2024-08-15 20:26:32)
Elapsed time----------------------------: 0:00:03.504264
After the evaluation, the transmission values are retrieved using [calcr].transmission.
# 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()