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
11namespace hamilt
12{
13
14template <typename T, typename Device = base_device::DEVICE_CPU>
15class Hamilt
16{
17 public:
18 virtual ~Hamilt(){};
19
21 virtual void updateHk(const int ik){return;}
22
24 virtual void refresh(void){return;}
25
27 virtual void hPsi(
28 const T* psi_in,
29 T* hpsi,
30 const size_t size) const
31 {
32 return;
33 }
34
35 virtual void sPsi(const T* psi_in, // psi
36 T* spsi, // spsi
37 const int nrow, // dimension of spsi: nbands * nrow
38 const int npw, // number of plane waves
39 const int nbands // number of bands
40 ) const
41 {
42 syncmem_op()(spsi, psi_in, static_cast<size_t>(nbands * nrow));
43 }
44
46 virtual void matrix(
47 MatrixBlock<std::complex<double>> &hk_in,
48 MatrixBlock<std::complex<double>> &sk_in){return;}
49
50 virtual void matrix(
51 MatrixBlock<double> &hk_in,
52 MatrixBlock<double> &sk_in){return;}
53
54 virtual std::vector<T> matrix() { return std::vector<T>(); }
55
56 std::string classname = "none";
57
59
62
63protected:
64
65 Device* ctx = {};
67};
68
69} // namespace hamilt
70
71#endif
Definition hamilt.h:16
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:27
virtual void sPsi(const T *psi_in, T *spsi, const int nrow, const int npw, const int nbands) const
Definition hamilt.h:35
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:46
virtual std::vector< T > matrix()
Definition hamilt.h:54
Operator< T, Device > * ops
first node operator, add operations from each operators
Definition hamilt.h:61
virtual void matrix(MatrixBlock< double > &hk_in, MatrixBlock< double > &sk_in)
Definition hamilt.h:50
virtual void updateHk(const int ik)
for target K point, update consequence of hPsi() and matrix()
Definition hamilt.h:21
base_device::memory::synchronize_memory_op< T, Device, Device > syncmem_op
Definition hamilt.h:66
std::string classname
Definition hamilt.h:56
Device * ctx
Definition hamilt.h:65
int non_first_scf
Definition hamilt.h:58
virtual ~Hamilt()
Definition hamilt.h:18
virtual void refresh(void)
refresh status of Hamiltonian, for example, refresh H(R) and S(R) in LCAO case
Definition hamilt.h:24
Definition operator.h:38
#define T
Definition exp.cpp:237
Definition hamilt.h:12
Definition matrixblock.h:9