summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2019-01-24 18:05:46 -0500
committerJaron Kent-Dobias <jaron@kent-dobias.com>2019-01-24 18:05:46 -0500
commit47c58a2acad34d3de0bb784ea6aca7b55ed9ce92 (patch)
treef0e4ca632b2c031eebde528fac919816d8918803
parentd6f6fab35801f4c8eb014736fabdc85b8b90a491 (diff)
downloadfuse_networks-47c58a2acad34d3de0bb784ea6aca7b55ed9ce92.tar.gz
fuse_networks-47c58a2acad34d3de0bb784ea6aca7b55ed9ce92.tar.bz2
fuse_networks-47c58a2acad34d3de0bb784ea6aca7b55ed9ce92.zip
added square lattice executable
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/fracture_square.cpp87
2 files changed, 90 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2b34984..cc93881 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -11,6 +11,9 @@ target_link_libraries(animate frac analysis_tools GL GLU glut)
add_executable(fracture fracture.cpp)
target_link_libraries(fracture frac measurements fftw3 cholmod profiler GL GLU glut)
+add_executable(fracture_square fracture_square.cpp)
+target_link_libraries(fracture_square frac measurements fftw3 cholmod profiler GL GLU glut)
+
add_executable(animate_fracture animate_fracture.cpp)
target_link_libraries(animate_fracture frac animate fftw3 cholmod profiler GL GLU glut)
diff --git a/src/fracture_square.cpp b/src/fracture_square.cpp
new file mode 100644
index 0000000..03b0113
--- /dev/null
+++ b/src/fracture_square.cpp
@@ -0,0 +1,87 @@
+
+#include <random>
+#include <iostream>
+
+#include <cholmod.h>
+
+#include "randutils/randutils.hpp"
+
+#include <graph.hpp>
+#include <network.hpp>
+#include <hooks.hpp>
+#include "measurements.hpp"
+
+#include <csignal>
+#include <cstring>
+#include <atomic>
+
+std::atomic<bool> quit(false); // signal flag
+
+void got_signal(int) {
+ quit.store(true);
+}
+
+int main(int argc, char* argv[]) {
+ struct sigaction sa;
+ memset( &sa, 0, sizeof(sa) );
+ sa.sa_handler = got_signal;
+ sigfillset(&sa.sa_mask);
+ sigaction(SIGINT, &sa, NULL);
+
+ int opt;
+
+ unsigned int N = 1;
+ unsigned Lx = 16;
+ unsigned Ly = 16;
+ double beta = 0.5;
+
+ while ((opt = getopt(argc, argv, "N:X:Y:b:")) != -1) {
+ switch (opt) {
+ case 'N':
+ N = (unsigned int)atof(optarg);
+ break;
+ case 'X':
+ Lx = atoi(optarg);
+ break;
+ case 'Y':
+ Ly = atoi(optarg);
+ break;
+ case 'b':
+ beta = atof(optarg);
+ break;
+ default:
+ exit(1);
+ }
+ }
+
+ cholmod_common c;
+ CHOL_F(start)(&c);
+
+ ma meas(Lx, Ly, 2*Lx, 2*Ly, beta, 10);
+ graph G(Lx, Ly);
+ network perm_network(G, &c);
+
+ randutils::auto_seed_128 seeds;
+ std::mt19937 rng{seeds};
+
+ for (unsigned int trial = 0; trial < N; trial++) {
+ while (true) {
+ try {
+ network tmp_network(perm_network);
+ tmp_network.set_thresholds(beta, rng);
+ tmp_network.fracture(meas);
+ break;
+ } catch (std::exception &e) {
+ std::cout << e.what() << '\n';
+ }
+ }
+
+ if (quit.load())
+ break;
+ }
+
+ CHOL_F(finish)(&c);
+
+ return 0;
+}
+