Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
debug complete
Browse files Browse the repository at this point in the history
  • Loading branch information
Young-Woo Choe committed May 9, 2016
1 parent 6e79bb9 commit c9c65b0
Show file tree
Hide file tree
Showing 22 changed files with 367 additions and 399 deletions.
Binary file modified .DS_Store
Binary file not shown.
10 changes: 4 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ include arch.make
DMFT_OBJS = fft.o frprmn.o ed_io.o ed_solver.o ed_config.o ed_hamiltonian.o ed_utils.o ed_basis.o ed_operators.o func.o \
ed_green.o ed_lanczos.o dos.o

MOD_OBJS = sys.o parallel_params.o precision.o timer.o timestamp2.o ionew.o
MOD_OBJS = sys.o parallel_params.o timer.o timestamp2.o ionew.o
OBJS = bsd.o main.o $(DMFT_OBJS)

COM_OBJS=$(OBJS) $(SYSOBJ)
Expand All @@ -22,7 +22,7 @@ ALL_OBJS=$(MOD_OBJS) $(COM_OBJS)
### FDF Module ###
##################
FDF=libfdf.a
$(FDF):
$(FDF):
(cd fdf ; $(MAKE) "VPATH=$(VPATH)/fdf" \
"FPPFLAGS=$(FPPFLAGS)" module )

Expand All @@ -35,14 +35,12 @@ ed_solver.o: ed_utils.o ed_hamiltonian.o ed_io.o
ed_hamiltonian.o: ed_utils.o ed_basis.o ed_operators.o
timer.o: ionew.o
main: $(FDF) $(ALL_OBJS)
$(FC) -o main.x $(LDFLAGS) $(ALL_OBJS) $(FDF) $(LIBS)
$(FC) -o main.x $(LDFLAGS) $(ALL_OBJS) $(FDF) $(LIBS)
#
clean:
clean:
@echo "==> Cleaning object, library, and executable files"
rm -f main *.o *.a
rm -f *.mod
(cd fdf ; $(MAKE) clean)
#
%.o:%.mod


176 changes: 97 additions & 79 deletions dos.f90
Original file line number Diff line number Diff line change
@@ -1,88 +1,106 @@
subroutine dos(Nstep,Norb,small,Nw,omega_real,nev_calc,&
Aff)
implicit none


double precision small,dw,Z
integer:: Norb,Nstep,nev_calc,nw,ishift,io,itmp,k,i
double precision::omega_real(nw),pev(nev_calc),E0
double precision::Aff(Norb,nw),Aff_tmp(Norb,nw),factor
double precision:: ap(0:Nstep),bp(0:Nstep),an(0:Nstep),bn(0:Nstep)
logical even

write(6,*)
write(6,*) "************* SPECTRAL FUNCTION CALCULATION &
**************"
write(6,*)

Aff(:,:) = 0.D0
Aff_tmp(:,:) = 0.D0

open(unit=11,file="apbpanbn.dat",form="unformatted")

do i = 1, nev_calc
! Diagonal component
do io = 1, Norb
read(11) itmp,itmp,E0,pev(i),even,&
(ap(k),k=0,Nstep),(bp(k),k=0,Nstep), &
(an(k),k=0,Nstep),(bn(k),k=0,Nstep)

call dos_diag(Nstep,Norb,Nw,io,Aff_tmp,omega_real,E0,&
small,ap,bp,an,bn)
enddo
factor = 0.5D0
if(even) factor = 1.D0
Aff(:,:) = Aff(:,:) + pev(i)*Aff_tmp(:,:)*factor
if(even) goto 1000

do io = 1, Norb
read(11) itmp,itmp,E0,pev(i),even,&
(ap(k),k=0,Nstep),(bp(k),k=0,Nstep), &
(an(k),k=0,Nstep),(bn(k),k=0,Nstep)

call dos_diag(Nstep,Norb,Nw,io,Aff_tmp,omega_real,E0,&
small,ap,bp,an,bn)
enddo
Aff(:,:) = Aff(:,:) + pev(i)*Aff_tmp(:,:)*factor
1000 continue
subroutine dos(omega_real,Aff)
use ed_config
use ed_solver
implicit none

integer :: iev,iev_read,iorb,iorb_read,istep,nstep_calcp,nstep_calcn
double precision :: dw,Z,ev_read,prob_read
double precision :: omega_real(nw)
double precision :: Aff(Norb,nw),factor
double precision :: ap(0:Nstep),bp(0:Nstep),an(0:Nstep),bn(0:Nstep)
logical even

Aff(:,:) = 0.D0

open(unit=119,file="apbpanbn.dat",form="unformatted")

do iev = 1, nev_calc
do iorb = 1, Norb
read(119) nstep_calcp, nstep_calcn
read(119) iev_read,iorb_read,ev_read,prob_read,even,&
(ap(istep),istep=0,nstep_calcp),(bp(istep),istep=0,nstep_calcp), &
(an(istep),istep=0,nstep_calcn),(bn(istep),istep=0,nstep_calcn)

if (iev.ne.iev_read.or.iorb.ne.iorb_read) then
print *, "Wrong lanczos coefficient : ",iev,iorb,iev_read,iorb_read
stop
elseif (abs(ev_read-eigval(iev)%val).gt.1d-10.or. &
abs(prob_read-eigval(iev)%prob).gt.1d-10) then
print *, "Eigenvalue mismatch : ",iev,iorb,ev_read,prob_read, &
eigval(iev)%val, eigval(iev)%prob
stop
endif

call dos_diag(iorb,aff,omega_real,nev_calc,eigval(iev)%val,eigval(iev)%prob,&
even,nstep_calcp,nstep_calcn,ap,bp,an,bn)
enddo
close(11)

return
end

SUBROUTINE dos_DIAG(Nstep,Norb,Nw,io,Aff,omega_real,E0,&
small,ap,bp,an,bn)

implicit none

integer i,j,k,io,Nstep,nw,Norb
double precision:: omega_real(Nw),small
double precision:: an(0:Nstep),bn(0:Nstep),ap(0:Nstep),bp(0:Nstep)
if(even) goto 1000

do iorb = 1, Norb
read(119) nstep_calcp, nstep_calcn
read(119) iev_read,iorb_read,ev_read,prob_read,even,&
(ap(istep),istep=0,nstep_calcp),(bp(istep),istep=0,nstep_calcp), &
(an(istep),istep=0,nstep_calcn),(bn(istep),istep=0,nstep_calcn)
if (iev.ne.iev_read.or.iorb.ne.iorb_read) then
print *, "Wrong lanczos coefficient : ",iev,iorb,iev_read,iorb_read
stop
elseif (abs(ev_read-eigval(iev)%val).gt.1d-10.or. &
abs(prob_read-eigval(iev)%prob).gt.1d-10) then
print *, "Eigenvalue mismatch : ",iev,iorb,ev_read,prob_read, &
eigval(iev)%val, eigval(iev)%prob
stop
endif

call dos_diag(iorb,aff,omega_real,nev_calc,eigval(iev)%val,eigval(iev)%prob,&
even,nstep_calcp,nstep_calcn,ap,bp,an,bn)
enddo
1000 continue
enddo
close(119)

double complex:: ztmp, cpx_omega,grx
double precision:: Aff(Norb,Nw),pi,E0
parameter(pi=acos(-1.0D0))
return
end subroutine dos

do j = 1, Nw
subroutine dos_diag(iorb,aff,omega_real,nev_calc,ev,prob,even,nstep_calcp,nstep_calcn,&
ap,bp,an,bn)

cpx_omega=dcmplx(E0+omega_real(j),small)
grx = bp(Nstep)/(cpx_omega-ap(Nstep))
do k = Nstep-1, 0, -1
grx = bp(k)/(cpx_omega-ap(k)-grx)
enddo
use ed_config
implicit none

ztmp = grx
integer :: iorb, nev_calc, nstep_calcp, nstep_calcn
logical :: even
double precision :: omega_real(nw),ev,prob
double precision :: an(0:nstep_calcn),bn(0:nstep_calcn),ap(0:nstep_calcp),bp(0:nstep_calcp)
double precision:: Aff(Norb,Nw)

integer :: iw, istep
double precision :: factor
double complex:: gr_tmp, cpx_omega, grx

if (even) then
factor = 1.0D0
else
factor = 0.5D0
endif

do iw = 1, Nw
cpx_omega = cmplx(ev+omega_real(iw),small)
gr_tmp = bp(nstep_calcp)/(cpx_omega-ap(nstep_calcp))
do istep = nstep_calcp-1, 0, -1
gr_tmp = bp(istep)/(cpx_omega-ap(istep)-gr_tmp)
enddo

cpx_omega = dcmplx(omega_real(j)-E0,small)
grx = bn(Nstep)/(cpx_omega+an(Nstep))
do k = Nstep-1, 0, -1
grx = bn(k)/(cpx_omega+an(k)-grx)
enddo
grx = ztmp+grx
Aff(io,j) = -aimag(grx)/pi
enddo
grx = gr_tmp

return
end
cpx_omega = cmplx(omega_real(iw)-ev,small)
gr_tmp = bn(nstep_calcn)/(cpx_omega+an(nstep_calcn))
do istep = nstep_calcn-1, 0, -1
gr_tmp = bn(istep)/(cpx_omega+an(istep)-gr_tmp)
enddo
grx = grx + gr_tmp
Aff(iorb,iw) = -aimag(grx)/pi
enddo

return
end subroutine dos_diag
2 changes: 1 addition & 1 deletion ed_basis.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module ed_basis
use parallel_params, only: nodes, node,comm,ierr
use sys
use ed_utils, only: icom
use precision


implicit none

Expand Down
24 changes: 12 additions & 12 deletions ed_config.f90
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module ed_config
use precision

use fdf
use parallel_params

implicit none
real(dp), parameter :: pi = 4.0_dp*ATAN(1.0_dp)
double precision, parameter :: pi = 4.0D0*ATAN(1.0D0)
integer, parameter :: kind_basis = 4

! dimensions of the problem
Expand All @@ -17,17 +17,17 @@ module ed_config
integer, allocatable :: Nup(:)

! physical parameters
real(dp) :: U
real(dp) :: Jex
real(dp) :: rMu
real(dp) :: beta
double precision :: U
double precision :: Jex
double precision :: rMu
double precision :: beta

real(dp), allocatable :: ek(:)
real(dp), allocatable :: vk(:,:)
double precision, allocatable :: ek(:)
double precision, allocatable :: vk(:,:)

! calculation parameters
real(dp) :: small
real(dp) :: scf_tol
double precision :: small
double precision :: scf_tol
integer :: Nstep
integer :: Nloop
integer :: Nev
Expand Down Expand Up @@ -94,7 +94,7 @@ subroutine ed_read_options
write(6,'(3x,a40,2x,a,2x,F8.3)') text, '=', beta
endif

allocate(ek(1:nsite),vk(1:norb,1:nbath))
allocate(ek(1:nsite),vk(1:norb,norb+1:nsite))
if (fdf_block('DMFT.Baths', bfdf)) then
i = 1
do while( (i .le. nbath) .and. (fdf_bline(bfdf, pline)))
Expand All @@ -107,7 +107,7 @@ subroutine ed_read_options
i = 1
do while( i.le.nbath .and. (fdf_bline(bfdf, pline)))
do j=1,norb
vk(j,i) = fdf_breals(pline,j)
vk(j,norb+i) = fdf_breals(pline,j)
enddo
i = i + 1
enddo
Expand Down
Loading

0 comments on commit c9c65b0

Please sign in to comment.