In ET literature, there are some Green functions plots. While these things might not be very useful, the same technique acutally presents a conventional method of obtaining the electron density of states (DOS), which might be useful for studying molecular conductance.
Poles are also important indications of physics.
Poles of a Floquet Hamiltonian represent dynamical resonance.
Poles of certain part of Hamiltonian also indicate the singularities
in the nonadiabatic coupling matrix elements.
The above subroutine can be found here.
© 2000, Qian Xie
Larsson's equation for superexchange coupling
In the nonorthogonal basis, superexchange coupling is calculated
as follows:
c---> initialize the arrays
do i = 1 , ndim
do j = 1 , ndim
ovb(i,j)=0.0
hmb(j,i)=0.0
enddo
enddo
c---> define the bridge subhamiltonian
if(idon.gt.iacc) then
id=iacc
ia=idon
else
id=idon
ia=iacc
endif
do i = 1 , nb
do j = 1 , nb
ovb(i,j)=ovlp(iold(i),jold(j))
hmb(i,j)=hami(iold(i),jold(j))
enddo
enddo
if(write) then
write(iout,*) ' The bridge subH is a ',nb,'*',nb,'matrix .'
do i = 1 , nb
write(iout,'(500f10.5)') (hmb(i,j),j=1,nb)
enddo
endif
c---> build 'ES-H'
do i = 1 , nb
do j = 1 , nb
hmes(i,j)=e*ovb(i,j)-hmb(i,j)
hinv(i,j)=0.d0
enddo
enddo
if(write) then
do i = 1 , nb
write(iout,'(500f10.5)') (hmes(i,j),j=1,nb)
enddo
endif
c---> invert (ES-H)
do i = 1 , nb
do j = 1 , nb
hinv(i,j)=0.d0
enddo
hinv(i,i)=1.d0
enddo
call ludcmp(hmes,nb,nb,indx,d)
do j = 1 , nb
call lubksb(hmes,nb,nb,indx,hinv(1,j))
enddo
if(write) then
write(iout,*)
write(iout,*) 'The inverse of bridge Hamiltonian matrix '
write(iout,*)
do i = 1 , nb
write(iout,'(500f8.3)') (hinv(i,j),j=1,nb)
enddo
endif
c---> test the matrix inversion routine by reversal
if(.not.test) go to 300
do i = 1 , nb
do j = 1 , nb
hmes(i,j)=hinv(i,j)
enddo
enddo
do i = 1 , nb
do j = 1 , nb
hinv(i,j)=0.d0
enddo
hinv(i,i)=1.d0
enddo
call ludcmp(hmes,nb,nb,indx,d)
do j = 1 , nb
call lubksb(hmes,nb,nb,indx,hinv(1,j))
enddo
write(iout,*)
write(iout,*) ' testing matrix inversion routine '
sum=0.0
do i = 1 , nb
do j = 1 , nb
sum=sum+dabs(e*ovb(i,j)-hmb(i,j)-hinv(i,j))
enddo
enddo
write(iout,*) ' Accumulating error = ', sum
if(sum.gt.1.d-8) stop ' Error in LU matrix inversion ! '
300 continue
c---> reorder the coupling between D, A and HB
do i = 1 , nb
if(idon.lt.iacc) then
vd(i)=hami(id,iold(i))-e*ovlp(id,iold(i))
va(i)=hami(ia,iold(i))-e*ovlp(ia,iold(i))
else
vd(i)=hami(ia,iold(i))-e*ovlp(ia,iold(i))
va(i)=hami(id,iold(i))-e*ovlp(id,iold(i))
endif
enddo
tda=hami(idon,iacc)
hdd=hami(idon,idon)
haa=hami(iacc,iacc)
c write(*,'(10f8.3)')(vd(i),i=1,nb)
c write(*,'(10f8.3)')(va(i),i=1,nb)
c---> Larsson's formula
do i = 1 , nb
do j = 1 , nb
tda=tda+vd(i)*hinv(i,j)*va(j)
hdd=hdd+vd(i)*hinv(i,j)*vd(j)
haa=haa+va(i)*hinv(i,j)*va(j)
enddo
enddo
write(iout,'(a5,1x,f10.5,1x,a4,1x,f20.10)')' TDA(',e,') = ',tda
write(iout,*)
write(iout,'(a)') ' Two-State Approximation'
write(iout,'(2f20.10)') hdd,tda
write(iout,'(2f20.10)') tda,haa
write(iungf,'(4f20.10)') e,tda,hdd,haa
return
end