ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
RI_2D_Comm.h
Go to the documentation of this file.
1//=======================
2// AUTHOR : Peize Lin
3// DATE : 2022-08-17
4//=======================
5
6#ifndef RI_2D_COMM_H
7#define RI_2D_COMM_H
8
11#include "source_cell/klist.h"
12
13#include <RI/global/Tensor.h>
14
15#include <array>
16#include <vector>
17#include <tuple>
18#include <map>
19#include <set>
20#include <deque>
21#include <RI/ri/Cell_Nearest.h>
22
23namespace RI_2D_Comm
24{
25 using TA = int;
26 using Tcell = int;
27 static const size_t Ndim = 3;
28 using TC = std::array<Tcell,Ndim>;
29 using TAC = std::pair<TA,TC>;
30
31//public:
32 template<typename Tdata, typename Tmatrix>
33 extern std::vector<std::map<TA,std::map<TAC,RI::Tensor<Tdata>>>>
35 const K_Vectors& kv,
36 const std::vector<const Tmatrix*>& mks_2D,
37 const Parallel_2D& pv,
38 const int nspin,
39 const bool spgsym = false);
40
41 // judge[is] = {s0, s1}
42 extern std::vector<std::tuple<std::set<TA>, std::set<TA>>>
43 get_2D_judge(const UnitCell& ucell, const Parallel_2D& pv);
44
45 template<typename Tdata, typename TK>
46 extern void add_Hexx(
47 const UnitCell& ucell,
48 const K_Vectors& kv,
49 const int ik,
50 const double alpha,
51 const std::vector<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>>& Hs,
52 const Parallel_Orbitals& pv,
53 TK* hk);
54
55 template<typename Tdata, typename TR>
56 extern void add_HexxR(
57 const int current_spin,
58 const double alpha,
59 const std::vector<std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>>& Hs,
60 const Parallel_Orbitals& pv,
61 const int npol,
63 const RI::Cell_Nearest<int, int, 3, double, 3>* const cell_nearest = nullptr);
64
65 template<typename Tdata>
66 extern std::vector<std::vector<Tdata>> Hexxs_to_Hk(
67 const K_Vectors &kv,
68 const Parallel_Orbitals &pv,
69 const std::vector< std::map<TA, std::map<TAC, RI::Tensor<Tdata>>>> &Hexxs,
70 const int ik);
71 template<typename Tdata>
72 std::vector<std::vector<Tdata>> pulay_mixing(
73 const Parallel_Orbitals &pv,
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);
78
79//private:
80 extern std::vector<int> get_ik_list(const K_Vectors &kv, const int is_k);
81 extern inline std::tuple<int,int,int> get_iat_iw_is_block(const UnitCell& ucell,const int& iwt);
82 extern inline int get_is_block(const int is_k, const int is_row_b, const int is_col_b);
83 extern inline std::tuple<int,int> split_is_block(const int is_b);
84 extern inline int get_iwt(const UnitCell& ucell, const int iat, const int iw_b, const int is_b);
85}
86
87#include "RI_2D_Comm.hpp"
88
89#endif
Definition klist.h:13
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 unitcell.h:16
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