|
|
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 小木虫(金币+0.5):给个红包,谢谢回帖交流 guifan(金币+2,VIP+0): 9-30 21:09 wuchenwf(金币+10,VIP+0):谢谢 10-1 22:36
给你一个提取t2, eg的源代码,自己编写的,有些粗糙,仅满足一般的要求,可以提取pdos,t2-eg dos以及积分。只针对考虑自选以及不考虑f电子的情况下,欢迎指正。
!initializing all parameters
!E s-up s-down py-up py-down pz-up pz-down px-up
! px-down dxy-up dxy-down dyz-up dyz-down
! dz2-up dz2-down dxz-up dxz-down dx2-up dx2-down
real*8,allocatable :: dos_matrix(:, ,integral_spdos(:, ,t2g_eg(:, ,pdos(:, ,integral_t2g_eg(:,
real*8 :: fermi,normalization,enmax,enmin,step
integer(kind=8) :: i,j,rows,columns=19,nth,iserror
character(len=8) filename
write(*,*)"please input the number of atoms "
read(*,*),nth
open(unit=11,file='DOSCAR',form='formatted',status='old',iostat=iserror)
if (iserror>0) then
write(*,*)"The DOSCAR file does not exist"
goto 200
end if
!filename= "sitedos.dat"
open(unit=12,file="SPDOS.dat",form='formatted',status='replace')
open(unit=13,file='t2g_eg.dat',form='formatted',status='replace')
open(unit=14,file='PDOS.dat',form='formatted',status='replace')
open(unit=15,file='INSPDOS.dat',form='formatted',status='replace')
open(unit=16,file='INt2g_eg.dat',form='formatted',status='replace')
write(13,*)'# E,t2g_up,t2g_dn,eg_up,eg_dn'
write(14,*)'# E,s_up,s_dn,p_up,p_dn,d_up,d_dn'
!skip iformation of start
do i=1,5
read (11,*)
end do
!read fermi energy and rows
read (11,*)enmax,enmin,rows,fermi,normalizatio
step=(enmax-enmin)/(rows-1)
allocate(dos_matrix(rows,columns))
allocate(integral_spdos(rows,columns))
allocate(t2g_eg(rows,5))
allocate(pdos(rows,7))
allocate(integral_t2g_eg(rows,5))
integral_spdos(:, =0
!skip to the nth atoms
do i= 1,(rows+1)
read(11,*)
end do
do i=1,rows
read(11,'(19E12.5)')(dos_matrix(i,j),j=1,19)
dos_matrix(i,1)=dos_matrix(i,1)-fermi
do j=3,columns
if((mod(j,2).EQ.1))then
dos_matrix(i,j)=-1*dos_matrix(i,j)
else
endif
end do
!calcualte SPDOS, write SPDOS.dat file
write(12,'(19E12.3)')(dos_matrix(i,j),j=1,19)
!calcualte DOS of t2g and eg, write t2g_eg.dat file
t2g_eg(i,1)=dos_matrix(i,1)
!initializing all parameters
!E s-up s-down py-up py-down pz-up pz-down px-up
! px-down dxy-up dxy-down dyz-up dyz-down
! dz2-up dz2-down dxz-up dxz-down dx2-up dx2-down
real*8,allocatable :: dos_matrix(:, ,integral_spdos(:, ,t2g_eg(:, ,pdos(:, ,integral_t2g_eg(:,
real*8 :: fermi,normalization,enmax,enmin,step
integer(kind=8) :: i,j,rows,columns=19,nth,iserror
character(len=8) filename
write(*,*)"please input the number of atoms "
read(*,*),nth
open(unit=11,file='DOSCAR',form='formatted',status='old',iostat=iserror)
if (iserror>0) then
write(*,*)"The DOSCAR file does not exist"
goto 200
end if
!filename= "sitedos.dat"
open(unit=12,file="SPDOS.dat",form='formatted',status='replace')
open(unit=13,file='t2g_eg.dat',form='formatted',status='replace')
open(unit=14,file='PDOS.dat',form='formatted',status='replace')
open(unit=15,file='INSPDOS.dat',form='formatted',status='replace')
open(unit=16,file='INt2g_eg.dat',form='formatted',status='replace')
write(13,*)'# E,t2g_up,t2g_dn,eg_up,eg_dn'
write(14,*)'# E,s_up,s_dn,p_up,p_dn,d_up,d_dn'
!skip iformation of start
do i=1,5
read (11,*)
end do
!read fermi energy and rows
read (11,*)enmax,enmin,rows,fermi,normalizatio
step=(enmax-enmin)/(rows-1)
allocate(dos_matrix(rows,columns))
allocate(integral_spdos(rows,columns))
allocate(t2g_eg(rows,5))
allocate(pdos(rows,7))
allocate(integral_t2g_eg(rows,5))
integral_spdos(:, =0
!skip to the nth atoms
do i= 1,(rows+1)
read(11,*)
end do
do i=1,rows
read(11,'(19E12.5)')(dos_matrix(i,j),j=1,19)
dos_matrix(i,1)=dos_matrix(i,1)-fermi
do j=3,columns
if((mod(j,2).EQ.1))then
dos_matrix(i,j)=-1*dos_matrix(i,j)
else
endif
end do
!calcualte SPDOS, write SPDOS.dat file
write(12,'(19E12.3)')(dos_matrix(i,j),j=1,19)
!calcualte DOS of t2g and eg, write t2g_eg.dat file
t2g_eg(i,1)=dos_matrix(i,1)
t2g_eg(i,2)=dos_matrix(i,10)+dos_matrix(i,12)+dos_matrix(i,16)
t2g_eg(i,3)=dos_matrix(i,11)+dos_matrix(i,13)+dos_matrix(i,17)
t2g_eg(i,4)=dos_matrix(i,14)+dos_matrix(i,18)
t2g_eg(i,5)=dos_matrix(i,15)+dos_matrix(i,19)
write(13,'(5E12.3)')(t2g_eg(i,j),j=1,5)
!calculate PDOS and write PDOS.dat
pdos(i,1)=dos_matrix(i,1)
pdos(i,2)=dos_matrix(i,2)
pdos(i,3)=dos_matrix(i,3)
pdos(i,4)=dos_matrix(i,4)+dos_matrix(i,6)+dos_matrix(i,8)
pdos(i,5)=dos_matrix(i,5)+dos_matrix(i,6)+dos_matrix(i,9)
pdos(i,6)=t2g_eg(i,2)+t2g_eg(i,4)
pdos(i,7)=t2g_eg(i,3)+t2g_eg(i,5)
write(14,'(7E12.3)')(pdos(i,j),j=1,7)
end do
write(*,*)step
!integrate SPDOS and write integral_spdos.dat
integral_spdos(:,1)=dos_matrix(:,1)
do i=2,rows
do j=2, columns
integral_spdos(i,j)=(dos_matrix(i-1,j)+dos_matrix(i,j))*step*0.5+integral_spdos(i-1,j)
end do
integral_t2g_eg(i,1)=integral_spdos(i,1)
integral_t2g_eg(i,2)=integral_spdos(i,10)+integral_spdos(i,12)+integral_spdos(i,16)
integral_t2g_eg(i,3)=integral_spdos(i,11)+integral_spdos(i,13)+integral_spdos(i,17)
integral_t2g_eg(i,4)=integral_spdos(i,14)+integral_spdos(i,18)
integral_t2g_eg(i,5)=integral_spdos(i,15)+integral_spdos(i,19)
end do
write(15,'(19F7.3)')((integral_spdos(i,j),j=1,19),i=1,rows)
write(16,'(5F7.3)')((integral_t2g_eg(i,j),j=1,5),i=1,rows)
deallocate (dos_matrix)
deallocate (integral_spdos)
deallocate (pdos)
deallocate (t2g_eg)
deallocate (integral_t2g_eg)
close (11)
close (12)
close (13)
close (14)
close (15)
close (16)
200 end |
|