From fe81403fe452750e072d292406a9718e4c48c652 Mon Sep 17 00:00:00 2001
From: Jaron Kent-Dobias <jkentdobias@g.hmc.edu>
Date: Thu, 22 Sep 2016 17:31:05 -0400
Subject: added support for saving critical fuse thresholds

---
 src/fracture.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/fracture.c b/src/fracture.c
index dbe9ff5..305b5e3 100644
--- a/src/fracture.c
+++ b/src/fracture.c
@@ -12,7 +12,7 @@ int main(int argc, char *argv[]) {
 	double beta, inf, cutoff, crack_len;
 	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;
+			 save_damage, save_damage_field, save_threshold;
 	bound_t boundary;
 	lattice_t lattice;
 
@@ -45,6 +45,7 @@ int main(int argc, char *argv[]) {
 	save_damage_field = false;
 	save_conductivity = false;
 	save_toughness = false;
+	save_threshold = false;
 
 
 	uint8_t bound_i;
@@ -55,7 +56,7 @@ int main(int argc, char *argv[]) {
 
 	// get commandline options
 
-	while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrtDSvel:g")) != -1) {
+	while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrtDSvel:gT")) != -1) {
 		switch (opt) {
 			case 'n':
 				N = atoi(optarg);
@@ -151,6 +152,9 @@ int main(int argc, char *argv[]) {
 			case 't':
 				save_toughness = true;
 				break;
+			case 'T':
+				save_threshold = true;
+				break;
 			default: /* '?' */
 				exit(EXIT_FAILURE);
 		}
@@ -259,6 +263,11 @@ int main(int argc, char *argv[]) {
 		toughness = (double *)malloc(N * sizeof(double));
 	}
 
+	double *thresholds;
+	if (save_threshold) {
+		thresholds = (double *)malloc(N * sizeof(double));
+	}
+
 
 	// start cholmod
 	cholmod_common c;
@@ -400,6 +409,10 @@ int main(int argc, char *argv[]) {
 			toughness[i] = tmp_toughness;
 		}
 
+		if (save_threshold) {
+			thresholds[i] = net->thres[data->break_list[max_pos]];
+		}
+
 		if (save_cluster_dist) {
 			uint_t *tmp_cluster_dist = get_cluster_dist(net, &c);
 			for (uint_t j = 0; j < g->dnv; j++) {
@@ -516,6 +529,16 @@ int main(int argc, char *argv[]) {
 		free(toughness);
 	}
 
+	if (save_threshold) {
+		char *thres_filename = (char *)malloc(filename_len * sizeof(char));
+		snprintf(thres_filename, filename_len, "thrs_%c_%c_%c_%d_%g_%g.dat", lattice_c, boundc, boundc2, L, beta, crack_len);
+		FILE *thres_file = fopen(thres_filename, "ab");
+		fwrite(thresholds, sizeof(double), N, thres_file);
+		fclose(thres_file);
+		free(thres_filename);
+		free(thresholds);
+	}
+
 	if (save_damage) {
 		FILE *hdam_file = fopen(d_filename, "wb");
 		fwrite(damage, sizeof(uint32_t), max_edges, hdam_file);
-- 
cgit v1.2.3-70-g09d2