diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2019-06-24 21:41:34 -0400 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2019-06-24 21:41:34 -0400 |
commit | 948f90b6493da83d10e18f30b0fbb8e937e29c0b (patch) | |
tree | 29a44c20b55a6a890e107f9321cb3b3d1783111e /lib/include | |
parent | 117476f964c8700d16294e06bafc7e8491482620 (diff) | |
download | fuse_networks-948f90b6493da83d10e18f30b0fbb8e937e29c0b.tar.gz fuse_networks-948f90b6493da83d10e18f30b0fbb8e937e29c0b.tar.bz2 fuse_networks-948f90b6493da83d10e18f30b0fbb8e937e29c0b.zip |
mostly implemented the ability to find dead bonds using topological properties
Diffstat (limited to 'lib/include')
-rw-r--r-- | lib/include/graph.hpp | 2 | ||||
-rw-r--r-- | lib/include/network.hpp | 46 | ||||
-rw-r--r-- | lib/include/problem.hpp | 4 |
3 files changed, 38 insertions, 14 deletions
diff --git a/lib/include/graph.hpp b/lib/include/graph.hpp index 45cc478..0452339 100644 --- a/lib/include/graph.hpp +++ b/lib/include/graph.hpp @@ -21,6 +21,8 @@ class graph { typedef struct vertex { coordinate r; + std::vector<unsigned> nd; + std::vector<unsigned> ne; std::vector<coordinate> polygon; } vertex; diff --git a/lib/include/network.hpp b/lib/include/network.hpp index 544f828..8211cfc 100644 --- a/lib/include/network.hpp +++ b/lib/include/network.hpp @@ -7,6 +7,7 @@ #include <random> #include <limits> #include <valarray> +#include <set> #include "problem.hpp" #include "graph.hpp" @@ -16,60 +17,79 @@ #define CURRENT_CUTOFF 1e-10 +#include <boost/graph/adjacency_list.hpp> +#include <boost/graph/connected_components.hpp> +#include <boost/graph/depth_first_search.hpp> +#include <boost/range/combine.hpp> +#include <boost/foreach.hpp> +#include <boost/graph/graph_utility.hpp> +#include <boost/graph/incremental_components.hpp> +#include <boost/pending/disjoint_sets.hpp> + +struct EdgeProperties { + unsigned index; +}; + +typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, boost::no_property, EdgeProperties> Graph; +typedef boost::graph_traits<Graph>::vertex_descriptor Vertex; +typedef boost::graph_traits<Graph>::vertices_size_type VertexIndex; + class network { public: const graph& G; + + Graph bG; + Graph dG; + std::vector<VertexIndex> rank; + std::vector<Vertex> parent; + boost::disjoint_sets<VertexIndex*, Vertex*> ds; + std::unordered_map<std::array<unsigned, 2>, bool> seen_pairs; + std::vector<bool> fuses; + std::vector<bool> backbone; std::vector<long double> thresholds; - network(const graph&); + problem px; + problem py; + + network(const graph&, cholmod_common*); network(const network&); void set_thresholds(double, std::mt19937&); void fracture(hooks&, bool one_axis = false); + void update_backbone(const std::vector<double>& c); - virtual void break_edge(unsigned e, bool unbreak = false) {fuses[e] = !unbreak;}; + void break_edge(unsigned, bool unbreak = false); virtual current_info get_current_info() {current_info empty; return empty;}; }; class fuse_network : public network { private: double weight; - problem ohm_x; - problem ohm_y; public: fuse_network(const graph&, cholmod_common*, double weight = 1.0); fuse_network(const fuse_network&); - void break_edge(unsigned, bool unbreak = false) override; current_info get_current_info() override; }; class elastic_network : public network { private: double weight; - problem hook_x; - problem hook_y; public: elastic_network(const graph&, cholmod_common*, double weight = 0.5); elastic_network(const elastic_network&); - void break_edge(unsigned, bool unbreak = false) override; current_info get_current_info() override; }; class percolation_network : public network { - private: - problem px; - problem py; - public: percolation_network(const graph&, cholmod_common*); percolation_network(const percolation_network&); - void break_edge(unsigned, bool unbreak = false) override; current_info get_current_info() override; }; diff --git a/lib/include/problem.hpp b/lib/include/problem.hpp index c2c9e09..740751d 100644 --- a/lib/include/problem.hpp +++ b/lib/include/problem.hpp @@ -28,11 +28,13 @@ class problem { cholmod_common* c; public: + current_info sol; + problem(const graph&, unsigned, cholmod_common*); problem(const graph&, unsigned, cholmod_sparse*, cholmod_common*); problem(const problem&); ~problem(); - current_info solve(std::vector<bool>& fuses); + void solve(std::vector<bool>& fuses); void break_edge(unsigned, bool unbreak = false); }; |