ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
operator_lr_hxc.h
Go to the documentation of this file.
1#pragma once
2#include "source_cell/klist.h"
10namespace LR
11{
13 template<typename T = double, typename Device = base_device::DEVICE_CPU>
14 class OperatorLRHxc : public hamilt::Operator<T, Device>
15 {
16 public:
17 //when nspin=2, nks is 2 times of real number of k-points. else (nspin=1 or 4), nks is the real number of k-points
18 OperatorLRHxc(const int& nspin,
19 const int& naos,
20 const std::vector<int>& nocc,
21 const std::vector<int>& nvirt,
22 const psi::Psi<T, Device>& psi_ks_in,
23 std::unique_ptr<elecstate::DensityMatrix<T, T>>& DM_trans_in,
24 typename TGint<T>::type* gint_in,
25 std::weak_ptr<PotHxcLR> pot_in,
26 const UnitCell& ucell_in,
27 const std::vector<double>& orb_cutoff,
28 const Grid_Driver& gd_in,
29 const K_Vectors& kv_in,
30 const std::vector<Parallel_2D>& pX_in,
31 const Parallel_2D& pc_in,
32 const Parallel_Orbitals& pmat_in,
33 const std::vector<int>& ispin_ks = {0})
34 : nspin(nspin), naos(naos), nocc(nocc), nvirt(nvirt), nk(kv_in.get_nks() / nspin), psi_ks(psi_ks_in),
35 DM_trans(DM_trans_in), gint(gint_in), pot(pot_in), ucell(ucell_in), orb_cutoff_(orb_cutoff), gd(gd_in),
36 kv(kv_in), pX(pX_in), pc(pc_in), pmat(pmat_in), ispin_ks(ispin_ks)
37 {
38 ModuleBase::TITLE("OperatorLRHxc", "OperatorLRHxc");
40 this->is_first_node = true;
41 this->hR = std::unique_ptr<hamilt::HContainer<T>>(new hamilt::HContainer<T>(&pmat_in));
42 LR_Util::initialize_HR<T, T>(*this->hR, ucell_in, gd_in, orb_cutoff);
43 assert(&pmat_in == this->hR->get_paraV());
44 };
46
47 void init(const int ik_in) override {};
48
49 virtual void act(const int nbands,
50 const int nbasis,
51 const int npol,
52 const T* psi_in,
53 T* hpsi,
54 const int ngk_ik = 0,
55 const bool is_first_node = false) const override;
56
57 private:
58 void grid_calculation(const int& nbands)const;
59
60 //global sizes
61 const int& nspin;
62 const int& naos;
63 const int nk = 1;
64 // const int nloc_per_band = 1; ///< local size of each state of X (passed by nbasis in act())
65 const std::vector<int>& nocc;
66 const std::vector<int>& nvirt;
67 const std::vector<int> ispin_ks = { 0 };
68 const K_Vectors& kv;
70 const psi::Psi<T, Device>& psi_ks = nullptr;
71
73 std::unique_ptr<elecstate::DensityMatrix<T, T>>& DM_trans;
74
76 std::unique_ptr<hamilt::HContainer<T>> hR = nullptr;
77
80 const std::vector<Parallel_2D>& pX;
82
83 std::weak_ptr<PotHxcLR> pot;
84
85 typename TGint<T>::type* gint = nullptr;
86
88 std::vector<double> orb_cutoff_;
90
92 mutable bool first_print = true;
93 };
94}
Definition sltk_grid_driver.h:43
Definition klist.h:13
Hxc part of A operator for LR-TDDFT.
Definition operator_lr_hxc.h:15
const Parallel_Orbitals & pmat
Definition operator_lr_hxc.h:81
~OperatorLRHxc()
Definition operator_lr_hxc.h:45
const std::vector< int > ispin_ks
the index of spin of psi_ks used in {AX, DM_trans}
Definition operator_lr_hxc.h:67
OperatorLRHxc(const int &nspin, const int &naos, const std::vector< int > &nocc, const std::vector< int > &nvirt, const psi::Psi< T, Device > &psi_ks_in, std::unique_ptr< elecstate::DensityMatrix< T, T > > &DM_trans_in, typename TGint< T >::type *gint_in, std::weak_ptr< PotHxcLR > pot_in, const UnitCell &ucell_in, const std::vector< double > &orb_cutoff, const Grid_Driver &gd_in, const K_Vectors &kv_in, const std::vector< Parallel_2D > &pX_in, const Parallel_2D &pc_in, const Parallel_Orbitals &pmat_in, const std::vector< int > &ispin_ks={0})
Definition operator_lr_hxc.h:18
virtual void act(const int nbands, const int nbasis, const int npol, const T *psi_in, T *hpsi, const int ngk_ik=0, const bool is_first_node=false) const override
Definition operator_lr_hxc.cpp:20
void grid_calculation(const int &nbands) const
void init(const int ik_in) override
Definition operator_lr_hxc.h:47
const int & naos
Definition operator_lr_hxc.h:62
const Grid_Driver & gd
Definition operator_lr_hxc.h:89
const UnitCell & ucell
Definition operator_lr_hxc.h:87
const int & nspin
Definition operator_lr_hxc.h:61
const std::vector< Parallel_2D > & pX
Definition operator_lr_hxc.h:80
std::unique_ptr< hamilt::HContainer< T > > hR
transition hamiltonian in AO representation
Definition operator_lr_hxc.h:76
const std::vector< int > & nvirt
Definition operator_lr_hxc.h:66
std::weak_ptr< PotHxcLR > pot
Definition operator_lr_hxc.h:83
const std::vector< int > & nocc
Definition operator_lr_hxc.h:65
const K_Vectors & kv
Definition operator_lr_hxc.h:68
const Parallel_2D & pc
parallel info
Definition operator_lr_hxc.h:79
bool first_print
test
Definition operator_lr_hxc.h:92
TGint< T >::type * gint
Definition operator_lr_hxc.h:85
std::unique_ptr< elecstate::DensityMatrix< T, T > > & DM_trans
transition density matrix
Definition operator_lr_hxc.h:73
const psi::Psi< T, Device > & psi_ks
ground state wavefunction
Definition operator_lr_hxc.h:70
std::vector< double > orb_cutoff_
Definition operator_lr_hxc.h:88
const int nk
Definition operator_lr_hxc.h:63
This class packs the basic information of 2D-block-cyclic parallel distribution of an arbitrary matri...
Definition parallel_2d.h:12
Definition parallel_orbitals.h:9
Definition unitcell.h:16
Definition density_matrix.h:36
Definition hcontainer.h:144
Definition operator.h:38
psi::Psi< T, Device > * hpsi
Definition operator.h:112
enum calculation_type cal_type
Definition operator.h:107
bool is_first_node
Definition operator.h:109
Definition psi.h:37
#define T
Definition exp.cpp:237
Definition esolver_ks_lcao.h:37
void TITLE(const std::string &class_name, const std::string &function_name, const bool disable)
Definition tool_title.cpp:18
Definition gint_template.h:6