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(:)
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
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
00034 enddo
00035 enddo
00036 enddo
00037 enddo
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
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
00072 wcenter_lat(i)=SUM_REAL
00073 enddo
00074 write(303,*)(wcenter_lat(i),i=1,3)
00075 enddo
00076
00077
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
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
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
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