I am working on the charge transport calculation, based on the non-equilibrium green function method, for the Hamiltonian with the non-orthogonal basis. Suppose $H$ and $S$ are the Kohn-Sham Hamiltonian and overlap matrice respectively. I want to calculate the transport conductance for the following equation. $$I=\frac{e_{0}}{\hbar}\int\frac{dE}{2\pi}Tr[{\Sigma}_{\textrm{left}}G^{R}{\Sigma}_{right}G^{A}][n_L(E)-n_R(E)]$$ ${\Sigma}_{left}$ and ${\Sigma}_{right}$ are the self energy for left and right leads; $G^{R}$ and $G^{A}$ are retarded and advanced green function for the scattering zone and they are written as the following equation. $$G^{R}=\left[(i+\varepsilon_{Fermi}) \times S - H - ({\Sigma}_{left}+{\Sigma}_{right}) \right]^{-1}$$.

I cannot compute the trace through multipling ${\Sigma}_{left}G^{R}{\Sigma}_{right}G^{A}$ with the eigen vector because I only have the eigen vector for the whole system; not for the scattering zone.

This is why I need to compute the inverse matrix. I am trying to use ZGETRF and ZGETRI subroutines in the MKL library to compute it; however, I find that ZGETRF function, the LU fraction subroutine, gives matrix with zero value on the diagonal part and this makes the following inverse matrix calculation fails with ZGETRI function.

When doing the coding for the non-equilibrium green function (NEGF) method, how does one compute such matrix for the non-orthogonal Hamiltonian system? Is there any subroutine to compute the inverse matrix of the complex matrix? Would anyone please give me some hints?

Thank you in advance.

  • $\begingroup$ Are you using Fortran? then try this fortranwiki.org/fortran/show/Matrix+inversion $\endgroup$
    – S R Maiti
    May 8, 2023 at 16:36
  • $\begingroup$ Do you need the actual matrix? If you just need to multiply it with some vector, I imagine ZSYSV would suffice. $\endgroup$ May 8, 2023 at 21:36
  • 1
    $\begingroup$ @S R Maiti Thank you for the suggestion. I am indeed using FORTRAN. I viewed the link you provide. DGETRF and DGETRI are for the inverse matrix calculation for the matrix with double precision. In my case, I am computing the inverse matrix for the complex matrix so I used ZGETRF and ZGETRI functions but I find that some diagonal term are zero after ZGETRF function and this makes ZGETRI function fails. Would you please provide more suggestions? Thank you. $\endgroup$
    – Kieran
    May 8, 2023 at 22:50
  • $\begingroup$ @Shern Ren Tee Thank you for the suggestion. I cannot directly multiply the matrix with the eigen vector. I modified my question in the poster. Would you please have a look at it again and give me some more suggestions on how to deal with such calculation in the coding? $\endgroup$
    – Kieran
    May 8, 2023 at 22:52
  • 2
    $\begingroup$ Don't calculate the eigenspectrum, it makes no sense here since you really want to calculate the Green function, even at the eigenvalues! $\endgroup$
    – nickpapior
    May 9, 2023 at 7:29

1 Answer 1


This sounds like you are doing something wrong.

Even in a non-orthogonal basis the diagonal $\mathbf S$ matrix has the identity matrix in the diagonal.

There could be a number of reasons why this occurs:

  1. Your basis set orbitals are too close together resulting in a singular matrix (non-invertible)
  2. your imaginary part $\eta$ is too small, or even non-existing. The whole reason for the imaginary part is that one makes the matrix invertible since the energy value will surely not hit an eigenvalue of the system.

Others have noted that calculating the eigenspectrum is the way to go, but as the OP says, this is an open system and calculating the eigenspectrum in this, infinite, open system is too costly compared to the inversion. Hence one will always calculate the inverse like this. Additionally the imaginary part would/should cause the matrix to be non-singular.

It is hard to know what is causing this since we don't know the full details of your code, calling convention etc.

  • $\begingroup$ Thank you very much for your suggestions with details. I posted my own understanding of how to compute the charge conductance based on non-equilibirum green functiono (NEGF) method in the physics stack overflow section, with the following link (physics.stackexchange.com/questions/761981/…). Would you please help me check whether my understanding of the calculation procedure is correct or not? $\endgroup$
    – Kieran
    May 9, 2023 at 19:38
  • $\begingroup$ If my understanding of the calculation procedure is correct, I think the reason why my calculation of the inverse matrix failed is because the central scattering zone was not chosen correctly and the interaction (off-diagonal term) between scattering zone and the second nearest principle layer is not zero. $\endgroup$
    – Kieran
    May 9, 2023 at 19:42
  • $\begingroup$ Regarding my coding, I also posted it in the stack overflow section with the following link (stackoverflow.com/questions/76193678/…). It is a little bit long. I would really appreciate that you could give me some more comments on it. $\endgroup$
    – Kieran
    May 9, 2023 at 19:44
  • $\begingroup$ You should be able to calculate the Green function, even when there are zeros in the off-diagonal terms. I am sorry I can't help with your code. But I think you are missing the imaginary part. $\endgroup$
    – nickpapior
    May 10, 2023 at 9:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .