Dear Vargan,

Yes, you can do that if you use the scipy function scipy.sparse.linalg.eigsh.
You can choose the number of the returned eigenvalues and near which energy will they be picked up.

For this purpose, you have to rebuild the function giving the bands as done in the source code.
Here is an example, without all the warnings and checking done usually in the kwant source code.

I hope this helps,
##############################
import math
import scipy
sysf=make_system().finalized() # Finalized system
syst = sysf.leads           # The lead of the system

# Equation to solve is
# (V^\dagger e^{ik} + H + V e^{-ik}) \psi = E \psi

ham = syst.cell_hamiltonian(params=params)
hop0 = syst.inter_cell_hopping( params=params)
hop = np.empty(ham.shape, dtype=complex)
hop[:, : hop.shape] = hop
hop[:, hop.shape:] = 0

#The hamiltonian to diagonalize for a given momentum k
def Hamlitonian(k):
mat = hop * complex(math.cos(k), -math.sin(k))
h0 = mat + mat.conjugate().transpose() + ham
return h0

#example for k=0.3
HAM=Hamlitonian(0.3)
#be careful, in the following, k is the  number of returned eigenvalues
Vals=scipy.sparse.linalg.eigsh(R,k=4,return_eigenvectors=False)

###########################################################
On Fri, Jul 16, 2021 at 1:16 PM Vardan Kaladzhyan <vardan.kaladzhyan@phystech.edu> wrote:
Dear Kwant Developers,

I am using kwant.physics.Bands to obtain the bands for a three-dimensional setup with one 'momentum'. Hence, I am inserting a set of momenta and getting a set of energies for each momentum.

Is there a way to ask Kwant to only compute the lowest bands? My system is quite large and calculating all the bands is extremely time-consuming.

Thank you!

Cheers,
Vardan.

--