Skip to content

Commit

Permalink
1.3.1 BUG FIX
Browse files Browse the repository at this point in the history
L.Crippa spotted a bug in the evaluation of the GF in the nonSU2 channel.
Following a wrong convention the GF is evaluated as <A+,A> rather than <A,A+>.
This led to a wrong algebraic manipulation of the off-diagonal components which
could potentially cause wrong calculations.

This was tested observing non-vanishing Sigma function component for U=0.
Some false negative have been observed, e.g. in the BHZ-Excitonic case where by
symmetry, the correct result was obtained anyhow.
A better check using SOC for t2g orbitals (from LC) showed incorrect results.

Patched changing sign in the algebraic manipulations of the off-digonal components.

Co-authored-by: lcrippa
Co-authored-by: gbeddalumia
  • Loading branch information
aamaricci committed May 20, 2024
1 parent 4240bf1 commit 68e4292
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 26 deletions.
52 changes: 26 additions & 26 deletions src/ED_NONSU2/ED_GF_NONSU2.f90
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ subroutine build_gf_nonsu2()
do iorb=1,Norb
!
impGmats(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,iorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(jspin,jspin,iorb,iorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(jspin,jspin,iorb,iorb,:))
!
impGreal(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,iorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(jspin,jspin,iorb,iorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(jspin,jspin,iorb,iorb,:))
!
enddo
enddo
Expand Down Expand Up @@ -173,12 +173,12 @@ subroutine build_gf_nonsu2()
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,ispin,iorb,jorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(ispin,ispin,jorb,jorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(ispin,ispin,jorb,jorb,:))
!
impGreal(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,ispin,iorb,jorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(ispin,ispin,jorb,jorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(ispin,ispin,jorb,jorb,:))
!
enddo
enddo
Expand Down Expand Up @@ -217,12 +217,12 @@ subroutine build_gf_nonsu2()
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,jorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(jspin,jspin,jorb,jorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(jspin,jspin,jorb,jorb,:))
!
impGreal(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,jorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(jspin,jspin,jorb,jorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(jspin,jspin,jorb,jorb,:))
enddo
enddo
enddo
Expand Down Expand Up @@ -297,12 +297,12 @@ subroutine rebuild_gf_nonsu2()
if(ispin==jspin)cycle
do iorb=1,Norb
impGmats(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,iorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(jspin,jspin,iorb,iorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(jspin,jspin,iorb,iorb,:))
!
impGreal(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,iorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(jspin,jspin,iorb,iorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(jspin,jspin,iorb,iorb,:))
!
enddo
enddo
Expand Down Expand Up @@ -332,12 +332,12 @@ subroutine rebuild_gf_nonsu2()
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,ispin,iorb,jorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(ispin,ispin,jorb,jorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(ispin,ispin,jorb,jorb,:))
!
impGreal(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,ispin,iorb,jorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(ispin,ispin,jorb,jorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(ispin,ispin,jorb,jorb,:))
!
enddo
enddo
Expand Down Expand Up @@ -369,12 +369,12 @@ subroutine rebuild_gf_nonsu2()
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,jorb,:) &
- (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGmats(jspin,jspin,jorb,jorb,:))
- (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGmats(jspin,jspin,jorb,jorb,:))
!
impGreal(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,jorb,:) &
- (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one+xi)*impGreal(jspin,jspin,jorb,jorb,:))
- (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- (one-xi)*impGreal(jspin,jspin,jorb,jorb,:))
enddo
enddo
enddo
Expand Down Expand Up @@ -673,7 +673,7 @@ subroutine lanc_build_gf_nonsu2_mixOrb_mixSpin(iorb,jorb,ispin,jspin)
endif
!
call tridiag_Hv_sector_nonsu2(jsector,vvinit,alfa_,beta_,norm2)
call add_to_lanczos_gf_nonsu2(xi*norm2,state_e,alfa_,beta_,1,iorb,jorb,ispin,jspin,3,istate)
call add_to_lanczos_gf_nonsu2(-xi*norm2,state_e,alfa_,beta_,1,iorb,jorb,ispin,jspin,3,istate)
deallocate(alfa_,beta_)
if(allocated(vvinit))deallocate(vvinit)
else
Expand Down Expand Up @@ -714,7 +714,7 @@ subroutine lanc_build_gf_nonsu2_mixOrb_mixSpin(iorb,jorb,ispin,jspin)
endif
!
call tridiag_Hv_sector_nonsu2(jsector,vvinit,alfa_,beta_,norm2)
call add_to_lanczos_gf_nonsu2(xi*norm2,state_e,alfa_,beta_,-1,iorb,jorb,ispin,jspin,4,istate)
call add_to_lanczos_gf_nonsu2(-xi*norm2,state_e,alfa_,beta_,-1,iorb,jorb,ispin,jspin,4,istate)
deallocate(alfa_,beta_)
if(allocated(vvinit))deallocate(vvinit)
else
Expand Down
124 changes: 124 additions & 0 deletions src/ED_NONSU2/g_fix.PATCH
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
diff --git a/ED_GF_NONSU2.f90 b/ED_GF_NONSU2.f90
index 6dffbd9..1d8887d 100644
--- a/ED_GF_NONSU2.f90
+++ b/ED_GF_NONSU2.f90
@@ -131,12 +131,12 @@ contains
do iorb=1,Norb
!
impGmats(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,iorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(jspin,jspin,iorb,iorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(jspin,jspin,iorb,iorb,:))
!
impGreal(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,iorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(jspin,jspin,iorb,iorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(jspin,jspin,iorb,iorb,:))
!
enddo
enddo
@@ -173,12 +173,12 @@ contains
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,ispin,iorb,jorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(ispin,ispin,jorb,jorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(ispin,ispin,jorb,jorb,:))
!
impGreal(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,ispin,iorb,jorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(ispin,ispin,jorb,jorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(ispin,ispin,jorb,jorb,:))
!
enddo
enddo
@@ -217,12 +217,12 @@ contains
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,jorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(jspin,jspin,jorb,jorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(jspin,jspin,jorb,jorb,:))
!
impGreal(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,jorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(jspin,jspin,jorb,jorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(jspin,jspin,jorb,jorb,:))
enddo
enddo
enddo
@@ -297,12 +297,12 @@ contains
if(ispin==jspin)cycle
do iorb=1,Norb
impGmats(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,iorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(jspin,jspin,iorb,iorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(jspin,jspin,iorb,iorb,:))
!
impGreal(ispin,jspin,iorb,iorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,iorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(jspin,jspin,iorb,iorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(jspin,jspin,iorb,iorb,:))
!
enddo
enddo
@@ -332,12 +332,12 @@ contains
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,ispin,iorb,jorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(ispin,ispin,jorb,jorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(ispin,ispin,jorb,jorb,:))
!
impGreal(ispin,ispin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,ispin,iorb,jorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(ispin,ispin,jorb,jorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(ispin,ispin,jorb,jorb,:))
!
enddo
enddo
@@ -369,12 +369,12 @@ contains
do jorb=1,Norb
if(iorb==jorb)cycle
impGmats(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGmats(ispin,jspin,iorb,jorb,:) &
- - (one+xi)*impGmats(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGmats(jspin,jspin,jorb,jorb,:))
+ - (one-xi)*impGmats(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGmats(jspin,jspin,jorb,jorb,:))
!
impGreal(ispin,jspin,iorb,jorb,:) = 0.5d0*(impGreal(ispin,jspin,iorb,jorb,:) &
- - (one+xi)*impGreal(ispin,ispin,iorb,iorb,:) &
- - (one+xi)*impGreal(jspin,jspin,jorb,jorb,:))
+ - (one-xi)*impGreal(ispin,ispin,iorb,iorb,:) &
+ - (one-xi)*impGreal(jspin,jspin,jorb,jorb,:))
enddo
enddo
enddo
@@ -673,7 +673,7 @@ contains
endif
!
call tridiag_Hv_sector_nonsu2(jsector,vvinit,alfa_,beta_,norm2)
- call add_to_lanczos_gf_nonsu2(xi*norm2,state_e,alfa_,beta_,1,iorb,jorb,ispin,jspin,3,istate)
+ call add_to_lanczos_gf_nonsu2(-xi*norm2,state_e,alfa_,beta_,1,iorb,jorb,ispin,jspin,3,istate)
deallocate(alfa_,beta_)
if(allocated(vvinit))deallocate(vvinit)
else
@@ -714,7 +714,7 @@ contains
endif
!
call tridiag_Hv_sector_nonsu2(jsector,vvinit,alfa_,beta_,norm2)
- call add_to_lanczos_gf_nonsu2(xi*norm2,state_e,alfa_,beta_,-1,iorb,jorb,ispin,jspin,4,istate)
+ call add_to_lanczos_gf_nonsu2(-xi*norm2,state_e,alfa_,beta_,-1,iorb,jorb,ispin,jspin,4,istate)
deallocate(alfa_,beta_)
if(allocated(vvinit))deallocate(vvinit)
else

0 comments on commit 68e4292

Please sign in to comment.