summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2020-03-16 18:19:09 -0400
committerJaron Kent-Dobias <jaron@kent-dobias.com>2020-03-16 18:19:09 -0400
commit2faf0e4598c7c046d58107d23145f95db334200c (patch)
tree149ed852adfabdf881042167c7eb1131ea3e53ea /src
parent19d657b60b22159359f7a229f5a5b73e729cff79 (diff)
downloadfuse_networks-2faf0e4598c7c046d58107d23145f95db334200c.tar.gz
fuse_networks-2faf0e4598c7c046d58107d23145f95db334200c.tar.bz2
fuse_networks-2faf0e4598c7c046d58107d23145f95db334200c.zip
Implemented new behavior when w=0 or w=1.
Diffstat (limited to 'src')
-rw-r--r--src/analysis_tools.cpp20
-rw-r--r--src/animate_fracture.cpp28
-rw-r--r--src/fracture.cpp44
3 files changed, 88 insertions, 4 deletions
diff --git a/src/analysis_tools.cpp b/src/analysis_tools.cpp
index 2965915..8ad8235 100644
--- a/src/analysis_tools.cpp
+++ b/src/analysis_tools.cpp
@@ -30,10 +30,22 @@ std::pair<std::array<unsigned, 2>, std::set<unsigned>> find_minimal_crack(const
}
if (all_good) {
- if (cycles[0].second.size() > cycles[1].second.size()) {
- return cycles[1];
+ if (n.two_sides) {
+ if (cycles[0].second.size() > cycles[1].second.size()) {
+ return cycles[1];
+ } else {
+ return cycles[0];
+ }
} else {
- return cycles[0];
+ if (cycles[0].first[0] % 2 == 0) {
+ return cycles[0];
+ } else {
+ return cycles[1];
+ }
+ }
+ } else if (!n.two_sides) {
+ if (cycles[!not_good].first[0] % 2 == 0) {
+ return cycles[!not_good];
}
}
@@ -63,7 +75,7 @@ std::pair<std::array<unsigned, 2>, std::set<unsigned>> find_minimal_crack(const
pos++;
}
- if (cycles[!not_good].second.size() > new_cycle.size()) {
+ if (cycles[!not_good].second.size() > new_cycle.size() || !n.two_sides) {
return {{sum_sig_0, sum_sig_1}, new_cycle};
} else {
return cycles[!not_good];
diff --git a/src/animate_fracture.cpp b/src/animate_fracture.cpp
index e8de8c1..fd1ffe2 100644
--- a/src/animate_fracture.cpp
+++ b/src/animate_fracture.cpp
@@ -69,6 +69,33 @@ int main(int argc, char* argv[]) {
randutils::auto_seed_128 seeds;
std::mt19937 rng{seeds};
+ if (w == 0.0 || w == 1.0) {
+ if (use_aN) {
+ animate meas(sqrt(2*n *a), sqrt( 2*n / a), width, argc, argv);
+
+ for (unsigned trial = 0; trial < N; trial++) {
+ graph G(n, a, rng);
+ fuse_network net(G, &c);
+ net.set_thresholds(beta, rng);
+ net.fracture(meas);
+ }
+ } else {
+ animate meas(Lx, Ly, width, argc, argv);
+ const graph G(Lx, Ly);
+ const fuse_network plain_net(G, &c);
+
+ for (unsigned trial = 0; trial < N; trial++) {
+ fuse_network net = plain_net;
+ net.set_thresholds(beta, rng);
+ try {
+ net.fracture(meas);
+ } catch (std::exception &e) {
+ std::cout << e.what() << std::endl;
+ getchar();
+ }
+ }
+ }
+ } else {
if (use_aN) {
animate meas(sqrt(2*n *a), sqrt( 2*n / a), width, argc, argv);
@@ -89,6 +116,7 @@ int main(int argc, char* argv[]) {
net.fracture(meas);
}
}
+ }
CHOL_F(finish)(&c);
diff --git a/src/fracture.cpp b/src/fracture.cpp
index 96cdac3..22101c8 100644
--- a/src/fracture.cpp
+++ b/src/fracture.cpp
@@ -76,6 +76,49 @@ int main(int argc, char* argv[]) {
randutils::auto_seed_128 seeds;
std::mt19937 rng{seeds};
+ if (w == 0 || w == 1) {
+ if (use_aN) {
+ ma meas(n, a, beta, w);
+
+ for (unsigned trial = 0; trial < N; trial++) {
+ while (true) {
+ try {
+ graph G(n, a, rng);
+ fuse_network n(G, &c);
+ n.set_thresholds(beta, rng);
+ n.fracture(meas);
+ break;
+ } catch (std::exception &e) {
+ std::cout << e.what() << '\n';
+ }
+ }
+
+ if (quit.load())
+ break;
+ }
+ } else {
+ ma meas(Lx, Ly, beta, w);
+
+ const graph G(Lx, Ly);
+ const fuse_network n(G, &c);
+
+ for (unsigned trial = 0; trial < N; trial++) {
+ while (true) {
+ try {
+ fuse_network net = n;
+ net.set_thresholds(beta, rng);
+ net.fracture(meas);
+ break;
+ } catch (std::exception &e) {
+ std::cout << e.what() << '\n';
+ }
+ }
+
+ if (quit.load())
+ break;
+ }
+ }
+ } else {
if (use_aN) {
ma meas(n, a, beta, w);
@@ -117,6 +160,7 @@ int main(int argc, char* argv[]) {
break;
}
}
+ }
CHOL_F(finish)(&c);