Md Afsar Reja via Kwant-discuss wrote: > Is it possible to implement non-reciprocal hopping( e.g. different > magnitude in left-right hopping like the non-hermitian Hatano-Nelson > model ) in the current available Kwant version?
Hi, there is nothing that requires Kwant systems (in the sense of low-level systems) to be Hermitian. However, builders (which provide the common way of creating such low-level systems through finalization of a builder) enforce Hermiticity of hoppings. In fact, the ways builders work internally, every pair of hoppings (say H_ij and H_ji) is only queried in one “way”, with the other “way” being deduced by Hermitian conjugation. For example, if you set hopping H_ij to some value, H_ji will be implicitly set to the Hermitian conjugate. Same situation if you set H_ij to a value function. Then that function will never be queried for H_ji. Instead, it will be assumed to equal the conjugate of H_ij. And if you set H_ji directly, then it will be H_ij that is implicit. With builders, there is no way around it. Changing this would require modifying how they work internally. However, nothing in builder enforces the Hermiticity of onsite elements, which can be blocks when there is more than one orbital per site. So, if for your application non-Hermiticity on blocks on the diagonal is sufficient, that can be done with builder. Otherwise you need to implement a low-level system yourself, which depending on what you want to simulate could be easy or complicated. See the Kwant paper for an example. Independently from the above, Kwant’s default solver (‘kwant.smatrix’, for example) checks whether the Hamiltonian is Hermitian. But this check can be disabled with the check_hermiticity option. Hope this helps Christoph