From a235904d571652e99edcc9ff9639ec39c8fbc456 Mon Sep 17 00:00:00 2001 From: pants Date: Mon, 12 Sep 2016 11:28:59 -0400 Subject: added preliminary support for gathering statistics at crack growth, not critical stress --- src/fracture.c | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'src/fracture.c') diff --git a/src/fracture.c b/src/fracture.c index f38568f..718fc05 100644 --- a/src/fracture.c +++ b/src/fracture.c @@ -10,7 +10,7 @@ int main(int argc, char *argv[]) { uint32_t N; uint_t L; double beta, inf, cutoff, crack_len; - bool save_data, save_cluster_dist, use_voltage_boundaries, use_dual, save_network, + bool crack_growth_crit, save_data, save_cluster_dist, use_voltage_boundaries, use_dual, save_network, save_crit_stress, save_stress_field, save_voltage_field, save_toughness, save_conductivity, save_damage, save_damage_field; bound_t boundary; @@ -32,6 +32,7 @@ int main(int argc, char *argv[]) { cutoff = 1e-9; boundary = FREE_BOUND; lattice = VORONOI_LATTICE; + crack_growth_crit = false; save_data = false; save_cluster_dist = false; use_voltage_boundaries = false; @@ -54,7 +55,7 @@ int main(int argc, char *argv[]) { // get commandline options - while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrtDSvel:")) != -1) { + while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrtDSvel:g")) != -1) { switch (opt) { case 'n': N = atoi(optarg); @@ -111,6 +112,9 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } break; + case 'g': + crack_growth_crit = true; + break; case 'd': save_damage = true; break; @@ -294,16 +298,31 @@ int main(int argc, char *argv[]) { } } - if (save_crit_stress) crit_stress[i] = data->extern_field[max_pos]; - - if (save_conductivity) conductivity[i] = data->conductivity[max_pos]; - - if (save_damage) damage[max_pos]++; - uint_t av_size = 0; double cur_val = 0; + uint_t notch_edge; + + if (crack_growth_crit) { + for (uint_t i = 0; i < net->graph->ne; i++) { + if (net->fuses[i]) { + notch_edge = i; + break; + } + } + } + for (uint_t j = 0; j < max_pos; j++) { - break_edge(net, data->break_list[j], &c); + uint_t next_broken = data->break_list[j]; + + bool attached_to_notch = net->dual_marks[next_broken] == net->dual_marks[notch_edge]; + bool grew_forward = net->graph->ex[2 * next_broken] > crack_len; + + if (crack_growth_crit && attached_to_notch && grew_forward) { + max_pos = j; + break; + } + + break_edge(net, next_broken, &c); double val = data->extern_field[j]; if (save_cluster_dist) { @@ -319,6 +338,12 @@ int main(int argc, char *argv[]) { } } + if (save_crit_stress) crit_stress[i] = data->extern_field[max_pos]; + + if (save_conductivity) conductivity[i] = data->conductivity[max_pos]; + + if (save_damage) damage[max_pos]++; + if (save_stress_field || save_voltage_field) { double *tmp_voltages = net_voltages(net, &c); if (save_voltage_field) { -- cgit v1.2.3-70-g09d2