Skip to content

Lkind check allows for irreducible exciton calculation#224

Merged
daniele-varsano merged 3 commits intoyambo-code:5.4from
palful:5.4
Apr 29, 2026
Merged

Lkind check allows for irreducible exciton calculation#224
daniele-varsano merged 3 commits intoyambo-code:5.4from
palful:5.4

Conversation

@palful
Copy link
Copy Markdown
Member

@palful palful commented Feb 19, 2026

As discussed with Alberto, currently a check at line 166 of K_driver_init would not accept Lkind='tilde' as input option for irreducible exciton calculations, although this case is coded below at line 266 of the same file and also documented at input generation via INIT_load.

The change simply recognizes Lkind='tilde' as an option to switch off the exchange part of the BSE kernel.

Also note that

Lkind='tilde'

is equivalent - but more straightforward - to

Lkind='bar'
BSENGexx = 0 RL

@andrea-ferretti
Copy link
Copy Markdown
Member

fine with me to proceed

Copy link
Copy Markdown
Member

@andrea-ferretti andrea-ferretti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fine with me

@sangallidavide
Copy link
Copy Markdown
Member

Just one comment on this point.

Instead of having to introduce a new "Lkind", I think it would be more straightforward to define the kernel approximations
BSKmod="Hartree+SEX" vs BSKmod="SEX"

The main drawback of this alternative is that, so far BSKmod="SEX" meant BSKmod="Hartree+SEX"

@palful
Copy link
Copy Markdown
Member Author

palful commented Mar 24, 2026

I agree it is largely a matter of preference. For me, I'd rather let the user focus on the fact that they are computing different response functions:

  • Lbar is the response to the total macroscopic fields
  • Lfull is the response to the external field
  • Ltilde is the response to the total (external + induced) fields

The BSKmod string instead goes more towards conceptualizing these as different approximations to an electron-hole kernel in transition space. I think it's fine as well.

The only important thing is that this information needs to be reported in a database (such as ndb.BS_diago: now it is written under a variable named X_kind) because yambopy needs it for some checks, such as when computing exciton symmetries at q=0, and in the future I plan to introduce more checks to better track the kinds of response functions used in the exciton-phonon coupling matrix elements (so the user doesn't get confused if they are computing the coupling with Lfull, Ltilde, etc).

@palful
Copy link
Copy Markdown
Member Author

palful commented Apr 27, 2026

Added new defaults for Lkind and a barrier.

  • Now, if q=0 the default is Lbar
  • If q/=0 the default switches to Lfull as Lbar is NOT defined at finite q
  • In addition, if the user has set Lkind='bar' explicitly for a q/=0 calculation, the code exits with an error.

This ensures that the users do not inadvertently calculate the wrong exciton band structure as was previously the case. In addition (as Murali remarked many times), this ensures also that the BSE Hamiltonian is fully symmetric by default.

@daniele-varsano daniele-varsano merged commit 17f065a into yambo-code:5.4 Apr 29, 2026
@sangallidavide
Copy link
Copy Markdown
Member

sangallidavide commented Apr 29, 2026

Why do you say that Lbar is not defined at q different from 0 ?

Lbar is well defined and the equation $\epsilon(\omega,q)= 1 - v(q) \overline{\chi}(\omega,q)$ is also defined and correct at any q. Indeed, when requesting few eigenvectors or when working without coupling, this is the best procedure to get a correct absorption spectrum.

Otherwise (going through Lfull) the relation $\epsilon(\omega,q)= (1 + v(q) \chi(\omega,q))^{-1}$ gives worse results with few eigenvalues / without coupling. Only computing all eigenvalues and with coupling, the Lfull results goes on top of the Lbar ones.

I say that via Lfull results are worse without coupling/with few eigenvalues because they are in general rather different from the final result with coupling and all eigenvalues. The Lbar case is instead more stable. For these reason, I would not raise an error when running Lbar. Just maybe a warning about symmeties (see next point)

About symmetries. I tried on LiF and I get the following.

  • at q=0 Lfull gives broken symmetries, while Lbar gives correct symmetries (this we already know)
  • at finite q both Lfull and Lbar gives results which respect symmetries.
    Maybe LiF is too simple. Do you have examples where Lbar is giving broken symmetries at finite q? In case I'd write a warning "Symmetries will be broken with Lbar at finite q". We could also write the warning "Symmetries will be broken with Lfull at q=0"

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants