• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  Copyright 2013 Karsten Ahnert
3  Copyright 2013 Mario Mulansky
4  Copyright 2013 Pascal Germroth
5 
6  Distributed under the Boost Software License, Version 1.0.
7  (See accompanying file LICENSE_1_0.txt or
8  copy at http://www.boost.org/LICENSE_1_0.txt)
9  */
10 
11 #include <iostream>
12 #include <sstream>
13 #include <cstdlib>
14 
15 #define BOOST_TEST_MODULE odeint_mpi
16 #include <boost/test/unit_test.hpp>
17 
18 #include <boost/numeric/odeint/external/mpi/mpi.hpp>
19 
20 using namespace boost::numeric::odeint;
21 
22 boost::mpi::environment env;
23 
24 BOOST_AUTO_TEST_SUITE( norm_test_suite )
25 
BOOST_AUTO_TEST_CASE(norm_test)26 BOOST_AUTO_TEST_CASE( norm_test )
27 {
28     boost::mpi::communicator world;
29 
30     int ref_value = 0;
31     std::vector<int> in_data;
32     mpi_state< std::vector<int> > state(world);
33 
34     // generate data and reference value on master
35     if(world.rank() == 0) {
36         for(size_t i = 0 ; i < 400 ; i++)
37             in_data.push_back( rand() % 10000 );
38         ref_value = *std::max_element(in_data.begin(), in_data.end());
39     }
40     boost::mpi::broadcast(world, ref_value, 0);
41 
42     // copy to nodes
43     split( in_data, state );
44 
45     int value = mpi_nested_algebra< range_algebra >::norm_inf( state );
46 
47     {
48         std::ostringstream ss;
49         ss << "state[" << world.rank() << "]"
50            << " local:" << range_algebra::norm_inf( state() )
51            << " global:" << value
52            << " ref:" << ref_value << "\n";
53         std::clog << ss.str() << std::flush;
54     }
55 
56     BOOST_REQUIRE_EQUAL( value, ref_value );
57 }
58 
59 
60 BOOST_AUTO_TEST_SUITE_END()
61 
62 
63