12logical,
intent(in) :: tsh
13real(8),
intent(out) :: fxcmt(npmtmax,natmtot,4,4),fxcir(ngtot,4,4)
16integer nr,nri,ir,np,i,j,n
19real(8),
allocatable :: rho(:),rhoup(:),rhodn(:)
20real(8),
allocatable :: mag(:,:),magu(:,:),magm(:)
21real(8),
allocatable :: bxc(:,:),bxcp(:)
22real(8),
allocatable :: fxcuu(:),fxcud(:),fxcdd(:)
23real(8),
allocatable :: fxc(:,:,:)
26 write(*,
'("Error(genspfxcr): spin-unpolarised calculation")')
32allocate(rho(n),mag(n,
ndmag))
33allocate(bxc(n,
ndmag),fxc(n,4,4))
35allocate(rhoup(n),rhodn(n))
36allocate(magu(3,n),magm(n),bxcp(n))
37allocate(fxcuu(n),fxcud(n),fxcdd(n))
58 magm(i)=sqrt(mag(i,1)**2+mag(i,2)**2+mag(i,3)**2)
60 rhoup(i)=0.5d0*(rho(i)+magm(i))
61 rhodn(i)=0.5d0*(rho(i)-magm(i))
63 t1=1.d0/(magm(i)+1.d-8)
68 bxcp(i)=bxc(i,1)*magu(1,i)+bxc(i,2)*magu(2,i)+bxc(i,3)*magu(3,i)
76 rhoup(i)=0.5d0*(rho(i)+magm(i))
77 rhodn(i)=0.5d0*(rho(i)-magm(i))
81 if (mag(i,1) > 0.d0)
then
87 bxcp(i)=bxc(i,1)*magu(3,i)
91 call fxcifc(
fxctype,n=np,rhoup=rhoup,rhodn=rhodn,fxcuu=fxcuu,fxcud=fxcud, &
94 call tfm2213(np,fxcuu,fxcud,fxcdd,magu,magm,bxcp,npmtmax,fxc)
99 call rfsht(nr,nri,fxc(:,i,j),fxcmt(:,ias,i,j))
101 fxcmt(1:np,ias,i,j)=fxc(1:np,i,j)
113 rhoup(ir)=0.5d0*(
rhoir(ir)+magm(ir))
114 rhodn(ir)=0.5d0*(
rhoir(ir)-magm(ir))
115 t1=1.d0/(magm(ir)+1.d-8)
116 magu(1,ir)=t1*
magir(ir,1)
117 magu(2,ir)=t1*
magir(ir,2)
118 magu(3,ir)=t1*
magir(ir,3)
120 bxcp(ir)=
bxcir(ir,1)*magu(1,ir) &
121 +
bxcir(ir,2)*magu(2,ir) &
122 +
bxcir(ir,3)*magu(3,ir)
127 magm(ir)=abs(
magir(ir,1))
128 rhoup(ir)=0.5d0*(
rhoir(ir)+magm(ir))
129 rhodn(ir)=0.5d0*(
rhoir(ir)-magm(ir))
132 if (
magir(ir,1) > 0.d0)
then
138 bxcp(ir)=
bxcir(ir,1)*magu(3,ir)
142call fxcifc(
fxctype,n=ngtot,rhoup=rhoup,rhodn=rhodn,fxcuu=fxcuu,fxcud=fxcud, &
145call tfm2213(ngtot,fxcuu,fxcud,fxcdd,magu,magm,bxcp,ngtot,fxcir)
146deallocate(rho,mag,bxc,fxc)
147deallocate(rhoup,rhodn)
148deallocate(magu,magm,bxcp)
149deallocate(fxcuu,fxcud,fxcdd)
154pure subroutine tfm2213(n,fxcuu,fxcud,fxcdd,magu,magm,bxcp,ld,fxc)
157integer,
intent(in) :: n
158real(8),
intent(in) :: fxcuu(n),fxcud(n),fxcdd(n)
159real(8),
intent(in) :: magu(3,n),magm(n),bxcp(n)
160integer,
intent(in) :: ld
161real(8),
intent(out) :: fxc(ld,4,4)
167 fxc(i,1,1)=0.25d0*(fxcuu(i)+2.d0*fxcud(i)+fxcdd(i))
169 t1=0.25d0*(fxcuu(i)-fxcdd(i))
170 fxc(i,1,2)=t1*magu(1,i)
171 fxc(i,1,3)=t1*magu(2,i)
172 fxc(i,1,4)=t1*magu(3,i)
174 if (magm(i) > 1.d-14)
then
179 t2=0.25d0*(fxcuu(i)-2.d0*fxcud(i)+fxcdd(i))-t1
180 fxc(i,2,2)=t2*magu(1,i)*magu(1,i)+t1
181 fxc(i,2,3)=t2*magu(1,i)*magu(2,i)
182 fxc(i,2,4)=t2*magu(1,i)*magu(3,i)
183 fxc(i,3,3)=t2*magu(2,i)*magu(2,i)+t1
184 fxc(i,3,4)=t2*magu(2,i)*magu(3,i)
185 fxc(i,4,4)=t2*magu(3,i)*magu(3,i)+t1
pure subroutine tfm2213(n, fxcuu, fxcud, fxcdd, magu, magm, bxcp, ld, fxc)
integer, dimension(maxspecies) nrmti
real(8), dimension(:,:,:), allocatable bxcmt
real(8), dimension(:,:,:), pointer, contiguous magmt
integer, dimension(maxspecies) nrmt
real(8), dimension(:), pointer, contiguous rhoir
real(8), dimension(:,:), allocatable bxcir
integer, dimension(maxatoms *maxspecies) idxis
real(8), dimension(:,:), pointer, contiguous magir
integer, dimension(maxspecies) npmt
real(8), dimension(:,:), pointer, contiguous rhomt