eigenvalues test in wraparound module
Hi All, I am testing the module wraparound and trying to understand how to match the numerical results with the well known formula from literature. I look at the example of graphene given in the module's test [1]: the overall band structure seems fine, but when I try to check a set of eigenvalues for a given (kx,ky) and compare it with the exact formula enclosed below, I fail whatever the parameter 'a' that I choose! The command I use is straightforward: kx,ky=pi/4,pi/6 np.sort(np.linalg.eigvalsh(syst.hamiltonian_submatrix( args + (kx, ky), sparse=False)).real) The only matching I get is for kx,ky=0,0 which means that the problem may be in the choice of the parameter 'a'. for the example in the module a=1/sqrt(3) and seems not to reproduce the expected eigenvalues. Can someone give me some tips ? Thanks in advance. [1] https://gitlab.kwant-project.org/cwg/wraparound/blob/9462edc3c1aee2f391aedf3... The formula shown in the figure was obtained from : [2] http://www-personal.umich.edu/~sunkai/teaching/Fall_2013/chapter5.pdf
Hi Adel
I am testing the module wraparound and trying to understand how to match the numerical results with the well known formula from literature.
I look at the example of graphene given in the module's test [1]: the overall band structure seems fine, but when I try to check a set of eigenvalues for a given (kx,ky) and compare it with the exact formula enclosed below, I fail whatever the parameter 'a' that I choose!
The command I use is straightforward:
kx,ky=pi/4,pi/6 np.sort(np.linalg.eigvalsh(syst.hamiltonian_submatrix( args + (kx, ky), sparse=False)).real)
The reason that this does not give the result you expect is because the symmetry vectors for graphene are not orthogonal. The k parameters expected by the wrapped around system are actually the quasimomenta *in the direction of the reciprocal symmetry vectors*, so in this case calling them 'kx' and 'ky' is a bit of a misnomer. This is why we only test @ k=(0, 0) for the graphene case, to avoid having to do this transformation. To get what you want you will need to transform kx and ky into the basis of reciprocal symmetry vectors. The function 'plot_2d_bands' in the wraparound module includes code to do this. Check it out, and if it is not clear post back to this thread and we'll give you a hand. Happy Kwanting, Joe
Thank you Joseph for the highlight. It make sens since the tests on a square lattice seemed working fine. I checked the 'plot_2d_bands' function but could not identify the transformation you were mentioning. Could you help me in this please? Just to check my understanding for this module, could you tell me if I am right: 1) one can plot the system sys (before wraping) 2)check the extra-cell hoppings 3) take them off and add terms of the form -t exp(i k .Vj) for the corresponding intra-cell hopping (Vj is the vector of the eliminated hopping) with this, we obtain the Hamiltonian of the wrapped system am I correct ? Thanks in advance Adel
Hi,
Thank you Joseph for the highlight. It make sens since the tests on a square lattice seemed working fine.
I checked the 'plot_2d_bands' function but could not identify the transformation you were mentioning. Could you help me in this please?
It requires a bit of reading but we can extract the following snippets from 'wraparound' (I have reworded some comments to make sense without the surrounding context of the 'wraparound' module): # calculate the reciprocal symmetry vectors: these # are the columns of 'A' B = np.array(symmetry.periods).T A = B.dot(np.linalg.inv(B.T.dot(B))) ... # transforms a momentum in the basis (kx, ky) to the basis of # reciprocal symmetry vectors def momentum_to_lattice(k): k, residuals = scipy.linalg.lstsq(A, k)[:2] if np.any(abs(residuals) > 1e-7): raise RuntimeError("Requested momentum doesn't correspond" " to any lattice momentum.") return k We could then use 'momentum_to_lattice' like so: syst = make_wrapped_around_syst() H_k(kx, ky): k = (kx, ky) k_prime = momentum_to_lattice(k) return syst.hamiltonian_submatrix(args=k_prime) Does this help?
Just to check my understanding for this module, could you tell me if I am right: 1) one can plot the system sys (before wraping) 2) check the extra-cell hoppings 3) take them off and add terms of the form -t exp(i k .Vj) for the corresponding intra-cell hopping (Vj is the vector of the eliminated hopping) with this, we obtain the Hamiltonian of the wrapped system
am I correct ?
Yes, in addition to the caveat that inter-cell hoppings between a site and its image under the symmetry will correspond to *onsite* terms in the wrapped around system (imagine a simple chain of sites with nearest-neighbor hoppings). Happy Kwanting, Joe
Thanks a lot ! everything is clear and works fine.
Adel
On Mon, May 15, 2017 at 3:42 PM, Joseph Weston
Hi,
Thank you Joseph for the highlight. It make sens since the tests on a square lattice seemed working fine.
I checked the 'plot_2d_bands' function but could not identify the transformation you were mentioning. Could you help me in this please?
It requires a bit of reading but we can extract the following snippets from 'wraparound' (I have reworded some comments to make sense without the surrounding context of the 'wraparound' module):
# calculate the reciprocal symmetry vectors: these # are the columns of 'A' B = np.array(symmetry.periods).T A = B.dot(np.linalg.inv(B.T.dot(B)))
...
# transforms a momentum in the basis (kx, ky) to the basis of # reciprocal symmetry vectors def momentum_to_lattice(k): k, residuals = scipy.linalg.lstsq(A, k)[:2] if np.any(abs(residuals) > 1e-7): raise RuntimeError("Requested momentum doesn't correspond" " to any lattice momentum.") return k
We could then use 'momentum_to_lattice' like so:
syst = make_wrapped_around_syst()
H_k(kx, ky): k = (kx, ky) k_prime = momentum_to_lattice(k) return syst.hamiltonian_submatrix(args=k_prime)
Does this help?
Just to check my understanding for this module, could you tell me if I am right: 1) one can plot the system sys (before wraping) 2) check the extra-cell hoppings 3) take them off and add terms of the form -t exp(i k .Vj) for the corresponding intra-cell hopping (Vj is the vector of the eliminated hopping) with this, we obtain the Hamiltonian of the wrapped system
am I correct ?
Yes, in addition to the caveat that inter-cell hoppings between a site and its image under the symmetry will correspond to *onsite* terms in the wrapped around system (imagine a simple chain of sites with nearest-neighbor hoppings).
Happy Kwanting,
Joe
-- Abbout Adel
participants (2)
-
Abbout Adel
-
Joseph Weston