00001 subroutine make_LG0(NTG,b1,b2,b3,Gcut_for_eps,Gcut_for_psi,q1,q2,q3,LG0,NG_for_eps,NG_for_psi)
00002 implicit none
00003 integer::NTG,igL,igL1,igL2,igL3
00004 integer::NG_for_eps,NG_for_psi
00005 integer::LG0(3,NTG)
00006 real(8)::b1(3),b2(3),b3(3)
00007 real(8)::Gcut_for_eps,Gcut_for_psi
00008 real(8)::q1,q2,q3,qgL2,qgL(3)
00009 integer,parameter::NGL1=150
00010 integer,parameter::NGL2=150
00011 integer,parameter::NGL3=150
00012
00013 igL=0
00014 do igL1=-NGL1,NGL1
00015 do igL2=-NGL2,NGL2
00016 do igL3=-NGL3,NGL3
00017 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
00018 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00019 if(qgL2<=Gcut_for_eps)then
00020 igL=igL+1
00021 LG0(1,igL)=igL1
00022 LG0(2,igL)=igL2
00023 LG0(3,igL)=igL3
00024
00025 endif
00026 enddo
00027 enddo
00028 enddo
00029 NG_for_eps=igL
00030
00031 do igL1=-NGL1,NGL1
00032 do igL2=-NGL2,NGL2
00033 do igL3=-NGL3,NGL3
00034 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
00035 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00036 if(qgL2>Gcut_for_eps.and.qgL2<=Gcut_for_psi)then
00037 igL=igL+1
00038 LG0(1,igL)=igL1
00039 LG0(2,igL)=igL2
00040 LG0(3,igL)=igL3
00041
00042 endif
00043 enddo
00044 enddo
00045 enddo
00046 NG_for_psi=igL
00047
00048
00049
00050
00051
00052 RETURN
00053 END subroutine
00054
00055 subroutine make_eps(NTG,NTGQ,ne,itrs,NG,LGtmp,RWtmp,rginvtmp,pgtmp,nnp,L1,L2,L3,packtmp,epsirr,epsmk)
00056 implicit none
00057 integer::NTG,NTGQ,itrs,NG,ne,L1,L2,L3,nnp
00058 integer::LGtmp(3,NTG)
00059 integer::RWtmp(3)
00060 real(8)::rginvtmp(3,3)
00061 integer::pgtmp(3)
00062 integer::packtmp(-L1:L1,-L2:L2,-L3:L3)
00063 complex(4)::epsirr(NTGQ,NTGQ,ne)
00064 integer::ig,jg,i1,i2,i3,j1,j2,j3,k1,k2,k3,iig,jjg
00065 real(8)::phase
00066 complex(8)::pf1,pf2
00067 complex(4)::epsmk(NTGQ,NTGQ,ne)
00068
00069 real(8),parameter::pi=dacos(-1.0d0)
00070 real(8),parameter::tpi=2.0d0*pi
00071 complex(8),parameter::ci=(0.0D0,1.0D0)
00072
00073 epsmk(:,:,:)=0.0d0
00074 select case(itrs)
00075 case(1)
00076 do ig=1,NG
00077 i1=LGtmp(1,ig); j1=LGtmp(2,ig); k1=LGtmp(3,ig)
00078 i2=i1+RWtmp(1); j2=j1+RWtmp(2); k2=k1+RWtmp(3)
00079 i3=int(rginvtmp(1,1))*i2+int(rginvtmp(1,2))*j2+int(rginvtmp(1,3))*k2
00080 j3=int(rginvtmp(2,1))*i2+int(rginvtmp(2,2))*j2+int(rginvtmp(2,3))*k2
00081 k3=int(rginvtmp(3,1))*i2+int(rginvtmp(3,2))*j2+int(rginvtmp(3,3))*k2
00082 iig=packtmp(i3,j3,k3)
00083 phase=tpi*(dble(i1)*dble(pgtmp(1))+dble(j1)*dble(pgtmp(2))+dble(k1)*dble(pgtmp(3)))
00084 pf1=exp(-ci*phase/dble(nnp))
00085 do jg=1,NG
00086 i1=LGtmp(1,jg); j1=LGtmp(2,jg); k1=LGtmp(3,jg)
00087 i2=i1+RWtmp(1); j2=j1+RWtmp(2); k2=k1+RWtmp(3)
00088 i3=int(rginvtmp(1,1))*i2+int(rginvtmp(1,2))*j2+int(rginvtmp(1,3))*k2
00089 j3=int(rginvtmp(2,1))*i2+int(rginvtmp(2,2))*j2+int(rginvtmp(2,3))*k2
00090 k3=int(rginvtmp(3,1))*i2+int(rginvtmp(3,2))*j2+int(rginvtmp(3,3))*k2
00091 jjg=packtmp(i3,j3,k3)
00092 phase=tpi*(dble(i1)*dble(pgtmp(1))+dble(j1)*dble(pgtmp(2))+dble(k1)*dble(pgtmp(3)))
00093 pf2=exp(ci*phase/dble(nnp))
00094
00095 epsmk(ig,jg,:)=epsirr(iig,jjg,:)*pf1*pf2
00096 enddo
00097 enddo
00098 case(-1)
00099 do ig=1,NG
00100 i1=-LGtmp(1,ig); j1=-LGtmp(2,ig); k1=-LGtmp(3,ig)
00101 i2=i1+RWtmp(1); j2=j1+RWtmp(2); k2=k1+RWtmp(3)
00102 i3=int(rginvtmp(1,1))*i2+int(rginvtmp(1,2))*j2+int(rginvtmp(1,3))*k2
00103 j3=int(rginvtmp(2,1))*i2+int(rginvtmp(2,2))*j2+int(rginvtmp(2,3))*k2
00104 k3=int(rginvtmp(3,1))*i2+int(rginvtmp(3,2))*j2+int(rginvtmp(3,3))*k2
00105 iig=packtmp(i3,j3,k3)
00106 phase=tpi*(dble(i1)*dble(pgtmp(1))+dble(j1)*dble(pgtmp(2))+dble(k1)*dble(pgtmp(3)))
00107 pf1=exp(-ci*phase/dble(nnp))
00108 do jg=1,NG
00109 i1=-LGtmp(1,jg); j1=-LGtmp(2,jg); k1=-LGtmp(3,jg)
00110 i2=i1+RWtmp(1); j2=j1+RWtmp(2); k2=k1+RWtmp(3)
00111 i3=int(rginvtmp(1,1))*i2+int(rginvtmp(1,2))*j2+int(rginvtmp(1,3))*k2
00112 j3=int(rginvtmp(2,1))*i2+int(rginvtmp(2,2))*j2+int(rginvtmp(2,3))*k2
00113 k3=int(rginvtmp(3,1))*i2+int(rginvtmp(3,2))*j2+int(rginvtmp(3,3))*k2
00114 jjg=packtmp(i3,j3,k3)
00115 phase=tpi*(dble(i1)*dble(pgtmp(1))+dble(j1)*dble(pgtmp(2))+dble(k1)*dble(pgtmp(3)))
00116 pf2=exp(ci*phase/dble(nnp))
00117 epsmk(ig,jg,:)=epsirr(jjg,iig,:)*pf1*pf2
00118 enddo
00119 enddo
00120 end select
00121
00122
00123
00124 return
00125 end subroutine