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; }
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"); }
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"); }