Skip to content

Add handling of multiple (in)equivalent atoms#53

Draft
Julpe wants to merge 66 commits into
mainfrom
MultipleEqAtoms
Draft

Add handling of multiple (in)equivalent atoms#53
Julpe wants to merge 66 commits into
mainfrom
MultipleEqAtoms

Conversation

@Julpe
Copy link
Copy Markdown
Owner

@Julpe Julpe commented Apr 20, 2026

In this commit, a lot of changes were introduced:

  • The local SDE is now solved for each inequivalent atom that is found in the DMFT files.
  • We introduced two new settings: "n_ineq" and "ineq_ordering" in the DMFT section. n_ineq is the number of inequivalent atoms that should be processed. ineq_ordering is a way to tell the program which inequivalent atom should be in which diagonal entry of the input quantities for the DGA algorithm. This is needed for multilayer compounds that have >=1 inequivalent atom but need a bigger orbital structure. E.g. the bilayer nickelates have to be calculated in a 4-orbital basis, where each diagonal entry in the local quantities corresponds to the inequivalent atom 1, and setting [1,1] in ineq_ordering does that. The three-layered cuprates will have [1,2,1], setting the outer-most diagonal entry to the same orbital and having the center layer different.
  • Memory can be reduced by a large factor now, see also below. In the most memory-heavy computation steps (i.e. the calculation of the double-counting Kernel, the auxiliary susceptibility and the full vertex), we now loop over the irreducible q-list on each rank, hence they are not vectorized with NumPy anymore and intermediate arrays are reduced in size. This however increases the runtime due to Python being Python. We hence left the original methods in-place and created new ones called "v2" or even "v3" for multiple different implementations. Which method is dispatched can be controlled with the new "memory" section in the config.
  • The Green's function that now enters the local SDE and the Eliashberg equation modules is now the DMFT Green's function, not the k-averaged lattice Green's function. The lattice Green's function was used in DGApy, which only works on single orbitals, and one can therefore use: mean_k G_latt = G_DMFT. However, for multiple orbitals with hybridization, the off-dagonal elements of the k-averaged lattice Green's function lead to the wrong local quantities. Also, the DMFT Green's function should yield better results, since for DMFT the band structure usually has far more k-points and the Green's function is better converged.
  • Introduced a faster calculation of the bare q-dependent bubble susceptibility through FFT. This uses more memory, hence the memory saving for chi0q was introduced.
  • Furthermore, we introduced a send & recv method for the MPIDistributor, which allows to send/recv large objects to specific ranks, which is needed for the SDE kernel and Eliashberg equation.
  • Introduced rank-local mapping of the Kernel to the full BZ so it does not have to be gathered to a single rank.
  • Added settings in a new "memory" section. They are booleans and if set to true the code will use more memory-efficient routines at the cost of runtime speed in three different places (Chi0q, SDE, Fq and Lanczos algorithm) corresponding to the settings.
  • Added support of analytic continuation using the ana_cont package. There is an additional configuration section now, where it can be turned off and plotting of the spectral function can be specified.

@Julpe Julpe self-assigned this Apr 20, 2026
@Julpe Julpe added enhancement New feature or request feature request A new feature is requested labels Apr 20, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 21, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request feature request A new feature is requested

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant