ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
parallel_k2d.h
Go to the documentation of this file.
1#ifndef PARALLEL_K2D_H
2#define PARALLEL_K2D_H
3
7#ifdef __MPI
8#include "mpi.h"
9#endif
11
12/***
13 * This is a class to realize k-points parallelism in LCAO code.
14 * It is now designed only to work with 2D Eigenvalue solver parallelism.
15 */
16
17template <typename TK>
19 public:
29 void set_para_env(int nks,
30 const int& nw,
31 const int& nb2d,
32 const int& nproc,
33 const int& my_rank,
34 const int& nspin);
35
38 const std::vector<int>& ik_kpar,
39 const int& nw);
40
43 void unset_para_env();
45 void set_kpar(int kpar);
47 int get_kpar() { return this->kpar_; }
49 int get_my_pool() { return this->MY_POOL; }
55 Parallel_2D* get_p2D_pool() { return this->P2D_pool; }
56
60 std::vector<TK> hk_pool;
61 std::vector<TK> sk_pool;
62
63#ifdef __MPI
65#endif
66
67 private:
71 int kpar_ = 0;
72
79
86};
87
88#endif
This class packs the basic information of 2D-block-cyclic parallel distribution of an arbitrary matri...
Definition parallel_2d.h:12
Definition parallel_k2d.h:18
void unset_para_env()
Definition parallel_k2d.cpp:87
int kpar_
Definition parallel_k2d.h:71
int NPROC_IN_POOL
Definition parallel_k2d.h:76
MPI_Comm POOL_WORLD_K2D
Definition parallel_k2d.h:64
Parallel_Kpoints * Pkpoints
Definition parallel_k2d.h:83
int get_kpar()
get the number of k-points
Definition parallel_k2d.h:47
void set_para_env(int nks, const int &nw, const int &nb2d, const int &nproc, const int &my_rank, const int &nspin)
Definition parallel_k2d.cpp:9
~Parallel_K2D()
private destructor
Definition parallel_k2d.h:23
Parallel_2D * P2D_global
Definition parallel_k2d.h:84
Parallel_Kpoints * get_pKpoints()
get pKpoints
Definition parallel_k2d.h:51
Parallel_2D * P2D_pool
Definition parallel_k2d.h:85
void set_kpar(int kpar)
set the number of k-points
Definition parallel_k2d.cpp:104
std::vector< TK > hk_pool
Definition parallel_k2d.h:60
Parallel_K2D()
private constructor
Definition parallel_k2d.h:21
void distribute_hsk(hamilt::Hamilt< TK > *pHamilt, const std::vector< int > &ik_kpar, const int &nw)
this function distributes the Hk and Sk matrices to hk_pool and sk_pool
Definition parallel_k2d.cpp:38
Parallel_2D * get_p2D_global()
get p2D_global
Definition parallel_k2d.h:53
int RANK_IN_POOL
Definition parallel_k2d.h:78
std::vector< TK > sk_pool
Definition parallel_k2d.h:61
int get_my_pool()
get my pool
Definition parallel_k2d.h:49
int MY_POOL
Definition parallel_k2d.h:77
Parallel_2D * get_p2D_pool()
get p2D_pool
Definition parallel_k2d.h:55
Definition parallel_kpoints.h:10
Definition hamilt.h:16