xref: /phasta/phastaIO/phiompi.c (revision f42e0444da478b8804248904e7be4eb4355d183d)
1*f42e0444SCameron Smith #include<mpi.h>
2*f42e0444SCameron Smith #include<assert.h>
3*f42e0444SCameron Smith #include"phiompi.h"
4*f42e0444SCameron Smith int phio_ar_int(int val, int op) {
5*f42e0444SCameron Smith   int res = 0;
6*f42e0444SCameron Smith   int err = MPI_Allreduce(&val,&res,1,MPI_INT,op,MPI_COMM_WORLD);
7*f42e0444SCameron Smith   assert(err == MPI_SUCCESS);
8*f42e0444SCameron Smith   return res;
9*f42e0444SCameron Smith }
10*f42e0444SCameron Smith double phio_ar_dbl(double val, int op) {
11*f42e0444SCameron Smith   double res = 0;
12*f42e0444SCameron Smith   int err = MPI_Allreduce(&val,&res,1,MPI_DOUBLE,op,MPI_COMM_WORLD);
13*f42e0444SCameron Smith   assert(err == MPI_SUCCESS);
14*f42e0444SCameron Smith   return res;
15*f42e0444SCameron Smith }
16*f42e0444SCameron Smith long phio_ar_long(long val, int op) {
17*f42e0444SCameron Smith   long res = 0;
18*f42e0444SCameron Smith   int err = MPI_Allreduce(&val,&res,1,MPI_LONG,op,MPI_COMM_WORLD);
19*f42e0444SCameron Smith   assert(err == MPI_SUCCESS);
20*f42e0444SCameron Smith   return res;
21*f42e0444SCameron Smith }
22*f42e0444SCameron Smith int phio_min_int(int val) {
23*f42e0444SCameron Smith   return phio_ar_int(val,MPI_MIN);
24*f42e0444SCameron Smith }
25*f42e0444SCameron Smith int phio_max_int(int val) {
26*f42e0444SCameron Smith   return phio_ar_int(val,MPI_MAX);
27*f42e0444SCameron Smith }
28*f42e0444SCameron Smith long phio_add_long(long val) {
29*f42e0444SCameron Smith   return phio_ar_long(val,MPI_SUM);
30*f42e0444SCameron Smith }
31*f42e0444SCameron Smith double phio_min_double(double val) {
32*f42e0444SCameron Smith   return phio_ar_dbl(val,MPI_MIN);
33*f42e0444SCameron Smith }
34*f42e0444SCameron Smith double phio_max_double(double val) {
35*f42e0444SCameron Smith   return phio_ar_dbl(val,MPI_MAX);
36*f42e0444SCameron Smith }
37*f42e0444SCameron Smith double phio_add_double(double val) {
38*f42e0444SCameron Smith   return phio_ar_dbl(val,MPI_SUM);
39*f42e0444SCameron Smith }
40*f42e0444SCameron Smith int phio_self() {
41*f42e0444SCameron Smith   int self;
42*f42e0444SCameron Smith   MPI_Comm_rank(MPI_COMM_WORLD, &self);
43*f42e0444SCameron Smith   return self;
44*f42e0444SCameron Smith }
45*f42e0444SCameron Smith int phio_peers() {
46*f42e0444SCameron Smith   int peers;
47*f42e0444SCameron Smith   MPI_Comm_size(MPI_COMM_WORLD, &peers);
48*f42e0444SCameron Smith   return peers;
49*f42e0444SCameron Smith }
50