From 62ff492eeb138c7fed138e609a57aa511674bd62 Mon Sep 17 00:00:00 2001 From: Patrick S Rhomberg Date: Mon, 27 Apr 2015 18:58:34 -0500 Subject: [PATCH] Update to write_graphviz for better placement of graph properties and to accept cluster property writers. Graph property writer moved from repeated prints within each subgraph cluster to the beginning of the graphviz file. write_graphviz may be called with an additional input: cluster property writer. This will write at the beginning of each subgraph cluster. Since subgraphs inheret graph properties, users should see no change if the passed graph property writer matched across all processes. If the graph property writer did not match across all processes, preference is given to process 0. --- include/boost/graph/distributed/graphviz.hpp | 48 ++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/include/boost/graph/distributed/graphviz.hpp b/include/boost/graph/distributed/graphviz.hpp index fa843fd..3c02d5a 100644 --- a/include/boost/graph/distributed/graphviz.hpp +++ b/include/boost/graph/distributed/graphviz.hpp @@ -96,13 +96,15 @@ paint_by_number(NumberMap number) { return paint_by_number_writer(number); } template + typename EdgePropertiesWriter, typename GraphPropertiesWriter, + typename ClusterPropertiesWriter> void write_graphviz(std::ostream& out, const Graph& g, VertexPropertiesWriter vpw, EdgePropertiesWriter epw, - GraphPropertiesWriter gpw + GraphPropertiesWriter gpw, + ClusterPropertiesWriter cpw BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) { typedef typename graph_traits::directed_category directed_category; @@ -129,7 +131,7 @@ write_graphviz(std::ostream& out, std::ostringstream local_graph_out; local_graph_out << " subgraph cluster_" << process_id(pg) << " {\n"; - gpw(local_graph_out); + cpw(local_graph_out); typename graph_traits::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { @@ -154,6 +156,7 @@ write_graphviz(std::ostream& out, if (process_id(pg) == 0) { out << graph_kind << " g {\n"; + gpw(out); out << local_graph_out.str(); synchronize(pg); @@ -182,6 +185,19 @@ write_graphviz(std::ostream& out, } template +inline void +write_graphviz(std::ostream& out, + const Graph& g, + VertexPropertiesWriter vpw, + EdgePropertiesWriter epw, + GraphPropertiesWriter gpw + BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) +{ + write_graphviz(out, g, vpw, epw, gpw, default_writer()); +} + +template inline void write_graphviz(std::ostream& out, @@ -212,20 +228,40 @@ write_graphviz(std::ostream& out, const Graph& g } template + typename EdgePropertiesWriter, typename GraphPropertiesWriter, + typename ClusterPropertiesWriter> void write_graphviz(const std::string& filename, const Graph& g, VertexPropertiesWriter vpw, EdgePropertiesWriter epw, + GraphPropertiesWriter gpw, + ClusterPropertiesWriter cpw + BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) +{ + if (process_id(g.process_group()) == 0) { + std::ofstream out(filename.c_str()); + write_graphviz(out, g, vpw, epw, gpw, cpw); + } else { + write_graphviz(std::cout, g, vpw, epw, gpw, cpw); + } +} + +template +void +write_graphviz(const std::string& filename, + const Graph& g, + VertexPropertiesWriter vpw, + EdgePropertiesWriter epw, GraphPropertiesWriter gpw BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) { if (process_id(g.process_group()) == 0) { std::ofstream out(filename.c_str()); - write_graphviz(out, g, vpw, epw, gpw); + write_graphviz(out, g, vpw, epw, gpw, default_writer()); } else { - write_graphviz(std::cout, g, vpw, epw, gpw); + write_graphviz(std::cout, g, vpw, epw, gpw, default_writer()); } }