From 24cee5501ea08e9611c514be604cd66ad8a4c03c Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Fri, 2 Dec 2016 12:18:41 -0500 Subject: removed percolation thing, changed definition of damage to make percolation exponents work --- src/fracture.c | 145 +++++++++++---------------------------------------------- 1 file changed, 28 insertions(+), 117 deletions(-) (limited to 'src/fracture.c') diff --git a/src/fracture.c b/src/fracture.c index 5256eac..08961ed 100644 --- a/src/fracture.c +++ b/src/fracture.c @@ -8,11 +8,11 @@ int main(int argc, char *argv[]) { // defining variables to be (potentially) set by command line flags uint8_t filename_len; uint32_t N; - uint_t L, refactor_every; + uint_t L; double beta, inf, cutoff, crack_len; - bool save_data, save_cluster_dist, use_voltage_boundaries, use_dual, use_perc, save_network, - save_crit_stress, save_stress_field, save_voltage_field, save_energy, save_conductivity, - save_damage, save_damage_field, save_threshold; + bool save_data, save_cluster_dist, use_voltage_boundaries, use_dual, save_network, + save_crit_stress, save_energy, save_conductivity, + save_damage, save_threshold; bound_t boundary; lattice_t lattice; @@ -25,7 +25,6 @@ int main(int argc, char *argv[]) { // set default values N = 100; - refactor_every = UINT_MAX; L = 16; crack_len = 0.; beta = .3; @@ -39,14 +38,10 @@ int main(int argc, char *argv[]) { use_dual = false; save_network = false; save_crit_stress = false; - save_stress_field = false; - save_voltage_field = false; save_damage = false; - save_damage_field = false; save_conductivity = false; save_energy = false; save_threshold = false; - use_perc = false; uint8_t bound_i; @@ -54,19 +49,15 @@ int main(int argc, char *argv[]) { uint8_t lattice_i; char lattice_c = 'v'; char dual_c = 'o'; - char perc_c = 't'; // get commandline options - while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrDSvel:TER:p")) != -1) { + while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrDl:TE")) != -1) { switch (opt) { case 'n': N = atoi(optarg); break; - case 'R': - refactor_every = atoi(optarg); - break; case 'L': L = atoi(optarg); break; @@ -76,10 +67,6 @@ int main(int argc, char *argv[]) { case 'l': crack_len = atof(optarg); break; - case 'p': - use_perc = true; - perc_c = 'b'; - break; case 'B': bound_i = atoi(optarg); switch (bound_i) { @@ -126,9 +113,6 @@ int main(int argc, char *argv[]) { case 'd': save_damage = true; break; - case 'e': - save_damage_field = true; - break; case 'V': use_voltage_boundaries = true; break; @@ -148,12 +132,6 @@ int main(int argc, char *argv[]) { case 's': save_crit_stress = true; break; - case 'S': - save_stress_field = true; - break; - case 'v': - save_voltage_field = true; - break; case 'r': save_conductivity = true; break; @@ -176,7 +154,7 @@ int main(int argc, char *argv[]) { FILE *data_out; if (save_data) { char *data_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(data_filename, filename_len, "data_%c_%c_%c_%c_%c_%u_%g_%g.txt", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(data_filename, filename_len, "data_%c_%c_%c_%c_%u_%g_%g.txt", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); data_out = fopen(data_filename, "a"); free(data_filename); } @@ -204,8 +182,8 @@ int main(int argc, char *argv[]) { c_filename = (char *)malloc(filename_len * sizeof(char)); a_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(c_filename, filename_len, "cstr_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); - snprintf(a_filename, filename_len, "avln_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(c_filename, filename_len, "cstr_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(a_filename, filename_len, "avln_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *cluster_out = fopen(c_filename, "rb"); FILE *avalanche_out = fopen(a_filename, "rb"); @@ -225,24 +203,6 @@ int main(int argc, char *argv[]) { crit_stress = (long double *)malloc(N * sizeof(long double)); } - double *stress_field; - unsigned int stress_pos = 0; - if (save_stress_field) { - stress_field = (double *)malloc(3 * N * max_verts * sizeof(double)); - } - - double *voltage_field; - unsigned int voltage_pos = 0; - if (save_voltage_field) { - voltage_field = (double *)malloc(3 * N * max_verts * sizeof(double)); - } - - double *damage_field; - unsigned int damage_pos = 0; - if (save_damage_field) { - damage_field = (double *)malloc(2 * N * max_verts * sizeof(double)); - } - double *conductivity; if (save_conductivity) { conductivity = (double *)malloc(N * sizeof(double)); @@ -256,7 +216,7 @@ int main(int argc, char *argv[]) { (uint32_t *)calloc(max_edges, sizeof(uint32_t)); d_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(d_filename, filename_len, "damg_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(d_filename, filename_len, "damg_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *damage_out = fopen(d_filename, "rb"); @@ -298,7 +258,7 @@ int main(int argc, char *argv[]) { printf("\033[F\033[JFRACTURE: %0*d / %d\n", (uint8_t)log10(N) + 1, i + 1, N); graph_t *g = graph_create(lattice, boundary, L, use_dual, &c); - net_t *net = net_create(g, inf, beta, crack_len, use_voltage_boundaries, use_perc, &c); + net_t *net = net_create(g, inf, beta, crack_len, use_voltage_boundaries, &c); if (net->marks[g->nv] != net->marks[g->nv+1]) { if (save_crit_stress) crit_stress[i] = 0; if (save_conductivity) conductivity[i] = 0; @@ -307,7 +267,7 @@ int main(int argc, char *argv[]) { if (save_threshold) thresholds[i] = 0; } else { net_t *tmp_net = net_copy(net, &c); - data_t *data = net_fracture(tmp_net, &c, cutoff, refactor_every); + data_t *data = net_fracture(tmp_net, &c, cutoff); net_free(tmp_net, &c); uint_t max_pos = 0; @@ -335,8 +295,7 @@ int main(int argc, char *argv[]) { for (uint_t j = 0; j < max_pos; j++) { uint_t next_broken = data->break_list[j]; - bool refactor = ((j + 1) % refactor_every) == 0; - break_edge(net, next_broken, &c, refactor); + break_edge(net, next_broken, &c); long double val = data->extern_field[j]; if (save_cluster_dist) { @@ -362,37 +321,19 @@ int main(int argc, char *argv[]) { } } - if (save_damage) damage[net->num_broken]++; - - if (save_stress_field || save_voltage_field) { - double *tmp_voltages = net_voltages(net, &c); - if (save_voltage_field) { - for (uint_t j = 0; j < g->nv; j++) { - voltage_field[3 * voltage_pos] = g->vx[2 * j]; - voltage_field[3 * voltage_pos + 1] = g->vx[2 * j + 1]; - voltage_field[3 * voltage_pos + 2] = tmp_voltages[j]; - voltage_pos++; - } - } - if (save_stress_field) { - double *tmp_currents = net_currents(net, tmp_voltages, &c); - for (uint_t j = 0; j < g->ne; j++) { - stress_field[3 * stress_pos] = g->ex[2 * j]; - stress_field[3 * stress_pos + 1] = g->ex[2 * j + 1]; - stress_field[3 * stress_pos + 2] = tmp_currents[j]; - stress_pos++; - } - free(tmp_currents); - } - free(tmp_voltages); - } - - if (save_damage_field) { - for (uint_t j = 0; j < max_pos; j++) { - damage_field[2 * damage_pos] = g->ex[2 * data->break_list[j]]; - damage_field[2 * damage_pos + 1] = g->ex[2 * data->break_list[j] + 1]; - damage_pos++; + if (save_damage) { + uint_t would_break = 0; + double *tmp_voltage = net_voltages(net, &c); + double *tmp_current = net_currents(net, tmp_voltage, &c); + free(tmp_voltage); + for (uint_t j = 0; j < g->ne; j++) { + bool broken = net->fuses[j]; + bool under_thres = net->thres[j] < net->thres[data->break_list[max_pos]]; + bool zero_field = tmp_current[j] < inf; + if (!broken && under_thres && zero_field) would_break++; } + printf("%u %g\n\n", would_break, ((double)(would_break + net->num_broken)) / pow(L,2)); + damage[net->num_broken + would_break]++; } if (save_energy) { @@ -485,39 +426,9 @@ int main(int argc, char *argv[]) { free(avalanche_size_dist); } - if (save_voltage_field) { - char *vfld_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(vfld_filename, filename_len, "vfld_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); - FILE *vfld_file = fopen(vfld_filename, "ab"); - fwrite(voltage_field, sizeof(double), 3 * voltage_pos, vfld_file); - fclose(vfld_file); - free(vfld_filename); - free(voltage_field); - } - - if (save_stress_field) { - char *cfld_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(cfld_filename, filename_len, "cfld_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); - FILE *cfld_file = fopen(cfld_filename, "ab"); - fwrite(stress_field, sizeof(double), 3 * stress_pos, cfld_file); - fclose(cfld_file); - free(cfld_filename); - free(stress_field); - } - - if (save_damage_field) { - char *dfld_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(dfld_filename, filename_len, "dfld_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); - FILE *dfld_file = fopen(dfld_filename, "ab"); - fwrite(damage_field, sizeof(double), 2 * damage_pos, dfld_file); - fclose(dfld_file); - free(dfld_filename); - free(damage_field); - } - if (save_conductivity) { char *cond_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(cond_filename, filename_len, "cond_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(cond_filename, filename_len, "cond_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *cond_file = fopen(cond_filename, "ab"); fwrite(conductivity, sizeof(double), N, cond_file); fclose(cond_file); @@ -527,7 +438,7 @@ int main(int argc, char *argv[]) { if (save_energy) { char *tough_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(tough_filename, filename_len, "enrg_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(tough_filename, filename_len, "enrg_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *tough_file = fopen(tough_filename, "ab"); fwrite(energy, sizeof(long double), N, tough_file); fclose(tough_file); @@ -537,7 +448,7 @@ int main(int argc, char *argv[]) { if (save_threshold) { char *thres_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(thres_filename, filename_len, "thrs_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(thres_filename, filename_len, "thrs_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *thres_file = fopen(thres_filename, "ab"); fwrite(thresholds, sizeof(long double), N, thres_file); fclose(thres_file); @@ -559,7 +470,7 @@ int main(int argc, char *argv[]) { if (save_crit_stress) { char *str_filename = (char *)malloc(filename_len * sizeof(char)); - snprintf(str_filename, filename_len, "strs_%c_%c_%c_%c_%c_%d_%g_%g.dat", perc_c, lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); + snprintf(str_filename, filename_len, "strs_%c_%c_%c_%c_%d_%g_%g.dat", lattice_c, dual_c, boundc, boundc2, L, beta, crack_len); FILE *str_file = fopen(str_filename, "ab"); fwrite(crit_stress, sizeof(long double), N, str_file); fclose(str_file); -- cgit v1.2.3-70-g09d2