mirror of
https://github.com/triqs/dft_tools
synced 2024-06-30 00:44:34 +02:00
f803c13285
* hamiltonians contains functions to create basic hamiltonians * Us are now computed by a compact python script * solver_multiband sets up the local problem for LDA+DMFT
42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
from itertools import product
|
|
from hamiltonians import *
|
|
|
|
class LocalProblem():
|
|
|
|
def __init__(self,spin_names,orb_names,orb_hyb,h_loc_type,**h_loc_params):
|
|
|
|
self.spin_names = spin_names
|
|
self.orb_names = orb_names
|
|
self.orb_hyb = orb_hyb
|
|
self.h_loc_type = h_loc_type
|
|
self.h_loc_params = h_loc_params
|
|
|
|
self.gf_struct = self.get_gf_struct()
|
|
self.h_loc = self.get_h_loc()
|
|
|
|
# Set block structure of GF
|
|
def get_gf_struct(self):
|
|
gf_struct = {}
|
|
if self.orb_hyb: # outer blocks are spin blocks
|
|
for sn in self.spin_names:
|
|
gf_struct[sn] = [int(i) for i in self.orb_names]
|
|
else: # outer blocks are spin-orbital blocks
|
|
for sn, an in product(self.spin_names,self.orb_names):
|
|
gf_struct[sn+'_'+an] = [0]
|
|
|
|
return gf_struct
|
|
|
|
# Pick desired Hamiltonian
|
|
def get_h_loc(self):
|
|
|
|
if self.h_loc_type == "slater":
|
|
return h_loc_slater(self.spin_names,self.orb_names,self.orb_hyb,**self.h_loc_params) # h_loc_params must include U_matrix, and optionally H_dump
|
|
elif self.h_loc_type == "kanamori":
|
|
return h_loc_kanamori(self.spin_names,self.orb_names,self.orb_hyb,**self.h_loc_params) # h_loc_params must include U, Uprime, J_hund, and optionally H_dump
|
|
elif self.h_loc_type == "density":
|
|
return h_loc_density(self.spin_names,self.orb_names,self.orb_hyb,**self.h_loc_params) # h_loc_params must include U, Uprime, and optionally H_dump
|
|
elif self.h_loc_type == "other":
|
|
return self.h_loc_params["h_loc"] # user provides h_loc with argument h_loc
|
|
else:
|
|
raise RuntimeError("Hamiltonian type not implemented.")
|