#include #include #include #include "randutils/randutils.hpp" #include #include #include #include "animate.hpp" #include #include #include int main(int argc, char* argv[]) { int opt; unsigned N = 1; unsigned Lx = 16; unsigned Ly = 16; double beta = 0.5; unsigned n = 128; double a = 1.0; bool use_aN = false; double w = 0.5; unsigned width = 800; while ((opt = getopt(argc, argv, "N:X:Y:b:n:a:w:W:")) != -1) { switch (opt) { case 'N': N = (unsigned)atof(optarg); break; case 'X': Lx = atoi(optarg); break; case 'Y': Ly = atoi(optarg); break; case 'b': beta = atof(optarg); break; case 'n': n = (unsigned)atof(optarg); use_aN = true; break; case 'a': a = atof(optarg); use_aN = true; break; case 'w': w = atof(optarg); break; case 'W': width = atoi(optarg); break; default: exit(1); } } cholmod_common c; CHOL_F(start)(&c); 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); for (unsigned trial = 0; trial < N; trial++) { graph G(n, a, rng); elastic_network net(G, &c, w); net.set_thresholds(beta, rng); net.fracture(meas); } } else { animate meas(Lx, Ly, width, argc, argv); const graph G(Lx, Ly); const elastic_network plain_net(G, &c, w); for (unsigned trial = 0; trial < N; trial++) { elastic_network net = plain_net; net.set_thresholds(beta, rng); net.fracture(meas); } } } CHOL_F(finish)(&c); return 0; }