TRIQS/triqs_modest 3.3.0
Modular Electronic Structure Toolkit
Loading...
Searching...
No Matches
hamiltonians.hpp
Go to the documentation of this file.
1// Copyright (c) 2025--present, The Simons Foundation
2// This file is part of TRIQS/modest and is licensed under the terms of GPLv3 or later.
3// SPDX-License-Identifier: GPL-3.0-or-later
4// See LICENSE in the root of this distribution for details.
5
6#pragma once
7#include <triqs/gfs.hpp>
8#include <triqs/operators.hpp>
9#include <triqs/operators/many_body_operator.hpp>
10
11using namespace triqs::gfs;
12
13namespace triqs {
14
30 std::pair<nda::matrix<double>, nda::matrix<double>> U_matrix_kanamori(long n_orb, double U_int, double U_prime, double J_hund);
31
48 nda::array<double, 4> U_matrix_slater_spherical(long l, double U_int, double J_hund);
49
60 nda::array<dcomplex, 4> U_matrix_slater_local(long l, nda::matrix<dcomplex> s2l, double U_int, double J_hund);
61
63
69 using op_name = std::pair<std::string, int>;
70
71 operators::many_body_operator rename_op(operators::many_body_operator const &op, std::map<op_name, op_name> const &map);
72
74 bool spin_flip = true;
75 bool pair_hopping = true;
76 };
77
78 operators::many_body_operator h_int_kanamori(nda::matrix<double> const &U, nda::matrix<double> const &Uprime, double const &J_hund,
79 int const &n_orb, std::vector<std::string> const &spin_names, kanamori_params const &params = {});
80
81 operators::many_body_operator h_int_density(nda::matrix<double> const &U, nda::matrix<double> const &Uprime, double const &J_hund, int const &n_orb,
82 std::vector<std::string> const &spin_names);
83
84 operators::many_body_operator h_int_slater(nda::array<dcomplex, 4> const &U, int const &n_orb, std::vector<std::string> const &spin_names);
85
103 operators::many_body_operator make_density_density(std::vector<std::string> const &tau_names, std::vector<long> const &dim_gamma, double U_int,
104 double U_prime, double J_hund);
105
126 operators::many_body_operator make_kanamori(std::vector<std::string> const &tau_names, std::vector<long> const &dim_gamma, double U_int,
127 double U_prime, double J_hund, bool spin_flip = true, bool pair_hopping = true);
145 operators::many_body_operator make_slater(std::vector<std::string> const &tau_names, std::vector<long> const &dim_gamma, double U_int,
146 double J_hund, nda::matrix<dcomplex> const &spherical_to_dft,
147 std::optional<nda::matrix<dcomplex>> const &dft_to_local);
149
150} // namespace triqs
std::pair< nda::matrix< double >, nda::matrix< double > > U_matrix_kanamori(long n_orb, double U_int, double U_prime, double J_hund)
construct the Kanamori two-index interaction matrix for parallel and anti-parallel spins.
operators::many_body_operator make_density_density(const std::vector< std::string > &tau_names, const std::vector< long > &dim_gamma, double U_int, double U_prime, double J_hund)
Construct a density-density interaction Hamiltonian.
operators::many_body_operator make_slater(std::vector< std::string > const &tau_names, std::vector< long > const &dim_gamma, double U_int, double J_hund, nda::matrix< dcomplex > const &spherical_to_dft, std::optional< nda::matrix< dcomplex > > const &dft_to_local)
Construct a Slater Hamiltonian.
nda::array< double, 4 > U_matrix_slater_spherical(long l, double U_int, double J_hund)
Construct a four-index Coulomb tensor in the basis of spherical harmonics.
nda::array< dcomplex, 4 > U_matrix_slater_local(long l, nda::matrix< dcomplex > sph_to_local, double U_int, double J_hund)
Construct a four-index Coulomb tensor in a specific orbital basis.
operators::many_body_operator make_kanamori(std::vector< std::string > const &tau_names, std::vector< long > const &dim_gamma, double U_int, double U_prime, double J_hund, bool spin_flip, bool pair_hopping)
Construct a Hubbard-Kanamori Hamiltonian.
operators::many_body_operator rename_op(operators::many_body_operator const &op, std::map< op_name, op_name > const &op_map)
operators::many_body_operator h_int_slater(nda::array< dcomplex, 4 > const &Umatrix, int const &n_orb, std::vector< std::string > const &spin_names)
std::pair< std::string, int > op_name
operators::many_body_operator h_int_density(nda::matrix< double > const &Umat, nda::matrix< double > const &Upmat, double const &J_hund, int const &n_orb, std::vector< std::string > const &spin_names)
operators::many_body_operator h_int_kanamori(nda::matrix< double > const &Umat, nda::matrix< double > const &Upmat, double const &J_hund, int const &n_orb, std::vector< std::string > const &spin_names, kanamori_params const &params)