ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
esolver_ks_lcao_tddft.h
Go to the documentation of this file.
1#ifndef ESOLVER_KS_LCAO_TDDFT_H
2#define ESOLVER_KS_LCAO_TDDFT_H
3#include "esolver_ks.h"
4#include "esolver_ks_lcao.h"
6#include "source_lcao/module_rt/gather_mat.h" // MPI gathering and distributing functions
10
11namespace ModuleESolver
12{
13
14template <typename TR, typename Device = base_device::DEVICE_CPU>
15class ESolver_KS_LCAO_TDDFT : public ESolver_KS_LCAO<std::complex<double>, TR>
16{
17 public:
19
21
22 void before_all_runners(UnitCell& ucell, const Input_para& inp) override;
23
24 protected:
25 virtual void runner(UnitCell& cell, const int istep) override;
26
27 virtual void hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr) override;
28
29 void store_h_s_psi(UnitCell& ucell, const int istep, const int iter, const bool conv_esolver);
30
31 void iter_finish(UnitCell& ucell,
32 const int istep,
33 const int estep,
34 const int estep_max,
35 int& iter,
36 bool& conv_esolver);
37
38 virtual void after_scf(UnitCell& ucell, const int istep, const bool conv_esolver) override;
39
40 void print_step();
41
44
46 ct::Tensor Hk_laststep = ct::Tensor(ct::DataType::DT_COMPLEX_DOUBLE);
47
49 ct::Tensor Sk_laststep = ct::Tensor(ct::DataType::DT_COMPLEX_DOUBLE);
50
52 bool use_tensor = false;
53 bool use_lapack = false;
54
55 // Control the device type for Hk_laststep and Sk_laststep
56 // Set to CPU temporarily, should wait for further GPU development
57 static constexpr ct::DeviceType ct_device_type_hs = ct::DeviceType::CpuDevice;
58
60 int totstep = -1;
61
64
65 TD_info* td_p = nullptr;
66
68 bool restart_done = false;
69
70 private:
71 void weight_dm_rho(const UnitCell& ucell);
72};
73
74} // namespace ModuleESolver
75#endif // ESOLVER_KS_LCAO_TDDFT_H
Correct the discontinuity that occurs when crossing periodic boundary conditions.
Definition esolver_ks_lcao_tddft.h:16
ct::Tensor Sk_laststep
Overlap matrix for all k-points of last time step.
Definition esolver_ks_lcao_tddft.h:49
void store_h_s_psi(UnitCell &ucell, const int istep, const int iter, const bool conv_esolver)
Definition esolver_ks_lcao_tddft.cpp:346
~ESolver_KS_LCAO_TDDFT()
Definition esolver_ks_lcao_tddft.cpp:38
virtual void hamilt2rho_single(UnitCell &ucell, const int istep, const int iter, const double ethr) override
Definition esolver_ks_lcao_tddft.cpp:220
void iter_finish(UnitCell &ucell, const int istep, const int estep, const int estep_max, int &iter, bool &conv_esolver)
Definition esolver_ks_lcao_tddft.cpp:300
bool restart_done
Restart flag.
Definition esolver_ks_lcao_tddft.h:68
virtual void runner(UnitCell &cell, const int istep) override
run energy solver
Definition esolver_ks_lcao_tddft.cpp:81
void print_step()
Definition esolver_ks_lcao_tddft.cpp:212
psi::Psi< std::complex< double > > * psi_laststep
Wave function for all k-points of last time step.
Definition esolver_ks_lcao_tddft.h:43
void weight_dm_rho(const UnitCell &ucell)
Definition esolver_ks_lcao_tddft.cpp:490
static constexpr ct::DeviceType ct_device_type_hs
Definition esolver_ks_lcao_tddft.h:57
Velocity_op< TR > * velocity_mat
Velocity matrix for calculating current.
Definition esolver_ks_lcao_tddft.h:63
ESolver_KS_LCAO_TDDFT()
Definition esolver_ks_lcao_tddft.cpp:23
virtual void after_scf(UnitCell &ucell, const int istep, const bool conv_esolver) override
Something to do after SCF iterations when SCF is converged or comes to the max iter step.
Definition esolver_ks_lcao_tddft.cpp:461
bool use_tensor
Control heterogeneous computing of the TDDFT solver.
Definition esolver_ks_lcao_tddft.h:52
TD_info * td_p
Definition esolver_ks_lcao_tddft.h:65
ct::Tensor Hk_laststep
Hamiltonian for all k-points of last time step.
Definition esolver_ks_lcao_tddft.h:46
bool use_lapack
Definition esolver_ks_lcao_tddft.h:53
void before_all_runners(UnitCell &ucell, const Input_para &inp) override
Initialize of the first-principels energy solver.
Definition esolver_ks_lcao_tddft.cpp:53
int totstep
Total steps for evolving the wave function.
Definition esolver_ks_lcao_tddft.h:60
Definition esolver_ks_lcao.h:32
bool conv_esolver
Definition esolver.h:47
Definition td_info.h:10
Definition unitcell.h:17
Definition velocity_op.h:15
A multi-dimensional array of elements of a single data type.
Definition tensor.h:32
Definition psi.h:37
The First-Principles (FP) Energy Solver Class.
Definition opt_test_tools.cpp:93
DeviceType
The type of memory used by an allocator.
Definition tensor_types.h:73
Definition input_parameter.h:13