def get_interaction_hamiltonian(parms, spin_names, flavor_names, is_kanamori): U_int = parms['U'] J_hund = parms['J'] if is_kanamori: U, Uprime = triqs_ops_util.U_matrix_kanamori(parms['NFLAVORS'], U_int, J_hund) ham = triqs_ops_util.h_int_kanamori(spin_names, flavor_names, U, Uprime, J_hund, off_diag=False) else: # Slater-type interaction l_number = (parms['NFLAVORS']-1)/2 U = triqs_ops_util.U_matrix(l=lnumber, U_int=U_int, J_hund=J_hund, basis='cubic') ham = triqs_ops_util.h_int_slater(spin_names, flavor_names, U, off_diag=False) return ham
# Block structure of Green's functions # gf_struct = {'up':[0,1,2,3,4], 'down':[0,1,2,3,4]} # This can be computed using the TRIQS function as follows: gf_struct = op.set_operator_structure(spin_names, orb_names, off_diag=off_diag) # Construct the 4-index U matrix U_{ijkl} # The spherically-symmetric U matrix is parametrised by the radial integrals # F_0, F_2, F_4, which are related to U and J. We use the functions provided # in the TRIQS library to construct this easily: U_mat = op.U_matrix(l=l, U_int=U, J_hund=J, basis='spherical') # Set the interacting part of the local Hamiltonian # Here we use the full rotationally-invariant interaction parametrised # by the 4-index tensor U_{ijkl}. # The TRIQS library provides a function to build this Hamiltonian from the U tensor: H = op.h_int_slater(spin_names, orb_names, U_mat, off_diag=off_diag) # Construct the solver S = Solver(beta=beta, gf_struct=gf_struct) # Set the hybridization function and G0_iw for the Bethe lattice delta_iw = GfImFreq(indices=[0], beta=beta) delta_iw << (half_bandwidth / 2.0)**2 * SemiCircular(half_bandwidth) for name, g0 in S.G0_iw: g0 << inverse(iOmega_n + mu - delta_iw) # Now start the DMFT loops for i_loop in range(n_loop): # Determine the new Weiss field G0_iw self-consistently if i_loop > 0:
# Block structure of Green's functions # gf_struct = {'up':[0,1,2,3,4], 'down':[0,1,2,3,4]} # This can be computed using the TRIQS function as follows: gf_struct = op.set_operator_structure(spin_names,orb_names,off_diag=off_diag) # Construct the 4-index U matrix U_{ijkl} # The spherically-symmetric U matrix is parametrised by the radial integrals # F_0, F_2, F_4, which are related to U and J. We use the functions provided # in the TRIQS library to construct this easily: U_mat = op.U_matrix(l=l, U_int=U, J_hund=J, basis='spherical') # Set the interacting part of the local Hamiltonian # Here we use the full rotationally-invariant interaction parametrised # by the 4-index tensor U_{ijkl}. # The TRIQS library provides a function to build this Hamiltonian from the U tensor: H = op.h_int_slater(spin_names,orb_names,U_mat,off_diag=off_diag) # Construct the solver S = Solver(beta=beta, gf_struct=gf_struct) # Set the hybridization function and G0_iw for the Bethe lattice delta_iw = GfImFreq(indices=[0], beta=beta) delta_iw << (half_bandwidth/2.0)**2 * SemiCircular(half_bandwidth) for name, g0 in S.G0_iw: g0 << inverse(iOmega_n + mu - delta_iw) # Now start the DMFT loops for i_loop in range(n_loop): # Determine the new Weiss field G0_iw self-consistently if i_loop > 0: g_iw = GfImFreq(indices=[0], beta=beta)