m_wrt_model.f90

Go to the documentation of this file.
00001 module m_wrt_model  
00002   implicit none
00003 contains
00004 subroutine wrt_model_hr(Na1,Na2,Na3,n_occ,HR,WR) 
00005   implicit none 
00006   integer::Na1,Na2,Na3,n_occ 
00007   integer::N_element 
00008   integer::ia1,ia2,ia3,ib,jb,i 
00009   integer,allocatable::unit_vec(:)!unit_vec(N_element) 
00010   complex(8)::HR(n_occ,n_occ,-Na1:Na1,-Na2:Na2,-Na3:Na3)
00011   real(8)::WR(-Na1:Na1,-Na2:Na2,-Na3:Na3)
00012   real(8),parameter::au=27.21151d0
00013   !
00014   N_element=(2*Na1+1)*(2*Na2+1)*(2*Na3+1)  
00015   !
00016   !OPEN(300,W,FILE='zvo_hr.dat') 
00017   !
00018   OPEN(300,FILE='./dir-model/zvo_hr.dat') 
00019   write(300,'(a)')'wannier90 format for vmcdry.out or HPhi -sdry'
00020   write(300,'(i10)') n_occ
00021   write(300,'(i10)') N_element
00022   !
00023   allocate(unit_vec(N_element)); unit_vec=1
00024   write(300,'(15i5)')(unit_vec(i),i=1,N_element) 
00025   deallocate(unit_vec) 
00026   !
00027   do ia1=-Na1,Na1
00028    do ia2=-Na2,Na2
00029     do ia3=-Na3,Na3 
00030      do ib=1,n_occ
00031       do jb=1,n_occ
00032        write(300,'(i5,i5,i5,i5,i5,2f15.10)') ia1,ia2,ia3,ib,jb,HR(ib,jb,ia1,ia2,ia3)*WR(ia1,ia2,ia3)*au   
00033       enddo!jb
00034      enddo!ib
00035     enddo!ia3
00036    enddo!ia2
00037   enddo!ia1 
00038   return
00039 end subroutine wrt_model_hr 
00040 !
00041 subroutine wrt_model_wcenter(n_occ,a1,a2,a3,wcenter)
00042   implicit none 
00043   integer::n_occ 
00044   real(8)::a1(3),a2(3),a3(3),wcenter(3,n_occ) 
00045   real(8)::ainv(3,3)
00046   integer::ib,i,j
00047   real(8)::wcenter_lat(3) 
00048   real(8)::SUM_REAL
00049   real(8),parameter::bohr=0.529177249d0 
00050   integer,parameter::unity=1 
00051   !
00052   ainv(:,1)=a1(:)
00053   ainv(:,2)=a2(:)
00054   ainv(:,3)=a3(:)
00055   !
00056   call inv_amat(3,ainv(1,1)) 
00057   !
00058   !OPEN(303,W,FILE='zvo_geom.dat') 
00059   !
00060   OPEN(303,FILE='./dir-model/zvo_geom.dat') 
00061   write(303,'(3f15.10)')(a1(i)*bohr,i=1,3) 
00062   write(303,'(3f15.10)')(a2(i)*bohr,i=1,3) 
00063   write(303,'(3f15.10)')(a3(i)*bohr,i=1,3) 
00064   write(303,'(i10)') n_occ
00065   do ib=1,n_occ 
00066    wcenter_lat=0.0d0 
00067    do i=1,3
00068     SUM_REAL=0.0d0 
00069     do j=1,3
00070      SUM_REAL=SUM_REAL+ainv(i,j)*wcenter(j,ib) 
00071     enddo!j 
00072     wcenter_lat(i)=SUM_REAL
00073    enddo!i
00074    write(303,*)(wcenter_lat(i),i=1,3) 
00075   enddo 
00076   !
00077   !OPEN(307,W,FILE='zvo_geom.xsf') 
00078   !
00079   OPEN(307,FILE='./dir-model/zvo_geom.xsf') 
00080   write(307,'(a10)')'CRYSTAL'
00081   write(307,'(a10)')'PRIMVEC'
00082   write(307,'(3f15.10)')(a1(i)*bohr,i=1,3)  
00083   write(307,'(3f15.10)')(a2(i)*bohr,i=1,3)  
00084   write(307,'(3f15.10)')(a3(i)*bohr,i=1,3)  
00085   write(307,'(a10)')'PRIMCOORD'
00086   write(307,'(2i10)') n_occ,unity 
00087   do ib=1,n_occ
00088    write(307,'(a5,3f15.10)')' H ',(wcenter(j,ib)*bohr,j=1,3)
00089   enddo 
00090   !
00091   return
00092 end subroutine wrt_model_wcenter 
00093 !
00094 subroutine wrt_model_SK_BAND_DISP(Ndiv,N_sym_points,NSK_BAND_DISP,SK_BAND_DISP) 
00095   implicit none 
00096   integer,intent(in)::Ndiv,N_sym_points,NSK_BAND_DISP
00097   real(8),intent(in)::SK_BAND_DISP(3,NSK_BAND_DISP) 
00098   integer::ik,i 
00099   !
00100   !OPEN(304,W,FILE='zvo_bandkpts.dat') 
00101   !
00102   OPEN(304,FILE='./dir-model/zvo_bandkpts.dat') 
00103   write(304,'(3i10)') NSK_BAND_DISP,Ndiv,N_sym_points 
00104   do ik=1,NSK_BAND_DISP
00105    write(304,*)(SK_BAND_DISP(i,ik),i=1,3) 
00106   enddo 
00107   return
00108 end subroutine wrt_model_SK_BAND_DISP 
00109 !
00110 subroutine wrt_model_SK0(NTK,SK0)
00111   implicit none 
00112   integer,intent(in)::NTK 
00113   real(8),intent(in)::SK0(3,NTK) 
00114   integer::ik,i 
00115   !
00116   !OPEN(305,W,FILE='zvo_mkkpts.dat') 
00117   !
00118   OPEN(305,FILE='./dir-model/zvo_mkkpts.dat') 
00119   write(305,'(i10)') NTK 
00120   do ik=1,NTK 
00121    write(305,*)(SK0(i,ik),i=1,3) 
00122   enddo 
00123   return
00124 end subroutine wrt_model_SK0 
00125 !
00126 subroutine wrt_model_ef(FermiEnergy) 
00127   implicit none 
00128   real(8),intent(in)::FermiEnergy 
00129   !
00130   !OPEN(306,W,FILE='zvo_ef.dat') 
00131   !
00132   OPEN(306,FILE='./dir-model/zvo_ef.dat') 
00133   write(306,'(f15.10)') FermiEnergy 
00134   return 
00135 end subroutine wrt_model_ef 
00136 !
00137 subroutine inv_amat(nm,mat)
00138   implicit none 
00139   integer,intent(in)::nm
00140   real(8),intent(inout)::mat(nm,nm)
00141   integer::ipiv(nm)
00142   integer::Lwork 
00143   real(8),allocatable::work(:)
00144   integer::info 
00145   Lwork=10*nm
00146   allocate(work(Lwork))
00147   info=0
00148   call dgetrf(nm,nm,mat,nm,ipiv,info)
00149   call dgetri(nm,mat,nm,ipiv,work,Lwork,info)
00150   if(info/=0) then
00151   write(6,*) 'info (subrouitine inv):',info
00152   stop
00153   endif 
00154   deallocate(work)
00155   return 
00156 end subroutine inv_amat 
00157 !
00158 end module m_wrt_model 

Generated on 17 Nov 2020 for respack by  doxygen 1.6.1