Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
forum:data:2021:reuse_every_single_determinant_constituting_the_eigenstate [2021/11/11 11:11] – removed Ruiwen Xie | forum:data:2021:reuse_every_single_determinant_constituting_the_eigenstate [2021/11/11 12:21] (current) – Ruiwen Xie | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Reuse every single determinant constituting the eigenstate ====== | ||
+ | ;;# | ||
+ | asked by [[mailto: | ||
+ | ;;# | ||
+ | == == | ||
+ | <WRAP center box 100%> | ||
+ | Dear Quanty developers, | ||
+ | |||
+ | I am now trying to use quanty to build the model proposed by A.Kotani in PHYSICAL REVIEW B 78, 195115, 2008, in order to get the L23 XAS and XMCD for Ce-based compounds with Ce mix-valency. First I got the eigenstates for Ce 4f^0 and 4f^1 configurations (the script on this forum from BODRY TEGOMO CHIOGO is of great help for this part). | ||
+ | |||
+ | The following is the part of script to get eigenstates | ||
+ | |||
+ | < | ||
+ | Verbosity(0) | ||
+ | NF = 44 | ||
+ | NB = 0 | ||
+ | IndexDn_4f = {0, | ||
+ | IndexUp_4f = {1, | ||
+ | IndexDn_Lf = {14, | ||
+ | IndexUp_Lf = {15, | ||
+ | IndexDn_2p = {28,30,32} | ||
+ | IndexUp_2p = {29,31,33} | ||
+ | IndexDn_5d = {34, | ||
+ | IndexUp_5d = {35, | ||
+ | |||
+ | NElectrons_4f = 0 | ||
+ | V = 0.30001 | ||
+ | Delta_4f_Lf_i = -1.0 -- the 4f energy E_4f1L - E_4f0 | ||
+ | NConfigurations = 2 | ||
+ | Npsis =15 | ||
+ | |||
+ | OppSx_4f = NewOperator(" | ||
+ | OppSy_4f = NewOperator(" | ||
+ | OppSz_4f = NewOperator(" | ||
+ | OppSsqr_4f = NewOperator(" | ||
+ | OppSplus_4f = NewOperator(" | ||
+ | OppSmin_4f = NewOperator(" | ||
+ | |||
+ | OppLx_4f = NewOperator(" | ||
+ | OppLy_4f = NewOperator(" | ||
+ | OppLz_4f = NewOperator(" | ||
+ | OppLsqr_4f = NewOperator(" | ||
+ | OppLplus_4f = NewOperator(" | ||
+ | OppLmin_4f = NewOperator(" | ||
+ | |||
+ | OppJx_4f = NewOperator(" | ||
+ | OppJy_4f = NewOperator(" | ||
+ | OppJz_4f = NewOperator(" | ||
+ | OppJsqr_4f = NewOperator(" | ||
+ | OppJplus_4f = NewOperator(" | ||
+ | OppJmin_4f = NewOperator(" | ||
+ | Oppldots_4f = NewOperator(" | ||
+ | |||
+ | -- Angular momentum operator for the Ligand f-shell | ||
+ | OppSx_Lf = NewOperator(" | ||
+ | OppSy_Lf = NewOperator(" | ||
+ | OppSz_Lf = NewOperator(" | ||
+ | OppSsqr_Lf = NewOperator(" | ||
+ | OppSplus_Lf = NewOperator(" | ||
+ | OppSmin_Lf = NewOperator(" | ||
+ | |||
+ | OppLx_Lf = NewOperator(" | ||
+ | OppLy_Lf = NewOperator(" | ||
+ | OppLz_Lf = NewOperator(" | ||
+ | OppLsqr_Lf = NewOperator(" | ||
+ | OppLplus_Lf = NewOperator(" | ||
+ | OppLmin_Lf = NewOperator(" | ||
+ | | ||
+ | OppJx_Lf = NewOperator(" | ||
+ | OppJy_Lf = NewOperator(" | ||
+ | OppJz_Lf = NewOperator(" | ||
+ | OppJsqr_Lf = NewOperator(" | ||
+ | OppJplus_Lf = NewOperator(" | ||
+ | OppJmin_Lf = NewOperator(" | ||
+ | |||
+ | Oppldots_Lf = NewOperator(" | ||
+ | |||
+ | -- 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 | ||
+ | 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(" | ||
+ | OppF2_4f = NewOperator(" | ||
+ | OppF4_4f = NewOperator(" | ||
+ | OppF6_4f = NewOperator(" | ||
+ | |||
+ | OppNUp_4f = NewOperator(" | ||
+ | OppNDn_4f = NewOperator(" | ||
+ | OppN_4f = OppNUp_4f + OppNDn_4f | ||
+ | |||
+ | OppNUp_Lf = NewOperator(" | ||
+ | OppNDn_Lf = NewOperator(" | ||
+ | OppN_Lf = OppNUp_Lf + OppNDn_Lf | ||
+ | |||
+ | 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.001 | ||
+ | |||
+ | 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(" | ||
+ | NewOperator(" | ||
+ | NewOperator(" | ||
+ | NewOperator(" | ||
+ | |||
+ | H_i = H_i +Chop(V*OppV) | ||
+ | |||
+ | InitialRestrictions = {NF, NB, {" 11111111111111 00000000000000 000000 0000000000", | ||
+ | {" 00000000000000 00000000000000 111111 0000000000", | ||
+ | CalculationRestrictions = {NF, NB, {" 11111111111111 00000000000000 000000 0000000000", | ||
+ | |||
+ | psiList = Eigensystem(H_i, | ||
+ | print(Chop(psiList[1])) | ||
+ | |||
+ | -- weight of each configuration | ||
+ | Oppf1 = NewOperator ( " | ||
+ | Oppf1.Restrictions = { NF , NB , { " 11111111111111 00000000000000 000000 0000000000" | ||
+ | Oppf0 = NewOperator ( " | ||
+ | Oppf0.Restrictions = { NF , NB , { " 11111111111111 00000000000000 000000 0000000000" | ||
+ | |||
+ | oppList={H_i, | ||
+ | | ||
+ | print(" | ||
+ | |||
+ | for i = 1,#psiList do | ||
+ | io.write(string.format(" | ||
+ | for j = 1,#oppList do | ||
+ | expectationvalue = Chop(psiList[i]*oppList[j]*psiList[i]) | ||
+ | io.write(string.format(" | ||
+ | end | ||
+ | io.write(" | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | Then the output I got is as follows | ||
+ | < | ||
+ | WaveFunction: | ||
+ | QComplex | ||
+ | N = 27 (Number of basis functions used to discribe psi) | ||
+ | NFermionic modes = 44 (Number of fermions in the one particle basis) | ||
+ | NBosonic modes | ||
+ | |||
+ | # pre-factor | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 10 | ||
+ | 11 | ||
+ | 12 | ||
+ | 13 | ||
+ | 14 | ||
+ | 15 | ||
+ | 16 | ||
+ | 17 | ||
+ | 18 | ||
+ | 19 -1.437310483771E-01 | ||
+ | 20 -1.675216764579E-01 | ||
+ | 21 -1.914478021710E-01 | ||
+ | 22 -2.155103078794E-01 | ||
+ | 23 -2.397100828502E-01 | ||
+ | 24 -2.640480233188E-01 | ||
+ | 25 -2.885250325532E-01 | ||
+ | 26 -5.023566424930E-01 | ||
+ | 27 | ||
+ | |||
+ | # < | ||
+ | 1 -1.8044 | ||
+ | 2 -1.3223 | ||
+ | 3 -1.3223 | ||
+ | 4 -1.3223 | ||
+ | 5 -1.3223 | ||
+ | 6 -1.3223 | ||
+ | 7 -1.3223 | ||
+ | 8 -1.3223 | ||
+ | 9 -1.3223 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Then I defined the Hamiltonian for final state 4fLf2p^55d^1 | ||
+ | |||
+ | < | ||
+ | OppUdfG1 = NewOperator(" | ||
+ | |||
+ | -- soc in core 2p | ||
+ | Oppcldots=NewOperator(" | ||
+ | |||
+ | -- Coulomb interaction between 2p and 4f, omitted multipole part | ||
+ | OppUpfF0 = NewOperator(" | ||
+ | |||
+ | OppSz_5d = NewOperator(" | ||
+ | OppLz_5d = NewOperator(" | ||
+ | |||
+ | zeta_2p = 50 | ||
+ | G1df = 1.0 -- taken from Kotani PRB 78 195115 2008 | ||
+ | Upf = 10.5 -- taken from Kotani PRB 78 195115 2008 | ||
+ | |||
+ | e4ffinal = Delta_4f_Lf_i - 6*Upf | ||
+ | |||
+ | H_f = 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) + Bz*(2*OppSz_5d + OppLz_5d) + zeta_2p * Oppcldots) + Chop(G1df * OppUdfG1 + Upf * OppUpfF0) + Chop(e4ffinal * OppN_4f) | ||
+ | |||
+ | -- setting up the transition operators with various polarisations for 2p-->5d excitation | ||
+ | -- Dipole X | ||
+ | t=math.sqrt(1/ | ||
+ | Akm = {{1, | ||
+ | TXASx = NewOperator(" | ||
+ | --print(OperatorToMatrix(TXASx)) | ||
+ | -- Dipole Y | ||
+ | Akm = {{1, | ||
+ | TXASy = NewOperator(" | ||
+ | -- Dipole Z | ||
+ | Akm = {{1,0,1}} ; | ||
+ | TXASz = NewOperator(" | ||
+ | |||
+ | --- right circular polarisation | ||
+ | TXASr = t*(TXASx - I * TXASy) | ||
+ | --- left circular polarisation | ||
+ | TXASl =-t*(TXASx + I * TXASy) | ||
+ | |||
+ | --get spectrum | ||
+ | Spectra_z = CreateSpectra(H_f, | ||
+ | Spectra_r = CreateSpectra(H_f, | ||
+ | Spectra_l = CreateSpectra(H_f, | ||
+ | |||
+ | Spectra_ave = (Spectra_z + Spectra_r + Spectra_l)/ | ||
+ | Spectra_XMCD = Spectra_r - Spectra_l | ||
+ | </ | ||
+ | |||
+ | Following the model given by A.Kotani, in order to get proper XMCD, one should rescale the transition operator based on the exchange between 4f and 5d, i.e., the 4f spin for Ce can be fixed according to Hund's rule, and the transition from 2p to 5d thus has preference due to the 4f and 5d exchange. They introduced an enhance parameter alpha and renormalize the transition operator by sqrt(1-alpha*E_df_ex) to consider such effect, where E_df_ex is the exchange interaction energy between 4f and 5d states. | ||
+ | |||
+ | As I understand from the Quanty output, the first eigenstate is a combination of several determinants. I want to find a way to easily reuse every determinant, | ||
+ | < | ||
+ | wf1 = NewWavefunction(NF, | ||
+ | </ | ||
+ | so that I can first get the corresponding TXASr|wf1> | ||
+ | |||
+ | So my question is, is there any way to call every determinant in psiList[1] as shown in the output above and reuse them in the script ? | ||
+ | Or is this a correct way to renormalize the transition intensity? I am very appreciated if you could tell me your opinions on this regard. | ||
+ | |||
+ | Thanks a lot for your help! | ||
+ | |||
+ | Best Regards, | ||
+ | Ruiwen | ||
+ | |||
+ | </ | ||
+ | |||
+ | ~~DISCUSSION|Answers~~ | ||