1#ifndef EXX_LRI_INTERFACE_H
2#define EXX_LRI_INTERFACE_H
14 template <
typename TK,
typename TR>
19 const std::vector<std::vector<std::complex<double>>>& dm_k_ibz,
24 const std::vector<std::vector<double>>& dm_k_ibz,
30template<
typename T,
typename Tdata>
35 using TC = std::array<int, 3>;
36 using TAC = std::pair<TA, TC>;
41 this->
exx_ptr = std::make_shared<Exx_LRI<Tdata>>(info);
49 std::vector<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>>&
get_Hexxs()
const {
return this->
exx_ptr->Hexxs; }
56 void init(
const MPI_Comm &mpi_comm,
65 void cal_exx_elec(
const std::vector<std::map<
TA, std::map<
TAC, RI::Tensor<Tdata>>>>& Ds,
101 const double& scf_ene_thr,
114 const double& scf_ene_thr);
Definition charge_mixing.h:9
Definition Exx_LRI_interface.h:32
elecstate::DensityMatrix< T, double > * dm_last_step
Definition Exx_LRI_interface.h:118
void cal_exx_force(const int &nat)
: in cal_exx_force: Exx_LRI::cal_exx_force()
Definition Exx_LRI_interface.hpp:89
ModuleBase::matrix & get_stress() const
Definition Exx_LRI_interface.h:52
Exx_LRI_Interface()=delete
void cal_exx_stress(const double &omega, const double &lat0)
: in cal_exx_stress: Exx_LRI::cal_exx_stress()
Definition Exx_LRI_interface.hpp:108
void exx_beforescf(const int istep, const K_Vectors &kv, const Charge_Mixing &chgmix, const UnitCell &ucell, const LCAO_Orbitals &orb)
in beforescf: set xc type, opt_orb, do DM mixing
Definition Exx_LRI_interface.hpp:148
std::pair< TA, TC > TAC
Definition Exx_LRI_interface.h:36
std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > & get_Hexxs() const
Definition Exx_LRI_interface.h:49
double etot_last_outer_loop
Definition Exx_LRI_interface.h:117
void cal_exx_ions(const UnitCell &ucell, const bool write_cv=false)
: in cal_exx_ions: Exx_LRI::cal_exx_ions()
Definition Exx_LRI_interface.hpp:59
void init(const MPI_Comm &mpi_comm, const UnitCell &ucell, const K_Vectors &kv, const LCAO_Orbitals &orb)
in init: Exx_LRI::init()
Definition Exx_LRI_interface.hpp:48
ModuleSymmetry::Symmetry_rotation symrot_
Definition Exx_LRI_interface.h:126
bool exx_spacegroup_symmetry
Definition Exx_LRI_interface.h:125
int two_level_step
Definition Exx_LRI_interface.h:116
ModuleBase::matrix & get_force() const
Definition Exx_LRI_interface.h:51
Mix_DMk_2D mix_DMk_2D
Definition Exx_LRI_interface.h:123
void exx_hamilt2rho(elecstate::ElecState &elec, const Parallel_Orbitals &pv, const int iter)
in hamilt2rho: calculate Hexx and Eexx
Definition Exx_LRI_interface.hpp:262
void exx_iter_finish(const K_Vectors &kv, const UnitCell &ucell, hamilt::Hamilt< T > &hamilt, elecstate::ElecState &elec, Charge_Mixing &chgmix, const double &scf_ene_thr, int &iter, const int istep, bool &conv_esolver)
in iter_finish: write Hexx, do something according to whether SCF is converged
Definition Exx_LRI_interface.hpp:292
Flag_Finish flag_finish
Definition Exx_LRI_interface.h:136
bool exx_after_converge(const UnitCell &ucell, hamilt::Hamilt< T > &hamilt, const elecstate::DensityMatrix< T, double > &dm, const K_Vectors &kv, const int &nspin, int &iter, const int &istep, const double &etot, const double &scf_ene_thr)
: in do_after_converge: add exx operators; do DM mixing if seperate loop
Definition Exx_LRI_interface.hpp:359
std::array< int, 3 > TC
Definition Exx_LRI_interface.h:35
void exx_before_all_runners(const K_Vectors &kv, const UnitCell &ucell, const Parallel_2D &pv)
in before_all_runners: set symmetry according to irreducible k-points since k-points are not reduced ...
Definition Exx_LRI_interface.hpp:128
void exx_eachiterinit(const int istep, const UnitCell &ucell, const elecstate::DensityMatrix< T, double > &dm, const K_Vectors &kv, const int &iter)
in eachiterinit: do DM mixing and calculate Hexx when entering 2nd SCF
Definition Exx_LRI_interface.hpp:204
int TA
Definition Exx_LRI_interface.h:34
double & get_Eexx() const
Definition Exx_LRI_interface.h:50
void cal_exx_elec(const std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > &Ds, const UnitCell &ucell, const Parallel_Orbitals &pv, const ModuleSymmetry::Symmetry_rotation *p_symrot=nullptr)
: in cal_exx_elec: Exx_LRI::cal_exx_elec()
Definition Exx_LRI_interface.hpp:71
std::shared_ptr< Exx_LRI< Tdata > > exx_ptr
Definition Exx_LRI_interface.h:120
Exx_LRI_Interface(const Exx_Info::Exx_Info_RI &info)
Constructor for Exx_LRI_Interface.
Definition Exx_LRI_interface.h:39
Definition Mix_DMk_2D.h:17
Definition symmetry_rotation.h:16
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 density_matrix.h:36
Definition elecstate.h:15
std::vector< std::vector< std::complex< double > > > restore_dm(const K_Vectors &kv, const std::vector< std::vector< std::complex< double > > > &dm_k_ibz, const ModuleSymmetry::Symmetry_rotation &symrot, const Parallel_2D &pv)
for symmetry, multi-k, nspin<4: restore DM(k) form DM(k_ibz)
std::pair< int, TC > TAC
Definition ri_cv_io_test.cpp:10
Definition Exx_LRI_interface.h:129
bool ions
Definition Exx_LRI_interface.h:131
bool force
Definition Exx_LRI_interface.h:133
bool init
Definition Exx_LRI_interface.h:130
bool stress
Definition Exx_LRI_interface.h:134
bool elec
Definition Exx_LRI_interface.h:132