/**
 * @brief Functions for kernel polynomial method.
 *
 * @author Zewen Wu, Miao Zhang, Yunhai Li
 *
 * @copyright Copyright (c) 2024, TBPLaS develop team.
 */

#ifndef TBPLAS_TBPM_KPM_H
#define TBPLAS_TBPM_KPM_H

#include <eigen3/Eigen/Dense>

namespace tbplas::tbpm {

/**
 * @brief Calculate Jackson kernel gm.
 * See eqn. 66-70 of TBPLaS CPC and eqn. 71 of Rev. Mod. Phys. 78, 275 (2006).
 *
 * @param[inout] kernel Jackson kernel for m = 0, 1, ..., num_kernel-1
 *
 * @note kernel must be pre-allocated before calling this function.
 */
void jackson_kernel(Eigen::VectorXd& kernel);

} // namespace tbplas::tbpm

#endif
