sub_eps.f90

Go to the documentation of this file.
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!100 
00010   integer,parameter::NGL2=150!100 
00011   integer,parameter::NGL3=150!100 
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       !write(6,*) igL
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       !write(6,*) igL
00042      endif  
00043     enddo 
00044    enddo 
00045   enddo 
00046   NG_for_psi=igL 
00047   !
00048   !do igL=1,NG_for_eps 
00049   ! write(6,*) igL,LG0(:,igL)
00050   !enddo 
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)!=== not time-reversal ===    
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     !write(6,'(a,x,2i5)') 'iig jjg',iig,jjg  
00095     epsmk(ig,jg,:)=epsirr(iig,jjg,:)*pf1*pf2 
00096    enddo!jg 
00097   enddo!ig 
00098   case(-1)!=== time-reversal ===*      
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!jg 
00119   enddo!ig 
00120   end select 
00121   !
00122   !write(6,*)'finish make_eps'
00123   !
00124   return 
00125 end subroutine 

Generated on 17 Nov 2020 for respack by  doxygen 1.6.1