TABLE OF CONTENTS
ABINIT/fexsGamma [ Functions ]
NAME
fexsGamma
FUNCTION
Free energy for the IIT finite temperautre XC functional
INPUTS
Gamma= ? t=temperature
OUTPUT
fexsGamma=free energy
SOURCE
137 function fexsGamma(Gamma,t) 138 139 !Arguments ------------------------------------ 140 real(dp) :: fexsGamma 141 real(dp),intent(in) :: Gamma,t 142 !Local variables------------------------------- 143 real(dp) :: lambda 144 real(dp) :: tanht,tanhst 145 real(dp) :: a,b,c,d,e 146 real(dp) :: bmcdse,amcse,sqrt4emd2 147 148 ! ************************************************************************* 149 150 lambda=(4.0_dp/(9.0_dp*pi))**(one/3.0_dp) 151 tanht=tanh(one/t) 152 tanhst=tanh(one/sqrt(t)) 153 154 a=one/(pi*lambda)*(0.75_dp+3.04363_dp*t**2-0.09227_dp*t**3+1.7035_dp*t**4)/(one+8.31051_dp*t**2+5.1105_dp*t**4)*tanht 155 b=(0.341308_dp+12.070873_dp*t**2+1.148889_dp*t**4)/(one+10.495346_dp*t**2+1.326623_dp*t**4)*sqrt(t)*tanhst 156 e=(0.539409_dp+2.522206_dp*t**2+0.178484_dp*t**4)/(one+2.555501_dp*t**2+0.146319_dp*t**4)*t*tanht 157 c=(0.872496_dp+0.025248_dp*exp(-1./t))*e 158 d=(0.614925_dp+16.996055_dp*t**2+1.489056_dp*t**4)/(one+10.10935_dp*t**2+1.22184_dp*t**4)*sqrt(t)*tanhst 159 160 bmcdse=b-c*d/e 161 amcse=a-c/e 162 sqrt4emd2=sqrt(4.0_dp*e-d**2) 163 164 fexsGamma=-one/Gamma*(c/e*Gamma+2.0_dp/e*bmcdse*sqrt(Gamma)+one/e*(amcse-d/e*bmcdse)*log(e*Gamma+d*sqrt(Gamma)+one)- & 165 & 2.0_dp/(e*sqrt4emd2)*(d*amcse+(2.0_dp-d**2/e)*bmcdse)*(atan((2.0_dp*e*sqrt(Gamma)+d)/sqrt4emd2)-atan(d/sqrt4emd2))) 166 167 end function fexsGamma
ABINIT/Fxc_iit [ Functions ]
NAME
Fxc_iit
FUNCTION
Auxiliary function for the IIT finite temperature XC functional
INPUTS
deltavxc= ? rs=Wigner-Seitz radius t=temperature
OUTPUT
Fxc_iit=auxiliary function
SOURCE
188 function Fxc_iit(rs,t,deltavxc) 189 190 !Arguments ------------------------------------ 191 real(dp) :: Fxc_iit 192 real(dp),intent(in) :: rs,t,deltavxc 193 !Local variables------------------------------- 194 real(dp) :: newrs,newt,newGamma 195 196 ! ************************************************************************* 197 198 newrs=rs/(one+deltavxc)**(one/3.0_dp) 199 newt=t/(one+deltavxc)**(2.0_dp/3.0_dp) 200 newGamma=2.0_dp*(4.0_dp/(9.0_dp*pi))**(2.0_dp/3.0_dp)*newrs/newt 201 Fxc_iit=3.0_dp/(4.0_dp*pi)*fexsGamma(newGamma,newt)/newrs**4 202 203 end function Fxc_iit
ABINIT/m_xciit [ Modules ]
NAME
m_xciit
FUNCTION
Exchange-correlation at finite temperature of an electron gas Ichimaru S., Iyetomi H., Tanaka S., Phys. Rep. 149, 91-205 (1987) [[cite:Ichimaru1987]]
COPYRIGHT
Copyright (C) 2002-2024 ABINIT group (JFD,LK) This file is distributed under the terms of the GNU General Public License, see ~abinit/COPYING or http://www.gnu.org/copyleft/gpl.txt .
SOURCE
17 #if defined HAVE_CONFIG_H 18 #include "config.h" 19 #endif 20 21 #include "abi_common.h" 22 23 module m_xciit 24 25 use defs_basis 26 use m_errors 27 28 implicit none 29 30 private
ABINIT/tdexcsdtiit [ Functions ]
NAME
tdexcsdtiit
FUNCTION
Auxiliary function for the IIT finite temperature XC functional
INPUTS
rs=Wigner-Seitz radius t=temperature
OUTPUT
tdexcsdtiit=auxiliary function
SOURCE
223 function tdexcsdtiit(rs,t) 224 225 !Arguments ------------------------------------ 226 real(dp) :: tdexcsdtiit 227 real(dp),intent(in) :: rs,t 228 !Local variables------------------------------- 229 real(dp) :: ef,Gamma 230 real(dp) :: deltat=1.0d-2 231 232 ! ************************************************************************* 233 234 ef=half*(9.0_dp*pi/4.0_dp)**(2.0_dp/3.0_dp)/rs**2 235 Gamma=one/(t*ef)/rs 236 tdexcsdtiit=8.0_dp*(fexsGamma(Gamma/(one+deltat),(one+deltat)*t) & 237 & -fexsGamma(Gamma/(one-deltat),(one-deltat)*t)) & 238 & -(fexsGamma(Gamma/(one+2.0_dp*deltat),(one+2.0_dp*deltat)*t) & 239 & -fexsGamma(Gamma/(one-2.0_dp*deltat),(one-2.0_dp*deltat)*t)) 240 tdexcsdtiit=t*tdexcsdtiit/(12.0_dp*deltat*t)/rs 241 242 end function tdexcsdtiit
ABINIT/xciit [ Functions ]
NAME
xciit
FUNCTION
Exchange-correlation at finite temperature of an electron gas Ichimaru S., Iyetomi H., Tanaka S., Phys. Rep. 149, 91-205 (1987) [[cite:Ichimaru1987]]
INPUTS
temp= (electronic) temperature npt=number of real space points order=gives the maximal derivative of Exc computed. rspts(npt)=Wigner-Seitz radii at each point
OUTPUT
exc(npt)=exchange-correlation energy density fxc(npt)=exchange-correlation free energy at finite temperature vxc(npt)=exchange-correlation potential --- optional output --- [dvxc(npt)]=partial second derivatives of the xc energy
SOURCE
62 subroutine xciit(exc,fxc,npt,order,rspts,temp,vxc, & 63 & dvxc)!Optional argument 64 65 !Arguments ------------------------------------ 66 !scalars 67 integer,intent(in) :: npt,order 68 real(dp),intent(in) :: temp 69 !arrays 70 real(dp),intent(in) :: rspts(npt) 71 real(dp),intent(out) :: exc(npt),fxc(npt),vxc(npt) 72 real(dp),intent(out),optional :: dvxc(npt) 73 74 !Local variables------------------------------- 75 !scalars 76 integer :: ipt 77 real(dp) :: ef,deltavxc,Gamma,rs,rsm1,tt 78 character(len=500) :: msg 79 80 ! ************************************************************************* 81 82 !Checks the values of order 83 if(order<0.or.order>2)then 84 write(msg, '(4a,i3,a)' ) ch10,& 85 & 'With Ishimaru-Iyetomi-Tanka xc functional, the only',ch10,& 86 & 'allowed values for order are 0, 1 or 2, while it is found to be ',order,'.' 87 ABI_BUG(msg) 88 end if 89 90 !Loop over grid points 91 do ipt=1,npt 92 93 rs=rspts(ipt) 94 rsm1=one/rs 95 ! Step for the Vxc computation 96 deltavxc=0.01_dp 97 ! Compute ef 98 ef=0.5_dp*(9.0_dp*pi/4.0_dp)**(2.0_dp/3.0_dp)*rsm1**2 99 ! Compute temperature 100 tt=max(temp/ef,tol12) 101 ! Compute Gamma 102 Gamma=one/(tt*ef)/rs 103 104 ! Exchange-correlation of Ichimaru functional 105 fxc(ipt)= fexsGamma(Gamma,tt)*rsm1 106 exc(ipt)=fxc(ipt) - tdexcsdtiit(rs,tt); 107 vxc(ipt)=(8.0_dp*(Fxc_iit(rs,tt,deltavxc)-Fxc_iit(rs,tt,-deltavxc)) & 108 & -(Fxc_iit(rs,tt,two*deltavxc)-Fxc_iit(rs,tt,-two*deltavxc)))/ & 109 & (12.0_dp*deltavxc*3.0_dp/(4.0_dp*pi)/rs**3) 110 if (order==2) then 111 dvxc(ipt)=(-30.0_dp*Fxc_iit(rs,tt,zero)+16.0_dp*(Fxc_iit(rs,tt,deltavxc)+Fxc_iit(rs,tt,-deltavxc)) & 112 & -(Fxc_iit(rs,tt,two*deltavxc)+Fxc_iit(rs,tt,two*deltavxc)))/ & 113 & (12.0_dp*(deltavxc*3.0_dp/(4.0_dp*pi)/rs**3)**2) 114 end if 115 end do 116 117 CONTAINS