[Wien] problem with local rotation matrices in bcc Fe

Jaroslav Hamrle hamrle at karlov.mff.cuni.cz
Tue Dec 19 15:36:30 CET 2017


Dear collegues,

we have problem ragarding local rotation matrix, which we encountered 
when calculating  electronic structure of bcc Fe (spin-polarized + 
spin-orbit) for different magnetization directions.

We have calculated electronic structure of bcc Fe as suggested by Prof. 
Blaha, using TEMP integration, and large k-mesh (90x90x90) to calculate 
electronic structure and TETRA integration to calculate optics (thank 
you a lot for your help!).

However, for one magnetization direction, [-1 1 1], the electronic 
structure (and related optical properties) did not agreed with 
equivalent magnetization directions [111], [-111], [11-1]. Going deeper, 
we found that the local rotation matrix is identical for [-111] and 
[1-11] magnetization directions.

We expected that for general magnetization direction, the corresponding 
magnetization direction in the local (rotated) coordinates should be [0 
0 1]. Hence, we expected the local rotation matrix should be different 
for different magnetization direction.

UM (appendix A) defines: "The local rotation matrix R , which transforms 
the global coordinates r_g to the rotated ones r_r , is  defined by 
R*r_g = r_r."

Therefore, we checked what is the direction of the magnetization in the 
local coordinates for different magnetization directions, using relation 
mag_glob*R = mag_loc, where mag_glob, mag_loc are magnetization 
directions in global, local coordinates, respectively. (COMMENT: 
according to UM we should use relation mag_loc=R*mag_glob, where 
mag_glob, mag_loc are column vectors. However, the local rotation matrix 
in case.outsymso and case.struct seems to be defined by a row vector: 
mag_glob*R = mag_loc, which we use in following).

--> for many magnetization directions the local direction of 
magnetization is really [001] as expected, namely for magnetizations 
[100], [010], [001], [011], [101], [111], [1-11]

--> for some magnetization directions, the local direction of the 
magnetization is [00-1], which (in my understanding) is OK. This happens 
for magnetization directions [11-1], [00-1], [0-10],[-100]

--> However, for many magnetization directions, the local direction of 
magnetization is not [001] or [00-1], for example:
*  magnetization [-111] being in the local coordinates [-0.94281 0   
-0.33333] .
*  magnetization [110] being in the local coordinates [0  1  0].
*  magnetization [-110] being in the local coordinates [-1  0 0].
*  magnetization [-101] being in the local coordinates [-1 0 0].
*  magnetization [0-11] being in the local coordinates [1 0 0]


--> comparing resulting electronic structure for equivalent 
magnetization directions, we found problem with only [-111] direction, 
where band energies differs substantially (in order of mRy -- see end of 
the email) from other equivalent directions, e.g. [111].  Obviously, it 
is because the magnetization is not rotated to x,y or z directions, but 
has direction [-0.94281  0 -0.33333].

--> we have tried to replace 'faulty' local rotation matrix in [-111] 
direction by matrix

-0.4082483 -0.7071068 -0.5773503
  0.4082483 -0.7071068 0.5773503
-0.8164966 0.0000000  0.5773503

tentatively determined by relations

Rz=[cos(phi) sin(phi) 0
         -sin(phi) cos(phi) 0
         0 0 1]

Ry=[cos(theta) 0 -sin(theta)
         0 1 0
         sin(theta) 0 cos(theta)]

R=inv(Ry*Rz)

where theta, phi are orientations of the magnetization. Note that those 
local rotation matrices correctly generates R which rotates 
magnetization to [0 0 1] in the local coordinates, i.e. [0 0 
1]*inv(R)=magnetization

For this corrected local rotation matrix in case of [-111], the 
electronic structure and related optics get fixed (i.e. get agreed with 
others).

--> we also checked that all symmetries for [-111] magnetization 
direction seems correct. The problem seems to be only with the local 
rotation matrix.

--> NOTE: Particularly surprising is the local rotation matrix for [110] 
direction, being

     0.7071    0.7071         0
    -0.7071    0.7071         0
          0         0         1

i.e. rotating only around z-axis and hence placing [110] magnetization 
just along y position. To rotate magnetization from [110] to [001], R 
should
have form

      0     -0.7071    0.7071
      0      0.7071    0.7071
     -1          0       0


For your information, we attached calculations for Fe90M111 and Fe90-111 
directions:

http://alma.karlov.mff.cuni.cz/hamrle/w2kfig/Fe90M111/

http://alma.karlov.mff.cuni.cz/hamrle/w2kfig/Fe90M-111/


Please, can you help me to answer following questions:

1) should the local rotation matrix rotate magnetization direction to [0
0 1] direction in the local coordinates? I'm confused that for some
equivalent magnetization direction  it does, sometimes it does not. Is
it just a feature of the code, or it has some physical reasoning?

2) from symmetry point of view, should there be a difference in 
electronic structure calculated for
different magnetization directions, where local rotation matrix rotates 
magnetization to local x/y direction compared to those rotating to local 
z direction? Numerically, the results are
very similar, but for example in MLD, we can see some difference, but
it can be due to numerical issues. For example, LM for 110 magnetization is
lm: 0 0  2 0  2 2  4 0  4 2  4 4  6 0  6 2  6 4  6 6
which seems to me to be build for preferred z-direction. On the other
hand, band energies equals within 1e-6 Ry (see below) between [110] and
[011], having magnetization in the local coordinates in x,z directions,
respectively.

3) do you think/suggest, is it a good practise to replace local rotation
matrix by a matrix, which always rotates magnetization to [0 0 1]
direction in the local coordinates? I understand there is also
structural symmetry, but I'm not sure how limiting it is for simple
cases such as bcc Fe.

Thank you for any help and with our best regards

Jaroslav Hamrle
Ondrej Stejskal


=============== magnetization [1  1  1] ==================
--> from case.outsymso:
    magnetization direction:
    [1  1  1]
    theta , phi [deg] of the magnetization direction:
    54.7356   45.0000

    local rotation matrix R:
     0.4082   -0.7071    0.5774
     0.4082    0.7071    0.5774
    -0.8165         0    0.5774

--> R rotates magnetization in local coordinates to:
    [0 0 1]
---> calculated using [0 0 1]*inv(R) (should be equal to original 
magnetization direction):
    direction [0 0 1]* inv(R):
    [1 1 1] /sqrt(3)
    theta, phi [deg] of direction [0 0 1]* inv(R):
    54.7356   45.0000

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.4082   -0.7071    0.5774
     0.4082    0.7071    0.5774
    -0.8165         0    0.5774

=============== magnetization [1  1 -1] ==================
--> from case.outsymso:
    magnetization direction:
    [1  1 -1]
    theta , phi [deg] of the magnetization direction:
   125.2644   45.0000

    local rotation matrix R:
     0.4082   -0.7071   -0.5774
     0.4082    0.7071   -0.5774
     0.8165         0    0.5774

--> R rotates magnetization in local coordinates to:
    [0  0 -1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [-1 -1  1] /sqrt(3)
    theta, phi [deg] of direction [0 0 1]* inv(R):
    54.7356 -135.0000

    local rotational matrix inv(Rz(phi)*Ry(theta))
    -0.4082   -0.7071    0.5774
    -0.4082    0.7071    0.5774
    -0.8165    0.0000   -0.5774

=============== magnetization [1 -1  1] ==================
--> from case.outsymso:
    magnetization direction:
    [1 -1  1]
    theta , phi [deg] of the magnetization direction:
    54.7356  -45.0000

    local rotation matrix R:
     0.4082    0.7071    0.5774
    -0.4082    0.7071   -0.5774
    -0.8165         0    0.5774

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [1  -1  1] /sqrt(3)
    theta, phi [deg] of direction [0 0 1]* inv(R):
    54.7356  -45.0000

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.4082    0.7071    0.5774
    -0.4082    0.7071   -0.5774
    -0.8165         0    0.5774

=============== magnetization [-1  1  1] ==================
--> from case.outsymso:
    magnetization direction:
    [-1  1  1]
    theta , phi [deg] of the magnetization direction:
    54.7356  135.0000

    local rotation matrix R:
     0.4082    0.7071    0.5774
    -0.4082    0.7071   -0.5774
    -0.8165         0    0.5774

--> R rotates magnetization in local coordinates to:
    [-0.94281  0   -0.33333]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [1  -1  1] /sqrt(3)
    theta, phi [deg] of direction [0 0 1]* inv(R):
    54.7356  -45.0000

    local rotational matrix inv(Rz(phi)*Ry(theta))
    -0.4082   -0.7071   -0.5774
     0.4082   -0.7071    0.5774
    -0.8165         0    0.5774

=============== magnetization [0  0  1] ==================
--> from case.outsymso:
    magnetization direction:
    [0  0  1]
    theta , phi [deg] of the magnetization direction:
      0     0

    local rotation matrix R:
      1     0     0
      0     1     0
      0     0     1

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  0  1]
    theta, phi [deg] of direction [0 0 1]* inv(R):
      0     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
      1     0     0
      0     1     0
      0     0     1

=============== magnetization [0  0 -1] ==================
--> from case.outsymso:
    magnetization direction:
    [0  0 -1]
    theta , phi [deg] of the magnetization direction:
    180     0

    local rotation matrix R:
      1     0     0
      0     1     0
      0     0     1

--> R rotates magnetization in local coordinates to:
    [0  0 -1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  0  1]
    theta, phi [deg] of direction [0 0 1]* inv(R):
      0     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
    -1.0000         0    0.0000
          0    1.0000         0
    -0.0000         0   -1.0000

=============== magnetization [0  1  0] ==================
--> from case.outsymso:
    magnetization direction:
    [0  1  0]
    theta , phi [deg] of the magnetization direction:
     90    90

    local rotation matrix R:
      0     1     0
      0     0     1
      1     0     0

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  1  0]
    theta, phi [deg] of direction [0 0 1]* inv(R):
     90    90

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000   -1.0000    0.0000
     0.0000    0.0000    1.0000
    -1.0000         0    0.0000

=============== magnetization [0 -1  0] ==================
--> from case.outsymso:
    magnetization direction:
    [0 -1  0]
    theta , phi [deg] of the magnetization direction:
     90   -90

    local rotation matrix R:
      0     1     0
      0     0     1
      1     0     0

--> R rotates magnetization in local coordinates to:
    [0  0 -1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  1  0]
    theta, phi [deg] of direction [0 0 1]* inv(R):
     90    90

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000    1.0000    0.0000
    -0.0000    0.0000   -1.0000
    -1.0000         0    0.0000

=============== magnetization [1  0  0] ==================
--> from case.outsymso:
    magnetization direction:
    [1  0  0]
    theta , phi [deg] of the magnetization direction:
     90     0

    local rotation matrix R:
      0     0     1
      0     1     0
     -1     0     0

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [1  0  0]
    theta, phi [deg] of direction [0 0 1]* inv(R):
     90     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000         0    1.0000
          0    1.0000         0
    -1.0000         0    0.0000

=============== magnetization [1  1  0] ==================
--> from case.outsymso:
    magnetization direction:
    [1  1  0]
    theta , phi [deg] of the magnetization direction:
    90.0000   45.0000

    local rotation matrix R:
     0.7071    0.7071         0
    -0.7071    0.7071         0
          0         0    1.0000

--> R rotates magnetization in local coordinates to:
    [0  1  0]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  0  1]
    theta, phi [deg] of direction [0 0 1]* inv(R):
      0     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000   -0.7071    0.7071
     0.0000    0.7071    0.7071
    -1.0000         0    0.0000

=============== magnetization [-1  1  0] ==================
--> from case.outsymso:
    magnetization direction:
    [-1  1  0]
    theta , phi [deg] of the magnetization direction:
     90   135

    local rotation matrix R:
     0.7071    0.7071         0
    -0.7071    0.7071         0
          0         0    1.0000

--> R rotates magnetization in local coordinates to:
    [-1  0  0]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  0  1]
    theta, phi [deg] of direction [0 0 1]* inv(R):
      0     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
    -0.0000   -0.7071   -0.7071
     0.0000   -0.7071    0.7071
    -1.0000         0    0.0000

=============== magnetization [1  0  1] ==================
--> from case.outsymso:
    magnetization direction:
    [1  0  1]
    theta , phi [deg] of the magnetization direction:
    45.0000         0

    local rotation matrix R:
     0.7071         0    0.7071
          0    1.0000         0
    -0.7071         0    0.7071

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [1  0  1] /sqrt(2)
    theta, phi [deg] of direction [0 0 1]* inv(R):
     45     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.7071         0    0.7071
          0    1.0000         0
    -0.7071         0    0.7071

=============== magnetization [-1  0  1] ==================
--> from case.outsymso:
    magnetization direction:
    [-1  0  1]
    theta , phi [deg] of the magnetization direction:
    45.0000  180.0000

    local rotation matrix R:
     0.7071         0    0.7071
          0    1.0000         0
    -0.7071         0    0.7071

--> R rotates magnetization in local coordinates to:
    [-1  0  0]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [1  0  1] /sqrt(2)
    theta, phi [deg] of direction [0 0 1]* inv(R):
     45     0

    local rotational matrix inv(Rz(phi)*Ry(theta))
    -0.7071   -0.0000   -0.7071
     0.0000   -1.0000    0.0000
    -0.7071         0    0.7071

=============== magnetization [0  1  1] ==================
--> from case.outsymso:
    magnetization direction:
    [0  1  1]
    theta , phi [deg] of the magnetization direction:
    45.0000   90.0000

    local rotation matrix R:
          0    1.0000         0
    -0.7071         0    0.7071
     0.7071         0    0.7071

--> R rotates magnetization in local coordinates to:
    [0  0  1]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  1  1] /sqrt(2)
    theta, phi [deg] of direction [0 0 1]* inv(R):
     45    90

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000   -1.0000    0.0000
     0.7071    0.0000    0.7071
    -0.7071         0    0.7071

=============== magnetization [0 -1  1] ==================
--> from case.outsymso:
    magnetization direction:
    [0 -1  1]
    theta , phi [deg] of the magnetization direction:
    45.0000  -90.0000

    local rotation matrix R:
          0    1.0000         0
    -0.7071         0    0.7071
     0.7071         0    0.7071

--> R rotates magnetization in local coordinates to:
    [1  0  0]
---> calculated using [0 0 1]*inv(R) (should be equal to original
magnetization direction):
    direction [0 0 1]* inv(R):
    [0  1  1] /sqrt(2)
    theta, phi [deg] of direction [0 0 1]* inv(R):
     45    90

    local rotational matrix inv(Rz(phi)*Ry(theta))
     0.0000    1.0000    0.0000
    -0.7071    0.0000   -0.7071
    -0.7071         0    0.7071



=============================================================

Demonstration of agreement /disagreement between different magnetization
directions (using min/max values of bands energies from case.scf).

Fe90M011.scf

        TEMP.-SMEARING WITH    0.00100 Ry
           -S / Kb           =  -0.04331916
           -(T*S)/2          =  -0.00001083
           Chem Pot          =   0.56146384
          Bandranges (emin - emax) and occupancy:
:BAN00005:   5   -3.203498   -3.174295  1.00000000
:BAN00006:   6   -3.171357   -3.149080  1.00000000
:BAN00007:   7   -0.054271    0.327752  1.00000000
:BAN00008:   8   -0.026481    0.356817  1.00000000
:BAN00009:   9    0.317615    0.404465  1.00000000
:BAN00010:  10    0.328272    0.456932  1.00000000
:BAN00011:  11    0.397931    0.565096  0.99967998
:BAN00012:  12    0.434403    0.567639  0.99876893
:BAN00013:  13    0.478999    0.586333  0.94739559
:BAN00014:  14    0.490366    0.724342  0.80699622
:BAN00015:  15    0.497871    0.727020  0.23269306
:BAN00016:  16    0.537935    0.743654  0.01446622
:BAN00017:  17    0.585301    1.240659  0.00000000
:BAN00018:  18    0.659633    1.253887  0.00000000
:BAN00019:  19    1.079409    2.316910  0.00000000
:BAN00020:  20    1.132400    2.325113  0.00000000


Fe90M110.scf

        TEMP.-SMEARING WITH    0.00100 Ry
           -S / Kb           =  -0.04331917
           -(T*S)/2          =  -0.00001083
           Chem Pot          =   0.56146383
          Bandranges (emin - emax) and occupancy:
:BAN00005:   5   -3.203498   -3.174295  1.00000000
:BAN00006:   6   -3.171357   -3.149080  1.00000000
:BAN00007:   7   -0.054271    0.327752  1.00000000
:BAN00008:   8   -0.026481    0.356817  1.00000000
:BAN00009:   9    0.317615    0.404465  1.00000000
:BAN00010:  10    0.328272    0.456932  1.00000000
:BAN00011:  11    0.397931    0.565096  0.99967998
:BAN00012:  12    0.434403    0.567639  0.99876893
:BAN00013:  13    0.478999    0.586333  0.94739559
:BAN00014:  14    0.490366    0.724342  0.80699622
:BAN00015:  15    0.497871    0.727020  0.23269306
:BAN00016:  16    0.537935    0.743654  0.01446621
:BAN00017:  17    0.585301    1.240659  0.00000000
:BAN00018:  18    0.659633    1.253887  0.00000000
:BAN00019:  19    1.079409    2.316910  0.00000000
:BAN00020:  20    1.132400    2.325113  0.00000000


Fe90M111.scf

        TEMP.-SMEARING WITH    0.00100 Ry
           -S / Kb           =  -0.04328447
           -(T*S)/2          =  -0.00001082
           Chem Pot          =   0.56146363
          Bandranges (emin - emax) and occupancy:
:BAN00005:   5   -3.197547   -3.174311  1.00000000
:BAN00006:   6   -3.171839   -3.149067  1.00000000
:BAN00007:   7   -0.054271    0.327751  1.00000000
:BAN00008:   8   -0.026481    0.356803  1.00000000
:BAN00009:   9    0.317627    0.403701  1.00000000
:BAN00010:  10    0.328310    0.456492  1.00000000
:BAN00011:  11    0.397957    0.564929  0.99967626
:BAN00012:  12    0.435619    0.567481  0.99877522
:BAN00013:  13    0.479115    0.586291  0.94739913
:BAN00014:  14    0.490860    0.724103  0.80700461
:BAN00015:  15    0.498155    0.726810  0.23269240
:BAN00016:  16    0.537926    0.743612  0.01445238
:BAN00017:  17    0.587267    1.240146  0.00000000
:BAN00018:  18    0.660066    1.251573  0.00000000
:BAN00019:  19    1.079410    2.316909  0.00000000
:BAN00020:  20    1.132678    2.325112  0.00000000


Fe90M-111.scf

        TEMP.-SMEARING WITH    0.00100 Ry
           -S / Kb           =  -0.04789797
           -(T*S)/2          =  -0.00001197
           Chem Pot          =   0.56163733
          Bandranges (emin - emax) and occupancy:
:BAN00005:   5   -3.198998   -3.175979  1.00000000
:BAN00006:   6   -3.170037   -3.147328  1.00000000
:BAN00007:   7   -0.054242    0.325683  1.00000000
:BAN00008:   8   -0.026461    0.358349  1.00000000
:BAN00009:   9    0.316407    0.401506  1.00000000
:BAN00010:  10    0.332239    0.456761  1.00000000
:BAN00011:  11    0.401182    0.562328  0.99984698
:BAN00012:  12    0.436197    0.564146  0.99870885
:BAN00013:  13    0.479456    0.589858  0.94809096
:BAN00014:  14    0.491500    0.724473  0.80608702
:BAN00015:  15    0.497176    0.727119  0.23313029
:BAN00016:  16    0.538120    0.744071  0.01413589
:BAN00017:  17    0.587521    1.240370  0.00000000
:BAN00018:  18    0.661842    1.251413  0.00000000
:BAN00019:  19    1.079479    2.316905  0.00000000
:BAN00020:  20    1.134084    2.325068  0.00000000

-- 
------------------------------------------------------------------
Mgr. Jaroslav Hamrle, Ph.D.
Institute of Physics, room F232
Faculty of Mathematics and Physics
Charles University
Ke Karlovu 5
121 16 Prague
Czech Republic

tel: +420-95155 1340
email: hamrle at karlov.mff.cuni.cz
------------------------------------------------------------------



More information about the Wien mailing list