ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
parallel_reduce.h
Go to the documentation of this file.
1#ifndef PARALLEL_REDUCE_H
2#define PARALLEL_REDUCE_H
3
4#ifdef __MPI
5#include <mpi.h>
6#endif
7
8#include <cassert>
9#include <complex>
10
11// using std::complex;
12
14{
16template <typename T>
17void reduce_all(T& object);
18template <typename T>
19void reduce_all(T* object, const int n);
20template <typename T>
21void reduce_pool(T& object);
22template <typename T>
23void reduce_pool(T* object, const int n);
24
25void reduce_int_diag(int& object); // mohan add 2012-01-12
26
27void reduce_int_grid(int* object, const int n); // mohan add 2012-01-12
28
29// reduce double only in this pool
30// (each pool contain different k points)
31void reduce_double_grid(double* object, const int n);
32void reduce_double_diag(double* object, const int n);
33
34void reduce_double_allpool(const int& npool, const int& nproc_in_pool, double& object);
35void reduce_double_allpool(const int& npool, const int& nproc_in_pool, double* object, const int n);
36
37void gather_min_int_all(const int& nproc, int& v);
38void gather_max_double_all(const int& nproc, double& v);
39void gather_min_double_all(const int& nproc, double& v);
40void gather_max_double_pool(const int& nproc_in_pool, double& v);
41void gather_min_double_pool(const int& nproc_in_pool, double& v);
42
43// mohan add 2011-04-21
44void gather_int_all(int& v, int* all);
45
46bool check_if_equal(double& v); // mohan add 2009-11-11
47
48template <class T, class TI>
49inline void ZEROS(std::complex<T>* u, const TI n)
50{
51 assert(n >= 0);
52 for (TI i = 0; i < n; i++)
53 {
54 u[i] = std::complex<T>(0.0, 0.0);
55 }
56 return;
57}
58
59template <class T, class TI>
60inline void ZEROS(T* u, const TI n)
61{
62 assert(n >= 0);
63 for (TI i = 0; i < n; i++)
64 {
65 u[i] = 0;
66 }
67}
68} // namespace Parallel_Reduce
69
70#endif
#define T
Definition exp.cpp:237
Definition parallel_reduce.h:14
void reduce_all(T &object)
reduce in all process
Definition depend_mock.cpp:14
void gather_min_double_all(const int &nproc, double &v)
Definition parallel_reduce.cpp:286
void reduce_double_grid(double *object, const int n)
Definition parallel_reduce.cpp:68
void reduce_double_allpool(const int &npool, const int &nproc_in_pool, double &object)
Definition parallel_reduce.cpp:113
void reduce_int_grid(int *object, const int n)
Definition parallel_reduce.cpp:51
void reduce_double_diag(double *object, const int n)
Definition parallel_reduce.cpp:76
void gather_max_double_pool(const int &nproc_in_pool, double &v)
Definition parallel_reduce.cpp:248
void gather_int_all(int &v, int *all)
Definition parallel_reduce.cpp:209
void ZEROS(std::complex< T > *u, const TI n)
Definition parallel_reduce.h:49
bool check_if_equal(double &v)
void gather_max_double_all(const int &nproc, double &v)
Definition parallel_reduce.cpp:233
void gather_min_double_pool(const int &nproc_in_pool, double &v)
Definition parallel_reduce.cpp:267
void reduce_int_diag(int &object)
Definition parallel_reduce.cpp:16
void reduce_pool(T &object)
Definition depend_mock.cpp:15
void gather_min_int_all(const int &nproc, int &v)
Definition parallel_reduce.cpp:218
int nproc_in_pool
Definition pw_test.cpp:12