From 47c58a2acad34d3de0bb784ea6aca7b55ed9ce92 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Thu, 24 Jan 2019 18:05:46 -0500 Subject: added square lattice executable --- src/CMakeLists.txt | 3 ++ src/fracture_square.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 src/fracture_square.cpp 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 +#include + +#include + +#include "randutils/randutils.hpp" + +#include +#include +#include +#include "measurements.hpp" + +#include +#include +#include + +std::atomic 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; +} + -- cgit v1.2.3-70-g09d2