00001 subroutine det_shift(NTK,NWF,nsgm,FermiEnergy,sgmw,EKS,EMK,shift_value)
00002 implicit none
00003 integer::NTK,NWF,nsgm
00004 real(8)::FermiEnergy
00005 real(8)::sgmw(nsgm)
00006 complex(8)::EMK(NWF,NTK,nsgm)
00007 real(8)::EKS(NWF,NTK)
00008 integer::min_ib,min_ik,min_ie
00009 real(8)::min_diff,min_eak,diff_ie,diff_ef
00010 integer::ik,ib,ie
00011 real(8)::shift_value
00012 real(8),parameter::au=27.21151d0
00013
00014 min_diff=1.0d0
00015 do ik=1,NTK
00016 do ib=1,NWF
00017 diff_ef=dabs(EKS(ib,ik)-FermiEnergy)
00018 if(diff_ef<min_diff)then
00019 min_diff=diff_ef
00020 min_eak=EKS(ib,ik)
00021 min_ib=ib
00022 min_ik=ik
00023 endif
00024 enddo
00025 enddo
00026
00027 min_diff=0.1d0
00028 do ie=1,nsgm
00029 diff_ie=abs(sgmw(ie)-min_eak)
00030 if(diff_ie<min_diff)then
00031 min_diff=diff_ie
00032 min_ie=ie
00033 endif
00034
00035 enddo
00036 shift_value=dble(EMK(min_ib,min_ik,min_ie))-EKS(min_ib,min_ik)
00037
00038 write(6,*)'min_ib= ',min_ib
00039 write(6,*)'min_ik= ',min_ik
00040 write(6,*)'min_ie= ',min_ie
00041 write(6,*)'closest EKS(eV)=',EKS(min_ib,min_ik)*au
00042 write(6,*)'closest sgmw(eV)=',sgmw(min_ie)*au
00043 write(6,*)'FermiEnergy(eV)=',FermiEnergy*au
00044 write(6,*)'shift(eV)=',shift_value*au
00045
00046 return
00047 end