1#ifndef DENSITY_MATRIX_H
2#define DENSITY_MATRIX_H
25 using type = std::complex<double>;
34template <
typename TK,
typename TR>
101 void set_DMK(
const int ispin,
const int ik,
const int i,
const int j,
const TK value);
116 TK
get_DMK(
const int ispin,
const int ik,
const int i,
const int j)
const;
210 void write_DMK(
const std::string directory,
const int ispin,
const int ik);
218 void read_DMK(
const std::string directory,
const int ispin,
const int ik);
225 std::vector<ModuleBase::ComplexMatrix>
EDMK;
232 std::vector<TK*> pexsi_EDM;
241 std::vector<hamilt::HContainer<TR>*>
_DMR;
257 std::vector<std::vector<TK>>
_DMK;
262 const std::vector<ModuleBase::Vector3<double>>
_kvec_d;
Definition sltk_grid_driver.h:43
3 elements vector
Definition vector3.h:22
Definition parallel_orbitals.h:9
Definition record_adj.h:11
Definition density_matrix.h:36
void cal_DMR_full(hamilt::HContainer< std::complex< double > > *dmR_out) const
calculate complex density matrix DMR with both real and imaginary part for noncollinear-spin calculat...
const std::vector< std::vector< TK > > & get_DMK_vector() const
get pointer vector of DMK
Definition density_matrix.h:161
std::vector< hamilt::HContainer< TR > * > _DMR_grid
HContainer for density matrix in real space for gird parallelization vector.size() = 1 for non-polari...
Definition density_matrix.h:249
void write_DMK(const std::string directory, const int ispin, const int ik)
write density matrix dm(ik) into *.dmk
const Parallel_Orbitals * get_paraV_pointer() const
get pointer of paraV
Definition density_matrix.h:173
void cal_DMR(const int ik_in=-1)
calculate density matrix DMR from dm(k) using blas::axpy if ik_in < 0, calculate all k-points if ik_i...
int _nspin
spin-polarization index (1 - none spin and SOC ; 2 - spin polarization) Attention: this is not as sam...
Definition density_matrix.h:274
const std::vector< ModuleBase::Vector3< double > > & get_kvec_d() const
Definition density_matrix.h:175
const std::vector< hamilt::HContainer< TR > * > & get_DMR_vector() const
get pointer vector of DMR
Definition density_matrix.h:145
std::vector< hamilt::HContainer< TR > * > _DMR
HContainer for density matrix in real space for 2D parallelization vector.size() = 1 for non-polariza...
Definition density_matrix.h:241
int _nk
real number of k-points _nk is not equal to _kv->get_nks() when spin-polarization is considered _nk =...
Definition density_matrix.h:281
int get_DMK_ncol() const
get number of columns of density matrix dm(k)
Definition density_matrix_io.cpp:277
std::vector< std::vector< TK > > _DMK
density matrix in k space, which is a vector[ik] DMK should be a [_nspin][_nk][i][j] matrix,...
Definition density_matrix.h:257
std::vector< std::vector< TR > > _DMR_save
Definition density_matrix.h:242
void set_DMK(const int ispin, const int ik, const int i, const int j, const TK value)
set _DMK element directly
Definition density_matrix_io.cpp:216
std::vector< ModuleBase::ComplexMatrix > EDMK
Definition density_matrix.h:225
void save_DMR()
save _DMR into _DMR_save
Definition density_matrix_io.cpp:286
void cal_DMR_td(const UnitCell &ucell, const ModuleBase::Vector3< double > At, const int ik_in=-1)
calculate density matrix DMR with additional vector potential phase, used for hybrid gauge tddft if i...
~DensityMatrix()
Destructor of class DensityMatrix.
Definition density_matrix.cpp:19
std::vector< std::vector< TR > > & get_DMR_save()
Definition density_matrix.h:149
void set_DMK_zero()
set _DMK element to zero
Definition density_matrix_io.cpp:228
TK * get_DMK_pointer(const int ik) const
get pointer of DMK
Definition density_matrix_io.cpp:196
hamilt::HContainer< TR > * get_DMR_pointer(const int ispin) const
get pointer of DMR
Definition density_matrix_io.cpp:186
TR * dmr_tmp_
Definition density_matrix.h:285
std::vector< TR > dmr_origin_
temporary pointers for switch DMR, only used with nspin=2
Definition density_matrix.h:284
std::vector< std::vector< TK > > & get_DMK_vector()
Definition density_matrix.h:162
void read_DMK(const std::string directory, const int ispin, const int ik)
read *.dmk into density matrix dm(ik)
Definition density_matrix_io.cpp:323
void init_DMR(const Grid_Driver *GridD_in, const UnitCell *ucell)
initialize density matrix DMR from UnitCell
Definition density_matrix_io.cpp:15
void set_DMK_pointer(const int ik, TK *DMK_in)
set _DMK using a input TK* pointer please make sure the size of TK* is correct
Definition density_matrix_io.cpp:206
int get_DMK_nks() const
get total number of k-points of density matrix dm(k)
Definition density_matrix_io.cpp:250
int get_DMK_nrow() const
get number of rows of density matrix dm(k)
Definition density_matrix_io.cpp:268
std::vector< hamilt::HContainer< TR > * > & get_DMR_vector()
Definition density_matrix.h:146
const std::vector< ModuleBase::Vector3< double > > _kvec_d
K_Vectors object, which is used to get k-point information.
Definition density_matrix.h:262
const Parallel_Orbitals * _paraV
Parallel_Orbitals object, which contain all information of 2D block cyclic distribution.
Definition density_matrix.h:267
TK get_DMK(const int ispin, const int ik, const int i, const int j) const
get a matrix element of density matrix dm(k)
Definition density_matrix_io.cpp:239
typename ShiftRealComplex< TR >::type TRShift
Definition density_matrix.h:37
int get_DMK_size() const
Definition density_matrix_io.cpp:259
const std::vector< std::vector< TR > > & get_DMR_save() const
Definition density_matrix.h:148
void switch_dmr(const int mode)
(Only nspin=2) switch DMR to total density matrix or magnetization density matrix
Definition density_matrix.cpp:563
Definition hcontainer.h:144
std::complex< double > complex
Definition diago_cusolver.cpp:13
std::complex< double > type
Definition density_matrix.h:25
double type
Definition density_matrix.h:31
DensityMatrix Class <TK,TR> = <double,double> for Gamma-only calculation <TK,TR> = <std::complex<doub...
Definition density_matrix.h:18
void type
Definition density_matrix.h:19