Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion c++/triqs_modest/density.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace triqs::modest {
for (auto k_idx : mpi::chunk(nda::range(obe.H.n_k()), comm)) {
for (auto sigma : nda::range(obe.C_space.n_sigma())) {
double KS_term_acc = 0;
auto eps = nda::linalg::eigenvalues(nda::matrix<dcomplex>{obe.H.H(sigma, k_idx)});
auto eps = nda::linalg::eigvalsh(nda::matrix<dcomplex>{obe.H.H(sigma, k_idx)});
for (auto nu : range(obe.H.N_nu(sigma, k_idx))) { KS_term_acc += Fermi(beta * (eps(nu) - mu)); }
KS_term += obe.H.k_weights(k_idx) * KS_term_acc;
}
Expand Down
3 changes: 2 additions & 1 deletion c++/triqs_modest/density.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,10 @@ namespace triqs::modest {
};

auto Glatt = [&](auto &k_idx, auto &sigma) {
using nda::linalg::inv;
auto out = gf{mesh};
for (auto &&[n, w] : enumerate(mesh)) {
out.data()(n) = trace(inverse(w + mu - obe.H.H(sigma, k_idx) - PSP(n, k_idx, sigma)) - inverse(w + mu - obe.H.H(sigma, k_idx)));
out.data()(n) = trace(inv(w + mu - obe.H.H(sigma, k_idx) - PSP(n, k_idx, sigma)) - inv(w + mu - obe.H.H(sigma, k_idx)));
}
return out;
};
Expand Down
6 changes: 4 additions & 2 deletions c++/triqs_modest/gloc_fixed_grid.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,14 @@ namespace triqs::modest {
constexpr auto local_gf_at_k(one_body_elements_on_grid const &obe, double const &mu, downfolding_projector const &Proj,
block2_gf<Mesh, matrix_valued> const &Sigma_dynamic, nda::array<nda::matrix<dcomplex>, 2> const &Sigma_static) {
return [&](auto const &k_idx, auto const &sigma_idx) {
using nda::linalg::inv;
auto const n_M = obe.C_space.dim();
auto const &mesh = Sigma_dynamic(0, 0).mesh();
auto out = gf{mesh, {n_M, n_M}};
auto P = obe.P.P(sigma_idx, k_idx);
for (auto &&[n, w] : enumerate(mesh)) {
auto PSP = upfold_self_energy_at_freq(obe, Proj, Sigma_dynamic, Sigma_static, n, k_idx, sigma_idx);
out.data()(n, r_all, r_all) = P * inverse(w + mu - obe.H.H(sigma_idx, k_idx) - PSP) * dagger(P);
out.data()(n, r_all, r_all) = P * inv(w + mu - obe.H.H(sigma_idx, k_idx) - PSP) * dagger(P);
}
return out;
};
Expand All @@ -54,12 +55,13 @@ namespace triqs::modest {
constexpr auto lattice_gf_at_k(one_body_elements_on_grid const &obe, double const &mu, block2_gf<Mesh, matrix_valued> const &Sigma_dynamic,
nda::array<nda::matrix<dcomplex>, 2> const &Sigma_static) {
return [&](auto const &k_idx, auto const &sigma_idx) {
using nda::linalg::inv;
auto const &mesh = Sigma_dynamic(0, 0).mesh();
auto N_nu = obe.H.N_nu(sigma_idx, k_idx);
auto Glatt = gf{mesh, {N_nu, N_nu}};
for (auto &&[n, w] : enumerate(mesh)) {
auto PSP = upfold_self_energy_at_freq(obe, obe.P, Sigma_dynamic, Sigma_static, n, k_idx, sigma_idx);
Glatt.data()(n, r_all, r_all) = inverse(w + mu - obe.H.H(sigma_idx, k_idx) - PSP);
Glatt.data()(n, r_all, r_all) = inv(w + mu - obe.H.H(sigma_idx, k_idx) - PSP);
}
return Glatt;
};
Expand Down
2 changes: 1 addition & 1 deletion c++/triqs_modest/loaders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ namespace triqs::modest {
auto U_diag = nda::matrix<dcomplex>(shell.dim, shell.dim);
for (auto &&[idx, r_idx] : enumerated_sub_slices(decomposition(atom, sigma))) {
auto hperm = dagger(U_rotation(atom, sigma)) * Hloc0(atom, sigma) * U_rotation(atom, sigma);
U_diag(r_idx, r_idx) = std::get<1>(nda::linalg::eigenelements(hperm(r_idx, r_idx)));
U_diag(r_idx, r_idx) = std::get<1>(nda::linalg::eigh(hperm(r_idx, r_idx)));
}
U_rotation(atom, sigma) *= U_diag;
}
Expand Down
8 changes: 5 additions & 3 deletions c++/triqs_modest/postprocess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,20 @@ namespace triqs::modest {
constexpr auto lattice_gf_at_k(auto const &mesh, one_body_elements_on_grid const &obe, downfolding_projector const &Proj, double mu,
auto const &Sigma_w, dcomplex broadening) {
return [&, mu, broadening](auto &k_idx, auto &sigma) {
using nda::linalg::inv;
if constexpr (Trace) {
auto out = gf{mesh};
for (auto &&[n, w] : enumerate(mesh)) {
auto PSP = upfold_self_energy_at_freq(obe, Proj, Sigma_w, n, k_idx, sigma);
out.data()(n) = trace(inverse(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP));
out.data()(n) = trace(inv(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP));
}
return out;
} else {
auto N_nu = obe.H.N_nu(sigma, k_idx);
auto out = gf{mesh, {N_nu, N_nu}};
for (auto &&[n, w] : enumerate(mesh)) {
auto PSP = upfold_self_energy_at_freq(obe, Proj, Sigma_w, n, k_idx, sigma);
out.data()(n, r_all, r_all) = inverse(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP);
out.data()(n, r_all, r_all) = inv(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP);
}
return out;
}
Expand All @@ -46,12 +47,13 @@ namespace triqs::modest {
constexpr auto local_gf_at_k(auto const &mesh, one_body_elements_on_grid const &obe, downfolding_projector const &Proj, double mu,
auto const &Sigma_w, dcomplex broadening) {
return [&, mu, broadening](auto &k_idx, auto &sigma) {
using nda::linalg::inv;
auto n_M = obe.C_space.dim();
auto out = gf{mesh, {n_M, n_M}};
auto P = obe.P.P(sigma, k_idx);
for (auto &&[n, w] : enumerate(mesh)) {
auto PSP = upfold_self_energy_at_freq(obe, Proj, Sigma_w, n, k_idx, sigma);
out.data()(n, r_all, r_all) = P * inverse(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP) * dagger(P);
out.data()(n, r_all, r_all) = P * inv(w + broadening + mu - obe.H.H(sigma, k_idx) - PSP) * dagger(P);
}
return out;
};
Expand Down
33 changes: 13 additions & 20 deletions python/triqs_modest/atomic_levels_and_delta.wrap.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,7 @@ static auto const fun_1 =
c2py::dispatcher_f_kw_t{c2py::cfun([](const triqs::modest::one_body_elements_on_grid &obe) { return triqs::modest::impurity_levels(obe); }, "obe"),
c2py::cfun([](const triqs::modest::one_body_elements_tb &obe) { return triqs::modest::impurity_levels(obe); }, "obe")};

static const auto doc_d_0 = fun_0.doc(
R"DOC(
static const auto doc_d_0 = fun_0.doc(R"DOC(
[1, 2] Compute the hybridization function from the effective impurity levels, the local Green's function, and the impurity self-energy.

------
Expand Down Expand Up @@ -90,20 +89,15 @@ Returns
[2, 4] : {ret_1}
Hybridization function :math:`\Delta`.
)DOC",
std::vector<std::string>{
c2py::join(std::vector<std::string>{c2py::python_typename<const std::vector<nda::matrix<triqs::dcomplex>> &>()}, ", "),
c2py::join(std::vector<std::string>{c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued> &>(),
c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued> &>()},
", "),
c2py::join(std::vector<std::string>{c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued> &>(),
c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued> &>()},
", "),
c2py::join(std::vector<std::string>{c2py::python_typename<const std::vector<nda::matrix<triqs::dcomplex>> &>()}, ", ")},
std::vector<std::string>{
std::vector<std::string>{c2py::python_typename<triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued>>(),
c2py::python_typename<triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued>>()}});
static const auto doc_d_1 =
fun_1.doc(R"DOC(
{{c2py::python_typename<const std::vector<nda::matrix<triqs::dcomplex>> &>()},
{c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued> &>(),
c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued> &>()},
{c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued> &>(),
c2py::python_typename<const triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued> &>()},
{c2py::python_typename<const std::vector<nda::matrix<triqs::dcomplex>> &>()}},
{c2py::python_typename<triqs::gfs::block_gf<triqs::mesh::imfreq, triqs::gfs::matrix_valued>>(),
c2py::python_typename<triqs::gfs::block_gf<triqs::mesh::dlr_imfreq, triqs::gfs::matrix_valued>>()});
static const auto doc_d_1 = fun_1.doc(R"DOC(
Compute the atomic (impurity) levels from an obe.

Parameters
Expand All @@ -116,10 +110,9 @@ Returns
{ret_0}
Impurity levels stored in the format [n_atoms, n_sigma].
)DOC",
std::vector<std::string>{c2py::join(std::vector<std::string>{c2py::python_typename<const triqs::modest::one_body_elements_on_grid &>(),
c2py::python_typename<const triqs::modest::one_body_elements_tb &>()},
", ")},
std::vector<std::string>{std::vector<std::string>{c2py::python_typename<nda::array<nda::matrix<triqs::dcomplex>, 2>>()}});
{{c2py::python_typename<const triqs::modest::one_body_elements_on_grid &>(),
c2py::python_typename<const triqs::modest::one_body_elements_tb &>()}},
{c2py::python_typename<nda::array<nda::matrix<triqs::dcomplex>, 2>>()});
//--------------------- module function table -----------------------------

static PyMethodDef module_methods[] = {
Expand Down
Loading
Loading