Skip to content

Commit

Permalink
[feat] add kanamori density density type interaction to use cubic U/J…
Browse files Browse the repository at this point in the history
… params
  • Loading branch information
the-hampel committed Jun 12, 2024
1 parent 35c22cc commit 353858e
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 11 deletions.
25 changes: 17 additions & 8 deletions python/solid_dmft/dmft_tools/interaction_hamiltonian.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def _adapt_U_4index_for_SO(Umat_full):
return Umat_full_SO


def _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh):
def _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh, den_den=False):
"""
Constructs the Kanamori interaction Hamiltonian. Only Kanamori does not
need the full four-index matrix. Therefore, we can construct it directly
Expand Down Expand Up @@ -209,17 +209,22 @@ def _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh):
else:
up = U_prime
j = general_params['J'][icrsh]
h_int = ftps.solver_core.HInt(u=general_params['U'][icrsh], j=j, up=up, dd=False)
h_int = ftps.solver_core.HInt(u=general_params['U'][icrsh], j=j, up=up, dd=den_den)
elif sum_k.SO == 0:
# Constructs U matrix
Umat, Upmat = util.U_matrix_kanamori(n_orb=n_orb, U_int=general_params['U'][icrsh],
J_hund=general_params['J'][icrsh],
Up_int=U_prime)

h_int = util.h_int_kanamori(sum_k.spin_block_names[sum_k.SO], n_orb,
map_operator_structure=sum_k.sumk_to_solver[icrsh],
U=Umat, Uprime=Upmat, J_hund=general_params['J'][icrsh],
H_dump=os.path.join(general_params['jobname'], f'H_imp{icrsh}.txt'))
if den_den:
h_int = util.h_int_density(sum_k.spin_block_names[sum_k.SO], n_orb,
map_operator_structure=sum_k.sumk_to_solver[icrsh],
U=Umat, Uprime=Upmat,
H_dump=os.path.join(general_params['jobname'], f'H_imp{icrsh}.txt'))
else:
h_int = util.h_int_kanamori(sum_k.spin_block_names[sum_k.SO], n_orb,
map_operator_structure=sum_k.sumk_to_solver[icrsh],
U=Umat, Uprime=Upmat, J_hund=general_params['J'][icrsh],
H_dump=os.path.join(general_params['jobname'], f'H_imp{icrsh}.txt'))
else:
h_int = _construct_kanamori_soc(general_params['U'][icrsh], general_params['J'][icrsh],
n_orb, sum_k.sumk_to_solver[icrsh],
Expand Down Expand Up @@ -536,7 +541,11 @@ def construct(sum_k, general_params, solver_type_per_imp, gw_params=None):

# Kanamori
if general_params['h_int_type'][icrsh] == 'kanamori':
h_int[icrsh] = _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh)
h_int[icrsh] = _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh, den_den=False)
continue

if general_params['h_int_type'][icrsh] == 'kanamori_den_den':
h_int[icrsh] = _construct_kanamori(sum_k, general_params, solver_type_per_imp, icrsh, den_den=True)
continue

# for density density or full slater get full four-index U matrix
Expand Down
3 changes: 2 additions & 1 deletion python/solid_dmft/io_tools/documentation.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,9 @@ h_int_basis : string, default = 'triqs'
h_int_type : string, mandatory
interaction type:

* density_density: used for full d-shell or eg- or t2g-subset
* density_density: used for full d-shell or eg- or t2g-subset (with U=F0, J=(F2+F4)/14)
* kanamori: only physical for the t2g or the eg subset
* kanamori_den_den: density density form of Kanamori, but with Kanamori U and J
* full_slater: used for full d-shell or eg- or t2g-subset
* ntot: U/2 (Ntot^2 - Ntot) interaction
* simple_intra: density-density like but only intra orbital with given U value (no rotations applied)
Expand Down
3 changes: 2 additions & 1 deletion python/solid_dmft/io_tools/verify_input_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def _verify_input_params_general(params: FullConfig) -> None:
h_int_type_options = (
'density_density',
'kanamori',
'kanamori_den_den',
'full_slater',
'crpa',
'crpa_density_density',
Expand Down Expand Up @@ -142,7 +143,7 @@ def verify_h5_dependent(sum_k, solver_type_per_imp, general_params):
'"ratio_F4_F2" only considered for interaction Hamiltonians "density_density" and "slater". '
'Please set to None for all other Hamiltonians.'
)
if any(h != 'kanamori' and up is not None for h, up in zip(general_params['h_int_type'], general_params['U_prime'])):
if any(h not in ('kanamori', 'kanmori_den_den') and up is not None for h, up in zip(general_params['h_int_type'], general_params['U_prime'])):
raise ValueError(
'"U_prime" only considered for interaction Hamiltonian "kanamori". ' 'Please set to None for all other Hamiltonians.'
)
2 changes: 1 addition & 1 deletion test/python/svo_cthyb_basic_crm/dmft_config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ prec_mu = 0.001
n_iw = 501
n_tau = 10001

h_int_type = "kanamori"
h_int_type = "kanamori_den_den"
U = 8.0
J = 0.65

Expand Down

0 comments on commit 353858e

Please sign in to comment.