# Incosistent charges and magnetic moments between SCF and PDOS calculations in Quantum Espresso

I have a system of 5 layers of an element + 1 layer of another one, I want the relaxed position of the last layer, and once I have it, proceed to calculate the pdos. I am performing simulations in the order:

• Relax
• SCF with the new position
• NSCF (with 4x the number of k-points)
• PDOS

The SCF output has magnetic moments and charge per site, the PDOS gives a *.pdos.dat.lowdin file with the same information.

My problem is that the charges and magnetic moments are different on the SCF and PDOS outputs.

Which ones should I trust? Why would they be different?

SCF output:

Magnetic moment per site:
atom:    1    charge:   10.8246    magn:    0.0110    constr:    0.0000
atom:    2    charge:   10.8934    magn:    0.0059    constr:    0.0000
atom:    3    charge:   10.9088    magn:   -0.0009    constr:    0.0000
atom:    4    charge:   10.9105    magn:    0.0414    constr:    0.0000
atom:    5    charge:   10.9245    magn:   -0.2424    constr:    0.0000
atom:    6    charge:   13.5294    magn:    3.5015    constr:    0.0000


*.pdos.dat.lowdin

 Atom #   1: total charge =  12.9768, s =  2.3048, p =  6.7101, d =  3.9619,
spin up      =   6.4972, s =  1.1526,
spin up      =   6.4972, p =  3.3561,
spin up      =   6.4972, d =  1.9885,
spin down    =   6.4796, s =  1.1522,
spin down    =   6.4796, p =  3.3540,
spin down    =   6.4796, d =  1.9734,
polarization =   0.0177, s =  0.0004, p =  0.0021, d =  0.0151,
Atom #   2: total charge =  13.0022, s =  2.2288, p =  6.8375, d =  3.9359,
spin up      =   6.5058, s =  1.1145,
spin up      =   6.5058, p =  3.4196,
spin up      =   6.5058, d =  1.9717,
spin down    =   6.4964, s =  1.1143,
spin down    =   6.4964, p =  3.4180,
spin down    =   6.4964, d =  1.9642,
polarization =   0.0094, s =  0.0003, p =  0.0016, d =  0.0075,
Atom #   3: total charge =  13.0153, s =  2.2252, p =  6.8123, d =  3.9778,
spin up      =   6.5078, s =  1.1122,
spin up      =   6.5078, p =  3.4082,
spin up      =   6.5078, d =  1.9874,
spin down    =   6.5075, s =  1.1131,
spin down    =   6.5075, p =  3.4041,
spin down    =   6.5075, d =  1.9904,
polarization =   0.0003, s = -0.0009, p =  0.0042, d = -0.0030,
Atom #   4: total charge =  13.0454, s =  2.2269, p =  6.8300, d =  3.9885,
spin up      =   6.5563, s =  1.1150,
spin up      =   6.5563, p =  3.4206,
spin up      =   6.5563, d =  2.0208,
spin down    =   6.4891, s =  1.1119,
spin down    =   6.4891, p =  3.4094,
spin down    =   6.4891, d =  1.9678,
polarization =   0.0673, s =  0.0031, p =  0.0112, d =  0.0530,
Atom #   5: total charge =  13.5800, s =  2.3248, p =  7.1741, d =  4.0811,
spin up      =   6.5896, s =  1.1552,
spin up      =   6.5896, p =  3.5647,
spin up      =   6.5896, d =  1.8696,
spin down    =   6.9904, s =  1.1696,
spin down    =   6.9904, p =  3.6094,
spin down    =   6.9904, d =  2.2115,
polarization =  -0.4008, s = -0.0144, p = -0.0446, d = -0.3418,
Atom #   6: total charge =  14.2291, s =  2.6028, p =  5.9944, d =  5.6320,
spin up      =   8.9997, s =  1.3448,
spin up      =   8.9997, p =  2.9975,
spin up      =   8.9997, d =  4.6574,
spin down    =   5.2294, s =  1.2580,
spin down    =   5.2294, p =  2.9969,
spin down    =   5.2294, d =  0.9746,
polarization =   3.7702, s =  0.0868, p =  0.0006, d =  3.6828,
Spilling Parameter:   0.0019

• Welcome to our site!
– Camps
Jan 5 at 23:33
• They both use the same scheme for charge calculation?
– Camps
Jan 5 at 23:34
• Hello @Camps, thanks. What do you mean by scheme? The inputs of the relax, scf, and nscf files are the same except for the calculation=<relax/scf/nscf> field, and for the nscf calculation I increase the number of kpoints. For the pdos my input is simply &projwfc prefix='run', outdir='./out', Emin=0, Emax=17, DeltaE=0.05 filproj='slab.pdos.dat' /  Jan 6 at 8:59
• @Camps do you think is related to how the Lowdin charges are calculated? Maybe the method is different than in the scf calculation Jan 6 at 9:02
• It could be possible. It is known that different charge calculation methods give (very) different results. Take a look here for different calculation methods https://mattermodeling.stackexchange.com/q/1439/24
– Camps
Jan 6 at 11:35

I think this is a valid question.

As the documentation of projwfc.x explains, it computes the Löwdin charges.

However, the documentation of pw.x seems to be silent on the scheme used to compute the charges reported by the SCF calculation.

Luckily, Quantum ESPRESSO is open-source, so you can look at the source and work back from the Magnetic moment per site string => PP/src/report_mag.f90 => get_locals.f90 => make_pointslist.f90. You find what you've been looking for in the documentation of the make_pointslist subroutine:

This initialization is needed in order to integrate charge (or magnetic moment) in a sphere around the atomic positions. This can be used to simply monitor these quantities during the scf cycles or in order to calculate constraints on these quantities.

If the integration radius r_m is not provided in input, it is calculated here. The integration is a sum over all points in real space with

• the weight 1, if they are closer than $$r_m$$ to an atom and
• $$(1 - (\text{distance}-r_m)/(0.2*r_m) )$$ if $$( r_m < \text{distance}<1.2*r_m )$$.

The radius $$r_m$$ is determined as

... set the radius r_m to a value a little smaller than the minimum distance divided by 2*1.2 (so no point in space can belong to more than one atom)

I.e. the charge reported by the SCF calculation is a weighted integration of the electronic charge in a sphere around the nucleus. The formula looks empirical, and the result is probably not comparable to quantities computed by other DFT codes.