7
subroutine normalize_dm( first )
8
use precision, only: dp
9
use sparse_matrices, only: Dscf, Escf, nh, S
10
use atomlist, only: qtot
11
use parallel, only: IOnode
12
use m_spin, only: nspin
14
use m_mpi_utils, only: globalize_sum
21
real(dp):: qsol ! Total unnormalized electron charge
24
real(dp):: buffer1 ! Temporary for the result of a globalize operation
27
! Normalize density matrix to exact charge
29
do ispin = 1,min(nspin,2)
31
qsol = qsol + Dscf(io,ispin) * s(io)
35
call globalize_sum(qsol,buffer1)
40
. abs(qsol/qtot-1._dp).gt.1.d-2) write(6,'(a,2f15.6)')
41
. 'siesta: WARNING: Qtot, Tr[D*S] =', qtot, qsol
45
Dscf(io,ispin) = Dscf(io,ispin) * qtot/qsol
46
Escf(io,ispin) = Escf(io,ispin) * qtot/qsol
50
END subroutine normalize_dm
52
END module m_normalize_dm