DGAmore#

CI status Code coverage

Welcome#

DGAmore is a Python toolbox that computes the multi-orbital, self-consistent ladder Dynamical Vertex Approximation and solves the Eliashberg equation for (strongly) correlated electron systems described by the multi-band Hubbard model. Starting from the one- and two-particle output of a dynamical mean-field theory (DMFT) calculation, it assembles the local vertex functions, solves the momentum-dependent ladder equations to obtain the non-local self-energy, and, optionally, extracts the leading superconducting eigenvalues and gap functions in the singlet and triplet channels. It is built for usability and minimal setup effort, is openly developed on GitHub under the MIT license, and is extensively unit- and end-to-end tested on Linux and macOS.

The code combines and extends two earlier approaches, the one-shot multi-orbital AbinitioDGA and the single-band DGApy, on which it is partially based. On top of these it adds explicit multi-orbital high-frequency asymptotics, a self-consistency loop with prediction-based self-energy mixing, and the multi-orbital Eliashberg equation, which together make it well suited to studying the low-temperature physics of multi-orbital materials such as the bilayer nickelate \(\mathrm{La}_3\mathrm{Ni}_2\mathrm{O}_7\). Numerically it relies on vectorized NumPy operations, distributes the heavy momentum-dependent work across cores with MPI, and exploits lattice and frequency symmetries together with an asymptotic treatment of the vertex functions to keep the memory footprint manageable. Throughout a run it emits detailed logs, so that progress and any problems are easy to follow both in a terminal and in cluster job output.

The toolbox is organised as a pipeline of focused modules. A run is orchestrated by the entry point DGAmore and configured through a process-wide configuration object in config, populated from a YAML file by config_parser. Input handling lives in dga_io and dmft_interface, which read the one- and two-particle quantities from the DMFT output, while hamiltonian builds the kinetic dispersion and interaction tensors and brillouin_zone together with symmetry_reduction set up the irreducible momentum grid.

The physical quantities themselves are thin wrappers around NumPy arrays, assembled from the mixins in n_point_base that supply the array storage, the spin channel and the momentum axis. From these grows a compact class hierarchy: the local, momentum-independent objects descend from local_n_point through local_two_point and local_four_point, while their momentum-dependent counterparts two_point and four_point add the single momentum dimension on top. The concrete single-particle objects greens_function, self_energy and gap_function, together with the interaction tensors, build on this foundation and carry the orbital, frequency and momentum bookkeeping for the rest of the code.

The local vertices and the local self-energy are assembled in local_sde, the bare bubble in bubble_gen, and the momentum-dependent ladder self-energy in nonlocal_sde, with an optional Moriya correction in lambda_correction. Pairing properties are obtained in eliashberg_solver, and an optional continuation to real frequencies is provided by max_ent. The remaining modules support the computation: matsubara_frequencies handles frequency-index arithmetic, mpi_utils manages the parallel work distribution (message chunking, the work distributor and the data-movement routines), memory_estimator predicts the peak host memory of the heavy steps so the driver can enable the memory-saving code paths automatically, dga_logger provides the structured logging, and plotting produces the diagnostic figures. A standalone companion console script, symmetrize_new, prepares the symmetrized two-particle DMFT input that a run consumes.

For the physics and the precise equations behind the implementation, see the accompanying paper and the author’s Master’s thesis, both linked on the About page. The pages listed in the sidebar walk through installation, running a calculation, and contributing, while the API Reference documents every module in detail.