TRIQS/triqs_modest 3.3.0
Modular Electronic Structure Toolkit
Loading...
Searching...
No Matches
downfolding.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 <type_traits>
9#include "./local_space.hpp"
11#include "utils/nda_supp.hpp"
12
13namespace triqs::modest {
14
24 [[nodiscard]] inline long sigma_to_data_idx(spin_kind_e spin_kind, long sigma) { return (spin_kind == spin_kind_e::Polarized) ? sigma : 0; };
25
39 nda::array<dcomplex, 4> H_k;
40 nda::array<long, 2> n_bands_per_k;
41 nda::array<double, 1> k_weights;
43
44 // public:
45 // /// Constructor
46 // band_dispersion(spin_kind_e spin_kind, nda::array<dcomplex, 4> H_k, nda::array<long, 2> n_bands_per_k,
47 // nda::array<double, 1> k_weights)
48 // : spin_kind(spin_kind),
49 // H_k(std::move(H_k)),
50 // n_bands_per_k(std::move(n_bands_per_k)),
51 // _k_weights(std::move(k_weights)) {
52 // // TODO add some checks on the data ?
53 // }
54
63 [[nodiscard]] nda::matrix_const_view<dcomplex> H(long sigma, long k_idx) const {
64 auto sigma_p = sigma_to_data_idx(spin_kind, sigma);
65 auto R_nu = nda::range(n_bands_per_k(k_idx, sigma_p));
66 return H_k(k_idx, sigma_p, R_nu, R_nu);
67 }
68
70 [[nodiscard]] long N_nu(long sigma, long k_idx) const { return n_bands_per_k(k_idx, sigma_to_data_idx(spin_kind, sigma)); }
71
73 [[nodiscard]] long n_k() const { return H_k.extent(0); }
74
75 // /// Weight of k point (typically from DFT code).
76 // [[nodiscard]] double k_weights(long k_idx) const { return _k_weights(k_idx); }
77
79 friend std::ostream &operator<<(std::ostream &out, band_dispersion const &bd);
80 };
81
113 nda::array<dcomplex, 4> P_k;
114 nda::array<long, 2> n_bands_per_k;
115
116 // public:
117 // /// Constructor
118 // downfolding_projector(spin_kind_e spin_kind, nda::array<dcomplex, 4> P_k, nda::array<long, 2> n_bands_per_k)
119 // : spin_kind(spin_kind), P_k(std::move(P_k)), n_bands_per_k(std::move(n_bands_per_k)) {}
120
121 // ----------------- accessors --------------------
122 // FIXME : SWAP k and sigma in data
123
132 [[nodiscard]] nda::matrix_const_view<dcomplex> P(long sigma, long k_idx) const {
133 auto sigma_p = sigma_to_data_idx(spin_kind, sigma);
134 auto R_nu = nda::range(n_bands_per_k(k_idx, sigma_p));
135 return P_k(k_idx, sigma_p, r_all, R_nu);
136 }
137
139 downfolding_projector rotate_local_basis(nda::array<nda::matrix<dcomplex>, 2> const &U) const;
140
142 friend std::ostream &operator<<(std::ostream &out, downfolding_projector const &proj);
143 };
144
145 // ------------------------------------------------------------
156
157 std::ostream &operator<<(std::ostream &out, one_body_elements_on_grid const &);
158 void h5_read(h5::group g, std::string const &name, one_body_elements_on_grid &x);
159 void h5_write(h5::group g, std::string const &name, one_body_elements_on_grid const &x);
160
161 //-------------------------------------------------------------
162 one_body_elements_on_grid permute_local_space(std::vector<std::vector<long>> const &atom_partition, one_body_elements_on_grid const &x);
163
164 // -------------------------------------------------------------
166 one_body_elements_on_grid rotate_local_basis(nda::array<nda::matrix<dcomplex>, 2> const &U, one_body_elements_on_grid const &x);
167 // -------------------------------------------------------------
168
170
178 nda::array<nda::matrix<dcomplex>, 2> impurity_levels(one_body_elements_on_grid const &obe);
179 // -------------------------------------------------------------
180
181 // These functions are not part of the public API: not documented, not wrapped.
182 namespace detail {
184 nda::array<dcomplex, 3> G0_C_k_sigma(one_body_elements_on_grid const &obe, double mu, long k_idx, long sigma, std::vector<dcomplex> const &omegas,
185 bool mu_derivative = false);
186 } // namespace detail
187
188} // namespace triqs::modest
Describe the atomic orbitals within downfolded space.
#define C2PY_IGNORE
Definition defs.hpp:17
nda::array< nda::matrix< dcomplex >, 2 > impurity_levels(one_body_elements_on_grid const &obe)
Compute the local impurity levels from the single-particle dispersion.
one_body_elements_on_grid rotate_local_basis(nda::array< nda::matrix< dcomplex >, 2 > const &U, one_body_elements_on_grid const &x)
Rotates the local basis of the downfolding projector.
std::ostream & operator<<(std::ostream &out, one_body_elements_on_grid const &)
Definition printing.cpp:73
void h5_write(h5::group g, std::string const &name, initial_data const &data)
long sigma_to_data_idx(spin_kind_e spin_kind, long sigma)
Map a spin index to a data index.
spin_kind_e
Kind of σ index.
one_body_elements_on_grid permute_local_space(std::vector< std::vector< long > > const &atom_partition, one_body_elements_on_grid const &obe)
void h5_read(h5::group g, std::string const &name, initial_data &data)
static constexpr auto r_all
Definition defs.hpp:40
The one-body dispersion as a function of momentum.
bool matrix_valued
Is the dispersion matrix-valued?
nda::array< long, 2 > n_bands_per_k
Number of bands for each k-point and .
nda::array< double, 1 > k_weights
Weight in the BZ for each k-point.
nda::array< dcomplex, 4 > H_k
Hamiltonian .
long n_k() const
Number of k-points in the grid.
friend std::ostream & operator<<(std::ostream &out, band_dispersion const &bd)
Print information about a band_dispersion object.
Definition printing.cpp:14
long N_nu(long sigma, long k_idx) const
Number of bands for a given k-point and spin .
nda::matrix_const_view< dcomplex > H(long sigma, long k_idx) const
Get for a given and .
spin_kind_e spin_kind
Spin kind of the one-body data.
The projector that downfolds the energy bands onto a set of localized atomic-like orbitals.
nda::matrix_const_view< dcomplex > P(long sigma, long k_idx) const
Get for a given and .
spin_kind_e spin_kind
Spin kind of the one-body data.
nda::array< dcomplex, 4 > P_k
Projector .
friend std::ostream & operator<<(std::ostream &out, downfolding_projector const &proj)
Print information about a downfolding_projector object.
Definition printing.cpp:26
nda::array< long, 2 > n_bands_per_k
Number of bands for each k-point and .
downfolding_projector rotate_local_basis(nda::array< nda::matrix< dcomplex >, 2 > const &U) const
Rotates the local basis of the downfolding projector.
A one-body elements struct where all of the underlying data exists on a fixed momentum grid.
band_dispersion H
Band dispersion.
downfolding_projector P
Downfolding projector .
C2PY_IGNORE std::optional< ibz_symmetry_ops > ibz_symm_ops
IBZ symmetrizer after a k-sum.