Skip to content

Implement the computation of periodic green functions #1229

@antoine-levitt

Description

@antoine-levitt

@copilot

This one is ambitious so take your time

The goal is to implement the computation of green functions as described in https://hal.science/hal-03611185/document. The algorithm goes as follows:

Input parameters : alpha, deltaE, N, y (assumed to be in the home unit cell)
Output: G(x,y;E) for all x in a given range.

  • Use a normal DFTK setup with a monkhorst pack grid with N points per dimension.
  • Compute the first few eigenfunctions.
  • Compute h = -alpha sum_n grad lambda_nk chi(lambda_nk-E) where chi(x)=exp(-x^2/deltaE^2)
  • Compute nabla h and nabla^2 h. For nabla h, use the Hellman-Feynmann theorem. For nabla^2 h, use finite differences (mind the periodicity)
  • Build a new basis with complex kpoints given by k + im h(k), where k belongs to the previous monkhorst pack grid
  • With these new kpoints, solve (E-H_(k+im h(k)) u_(k+im h(k)) (x)= P delta_y(x), where P delta_y is the periodized delta function centered at y, using an iterative solver (it's non hermitian so GMRES is appropriate; you can eg use the one in krylovkit)
  • Assemble G(x) = (properly normalized) sum_kpoints det(1+im nabla h(k)) e^im(k+im h(k))x u_(k+im h(k))(x)

Test in a 1D case.

You will probably need to extend the Kpoints structure to accept complex numbers.

Do not use symmetry (turn it off explicitly). Test your work. Do not use plots. This is research code, so prioritize concision over extensive docs, and readability over optimizations. Use the style used in the other files in this repo.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions