Ralph, I agree with your comment, except for the part where you imply that spin-orbit effects are of little relevance. They are very relevant to many people. I can name at least three or four :)
In fact, it was by investigating a spin-orbit-induced effect (the so-called anomalous Hall effect) in iron that we concluded(*) that there was a sign problem in the definition of the magnetization in pwscf. For bcc iron with the magnetization along the positive z-direction it is known, both experimentally and from first-principles calculations [see PRL 92, 037204 ('04)], that the anomalous Hall conductivity sigma_xy is *positive*. Instead, we found a negative value with pwscf. Of course, what really happened is that pwscf was giving us a ground state with a negative magnetization, thus flippling the sign sigma_xy. Regards, and thanks to the pwscf community for the wonderful code! Ivo -- --------------------------------------------------- Ivo Souza Department of Physics, Univ. of California Berkeley tel. +1.510.642.3597 fax +1.510.643.8497 isouza at berkeley.edu http://smilodon.berkeley.edu/ --------------------------------------------------- (*) We actually made a compensating sign error in our code for computing the anomalous Hall conductivity. We just realized that recently... Ralph Gebauer wrote: > Dear Ivo, > > I think that you are right. Probably the sign convention we have adopted > corresponds to a "spin polarization" rather than to a "magnetic moment". > > Since in the usual LDA-GGA functionals the energy depends only on the > absolute value of the local magnetic moment (and not on its direction), > the energy is invariant with respect to a global rotation of the > direction of the magnetization. The direction of \vec{m} is linked to > the lattice axis only if one considers spin-orbit interactions or > externally applied fields, and the like. So the sign ambiguity you > mention is probably of little relevance, but of course, one should still > be precise. Best would probably be to put spin polarization or something > like that in the output, in order to avoid changing sings all over in > the code. > > Ralph > > > > > > >> Dear all, >> >> I am trying to understand whether there is a sign error in the >> definition of the total magnetization in pwscf. In other words, when the >> code tells us that, e.g., the magnetic moment of bcc iron points along >> +z, is it really pointing along minus z? >> >> The spin magnetic moment of a state is (n units of the Bohr magneton) >> >> <\mu_z> = -<sigma_z> >> >> (note the minus sign) where sigma_z is the Pauli matrix. >> From the subroutine 'compute_magnetization' in electrons.f90: >> >> ------------------------------------------------------- >> IF ( lsda ) THEN >> ! >> magtot = 0.D0 >> absmag = 0.D0 >> ! >> DO ir = 1, nrxx >> ! >> mag = rho(ir,1) - rho(ir,2) >> ! >> magtot = magtot + mag >> absmag = absmag + ABS( mag ) >> ! >> END DO >> ! >> magtot = magtot * omega / ( nr1*nr2*nr3 ) >> absmag = absmag * omega / ( nr1*nr2*nr3 ) >> ------------------------------------------------------- >> >> My understanding is that rho(ir,1) and rho(ir,2) are respectively the >> (number) densities for spin-up ("moment-down") and spin-down >> ("moment-up") electrons. If so, then it seems to me that >> >> mag = rho(ir,1) - rho(ir,2) >> >> should be replaced by >> >> mag = rho(ir,2) - rho(ir,1) >> >> in order to get the correct sign for the magnetic moment per unit cell >> 'magtot' >> >> The above is for collinear (lsda) calculations, but the same issue with >> the sign is present in the definition of the total magnetization in the >> non-collinear case: >> >> ------------------------------------------------------- >> ELSE IF ( noncolin ) THEN >> ! >> magtot_nc = 0.D0 >> absmag = 0.D0 >> ! >> DO ir = 1,nrxx >> ! >> mag = SQRT( rho(ir,2)**2 + rho(ir,3)**2 + rho(ir,4)**2 ) >> ! >> DO i = 1, 3 >> ! >> magtot_nc(i) = magtot_nc(i) + rho(ir,i+1) >> ! >> END DO >> ! >> absmag = absmag + ABS( mag ) >> ! >> END DO >> ! >> CALL mp_sum( magtot_nc, intra_pool_comm ) >> CALL mp_sum( absmag, intra_pool_comm ) >> ! >> DO i = 1, 3 >> ! >> magtot_nc(i) = magtot_nc(i) * omega / ( nr1*nr2*nr3 ) >> ! >> END DO >> ! >> absmag = absmag * omega / ( nr1*nr2*nr3 ) >> ! >> ENDIF >> ------------------------------------------------------- >> >> Since [see subroutine 'sum_band_k'] rho(ir,2), rho(ir,3) and rho(ir,4) >> are respectively the x,y, and z components of the spin polarization >> density, proportional to psi^*(r).sigma_i.psi(r) (i=x,y,z), the line >> >> magtot_nc(i) = magtot_nc(i) + rho(ir,i+1) >> >> should be replaced by >> >> magtot_nc(i) = magtot_nc(i) - rho(ir,i+1) >> >> >> It is quite easy to get confused with signs, so I apologize if the >> confusion is on my side! Also, it could just be a matter of semantics, >> and what is mean by "magnetic moment" in pwscf is really "spin >> polarization." Any clarification would be greatly appreciated. >> >> With thanks and best regards, >> >> Ivo S. > >