Photo-current tutorial
Requirements
Software components
nanotools
NanoDCAL+
Pseudopotentials
C_LDA_TM_DZP.mat
Copy the mat file from the pseudo database to the current working directory and export NANODCALPLUS_PSEUDO=$PWD
.
Theory
According to the first order perturbation theory, the charge current moving into a lead \(L\) induced by optical excitation is calculated as
where \(N\) is number of photons, \(\Gamma\) is broadening function of the lead, \(f\) is Fermi-Dirac function, \(G\) is Green function, and \(M\) is the matrix form of the polarization operator
Here \(\omega\) is the light frequency, \(\epsilon_r\epsilon_0\) is permitivity of the material, \(V\) is volume of the optical cavity, \(\hat{p}\) is quantum momentum operator, and \(\mathbf{\hat{e}}\) is a complex polarization vector defined with an orthonormal pair of real vectors \(\mathbf{(e_1,e_2)}\) and a pair of elliptical angles \((\theta,\phi)\):
To simplify the workflow of computing \(J_L\), we define the dimensionless photo-transmission as follows
where \(c\) is vacuum speed of light, \(a_0\) is Bohr radius, \(\alpha\) is fine-structure constant. We further define the dimensionless photocurrent response coefficient
Hence the photocurrent can be expressed as
where \(I_\omega\) is the photon-flux in terms of particle density:
For experimentalists, it may be more convenient to characterize photon-flux with the energy-flux parameter \(P_\omega\), i.e. optical power per area, which has a simple relation with \(I_\omega\): \(P_\omega = \hbar \omega I_\omega\).
Example
In this example, we calculate the photo-current through an electrically biased carbon chain. Note that there should exist a charge current through the chain even without optical field. Here the photo-current refers to the part of charge-current specifically induced by optical excitation.
python script
from nanotools.photocurrent import PhotoCurrent
from nanotools import Atoms, Cell, System, TotalEnergy, TwoProbe
from nanotools.utils import ureg
import numpy as np
cell = Cell(avec=[12, 0.0, 0.0,
0.0, 12, 0.0,
0.0, 0.0, 16],
resolution = 0.12)
atoms= Atoms(positions="c8.xyz")
sys = System(cell=cell, atoms=atoms)
sys.kpoint.set_grid([1,1,40])
sys.pop.set_type("fd")
sys.pop.set_sigma(0.01)
center = TotalEnergy(sys)
# define the two-probe ground-state problem and solve
dev = TwoProbe(center=center, bias=0.5, transport_axis=2)
dev.set_mpi_command(mpi=f"mpiexec -n 4")
dev.left.solver.mpidist.kptprc = 4 # parallelize over k points
dev.left.solver.restart.densityPath = "left_out.h5"
dev.center.solver.restart.densityPath = "center_out.h5"
# dev.center.solver.mpidist.zptprc = 4 # parallelize over contour energy points
dev.solve()
#define the orthonormal basis vectors
base_vec = [ [-0.118915679855830, 0.316904693970085, -0.940973153721270],
[-0.857210947821695, 0.445467497858298, 0.258356535211516] ]
#define the photo-current problem and solve
sct = PhotoCurrent.from_twoprobe(dev,
polar_basis_vec = base_vec,
theta = np.pi/2, phi= np.pi/4,
elec_energy_resol = 0.01, #energy resolution for photo-transmission (the integrand)
photon_energy = 0.7)
sct.solve()
sct.plot_photo_transmission(lead="left", save_to="phot_left.json")
sct.plot_photo_transmission(lead="right", save_to="phot_right.json")
r = sct.get_response()
c = sct.get_photo_current(
flux=1.0 * ureg.watt / ureg.meter**2, # optical energy flux
mu=1.0, epsilon=1.0) # relative material permitivity and permeability
print("photo-current response coefficient:")
print(r)
print("photo-current (density):")
print(c)
structure file c8.xyz, in Cartesian coordinates
8
s x y z
C 6.00000000 6.00000000 1
C 6.00000000 6.00000000 3
C 6.00000000 6.00000000 5
C 6.00000000 6.00000000 7
C 6.00000000 6.00000000 9
C 6.00000000 6.00000000 11
C 6.00000000 6.00000000 13
C 6.00000000 6.00000000 15
On your screen, you should see the following output when the program is finished
photo-current response coefficient:
[[[-14.87261766 14.87272017]]]
photo-current (density):
[[[-0.041317034921601804 0.04131731971157402]]] ampere / meter ** 2
Both response and current are 3d-arrays, with each dimension corresponding to photon-energy, spin, and lead. In this example, the optical mode is assumed monocolor, and spin is degenerate. Therefore, the output for photo-current here should be interpreted as \(J_L = -0.041317 A / m^2 \: J_R = 0.041317 A / m^2\). The current (density) unit is \(A / m^2\) because we apply periodic boundary condition across the transversal directions of the device structure. The charge current through one single carbon chain should be calculated as \(J_{L/R}\) multiplied by the cross section area of the simulation cell.
In addition, the following figure should appear in your work directory. This figure plots \(\mathfrak{T}_R\) as a function of electronic energies.