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"
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;
55
56 // Control the device type for Hk_laststep and Sk_laststep
57 // Set to CPU temporarily, should wait for further GPU development
58 static constexpr ct::DeviceType ct_device_type_hs = ct::DeviceType::CpuDevice;
59
61 int totstep = -1;
62
65
66 TD_info* td_p = nullptr;
67
69 bool use_td_moving_gauge = false;
71
73 bool restart_done = false;
74
75 private:
76 void weight_dm_rho(const UnitCell& ucell);
77};
78
79} // namespace ModuleESolver
80#endif // ESOLVER_KS_LCAO_TDDFT_H
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:411
~ESolver_KS_LCAO_TDDFT()
Definition esolver_ks_lcao_tddft.cpp:42
module_rt::TD_MovingGauge * td_mg_
Definition esolver_ks_lcao_tddft.h:70
bool use_td_moving_gauge
Moving spatial gauge for Ehrenfest dynamics, to calculate the correction term arising from the moveme...
Definition esolver_ks_lcao_tddft.h:69
virtual void hamilt2rho_single(UnitCell &ucell, const int istep, const int iter, const double ethr) override
Definition esolver_ks_lcao_tddft.cpp:257
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:356
CublasMpResources cublas_res
Definition esolver_ks_lcao_tddft.h:54
bool restart_done
Restart flag.
Definition esolver_ks_lcao_tddft.h:73
virtual void runner(UnitCell &cell, const int istep) override
run energy solver
Definition esolver_ks_lcao_tddft.cpp:95
void print_step()
Definition esolver_ks_lcao_tddft.cpp:249
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:578
static constexpr ct::DeviceType ct_device_type_hs
Definition esolver_ks_lcao_tddft.h:58
Velocity_op< TR > * velocity_mat
Velocity matrix for calculating current.
Definition esolver_ks_lcao_tddft.h:64
ESolver_KS_LCAO_TDDFT()
Definition esolver_ks_lcao_tddft.cpp:24
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:545
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:66
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:67
int totstep
Total steps for evolving the wave function.
Definition esolver_ks_lcao_tddft.h:61
Definition esolver_ks_lcao.h:33
bool conv_esolver
Definition esolver.h:48
Definition mock_tdinfo.cpp:4
Definition unitcell.h:15
Definition velocity_op.h:15
A multi-dimensional array of elements of a single data type.
Definition tensor.h:32
Definition td_moving_gauge.h:17
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 cublasmp_context.h:38
Definition input_parameter.h:12