Eigenchannels and current density: Ver. 1.0

Mitsuaki Kawamura, ISSP

Date: February 10, 2016

Definitions

• : orthogonal basis
• : non-orthogonal basis
• : The Hamiltonian in orthogonal basis representation (-dimension)

 (1)
where is the Hamiltonian in the real space representation.
• : The Kohn-Sham orbital in orthogonal basis representation
• : The Kohn-Sham energy. The Kohn-Sham equation becomes

in the orthogonal basis representation.
• : The Hamiltonian in non-orthogonal basis representation (-dimension)

 (3)

• : The Kohn-Sham orbital in non-orthogonal basis representation
• : The overlap matrix

 (4)

The Kohn-Sham equation becomes

in the non-orthogonal basis representation.
• : The eigenvalue of the overlap matrix.
• : The eigenvector of the overlap matrix.

 (6)

• : Green functions of the central (device) region in orthogonal basis representation

• : Linewidths calculated as follows:

 (7)

where are the self energy coming from leads.

Löwdin orthogonalization

In this section, the Löwdin orthogonalization method is explained; this method is used in the calculations of the Kohn-Sham energy/orbital, the Green's function, the transmission matrix, the eigenchannel, etc. in the non-orthogonal basis representation.

Kohn-Sham equation

In this section, we obtain the Kohn-Sham equation in the orthogonal basis representation [Eq. (2)] from that equation in the non-orthogonal representation [Eq. (5)].

We decompose the overlap matrix as

 (8)

where is a matrix () as

 (9)

The Kohn-Sham equation in the non-orthogonal basis representation [Eq. (5)] becomes

where

 (11)

Comparing Eq. (10) and the Kohn-Sham equation in the orthogonal basis representation [Eq. (2)], we obtain

 (12) (13)

We can calculate Kohn-Sham orbitals in the non-orthogonal basis representation from those in the orthogonal basis representation as follows:

Non-orthogonal basis and orthogonal basis

From (14), we can see the orthogonal basis becomes

If we have a enough number of orthogonal basis, the transformation from a matrix in the real space representation to that in the orthogonal basis representation

 (16)

is considered as a unitary transformation. In this case we can perform the inversion of this matrix in the orthogonal basis space. Therefore the inversion of this matrix in the orthogonal basis space is identical to the orthogonal basis representation of the inversion of this matrix in the real space:

 (17)

On the other hand, in general, inversion of this matrix in the orthogonal basis space is different from the non-orthogonal basis representation of the inversion of this matrix in the real space:

 (18)

Green's function and self energy

The Green's function of the Kohn-Sham equation in the non-orthogonal basis space [Eq. (5)] is as follows

According to the discussion in the previous section, this Green's function is different from the non-orthogonal basis representation of the Green function of the real-space Kohn-Sham equation, i.e.

 (20)

We can obtain the Green's function of the orthogonal basis-space Kohn-Sham equation [Eq. (2)] from above as follows:

We can obtain the self energy for the orthogonal basis-space Green's function from the self energy for

 (22)

by using the transformation identical to that for the Hamiltonian [Eq. (12)].

The device Green's function and linewidths in the orthogonal basis space ( ) can be obtained by using those calculated from the Hamiltonian in the non-orthogonal basis space ( ) as follows:

 (23) (24)

These transformations can be established by using cancellation of intermediate and .

Transmission matrix

In this section, we obtain the orthogonal basis representation of the transmission matrix

(where ) by using the device Green's function and linewidths obtained from the Hamiltonian in the non-orthogonal basis space. It is performed as follows:

 (26) (27)

Eigenchannels

In this section, we explain the energy normalized eigenchannel proposed in Ref. [1]. The eigenchannel in the orthogonal basis representation and the corresponding eigenvalue are calculated as follows:

 (28)

where is obtained as follows:

 (29)

We defined .

The eigenchannel in the non-orthogonal basis representation is obtained in the same way to the Kohn-Sham orbital [Eq. (14)];

 (30)

The eigenchannel in the real space representation is calculated as follows:

 (31)

Because is not an Hermite matrix, eigenchannels are not orthogonal in each other, i.e. even if ,

 (32)

On the othe hand, are orthogonal in each other,

 (33)

because is an Hermite matrix.

Current density

In this section, we explain a method to calculate the current density together with the non-local potential which appears in the Hybrid DFT calculation, non-local pseudopotentials, etc. This method is proposed in Ref. [2]. In this case, we have to consider both the local- and the non-local contributions to the current density as follows [Eqn. (9) in Ref. [2]]:

Local term

The first term in Eq. (34) is the local term; this term is calculated as follows [Eqs. (12) and (22) in Ref. [2]]:

 (35) (36)

where ( is the electronic temperature), and

 (37)

where , and is a positive infinitesimal.

In the orthogonal basis representation, becomes as follows:

 (38)

where

 (39)

Finally, we can obtain the following non-orthogonal representation by using Eq. (15).

 (40)

where .

Non-local term

The second term in Eq. (34) is the non-local term; this term is calculated as follows [Eqs. (10) and (11) in Ref. [2]]:

 (41) (42)

where the source of non-local current () is calculated as follows [Eqn. (23) in Ref. [2]]:

 (43) (44) (45)

where

 (46)

and

 (47)

Boundary conditions of the Poisson equation

The Poisson equation (42) is solved under the following boundary conditions:

• For directions perpendicular to the conducting direction, a two dimensional periodic boundary condition is applied.
• For the conducting direction, we apply the Neumann's boundary condition,

 (48) (49)

Although there is a study in which and are assumed to be 0[3], we employ the following method [2] to calculate because this method forces the total current to be identical in the boundary.

From the Eq. (34), we obtain

 (50) (51)

where we obtain and with the help of the Landauer-Büttiker formula as follows [Eqn. (25) in Ref. [2]]:

Left boundary

 (52) (53)

Right Boundary

 (54) (55)

Spin-current density

We can calculate the spin/charge current density together with a collinear magnetism. In this case, first we calculate separately contributions to in Eq. (34) from each spin ( and )

 (56)

we calculate the spin/charge current density by using these spin dependent currents as follows

 (57) (58)

-inversion symmetry

In these calculations, we can use the following -inversion symmetries:

 (59) (60) (61) (62)

Non-collinear spin-current density

When we consider the non-collinear magnetization, we calculate the diagonal and the off-diagonal part as follows:

 (63) (64) (65) (66) (67)

The Poisson equation for is written as follows:

 (68) (69) (70) (71) (72)

Implementation

These calculations are performed as that represented in Fig. 1.

We explain functions in the call graph (Fig. 2) as follows:

Functions in TRAN_Main_Analysis.c

• void MTRAN_Set_MP(int job, int atomnum, int WhatSpecies[atomnum+1],
int &sstarf#star;Spe_Total_CNO[atomnum+1], int &sstarf#star;NUM, output, int MP[atomnum+1]);

Set the first index of each atoms in the basis space.

Functions in TRAN_Channel_Functions.c

void TRAN_Calc_Diagonalize(int n, dcomplex evec[n*n], double eval[n],
int lscale)

Diagonalize matrix evec and replace it with its eigenvectors. If lscale=1, eigenvectors are scaled by a fuctor sqrt(eval[i]).

int TRAN_Calc_OrtSpace(int NUM_c, dcomplex SCC[NUM_c * NUM_c],
dcomplex rtS[NUM_c * NUM_c], dcomplex rtSinv[NUM_c * NUM_c])

Compute (rtS) and (rtSinv) from (SCC). This function returns the number of the orthogonal basis; it becomes smaller that the number of the non-orthogonal basis(NUM_c).

void TRAN_Calc_Linewidth(int NUM_c, dcomplex SigmaL_R[NUM_c * NUM_c], dcomplex SigmaR_R[NUM_c * NUM_c])

Compute .

void TRAN_Calc_MatTrans(int NUM_c, dcomplex SigmaL_R[NUM_c * NUM_c], dcomplex GC_R[NUM_c * NUM_c], char* trans1, char* trans2)

Compute .

void TRAN_Calc_LowdinOrt( int NUM_c, dcomplex SigmaL_R[NUM_c * NUM_c], dcomplex SigmaR_R[NUM_c * NUM_c],
int NUM_cs, dcomplex rtS[NUM_c * NUM_c], dcomplex rtSinv[NUM_c * NUM_c],
dcomplex ALbar[NUM_cs * NUM_cs], dcomplex GamRbar[NUM_cs * NUM_cs])

Perform the Löwdin orthogonalization of and .

void TRAN_Calc_ChannelLCAO(int NUM_c, int NUM_cs,
dcomplex rtSinv[NUM_c * NUM_c], dcomplex ALbar[NUM_cs * NUM_cs],
dcomplex GamRbar[NUM_cs * NUM_cs], double eval[NUM_cs],
dcomplex GC_R[NUM_c * NUM_c], int TRAN_Channel_Num,
dcomplex EChannel[TRAN_Channel_Num][NUM_c],
double eigentrans[TRAN_Channel_Num])

Transform Eigenchannel in the orthogonalized basis space into that in the non-orthogonalized basis space.

Functions in TRAN_Channel_Output.c

static void Print_CubeTitle_EigenChannel( FILE *fp,
double TRAN_Channel_kpoint[2], double TRAN_Channel_energy, double eigentrans, int ispin)
static void Print_CubeTitle_EigenChannel_Bin( FILE *fp,
double TRAN_Channel_kpoint[2], double TRAN_Channel_energy, double eigentrans, int ispin)

Output the comment, atomic positions, the number of grid, and the grid offset to a .cube or a .cube.bin file.

void TRAN_Output_ChannelLCAO( int myid0, int kloop, int iw, int ispin,
int NUM_c, double TRAN_Channel_kpoint[2], double TRAN_Channel_energy,
double eval[NUM_c], dcomplex GC_R[NUM_c * NUM_c],
double eigentrans_sum[TRAN_Channel_Nenergy][SpinP_switch+1])

Output eigenchannels as a LCAO coefficient.

TRAN_Output_ChannelCube( int kloop, int iw, int ispin, int orbit,
int NUM_c, double *TRAN_Channel_kpoint, dcomplex EChannel[NUM_c],
int MP[atomnum], double eigentrans, double TRAN_Channel_energy)

Output eigenchannels as a real-space .cube format.

void TRAN_Output_eigentrans_sum( int TRAN_Channel_Nkpoint,
int TRAN_Channel_Nenergy,
double eigentrans_sum[TRAN_Channel_Nkpoint][TRAN_Channel_Nenergy])

Output the sum of transmission eigenvalues in each and energy.

Functions in TRAN_Calc_CurrentDensity.c

void TRAN_Calc_Sinv( int NUM_c, dcomplex SCC[NUM_c * NUM_c],
dcomplex Sinv[NUM_c * NUM_c])

Compute .

void TRAN_Calc_CurrentDensity( int NUM_c, dcomplex GC[NUM_c * NUM_c],
dcomplex GammaL[NUM_c * NUM_c], dcomplex GammaR[NUM_c * NUM_c],
dcomplex VCC[NUM_c * NUM_c], dcomplex Sinv[NUM_c * NUM_c], double kvec[2],
double fL, double fR, double Tran_current_energy_step,
double JLocSym[2][NUM_c][NUM_c], double JLocAsym[NUM_c][NUM_c],
double RhoNL[NUM_c][NUM_c], double Jmat[2] )

void TRAN_Calc_CurrentDensity_NC( int NUM_c, dcomplex GC[NUM_c * NUM_c],
dcomplex GammaL[NUM_c * NUM_c], dcomplex GammaR[NUM_c * NUM_c],
dcomplex VCC[NUM_c * NUM_c], dcomplex Sinv[NUM_c * NUM_c], double kvec[2],
double fL, double fR, double Tran_current_energy_step,
double JLocSym[4][2][NUM_c * NUM_c], double JLocAsym4[4][NUM_c * NUM_c],
double RhoNL[4][NUM_c * NUM_c], double Jmat[4][2][NUM_c * NUM_c] )

Compute the contribution from each , energy component to the currentdensity.

Functions in TRAN_Cden_Main.c

static double TRAN_Calc_Orb2Real( int NUM_c, int MP[atomnum],
double JOrb[NUM_c][NUM_c], double JReal[TNumGrid], dcomplex SCC[NUM_c * NUM_c])

Compute .

static void TRAN_Current_dOrb(int NUM_c, int *MP, double JSym[2][NUM_c][NUM_c], double JASym[NUM_c][NUM_c], double JReal[3][TNumGrid])

Compute .

static void TRAN_Integrate1D(double Jmat[2][TNumGrid],
dcomplex Jbound[2][Ngrid2*Ngrid3], double Current[TNumGrid])

Compute partial trace for for the boundary current.

static void TRAN_Current_Boundary(dcomplex JBound[2][Ngrid2*Ngrid3])

Perform the Fourier transform of the boundary current.

static void FFT2D_CurrentDensity(double ReRhok[My_Max_NumGridB],
double ImRhok[My_Max_NumGridB])

Perform 2D-FFT of into the reciplocal space.

static void TRAN_Poisson_Current(double Rho[TNumGrid],
dcomplex Jbound[2][Ngrid2*Ngrid3])

Solve the Poisson equation for .

double Current[3][TNumGrid])

Sum the local- and non-local part of the currentdensity.

static void TRAN_Current_Spin(double CDensity[SpinP_switch + 1][3][TNumGrid])

Compute the charge- and the spin currentdensities from the each spin components of the currentdensity.

static void TRAN_Voronoi_CDEN(double CDensity[SpinP_switch + 1][3][TNumGrid], int TRAN_OffDiagonalCurrent)

Perform the Voronoianalysis of the currentdensity and output it.

Bibliography

1
M. Paulsson and M. Brandbyge, Phys. Rev. B 76, 115117 (2007).

2
C. Li, L. Wan, Y. Wei, and J. Wang, Nanotechnology 19, 155401 (2008).

3
L. Zhang, B. Wang, and J. Wang, Phys. Rev. B 84, 115412 (2011).

2016-02-10