[Pw_forum] Sign of magnetization
Ivo Souza
isouza at berkeley.edu
Wed Nov 14 19:54:25 CET 2007
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.
>
>
More information about the Pw_forum
mailing list