25template <
typename T = std::complex<
double>,
typename Device = base_device::DEVICE_CPU>
58 void init_iter(
const int nband,
const int nband_l,
const int nbasis,
const int ndim);
60 using HPsiFunc = std::function<void(
T*,
T*,
const int,
const int)>;
75 const std::vector<double>& ethr_band);
this class is used to perform parallel matrix multiplication C = alpha * A^H * B + beta * C Here,...
Definition para_gemm.h:25
A multi-dimensional array of elements of a single data type.
Definition tensor.h:32
A class for diagonalization using the Blocked-PCG method.
Definition diago_bpcg.h:27
ct::Tensor hpsi
Definition diago_bpcg.h:109
int n_dim
valid dimension of psi
Definition diago_bpcg.h:85
ct::Tensor h_prec
Definition diago_bpcg.h:97
void init_iter(const int nband, const int nband_l, const int nbasis, const int ndim)
Initialize the class before diagonalization.
Definition diago_bpcg.cpp:37
void calc_hsub_with_block_exit(ct::Tensor &psi_out, ct::Tensor &hpsi_out, ct::Tensor &hsub_out, ct::Tensor &workspace_in, ct::Tensor &eigenvalue_out)
Apply the Hamiltonian operator to psi and obtain the hpsi matrix.
Definition diago_bpcg.cpp:243
ct::Tensor prec
Definition diago_bpcg.h:97
void calc_grad_with_block(const ct::Tensor &prec_in, ct::Tensor &err_out, ct::Tensor &beta_out, ct::Tensor &psi_in, ct::Tensor &hpsi_in, ct::Tensor &grad_out, ct::Tensor &grad_old_out)
Calculate the gradient for all bands used in CG method.
Definition diago_bpcg.cpp:137
int n_basis
the number of cols of the input psi
Definition diago_bpcg.h:83
void rotate_wf(const ct::Tensor &hsub_in, ct::Tensor &psi_out, ct::Tensor &workspace_in)
Inplace matrix multiplication to obtain the initial guessed wavefunction.
Definition diago_bpcg.cpp:180
void orth_projection(const ct::Tensor &psi_in, ct::Tensor &hsub_in, ct::Tensor &grad_out)
Orthogonalize column vectors in grad to column vectors in psi.
Definition diago_bpcg.cpp:165
const T zero_
Definition diago_bpcg.h:125
ct::kernels::set_memory< Real, ct_Device > setmem_var_op
Definition diago_bpcg.h:338
~DiagoBPCG()
Destructor for DiagoBPCG class.
Definition diago_bpcg.cpp:32
ct::kernels::synchronize_memory< Real, ct::DEVICE_CPU, ct_Device > syncmem_var_d2h_op
Definition diago_bpcg.h:342
void diag_hsub(const ct::Tensor &psi_in, const ct::Tensor &hpsi_in, ct::Tensor &hsub_out, ct::Tensor &eigenvalue_out)
Diagonalization of the subspace matrix.
Definition diago_bpcg.cpp:203
ct::kernels::synchronize_memory< T, ct_Device, ct_Device > syncmem_complex_op
Definition diago_bpcg.h:347
int nline
max iter steps for all-band cg loop
Definition diago_bpcg.h:87
void calc_hsub_with_block(const HPsiFunc &hpsi_func, T *psi_in, ct::Tensor &psi_out, ct::Tensor &hpsi_out, ct::Tensor &hsub_out, ct::Tensor &workspace_in, ct::Tensor &eigenvalue_out)
Apply the Hamiltonian operator to psi and obtain the hpsi matrix.
Definition diago_bpcg.cpp:218
const T * zero
Definition diago_bpcg.h:124
const T * one
Definition diago_bpcg.h:124
ct::Tensor grad
Definition diago_bpcg.h:115
int n_band
the number of bands of all processes
Definition diago_bpcg.h:79
ct::DataType t_type
Definition diago_bpcg.h:94
std::function< void(T *, T *, const int, const int)> HPsiFunc
Definition diago_bpcg.h:60
ct::kernels::resize_memory< Real, ct_Device > resmem_var_op
Definition diago_bpcg.h:339
ct::Tensor hgrad
Definition diago_bpcg.h:115
const T one_
Definition diago_bpcg.h:125
int n_band_l
the number of bands of current process
Definition diago_bpcg.h:81
Device * ctx
ctx is nothing but the devices used in gemm_op (Device * ctx = nullptr;),
Definition diago_bpcg.h:122
ct::kernels::set_memory< T, ct_Device > setmem_complex_op
Definition diago_bpcg.h:344
ModuleBase::PGemmCN< T, Device > pmmcn
parallel matrix multiplication
Definition diago_bpcg.h:89
typename ct::PsiToContainer< Device >::type ct_Device
Definition diago_bpcg.h:337
void diag(const HPsiFunc &hpsi_func, T *psi_in, Real *eigenvalue_in, const std::vector< double > ðr_band)
Diagonalize the Hamiltonian using the BPCG method.
Definition diago_bpcg.cpp:261
ct::Tensor beta
The coefficient for mixing the current and previous step gradients, used in iterative methods.
Definition diago_bpcg.h:100
const T neg_one_
Definition diago_bpcg.h:125
void calc_hpsi_with_block(const HPsiFunc &hpsi_func, T *psi_in, ct::Tensor &hpsi_out)
Apply the H operator to psi and obtain the hpsi matrix.
Definition diago_bpcg.cpp:193
ct::kernels::synchronize_memory< Real, ct_Device, ct::DEVICE_CPU > syncmem_var_h2d_op
Definition diago_bpcg.h:341
void orth_cholesky(ct::Tensor &workspace_in, ct::Tensor &psi_out, ct::Tensor &hpsi_out, ct::Tensor &hsub_out)
Orthogonalize and normalize the column vectors in psi_out using Cholesky decomposition.
Definition diago_bpcg.cpp:114
void line_minimize(ct::Tensor &grad_in, ct::Tensor &hgrad_in, ct::Tensor &psi_out, ct::Tensor &hpsi_out)
Optimize psi as well as the hpsi.
Definition diago_bpcg.cpp:96
ct::Tensor err_st
Error state value, if it is smaller than the given threshold, then exit the iteration.
Definition diago_bpcg.h:102
ct::kernels::delete_memory< T, ct_Device > delmem_complex_op
Definition diago_bpcg.h:345
PLinearTransform< T, Device > plintrans
Definition diago_bpcg.h:90
ct::Tensor eigen
Calculated eigen.
Definition diago_bpcg.h:104
ct::Tensor grad_old
Definition diago_bpcg.h:115
ct::DataType r_type
Definition diago_bpcg.h:93
ct::Tensor hsub
Definition diago_bpcg.h:111
bool test_error(const ct::Tensor &err_in, const std::vector< double > ðr_band)
Checks if the error satisfies the given threshold.
Definition diago_bpcg.cpp:70
const T * neg_one
Definition diago_bpcg.h:124
ct::kernels::resize_memory< T, ct_Device > resmem_complex_op
Definition diago_bpcg.h:346
void calc_prec()
Update the precondition array.
Definition diago_bpcg.cpp:159
typename GetTypeReal< T >::type Real
Definition diago_bpcg.h:32
ct::kernels::delete_memory< Real, ct_Device > delmem_var_op
Definition diago_bpcg.h:340
ct::Tensor work
work for some calculations within this class, including rotate_wf call
Definition diago_bpcg.h:118
ct::DeviceType device_type
Definition diago_bpcg.h:95
#define T
Definition exp.cpp:237
DataType
Enumeration of data types for tensors. The DataType enum lists the supported data types for tensors....
Definition tensor_types.h:50
DeviceType
The type of memory used by an allocator.
Definition tensor_types.h:73
Definition diag_comm_info.h:9
T type
Definition macros.h:8
Definition math_kernel_op.h:217
Definition tensor_types.h:113