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);
24template <typename T>
25void reduce_min(T& v);
26template <typename T>
27void reduce_max(T& v);
28template <typename T>
29void reduce_min_pool(const int& nproc_in_pool, T& v);
30template <typename T>
31void reduce_max_pool(const int& nproc_in_pool, T& v);
32
33void reduce_int_diag(int& object); // mohan add 2012-01-12
34
35void reduce_int_grid(int* object, const int n); // mohan add 2012-01-12
36
37// reduce double only in this pool
38// (each pool contain different k points)
39void reduce_double_grid(double* object, const int n);
40void reduce_double_diag(double* object, const int n);
41
42void reduce_double_allpool(const int& npool, const int& nproc_in_pool, double& object);
43void reduce_double_allpool(const int& npool, const int& nproc_in_pool, double* object, const int n);
44
45void gather_int_all(int& v, int* all);
46
47bool check_if_equal(double& v); // mohan add 2009-11-11
48
49template <class T, class TI>
50inline void ZEROS(std::complex<T>* u, const TI n)
51{
52 assert(n >= 0);
53 for (TI i = 0; i < n; i++)
54 {
55 u[i] = std::complex<T>(0.0, 0.0);
56 }
57 return;
58}
59
60template <class T, class TI>
61inline void ZEROS(T* u, const TI n)
62{
63 assert(n >= 0);
64 for (TI i = 0; i < n; i++)
65 {
66 u[i] = 0;
67 }
68}
69} // namespace Parallel_Reduce
70
71#endif
const std::complex< double > i
Definition cal_pLpR.cpp:46
#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 reduce_double_grid(double *object, const int n)
Definition parallel_reduce.cpp:86
void reduce_double_allpool(const int &npool, const int &nproc_in_pool, double &object)
Definition parallel_reduce.cpp:139
void reduce_int_grid(int *object, const int n)
Definition parallel_reduce.cpp:69
void reduce_double_diag(double *object, const int n)
Definition parallel_reduce.cpp:94
void reduce_max(T &v)
void gather_int_all(int &v, int *all)
Definition parallel_reduce.cpp:235
void ZEROS(std::complex< T > *u, const TI n)
Definition parallel_reduce.h:50
void reduce_min(T &v)
void reduce_max_pool(const int &nproc_in_pool, T &v)
bool check_if_equal(double &v)
void reduce_min_pool(const int &nproc_in_pool, T &v)
void reduce_int_diag(int &object)
Definition parallel_reduce.cpp:25
void reduce_pool(T &object)
Definition depend_mock.cpp:15
int nproc_in_pool
Definition pw_test.cpp:12