Numerical precision of smatrix
Dear all, I am having problems, that might be caused by the numerical precision of the smatrix solvers. I use the sign of the determinant of the reflection matrix [1] for the topological classification of my system. I calculate the reflection matrix with smatrix = kwant.solvers.default.smatrix(syst, energy=0.0, params=params, out_leads=[0], in_leads=[0]) In some cases the returned determinant is close to zero, but with the wrong sign. I am sure, that the sign is wrong, because it is sometimes -1, when the system is definitely not topological. In these cases, the sign changes to +1 when the parameters only slightly change (+-0.005 t). The code also works well for the most parts of the parameter space, i.e. everywhere where the absolute value of the determinant is not small. Is there any way to increase the precision of smatrix? It might just be the result of some rounding / float precision. Thanks, Jannis [1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.106.057001
I too have experienced significant innacuracies with the sparse solver depending on system parameters. My work around was to use a dense solver instead, this might be an option for you if your system is too large.
Hi Jannis, To answer your specific question, it's hard to estimate the precision of the scattering matrix, since there are multiple steps involved. I'd ballpark it at around 1e-8 or lower, unless the system is close to a very sharp resonance. This, however, isn't what you seem to be observing. When the reflection is only partial, finite size effects may change the sign of the topological invariant—there the details of how the leads are implemented matter. In particular, in gapless systems the sign det r will be essentially random and depend on all the microscopic details. Hope that clarifies things, Anton On Wed, 11 Aug 2021 at 15:43, Jannis Neuhaus-Steinmetz <jneuhaus@physnet.uni-hamburg.de> wrote:
Dear all,
I am having problems, that might be caused by the numerical precision of the smatrix solvers.
I use the sign of the determinant of the reflection matrix [1] for the topological classification of my system. I calculate the reflection matrix with
smatrix = kwant.solvers.default.smatrix(syst, energy=0.0, params=params, out_leads=[0], in_leads=[0])
In some cases the returned determinant is close to zero, but with the wrong sign. I am sure, that the sign is wrong, because it is sometimes -1, when the system is definitely not topological. In these cases, the sign changes to +1 when the parameters only slightly change (+-0.005 t).
The code also works well for the most parts of the parameter space, i.e. everywhere where the absolute value of the determinant is not small.
Is there any way to increase the precision of smatrix? It might just be the result of some rounding / float precision.
Thanks, Jannis
[1] https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.106.057001
participants (3)
-
Anton Akhmerov
-
Henry Axt
-
Jannis Neuhaus-Steinmetz