diff options
Diffstat (limited to 'src/sample_fracture.cpp')
-rw-r--r-- | src/sample_fracture.cpp | 73 |
1 files changed, 54 insertions, 19 deletions
diff --git a/src/sample_fracture.cpp b/src/sample_fracture.cpp index eaba69e..b01b4d6 100644 --- a/src/sample_fracture.cpp +++ b/src/sample_fracture.cpp @@ -16,28 +16,43 @@ #include <atomic> int main(int argc, char* argv[]) { - int opt; unsigned N = 1; unsigned Lx = 16; - double Ly = 16; + unsigned Ly = 16; double beta = 0.5; - while ((opt = getopt(argc, argv, "N:X:Y:b:")) != -1) { + unsigned n = 128; + double a = 1.0; + bool use_aN = false; + double w = 0.5; + + while ((opt = getopt(argc, argv, "N:X:Y:b:n:a:w:")) != -1) { switch (opt) { case 'N': N = (unsigned)atof(optarg); break; case 'X': - Lx = atof(optarg); + Lx = atoi(optarg); break; case 'Y': - Ly = atof(optarg); + 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; default: exit(1); } @@ -46,23 +61,43 @@ int main(int argc, char* argv[]) { cholmod_common c; CHOL_F(start)(&c); - sample meas(Lx, Ly, beta); - //sample meas2(Ly, Lx, beta); - randutils::auto_seed_128 seeds; std::mt19937 rng{seeds}; - for (unsigned trial = 0; trial < N; trial++) { - graph G(Lx, 1.0, rng); - elastic_network network(G, &c); - network.set_thresholds(beta, rng); - network.fracture(meas); - - /*graph G2 = G.rotate(); - class network network2(G2, &c); - network2.thresholds = network.thresholds; - network2.fracture(meas2); - */ + if (use_aN) { + sample meas(n, a, beta); + + for (unsigned trial = 0; trial < N; trial++) { + while (true) { + try { + graph G(n, a, rng); + elastic_network fuse_network(G, &c, w); + fuse_network.set_thresholds(beta, rng); + fuse_network.fracture(meas); + break; + } catch (std::exception &e) { + std::cout << e.what() << '\n'; + } + } + } + } else { + sample meas(Lx, Ly, beta); + + const graph G(Lx, Ly); + const elastic_network fuse_network(G, &c, w); + + for (unsigned trial = 0; trial < N; trial++) { + while (true) { + try { + elastic_network net = fuse_network; + net.set_thresholds(beta, rng); + net.fracture(meas); + break; + } catch (std::exception &e) { + std::cout << e.what() << '\n'; + } + } + } } CHOL_F(finish)(&c); |