std::ostream& operator<<(std::ostream &o, const Sawyer::Container::Graph<V, E> &graph) {
    typedef const typename Sawyer::Container::Graph<V, E> Graph;
    typedef typename Graph::ConstVertexIterator VertexIterator;
    typedef typename Graph::ConstEdgeIterator EdgeIterator;
    typedef typename Graph::Vertex Vertex;
    typedef typename Graph::Edge Edge;

    o <<"    vertices:\n";
    for (size_t id=0; id<graph.nVertices(); ++id) {
        VertexIterator vertex = graph.findVertex(id);
        o <<"      [" <<vertex->id() <<"] = " <<vertex->value() <<"\n";
        BOOST_FOREACH (const Edge &edge, vertex->outEdges())
            o <<"        out edge #" <<edge.id() <<" to   node #" <<edge.target()->id() <<" = " <<edge.value() <<"\n";
        BOOST_FOREACH (const Edge &edge, vertex->inEdges())
            o <<"        in  edge #" <<edge.id() <<" from node #" <<edge.source()->id() <<" = " <<edge.value() <<"\n";
    }

    o <<"    edges:\n";
    for (size_t id=0; id<graph.nEdges(); ++id) {
        EdgeIterator edge = graph.findEdge(id);
        o <<"      [" <<edge->id() <<"] = " <<edge->value() <<"\n";
        o <<"        from vertex [" <<edge->source()->id() <<"] = " <<edge->source()->value() <<"\n";
        o <<"        to   vertex [" <<edge->target()->id() <<"] = " <<edge->target()->value() <<"\n";
    }
    return o;
}
Пример #2
0
void test(ReaderType & my_reader, std::string const & infile, std::string const & outfile)
{

  typedef typename viennagrid::result_of::segmentation<MeshType>::type          SegmentationType;

  typedef typename viennagrid::result_of::vertex<MeshType>::type                VertexType;
  typedef typename viennagrid::result_of::cell<MeshType>::type                  CellType;

  typedef typename viennagrid::result_of::vertex_range<MeshType>::type          VertexContainer;
  typedef typename viennagrid::result_of::iterator<VertexContainer>::type         VertexIterator;

  typedef typename viennagrid::result_of::cell_range<MeshType>::type            CellRange;
  typedef typename viennagrid::result_of::iterator<CellRange>::type               CellIterator;

  MeshType mesh;
  SegmentationType segmentation(mesh);

  try
  {
    my_reader(mesh, segmentation, infile);
  }
  catch (std::exception const & ex)
  {
     std::cerr << ex.what() << std::endl;
     std::cerr << "File-Reader failed. Aborting program..." << std::endl;
     exit(EXIT_FAILURE);
  }


  std::vector<double> vtk_vertex_double_data;
  std::vector<double> vtk_vertex_long_data;
  std::vector< std::vector<double> > vtk_vertex_vector_data;

  typename viennagrid::result_of::accessor< std::vector<double>, VertexType >::type vtk_vertex_double_accessor( vtk_vertex_double_data );
  typename viennagrid::result_of::accessor< std::vector<double>, VertexType >::type vtk_vertex_long_accessor( vtk_vertex_long_data );
  typename viennagrid::result_of::accessor< std::vector< std::vector<double> >, VertexType >::type vtk_vertex_vector_accessor( vtk_vertex_vector_data );


  //write some dummy data:
  VertexContainer vertices(mesh);
  for (VertexIterator vit = vertices.begin();
      vit != vertices.end();
      ++vit)
  {
    vtk_vertex_double_accessor(*vit) = viennagrid::point(*vit)[0];
    vtk_vertex_long_accessor(*vit) = vit->id().get();

    vtk_vertex_vector_accessor(*vit).resize(3);
    vtk_vertex_vector_accessor(*vit)[0] = viennagrid::point(*vit)[0];
    vtk_vertex_vector_accessor(*vit)[1] = viennagrid::point(*vit)[1];
  }



  std::vector<double> vtk_cell_double_data;
  std::vector<double> vtk_cell_long_data;
  std::vector< std::vector<double> > vtk_cell_vector_data;

  typename viennagrid::result_of::accessor< std::vector<double>, CellType >::type vtk_cell_double_accessor( vtk_cell_double_data );
  typename viennagrid::result_of::accessor< std::vector<double>, CellType >::type vtk_cell_long_accessor( vtk_cell_long_data );
  typename viennagrid::result_of::accessor< std::vector< std::vector<double> >, CellType >::type vtk_cell_vector_accessor( vtk_cell_vector_data );


  int index = 0;
  CellRange cells(mesh);
  for (CellIterator cit = cells.begin();
                    cit != cells.end();
                   ++cit, ++index)
  {
    vtk_cell_double_accessor(*cit) = viennagrid::centroid(*cit)[0];
    vtk_cell_long_accessor(*cit) = cit->id().get();

    vtk_cell_vector_accessor(*cit).resize(3);
    vtk_cell_vector_accessor(*cit)[0] = viennagrid::centroid(*cit)[0];
    vtk_cell_vector_accessor(*cit)[1] = viennagrid::centroid(*cit)[1];
  }

  //test writers:
  viennagrid::io::vtk_writer<MeshType> my_vtk_writer;
  viennagrid::io::add_scalar_data_on_vertices(my_vtk_writer, vtk_vertex_double_accessor, "data_double");
  viennagrid::io::add_scalar_data_on_vertices(my_vtk_writer, vtk_vertex_long_accessor, "data_long");
  viennagrid::io::add_vector_data_on_vertices(my_vtk_writer, vtk_vertex_vector_accessor, "data_point");

  viennagrid::io::add_scalar_data_on_cells(my_vtk_writer, vtk_cell_double_accessor, "data_double");
  viennagrid::io::add_scalar_data_on_cells(my_vtk_writer, vtk_cell_long_accessor, "data_long");
  viennagrid::io::add_vector_data_on_cells(my_vtk_writer, vtk_cell_vector_accessor, "data_point");

  my_vtk_writer(mesh, segmentation, outfile);

  viennagrid::io::opendx_writer<MeshType> my_dx_writer;
  my_dx_writer(mesh, outfile + ".odx");
}
Пример #3
0
void test_vtk(ReaderType & my_reader, std::string const & infile, std::string const & outfile)
{

  typedef typename viennagrid::result_of::segmentation<MeshType>::type          SegmentationType;

  typedef typename viennagrid::result_of::vertex<MeshType>::type                VertexType;
  typedef typename viennagrid::result_of::cell<MeshType>::type                  CellType;

  typedef typename viennagrid::result_of::vertex_range<MeshType>::type          VertexContainer;
  typedef typename viennagrid::result_of::iterator<VertexContainer>::type         VertexIterator;

  typedef typename viennagrid::result_of::cell_range<MeshType>::type            CellRange;
  typedef typename viennagrid::result_of::iterator<CellRange>::type               CellIterator;

  MeshType mesh;
  SegmentationType segmentation(mesh);



  std::vector<double> vtk_vertex_double_data;
  std::vector<double> vtk_vertex_long_data;
  std::vector< std::vector<double> > vtk_vertex_vector_data;

  typename viennagrid::result_of::accessor< std::vector<double>, VertexType >::type vtk_vertex_double_accessor( vtk_vertex_double_data );
  typename viennagrid::result_of::accessor< std::vector<double>, VertexType >::type vtk_vertex_long_accessor( vtk_vertex_long_data );
  typename viennagrid::result_of::accessor< std::vector< std::vector<double> >, VertexType >::type vtk_vertex_vector_accessor( vtk_vertex_vector_data );

  std::vector<double> vtk_cell_double_data;
  std::vector<double> vtk_cell_long_data;
  std::vector< std::vector<double> > vtk_cell_vector_data;

  typename viennagrid::result_of::accessor< std::vector<double>, CellType >::type vtk_cell_double_accessor( vtk_cell_double_data );
  typename viennagrid::result_of::accessor< std::vector<double>, CellType >::type vtk_cell_long_accessor( vtk_cell_long_data );
  typename viennagrid::result_of::accessor< std::vector< std::vector<double> >, CellType >::type vtk_cell_vector_accessor( vtk_cell_vector_data );



  viennagrid::io::add_scalar_data_on_vertices(my_reader, vtk_vertex_double_accessor, "data_double" );
  viennagrid::io::add_scalar_data_on_vertices(my_reader, vtk_vertex_long_accessor, "data_long" );
  viennagrid::io::add_vector_data_on_vertices(my_reader, vtk_vertex_vector_accessor, "data_point" );

  viennagrid::io::add_scalar_data_on_cells(my_reader, vtk_cell_double_accessor, "data_double");
  viennagrid::io::add_scalar_data_on_cells(my_reader, vtk_cell_long_accessor, "data_long");
  viennagrid::io::add_vector_data_on_cells(my_reader, vtk_cell_vector_accessor, "data_point");


  try
  {
    my_reader(mesh, segmentation, infile);
  }
  catch (std::exception const & ex)
  {
     std::cerr << ex.what() << std::endl;
     std::cerr << "File-Reader failed. Aborting program..." << std::endl;
     exit(EXIT_FAILURE);
  }


  //write some dummy data:
  VertexContainer vertices(mesh);
  for (VertexIterator vit = vertices.begin();
      vit != vertices.end();
      ++vit)
  {
    double data_double = vtk_vertex_double_accessor(*vit);
    long data_long = static_cast<long>(vtk_vertex_long_accessor(*vit));
    std::vector<double> data_point = vtk_vertex_vector_accessor(*vit);

    assert( fabs(data_double - viennagrid::point(*vit)[0]) < 1e-4 && "Vertex check failed: data_double!");
    assert( (data_long == vit->id().get()) && "Vertex check failed: data_long!");
    assert( fabs(data_point[0] - viennagrid::point(*vit)[0]) < 1e-4
            && fabs(data_point[1] - viennagrid::point(*vit)[1]) < 1e-4
            && "Vertex check failed: data_point!");
  }

  CellRange cells(mesh);
  for (CellIterator cit = cells.begin();
                    cit != cells.end();
                   ++cit)
  {
    double data_double = vtk_cell_double_accessor(*cit);
    long data_long = static_cast<long>(vtk_cell_long_accessor(*cit));
    std::vector<double> data_point = vtk_cell_vector_accessor(*cit);

    assert( fabs(data_double - viennagrid::centroid(*cit)[0]) < 1e-4 && "Cell check failed: data_double!");
    assert( (data_long == cit->id().get()) && "Cell check failed: data_long!");
    assert( fabs(data_point[0] - viennagrid::centroid(*cit)[0]) < 1e-4
            && fabs(data_point[1] - viennagrid::centroid(*cit)[1]) < 1e-4
            && "Cell check failed: data_point!");
  }

  //test writers:
  viennagrid::io::vtk_writer<MeshType> my_vtk_writer;
  viennagrid::io::add_scalar_data_on_vertices(my_vtk_writer, vtk_vertex_double_accessor, "data_double");
  viennagrid::io::add_scalar_data_on_vertices(my_vtk_writer, vtk_vertex_long_accessor, "data_long");
  viennagrid::io::add_vector_data_on_vertices(my_vtk_writer, vtk_vertex_vector_accessor, "data_point");

  viennagrid::io::add_scalar_data_on_cells(my_vtk_writer, vtk_cell_double_accessor, "data_double");
  viennagrid::io::add_scalar_data_on_cells(my_vtk_writer, vtk_cell_long_accessor, "data_long");
  viennagrid::io::add_vector_data_on_cells(my_vtk_writer, vtk_cell_vector_accessor, "data_point");

  my_vtk_writer(mesh, segmentation, outfile);

  viennagrid::io::opendx_writer<MeshType> my_dx_writer;
  my_dx_writer(mesh, outfile + ".odx");
}