distributed_dimacs_reader.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright (C) 2006 The Trustees of Indiana University.
  2. // Use, modification and distribution is subject to the Boost Software
  3. // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // Authors: Brian Barrett
  6. // Nick Edmonds
  7. // Andrew Lumsdaine
  8. #include <boost/graph/use_mpi.hpp>
  9. #include <boost/config.hpp>
  10. #include <boost/throw_exception.hpp>
  11. #include <boost/graph/distributed/adjacency_list.hpp>
  12. #include <boost/property_map/parallel/distributed_property_map.hpp>
  13. #include <boost/graph/distributed/mpi_process_group.hpp>
  14. #include <boost/graph/dimacs.hpp>
  15. #include <boost/graph/graphviz.hpp>
  16. #include <boost/test/minimal.hpp>
  17. #include <iostream>
  18. #include <cstdlib>
  19. #include <iomanip>
  20. #include <fstream>
  21. #ifdef BOOST_NO_EXCEPTIONS
  22. void
  23. boost::throw_exception(std::exception const& ex)
  24. {
  25. std::cout << ex.what() << std::endl;
  26. abort();
  27. }
  28. #endif
  29. using namespace boost;
  30. using namespace boost::graph;
  31. using boost::graph::distributed::mpi_process_group;
  32. typedef double time_type;
  33. inline time_type get_time()
  34. {
  35. return MPI_Wtime();
  36. }
  37. std::string print_time(time_type t)
  38. {
  39. std::ostringstream out;
  40. out << std::setiosflags(std::ios::fixed) << std::setprecision(2) << t;
  41. return out.str();
  42. }
  43. void
  44. test_dimacs_reader(const char *filename)
  45. {
  46. mpi_process_group pg;
  47. typedef adjacency_list<vecS,
  48. distributedS<mpi_process_group, vecS>,
  49. undirectedS> Graph;
  50. std::ifstream file(filename);
  51. dimacs_basic_reader reader = dimacs_basic_reader(file, false);
  52. dimacs_basic_reader end;
  53. boost::parallel::variant_distribution<mpi_process_group> distrib =
  54. boost::parallel::block(pg, reader.n_vertices());
  55. Graph g(dimacs_edge_iterator<dimacs_basic_reader>(reader),
  56. dimacs_edge_iterator<dimacs_basic_reader>(end),
  57. reader.n_vertices(), pg, distrib);;
  58. // write_graphviz("reader.dot", g);
  59. }
  60. int
  61. test_main(int argc, char* argv[])
  62. {
  63. mpi::environment env(argc, argv);
  64. if (argc == 2) {
  65. test_dimacs_reader(argv[1]);
  66. }
  67. return 0;
  68. }