13#include <RI/global/Tensor.h>
21#include <RI/ri/Cell_Nearest.h>
27 static const size_t Ndim = 3;
28 using TC = std::array<Tcell,Ndim>;
29 using TAC = std::pair<TA,TC>;
32 template<
typename Tdata,
typename Tmatrix>
33 extern std::vector<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>>
36 const std::vector<const Tmatrix*>& mks_2D,
39 const bool spgsym =
false);
42 extern std::vector<std::tuple<std::set<TA>, std::set<TA>>>
45 template<
typename Tdata,
typename TK>
51 const std::vector<std::map<
TA, std::map<
TAC, RI::Tensor<Tdata>>>>& Hs,
55 template<
typename Tdata,
typename TR>
57 const int current_spin,
59 const std::vector<std::map<
TA, std::map<
TAC, RI::Tensor<Tdata>>>>& Hs,
63 const RI::Cell_Nearest<int, int, 3, double, 3>*
const cell_nearest =
nullptr);
65 template<
typename Tdata>
69 const std::vector< std::map<
TA, std::map<
TAC, RI::Tensor<Tdata>>>> &Hexxs,
71 template<
typename Tdata>
74 std::deque<std::vector<std::vector<Tdata>>> &Hk_seq,
75 const std::vector<std::vector<Tdata>> &Hk_new,
76 const double mixing_beta,
77 const std::string mixing_mode);
82 extern inline int get_is_block(
const int is_k,
const int is_row_b,
const int is_col_b);
84 extern inline int get_iwt(
const UnitCell& ucell,
const int iat,
const int iw_b,
const int is_b);
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 hcontainer.h:144
Definition RI_2D_Comm.h:24
std::vector< int > get_ik_list(const K_Vectors &kv, const int is_k)
Definition RI_2D_Comm.cpp:65
std::vector< std::vector< Tdata > > pulay_mixing(const Parallel_Orbitals &pv, std::deque< std::vector< std::vector< Tdata > > > &Hk_seq, const std::vector< std::vector< Tdata > > &Hk_new, const double mixing_beta, const std::string mixing_mode)
int get_is_block(const int is_k, const int is_row_b, const int is_col_b)
Definition RI_2D_Comm.hpp:189
std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > split_m2D_ktoR(const UnitCell &ucell, const K_Vectors &kv, const std::vector< const Tmatrix * > &mks_2D, const Parallel_2D &pv, const int nspin, const bool spgsym=false)
int TA
Definition RI_2D_Comm.h:25
std::array< Tcell, Ndim > TC
Definition RI_2D_Comm.h:28
std::tuple< int, int > split_is_block(const int is_b)
Definition RI_2D_Comm.hpp:201
void add_HexxR(const int current_spin, const double alpha, const std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > &Hs, const Parallel_Orbitals &pv, const int npol, hamilt::HContainer< TR > &HlocR, const RI::Cell_Nearest< int, int, 3, double, 3 > *const cell_nearest=nullptr)
Definition RI_2D_Comm.hpp:238
std::tuple< int, int, int > get_iat_iw_is_block(const UnitCell &ucell, const int &iwt)
Definition RI_2D_Comm.hpp:174
std::pair< TA, TC > TAC
Definition RI_2D_Comm.h:29
void add_Hexx(const UnitCell &ucell, const K_Vectors &kv, const int ik, const double alpha, const std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > &Hs, const Parallel_Orbitals &pv, TK *hk)
Definition RI_2D_Comm.hpp:125
int get_iwt(const UnitCell &ucell, const int iat, const int iw_b, const int is_b)
Definition RI_2D_Comm.hpp:216
std::vector< std::tuple< std::set< TA >, std::set< TA > > > get_2D_judge(const UnitCell &ucell, const Parallel_2D &pv)
Definition RI_2D_Comm.cpp:15
std::vector< std::vector< Tdata > > Hexxs_to_Hk(const K_Vectors &kv, const Parallel_Orbitals &pv, const std::vector< std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > > &Hexxs, const int ik)
int Tcell
Definition RI_2D_Comm.h:26