summaryrefslogtreecommitdiff
path: root/src/fracture.c
diff options
context:
space:
mode:
authorpants <jaron@kent-dobias.com>2016-09-12 11:28:59 -0400
committerpants <jaron@kent-dobias.com>2016-09-12 11:28:59 -0400
commita235904d571652e99edcc9ff9639ec39c8fbc456 (patch)
tree987166e04805d3c54fbe28a502642ae309aab494 /src/fracture.c
parent075347d995342171735b95ef3fff30f94f48fdf7 (diff)
downloadfuse_networks-a235904d571652e99edcc9ff9639ec39c8fbc456.tar.gz
fuse_networks-a235904d571652e99edcc9ff9639ec39c8fbc456.tar.bz2
fuse_networks-a235904d571652e99edcc9ff9639ec39c8fbc456.zip
added preliminary support for gathering statistics at crack growth, not critical stress
Diffstat (limited to 'src/fracture.c')
-rw-r--r--src/fracture.c43
1 files changed, 34 insertions, 9 deletions
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) {