Skip to content

Cache-Driven BTD left/right-most block size mismatch #40

Description

@AsymmetryChou

Describe the bug

For a BTD device, the retarded Green function is represented in diagonal and nearest-neighbour blocks. The left and right lead self-energies are inserted into the outer diagonal blocks.

However, in current version, NEGFHamiltonianInit.Hamiltonian_initialized derived coupling_width["lead_L"] and coupling_width["lead_R"] from the current device--lead coupling matrix HDL. It then supplied those widths to get_block_tridiagonal.

Those widths are only lower bounds. The historical optimized splitter is free to move a cut point or absorb additional orbitals into an edge block in order to obtain a sparse BTD representation. Thus, even if two devices have identical electrode regions, a small change in their scattering regions can change the sparsity pattern and yield different endpoint partitions.

A cache generated by the first calculation cannot be inserted into the second calculation even though the electrodes and their physical self-energies are intended to be shared.

The problem was therefore not an incorrect self-energy calculation. It was a loss of the cached self-energy's required device-subspace dimension during the later BTD construction.

Expected behavior

No response

To Reproduce

No response

Environment

No response

Additional Context

No response

Metadata

Metadata

Assignees

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