====== Number of states ====== ;;# asked by [[mailto:bodry.tegomo-chiogo@univ-lorraine.fr|BODRY TEGOMO CHIOGO]] (2021/01/20 20:34) ;;# == == Dear Quanty developers, I am working in the simulation of 3d XPS of cerium compounds with the full-multiplet configuration interaction approach. first of all, I started to calculate the ground state but I don't understand the number of states that Quanty gives in output when I take into account the spin orbit interaction. Indeed, wihtout spin orbit I got 6 states $f^1_{5/2}$,8 states $f^1_{7/2}$ and 1 states $f^0$. But when I take into account the spin orbit,the number of states corresponding to $f^1_{5/2}$ and $f^1_{7/2}$ are multiplied by 2 respectively. I got the same effet when i also took into account the crytal field. I expected to have same number of states with and without spin-orbit! Here is the 2 calculations with and without spin-orbit 1- without spin orbit i got 15 states: # 1 -2.4570 0.0000 0.0000 -0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.9773 13.0227 2 -2.4000 1.1490 8.8431 -2.8367 9.9921 1.3720 0.0000 0.0000 0.0000 1.0000 13.0000 3 -2.4000 1.2120 16.8268 -1.9485 18.0388 0.7827 0.0000 0.0000 0.0000 1.0000 13.0000 4 -2.4000 1.0000 14.0000 -2.0000 15.0000 -0.5000 0.0000 0.0000 0.0000 1.0000 13.0000 5 -2.4000 1.0749 18.3876 -1.5786 19.4626 -0.4384 0.0000 0.0000 0.0000 1.0000 13.0000 6 -2.4000 1.0000 20.0000 -1.0000 21.0000 -0.5000 0.0000 0.0000 0.0000 1.0000 13.0000 7 -2.4000 1.0641 22.9427 -0.5272 24.0068 -0.4663 0.0000 0.0000 0.0000 1.0000 13.0000 8 -2.4000 1.0000 22.0000 0.0000 23.0000 -0.5000 0.0000 0.0000 0.0000 1.0000 13.0000 9 -2.4000 1.0641 22.9426 0.5272 24.0067 -0.4663 0.0000 0.0000 0.0000 1.0000 13.0000 10 -2.4000 1.0000 20.0000 1.0000 21.0000 -0.5000 0.0000 0.0000 0.0000 1.0000 13.0000 11 -2.4000 1.0749 18.3874 1.5786 19.4623 -0.4384 0.0000 0.0000 0.0000 1.0000 13.0000 12 -2.4000 1.0000 14.0000 2.0000 15.0000 -0.5000 0.0000 0.0000 0.0000 1.0000 13.0000 13 -2.4000 1.2120 16.8269 1.9485 18.0388 0.7827 0.0000 0.0000 0.0000 1.0000 13.0000 14 -2.4000 1.1490 8.8429 2.8367 9.9919 1.3720 0.0000 0.0000 0.0000 1.0000 13.0000 15 0.0570 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0227 13.9773 2- With spin orbit : zeta_4f = 0.087 # 1 -2.7432 1.0430 1.0430 -0.0002 0.0000 -1.9753 0.0000 0.0000 0.0000 0.9913 13.0087 2 -2.7202 1.7551 11.7551 -2.8571 12.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 3 -2.7202 1.3299 13.1106 -2.4725 9.1628 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 4 -2.7202 1.5918 19.5918 -1.7143 20.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 5 -2.7202 1.4783 22.6103 -1.2270 16.4360 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 6 -2.7202 1.5102 23.5102 -0.5714 24.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 7 -2.7202 1.5266 25.7020 0.0001 18.8031 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 8 -2.7202 1.5102 23.5102 0.5714 24.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 9 -2.7202 1.4783 22.6099 1.2271 16.4357 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 10 -2.7202 1.5918 19.5918 1.7143 20.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 11 -2.7202 1.3298 13.1100 2.4726 9.1624 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 12 -2.7202 1.7551 11.7551 2.8571 12.0000 -2.0000 0.0000 0.0000 0.0000 1.0000 13.0000 13 -2.1945 0.9564 0.9564 -0.0003 0.0000 1.4667 0.0000 0.0000 0.0000 0.9853 13.0147 14 -2.1599 1.1096 9.9441 -2.7340 12.3684 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 15 -2.1599 1.7551 11.7551 -2.1429 12.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 16 -2.1599 1.3487 18.5540 -1.8112 24.0873 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 17 -2.1599 1.5918 19.5918 -1.2857 20.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 18 -2.1599 1.4886 23.5897 -0.9033 30.9415 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 19 -2.1599 1.5102 23.5102 -0.4286 24.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 20 -2.1599 1.5348 25.2543 0.0000 33.2072 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 21 -2.1599 1.5102 23.5102 0.4286 24.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 22 -2.1599 1.4886 23.5894 0.9033 30.9412 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 23 -2.1599 1.5918 19.5918 1.2857 20.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 24 -2.1599 1.3487 18.5535 1.8112 24.0867 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 25 -2.1599 1.7551 11.7551 2.1429 12.0000 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 26 -2.1599 1.1095 9.9436 2.7341 12.3677 1.5000 0.0000 0.0000 0.0000 1.0000 13.0000 27 0.0577 0.0006 0.0006 0.0000 -0.0000 0.0086 0.0000 0.0000 0.0000 0.0235 13.9765 below is the script I used: --Verbosity(0*0000) NF = 28 NB = 0 IndexDn_4f = {0,2,4,6,8,10,12} IndexUp_4f = {1,3,5,7,9,11,13} IndexDn_Lf = {14,16,18,20,22,24,26} IndexUp_Lf = {15,17,19,21,23,25,27} NElectrons_4f = 0 V = 0.1 Delta_4f_Lf_i = -2.4 NConfigurations = 2 Npsis = 27 OppSx_4f = NewOperator("Sx", NF, IndexUp_4f,IndexDn_4f) OppSy_4f = NewOperator("Sy", NF, IndexUp_4f,IndexDn_4f) OppSz_4f = NewOperator("Sz", NF, IndexUp_4f,IndexDn_4f) OppSsqr_4f = NewOperator("Ssqr", NF, IndexUp_4f,IndexDn_4f) OppSplus_4f = NewOperator("Splus", NF, IndexUp_4f,IndexDn_4f) OppSmin_4f = NewOperator("Smin", NF, IndexUp_4f,IndexDn_4f) OppLx_4f = NewOperator("Lx", NF, IndexUp_4f,IndexDn_4f) OppLy_4f = NewOperator("Ly", NF, IndexUp_4f,IndexDn_4f) OppLz_4f = NewOperator("Lz", NF, IndexUp_4f,IndexDn_4f) OppLsqr_4f = NewOperator("Lsqr", NF, IndexUp_4f,IndexDn_4f) OppLplus_4f = NewOperator("Lplus", NF, IndexUp_4f,IndexDn_4f) OppLmin_4f = NewOperator("Lmin", NF, IndexUp_4f,IndexDn_4f) OppJx_4f = NewOperator("Jx", NF, IndexUp_4f,IndexDn_4f) OppJy_4f = NewOperator("Jy", NF, IndexUp_4f,IndexDn_4f) OppJz_4f = NewOperator("Jz", NF, IndexUp_4f,IndexDn_4f) OppJsqr_4f = NewOperator("Jsqr", NF, IndexUp_4f,IndexDn_4f) OppJplus_4f = NewOperator("Jplus", NF, IndexUp_4f,IndexDn_4f) OppJmin_4f = NewOperator("Jmin", NF, IndexUp_4f,IndexDn_4f) Oppldots_4f = NewOperator("ldots", NF, IndexUp_4f,IndexDn_4f) -- Angular momentum operator for the figand f-shell OppSx_Lf = NewOperator("Sx", NF, IndexUp_Lf,IndexDn_Lf) OppSy_Lf = NewOperator("Sy", NF, IndexUp_Lf,IndexDn_Lf) OppSz_Lf = NewOperator("Sz", NF, IndexUp_Lf,IndexDn_Lf) OppSsqr_Lf = NewOperator("Ssqr", NF, IndexUp_Lf,IndexDn_Lf) OppSplus_Lf = NewOperator("Splus", NF, IndexUp_Lf,IndexDn_Lf) OppSmin_Lf = NewOperator("Smin", NF, IndexUp_Lf,IndexDn_Lf) OppLx_Lf = NewOperator("Lx", NF, IndexUp_Lf,IndexDn_Lf) OppLy_Lf = NewOperator("Ly", NF, IndexUp_Lf,IndexDn_Lf) OppLz_Lf = NewOperator("Lz", NF, IndexUp_Lf,IndexDn_Lf) OppLsqr_Lf = NewOperator("Lsqr", NF, IndexUp_Lf,IndexDn_Lf) OppLplus_Lf = NewOperator("Lplus", NF, IndexUp_Lf,IndexDn_Lf) OppLmin_Lf = NewOperator("Lmin", NF, IndexUp_Lf,IndexDn_Lf) OppJx_Lf = NewOperator("Jx", NF, IndexUp_Lf,IndexDn_Lf) OppJy_Lf = NewOperator("Jy", NF, IndexUp_Lf,IndexDn_Lf) OppJz_Lf = NewOperator("Jz", NF, IndexUp_Lf,IndexDn_Lf) OppJsqr_Lf = NewOperator("Jsqr", NF, IndexUp_Lf,IndexDn_Lf) OppJplus_Lf = NewOperator("Jplus", NF, IndexUp_Lf,IndexDn_Lf) OppJmin_Lf = NewOperator("Jmin", NF, IndexUp_Lf,IndexDn_Lf) Oppldots_Lf = NewOperator("ldots", NF, IndexUp_4f,IndexDn_4f) -- SUM OF THE OPERATOR OppSx = OppSx_4f + OppSx_Lf OppSy = OppSy_4f + OppSy_Lf OppSz = OppSz_4f + OppSz_Lf OppSsqr = OppSx*OppSx + OppSy*OppSy + OppSz*OppSz OppLx = OppLx_4f + OppLx_Lf OppLy = OppLy_4f + OppLy_Lf OppLz = OppLz_4f + OppLz_Lf OppLsqr = OppLx*OppLx + OppLy*OppLy + OppLz*OppLz OppJx = OppJx_4f + OppJx_Lf OppJy = OppJy_4f + OppJy_Lf OppJz = OppJz_4f + OppJz_Lf OppJsqr = OppJx*OppJx + OppJy*OppJy + OppJz*OppJz OppF0_4f = NewOperator("U", NF, IndexUp_4f, IndexDn_4f, {1, 0, 0, 0}) OppF2_4f = NewOperator("U", NF, IndexUp_4f, IndexDn_4f, {0, 1, 0, 0}) OppF4_4f = NewOperator("U", NF, IndexUp_4f, IndexDn_4f, {0, 0, 1, 0}) OppF6_4f = NewOperator("U", NF, IndexUp_4f, IndexDn_4f, {0, 0, 0, 1}) OppNUp_4f = NewOperator("Number", NF, IndexUp_4f,IndexUp_4f,{1,1,1,1,1,1,1}) OppNDn_4f = NewOperator("Number", NF, IndexDn_4f,IndexDn_4f,{1,1,1,1,1,1,1}) OppN_4f = OppNUp_4f + OppNDn_4f OppNUp_Lf = NewOperator("Number", NF, IndexUp_Lf,IndexUp_Lf,{1,1,1,1,1,1,1}) OppNDn_Lf = NewOperator("Number", NF, IndexDn_Lf,IndexDn_Lf,{1,1,1,1,1,1,1}) OppN_Lf = OppNUp_Lf + OppNDn_Lf -- spin orbit for the f shell and ligand shell zeta_4f_i = 0.087* 0.92 zeta_Lf_i = 0.087* 0.92 U_4f_4f_i = 0 F2_4f_4f_i = 0 * 0.55 F4_4f_4f_i = 0 * 0.55 F6_4f_4f_i = 0 * 0.55 F0_4f_4f_i = U_4f_4f_i + 4 / 195 * F2_4f_4f_i + 2 / 143 * F4_4f_4f_i + 100 / 5577 * F6_4f_4f_i Bz = 0.000001 H_i = Chop(F0_4f_4f_i *OppF0_4f + F2_4f_4f_i *OppF2_4f+ F4_4f_4f_i *OppF4_4f + F6_4f_4f_i *OppF6_4f + zeta_4f_i * Oppldots_4f + zeta_Lf_i * Oppldots_Lf + Bz*(2*OppSz_4f + OppLz_4f)) e_4f_i = (28 * Delta_4f_Lf_i - 27 * U_4f_4f_i * NElectrons_4f - U_4f_4f_i * NElectrons_4f^2) / (2 * (14 + NElectrons_4f)) e_Lf_i = NElectrons_4f * (-2 * Delta_4f_Lf_i + U_4f_4f_i * NElectrons_4f + U_4f_4f_i) / (2 * (NElectrons_4f + 14)) H_i = H_i + Chop( e_4f_i * OppN_4f + e_Lf_i * OppN_Lf) -- hybridization Hamiltonian OppV = NewOperator("Number", NF, IndexUp_4f,IndexUp_Lf, {1,1,1,1,1,1,1}) + NewOperator("Number", NF, IndexDn_4f,IndexDn_Lf, {1,1,1,1,1,1,1})+ NewOperator("Number", NF, IndexUp_Lf,IndexUp_4f, {1,1,1,1,1,1,1})+ NewOperator("Number", NF, IndexDn_Lf,IndexDn_4f, {1,1,1,1,1,1,1}) H_i = H_i +Chop(V*OppV) InitialRestrictions = {NF, NB, {" 11111111111111 00000000000000",NElectrons_4f,NElectrons_4f}, {" 00000000000000 11111111111111",14,14}} CalculationRestrictions = {NF, NB, {' 00000000000000 11111111111111', 14 - (NConfigurations - 1), 14}} psiList = Eigensystem(H_i, InitialRestrictions, Npsis, {{'restrictions', CalculationRestrictions}}) print(psiList[1]) -- weight of each configuration Oppf1 = NewOperator ( "Identity" , NF ) Oppf1.Restrictions = { NF , NB , { " 11111111111111 00000000000000" , 1 , 1 } } Oppf0 = NewOperator ( "Identity" , NF ) Oppf0.Restrictions = { NF , NB , { " 11111111111111 00000000000000" , 0 , 0 } } Oppf2 = NewOperator ( "Identity" , NF ) Oppf2.Restrictions = { NF , NB , { " 11111111111111 00000000000000" , 2 , 2 } } oppList={H_i, OppSsqr, OppLsqr,OppLz_4f, OppJsqr, Oppldots_4f, OppF2_4f, OppF4_4f, OppF6_4f,OppN_4f, OppN_Lf} print(" # "); for i = 1,#psiList do io.write(string.format("%3i ",i)) for j = 1,#oppList do expectationvalue = Chop(psiList[i]*oppList[j]*psiList[i]) io.write(string.format("%10.4f ",expectationvalue)) end io.write("\n") end print("Finished") Here is the Hybridization hamiltonien that I used OppV = NewOperator("Number", NF, IndexUp_4f,IndexUp_Lf, {1,1,1,1,1,1,1}) + NewOperator("Number", NF, IndexDn_4f,IndexDn_Lf, {1,1,1,1,1,1,1})+ NewOperator("Number", NF, IndexUp_Lf,IndexUp_4f, {1,1,1,1,1,1,1})+ NewOperator("Number", NF, IndexDn_Lf,IndexDn_4f, {1,1,1,1,1,1,1}) H_i = H_i +Chop(V*OppV) ~~DISCUSSION|Answers~~