ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
hamilt.h
Go to the documentation of this file.
1#ifndef MODULEHAMILT_H
2#define MODULEHAMILT_H
3
4#include <complex>
5#include <vector>
6
7#include "matrixblock.h"
8#include "source_psi/psi.h"
9#include "operator.h"
10#include "hamilt_base.h"
11
12namespace hamilt
13{
14
15template <typename T, typename Device = base_device::DEVICE_CPU>
16class Hamilt : public HamiltBase
17{
18 public:
19 virtual ~Hamilt(){};
20
22 void updateHk(const int ik) override { return; }
23
25 void refresh(bool yes = true) override { return; }
26
28 std::string get_classname() const override { return classname; }
29
31 void* get_ops() override { return static_cast<void*>(ops); }
32
34 virtual void hPsi(
35 const T* psi_in,
36 T* hpsi,
37 const size_t size) const
38 {
39 return;
40 }
41
42 virtual void sPsi(const T* psi_in, // psi
43 T* spsi, // spsi
44 const int nrow, // dimension of spsi: nbands * nrow
45 const int npw, // number of plane waves
46 const int nbands // number of bands
47 ) const
48 {
49 syncmem_op()(spsi, psi_in, static_cast<size_t>(nbands * nrow));
50 }
51
53 virtual void matrix(
54 MatrixBlock<std::complex<double>> &hk_in,
55 MatrixBlock<std::complex<double>> &sk_in){return;}
56
57 virtual void matrix(
58 MatrixBlock<double> &hk_in,
59 MatrixBlock<double> &sk_in){return;}
60
61 virtual std::vector<T> matrix() { return std::vector<T>(); }
62
63 std::string classname = "none";
64
67
68protected:
69
70 Device* ctx = {};
72};
73
74} // namespace hamilt
75
76#endif
Base class for Hamiltonian.
Definition hamilt_base.h:17
Definition hamilt.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
Definition operator.h:36
#define T
Definition exp.cpp:237
Definition hamilt.h:13
Definition matrixblock.h:9