/******************************************************************************* * * TRIQS: a Toolbox for Research in Interacting Quantum Systems * * Copyright (C) 2013 by O. Parcollet * * TRIQS is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * TRIQS. If not, see . * ******************************************************************************/ #include #include #include #include #include #include using namespace triqs; using namespace triqs::arrays; using namespace triqs::mpi; // a struct containing arrays. I only allow here boost serialization form, no mpi stuff here. struct S { array x; array y; template friend void serialize( Ar & ar, S & s) { ar & s.x; ar & s.y;} }; int main(int argc, char* argv[]) { mpi::environment env(argc, argv); mpi::communicator world; array A {{1,2}, {3,4}}, C(2,2); // boost mpi boost::mpi::reduce (world, A,C, std::c14::plus<>(),0); int s= world.size(); if (world.rank() ==0) std::cout<<" C = "<(s*A) <(s*A) <(s*A) <, 1 > { array{1,2}, {3,4}}; auto cC = ca; mpi::reduce_in_place (world, cC); if (world.rank() ==0) std::cout<<" cC = "<