def eigsh(self, k=(0, 0, 0), n=10, gauge='R', eigvals_only=True, **kwargs): r""" Calculates a subset of eigenvalues of the physical quantity (default 10) Setup the quantity and overlap matrix with respect to the given k-point and calculate a subset of the eigenvalues using the sparse algorithms. All subsequent arguments gets passed directly to :code:`scipy.linalg.eigsh` Parameters ---------- spin : int, optional the spin-component to calculate the eigenvalue spectrum of, note that this parameter is only valid for `Spin.POLARIZED` matrices. """ # We always request the smallest eigenvalues... spin = kwargs.pop('spin', 0) dtype = kwargs.pop('dtype', None) kwargs.update({'which': kwargs.get('which', 'SM')}) if self.spin.kind == Spin.POLARIZED: P = self.Pk(k=k, dtype=dtype, spin=spin, gauge=gauge) else: P = self.Pk(k=k, dtype=dtype, gauge=gauge) if self.orthogonal: return lin.eigsh(P, k=n, return_eigenvectors=not eigvals_only, **kwargs) S = self.Sk(k=k, dtype=dtype, gauge=gauge) return lin.eigsh(P, M=S, k=n, return_eigenvectors=not eigvals_only, **kwargs)
def eigsh(self, k=(0, 0, 0), n=10, gauge='R', eigvals_only=True, **kwargs): r""" Calculates a subset of eigenvalues of the physical quantity (default 10) Setup the quantity and overlap matrix with respect to the given k-point and calculate a subset of the eigenvalues using the sparse algorithms. All subsequent arguments gets passed directly to :code:`scipy.linalg.eigsh` """ # We always request the smallest eigenvalues... kwargs.update({'which': kwargs.get('which', 'SM')}) dtype = kwargs.pop('dtype', None) P = self.Pk(k=k, dtype=dtype, gauge=gauge) if self.orthogonal: return lin.eigsh(P, k=n, return_eigenvectors=not eigvals_only, **kwargs) S = self.Sk(k=k, dtype=dtype, gauge=gauge) return lin.eigsh(P, M=S, k=n, return_eigenvectors=not eigvals_only, **kwargs)