32 real(8) wkpr(-lmmaxdm:lmmaxdm),wkpr_t(-lmmaxdm:lmmaxdm)
33 complex(8) wkpr_v(-lmmaxdm:lmmaxdm)
34 complex(8) gamma(lmmaxdm,2,lmmaxdm,2)
36 real(8),
external :: trzhmm
39 open(50,file=
'TENSMOM'//trim(
filext),form=
'FORMATTED',action=
'WRITE')
40 write(50,
'("Density matrix decomposition in coupled tensor moments")')
41 write(50,
'("Tensor moment type :")')
44 write(50,
'(" real, corresponding to Hermitian Γ matrices")')
46 write(50,
'(" complex, see Appendix A of G. van der Laan and B. T. Thole,")')
47 write(50,
'(" J. Phys.: Condens. Matter 7, 9947 (1995)")')
49 write(50,
'(" real, corresponding to tesseral spherical harmonics")')
56 t0=sqrt(dble((2*l+1)*2))
60 write(50,
'("Species : ",I4," (",A,"), atom : ",I4)') is,trim(
spsymb(is)),ia
61 write(50,
'(" l = ",I1)') l
66 call dmtotm3(l,k,p,r,lmmaxdm,
dmatmt(:,:,:,:,ias),wkpr)
68 call tm3todm(l,k,p,r,lmmaxdm,wkpr,gamma)
69 ehx=0.5d0*trzhmm(lmmaxdm*2,gamma,
vmatmt(:,:,:,:,ias))
72 write(50,
'(" k = ",I1,", p = ",I1,", r = ",I1)') k,p,r
77 write(50,
'(" t = ",I2," : ",F14.8)') t,t0*wkpr(t)
79 t1=t0*norm2(wkpr(-r:r))
82 call tm3vdl(l,k,p,r,lmmaxdm,wkpr,wkpr_v)
84 write(50,
'(" t = ",I2," : ",2F14.8)') t,wkpr_v(t)
86 t1=sqrt(dot_product(wkpr_v(-r:r),wkpr_v(-r:r)))
89 call tm3vdl(l,k,p,r,lmmaxdm,wkpr,wkpr_v)
90 call tm3tsrl(r,lmmaxdm,wkpr_v,wkpr_t)
92 write(50,
'(" t = ",I2," : ",F14.8)') t,wkpr_t(t)
94 t1=norm2(wkpr_t(-r:r))
96 write(50,
'(" magnitude : ",F14.8)') t1
97 write(50,
'(" Hartree + exchange energy : ",F14.8)') ehx
100 call writevars(
'wkpr',n1=is,n2=ia,n3=l,n4=k,n5=p,n6=r,nv=2*r+1, &
112 call writetest(820,
'Coupled tensor moments',nv=
size(wkpr),tol=2.d-2,rva=wkpr)
subroutine writetest(id, descr, nv, iv, iva, tol, rv, rva, zv, zva)
integer, dimension(maxatoms, maxspecies) idxas
pure subroutine tm3tsrl(r, ld, wkpr_v, wkpr_t)
complex(8), dimension(:,:,:,:,:), allocatable dmatmt
integer, dimension(2, maxdftu) isldu
complex(8), dimension(:,:,:,:,:), allocatable vmatmt
subroutine dmtotm3(l, k, p, r, ld, dm, wkpr)
integer, dimension(maxspecies) natoms
subroutine tm3vdl(l, k, p, r, ld, wkpr, wkpr_v)
subroutine tm3todm(l, k, p, r, ld, wkpr, dm)
character(64), dimension(maxspecies) spsymb
subroutine writevars(vname, n1, n2, n3, n4, n5, n6, nv, iv, iva, rv, rva, zv, zva, sv, sva)