This is an old revision of the document!


MLFT Rotation Matrix (YtoZMatrix) and Ligand Orbitals

asked by Hamza (2024/12/05 05:41)

Dear Quanty Developer,

Following the tutorial DFT to MLFT, I obtained the following after applying the rotation matrix:

Number of atoms: 3 # 0 | Fe (26) at position {1.9832912, 1.9832912, 1.9832912}

    | 3d shell with 5 orbitals {d_{xy}, d_{yz}, d_{3z^2-r^2}, d_{xz}, d_{x^2-y^2}}

# 1 | Ligand_1 (26) at position {1.9832912, 1.9832912, 1.9832912}

    | 3d shell with 5 orbitals {d_{xy}, d_{yz}, d_{3z^2-r^2}, d_{xz}, d_{x^2-y^2}}

# 2 | Ligand_2 (0) at position {0.0000000, 0.0000000, 0.0000000}

    | X2 shell with 2 orbitals {X0, X1}

To include the other 4 fermions, I used:

Index, NFermi = CreateAtomicIndicesDict({“Fe_3d”, “Ligand_d”, “Fe_3d32”}) However, I am unsure how to define the transformation matrix (ZtoYMatrix) for converting spherical harmonics to tesseral harmonics. I used the following:

OppUpdF0 = Rotate(NewOperator(“U”, NFermi, Index[“Fe_2p_Up”], Index[“Fe_2p_Dn”], Index[“Fe_3d_Up”], Index[“Fe_3d_Dn”], {1, 0}, {0, 0}), YtoZMatrix({“Fe_3d”, “Ligand_d”, “Fe_3d32”})) Additionally, when attempting to include the orbitals for the extra ligand, which has 4 electrons, I encountered an issue. No orbital type (s, p, d, etc.) seems to match this definition.

Could you please advise on the correct method for addressing this situation?

Thank you for your time and assistance.

Best regards, Hamza

Answers

, 2024/12/12 08:17, 2024/12/12 08:17

Dear Hamza,

The reason to add these rotations of operators is to make sure you work on the same one particle basis for all your operators. Quanty normally works on a basis of complex spherical harmonics $Y_{l,m}$ FPLO and several other DFT codes work on a basis of the real tesseral harmonics $Z_{l,m}$. In order to add two operators we need to make sure both are defined on the same basis.

In the tutorials we normally take the DFT basis of tesseral harmonics and rotate the local standard operators, such as Coulomb interaction, angular momentum operators and spin-orbit coupling.

Your basis has 3 shells: Fe_d, Ligand_d and Ligand_X, with multiplicities 10, 10, 4 respectively. I assume you define a local Coulomb operator acting on the Fe_d shell as well as the angular momentum operator acting on the Fe_d shell. These are defined on a basis of complex spherical harmonics Y and need to be rotated to the tesseral harmonics. For this we need to define a matrix of dimension 10+10+4 = 24

We can use the function YtoZMatrix(“…”) to get a transformation matrix of an atomic sub-shell with specific angular momentum. i.e. the code

T = YtoZMatrix("d")
print(T)

yields the output

{ { (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , (0 - 0.70710678118655 I) , 0 } , 
  { 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , (0 - 0.70710678118655 I) } , 
  { 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , -0.70710678118655 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , -0.70710678118655 , 0 , 0 } , 
  { 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.70710678118655 , 0 } , 
  { 0 , 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.70710678118655 } }

If you have an operator that only acts on the Fe_d shell you only need to rotate this shell from Y to Z. The following rotation matrix thus would suffice

T = Matrix.Flatten({{YtoZMatrix("d"), 0                  , 0                  },
                    {0              , Matrix.Identity(10), 0                  },
                    {0              , 0                  , Matrix.Identity(4) }})

We can print the matrix to see how it looks like

print(T)

with the output

{ { (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , (0 - 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , (0 - 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , (0 + 0.70710678118655 I) , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , -0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , -0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0.70710678118655 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 } , 
  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 } }

A small warning, it seems you not only have the Fe_3d, Ligand_3d and Ligand_X shells, but also an Fe_2p shell in the basis. You thus need to add an additional 6 states or Fe_2p shell to the basis.

Best wishes, Maurits

You could leave a comment if you were logged in.
Print/export