15template <
typename T,
typename Device = base_device::DEVICE_CPU>
22 void updateHk(
const int ik)
override {
return; }
25 void refresh(
bool yes =
true)
override {
return; }
31 void*
get_ops()
override {
return static_cast<void*
>(
ops); }
37 const size_t size)
const
42 virtual void sPsi(
const T* psi_in,
49 syncmem_op()(spsi, psi_in,
static_cast<size_t>(nbands * nrow));
61 virtual std::vector<T>
matrix() {
return std::vector<T>(); }
Base class for Hamiltonian.
Definition hamilt_base.h:17
void * get_ops() override
get the operator chain
Definition hamilt.h:31
void refresh(bool yes=true) override
refresh status of Hamiltonian, for example, refresh H(R) and S(R) in LCAO case
Definition hamilt.h:25
virtual void hPsi(const T *psi_in, T *hpsi, const size_t size) const
core function: for solving eigenvalues of Hamiltonian with iterative method
Definition hamilt.h:34
virtual void sPsi(const T *psi_in, T *spsi, const int nrow, const int npw, const int nbands) const
Definition hamilt.h:42
virtual void matrix(MatrixBlock< std::complex< double > > &hk_in, MatrixBlock< std::complex< double > > &sk_in)
core function: return H(k) and S(k) matrixs for direct solving eigenvalues.
Definition hamilt.h:53
virtual std::vector< T > matrix()
Definition hamilt.h:61
Operator< T, Device > * ops
first node operator, add operations from each operators
Definition hamilt.h:66
virtual void matrix(MatrixBlock< double > &hk_in, MatrixBlock< double > &sk_in)
Definition hamilt.h:57
void updateHk(const int ik) override
for target K point, update consequence of hPsi() and matrix()
Definition hamilt.h:22
base_device::memory::synchronize_memory_op< T, Device, Device > syncmem_op
Definition hamilt.h:71
std::string classname
Definition hamilt.h:63
Device * ctx
Definition hamilt.h:70
virtual ~Hamilt()
Definition hamilt.h:19
std::string get_classname() const override
get the class name
Definition hamilt.h:28
#define T
Definition exp.cpp:237
Definition memory_op.h:61
Definition matrixblock.h:9