summaryrefslogtreecommitdiff
path: root/src/fracture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fracture.c')
-rw-r--r--src/fracture.c106
1 files changed, 20 insertions, 86 deletions
diff --git a/src/fracture.c b/src/fracture.c
index 7ee82fb..59bd424 100644
--- a/src/fracture.c
+++ b/src/fracture.c
@@ -10,8 +10,8 @@ int main(int argc, char *argv[]) {
uint32_t N;
uint_t L, refactor_every;
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_energy, save_conductivity,
+ bool save_data, save_cluster_dist, use_voltage_boundaries, use_dual, save_network,
+ save_crit_stress, save_stress_field, save_voltage_field, save_energy, save_conductivity,
save_damage, save_damage_field, save_threshold;
bound_t boundary;
lattice_t lattice;
@@ -33,7 +33,6 @@ 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;
@@ -45,7 +44,6 @@ int main(int argc, char *argv[]) {
save_damage = false;
save_damage_field = false;
save_conductivity = false;
- save_toughness = false;
save_energy = true;
save_threshold = false;
@@ -59,7 +57,7 @@ int main(int argc, char *argv[]) {
// get commandline options
- while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrtDSvel:gTER:")) != -1) {
+ while ((opt = getopt(argc, argv, "n:L:b:B:q:dVcoNsCrDSvel:TER:")) != -1) {
switch (opt) {
case 'n':
N = atoi(optarg);
@@ -119,9 +117,6 @@ int main(int argc, char *argv[]) {
exit(EXIT_FAILURE);
}
break;
- case 'g':
- crack_growth_crit = true;
- break;
case 'd':
save_damage = true;
break;
@@ -156,9 +151,6 @@ int main(int argc, char *argv[]) {
case 'r':
save_conductivity = true;
break;
- case 't':
- save_toughness = true;
- break;
case 'E':
save_energy = true;
break;
@@ -222,9 +214,9 @@ int main(int argc, char *argv[]) {
}
}
- double *crit_stress;
+ long double *crit_stress;
if (save_crit_stress) {
- crit_stress = (double *)malloc(N * sizeof(double));
+ crit_stress = (long double *)malloc(N * sizeof(long double));
}
double *stress_field;
@@ -268,19 +260,14 @@ int main(int argc, char *argv[]) {
}
}
- double *toughness;
- if (save_toughness) {
- toughness = (double *)malloc(N * sizeof(double));
- }
-
- double *energy;
+ long double *energy;
if (save_energy) {
- energy = (double *)malloc(N * sizeof(double));
+ energy = (long double *)malloc(N * sizeof(long double));
}
- double *thresholds;
+ long double *thresholds;
if (save_threshold) {
- thresholds = (double *)malloc(N * sizeof(double));
+ thresholds = (long double *)malloc(N * sizeof(long double));
}
@@ -311,7 +298,7 @@ int main(int argc, char *argv[]) {
net_free(tmp_net, &c);
uint_t max_pos = 0;
- double max_val = 0;
+ long double max_val = 0;
double cond0;
{
@@ -321,7 +308,7 @@ int main(int argc, char *argv[]) {
}
for (uint_t j = 0; j < data->num_broken; j++) {
- double val = data->extern_field[j];
+ long double val = data->extern_field[j];
if (val > max_val) {
max_pos = j;
@@ -330,41 +317,15 @@ int main(int argc, char *argv[]) {
}
uint_t av_size = 0;
- double cur_val = 0;
- uint_t notch_mark = 0;
-
- if (crack_growth_crit) {
- uint_t n_edge = UINT_MAX;
- for (uint_t j = 0; j < g->ne; j++) {
- // right now the only fuses broken are from a notch
- if (net->fuses[j]) {
- n_edge = j;
- break;
- }
- }
-
- if (n_edge < UINT_MAX) {
- uint_t n_vert = g->dev[2 * n_edge];
- notch_mark = net->dual_marks[n_vert];
- }
- }
+ long double cur_val = 0;
for (uint_t j = 0; j < max_pos; j++) {
uint_t next_broken = data->break_list[j];
- bool attached_to_notch = net->dual_marks[g->dev[2*next_broken]] == notch_mark;
- bool grew_forward = g->ex[2 * next_broken] > crack_len;
-
- if (crack_growth_crit && attached_to_notch && grew_forward) {
- printf("whoops\n\n");
- max_pos = j;
- break;
- }
-
bool refactor = ((j + 1) % refactor_every) == 0;
break_edge(net, next_broken, &c, refactor);
- double val = data->extern_field[j];
+ long double val = data->extern_field[j];
if (save_cluster_dist) {
if (val < cur_val) {
av_size++;
@@ -422,12 +383,12 @@ int main(int argc, char *argv[]) {
}
if (save_energy) {
- double tmp_energy = 0;
+ long double tmp_energy = 0;
if (max_pos > 0) {
- double sigma1 = data->extern_field[0];
+ long double sigma1 = data->extern_field[0];
double cond1 = cond0;
for (uint_t j = 0; j < max_pos - 1; j++) {
- double sigma2 = data->extern_field[j+1];
+ long double sigma2 = data->extern_field[j+1];
double cond2 = data->conductivity[j];
if (sigma2 > sigma1) {
tmp_energy += 0.5 * gsl_pow_2(sigma1) * (1 - cond2 / cond1) / cond1;
@@ -439,23 +400,6 @@ int main(int argc, char *argv[]) {
energy[i] = tmp_energy;
}
- if (save_toughness) {
- double tmp_toughness = 0;
- if (max_pos > 0) {
- double sigma1 = data->extern_field[0];
- double epsilon1 = sigma1 / data->conductivity[0];
- for (uint_t j = 0; j < max_pos - 1; j++) {
- double sigma2 = data->extern_field[j+1];
- double epsilon2 = sigma2 / data->conductivity[j+1];
- if (epsilon2 > epsilon1) {
- tmp_toughness += (sigma1 + sigma2) * (epsilon2 - epsilon1) / 2;
- sigma1 = sigma2; epsilon1 = epsilon2;
- }
- }
- }
- toughness[i] = tmp_toughness;
- }
-
if (save_threshold) {
thresholds[i] = net->thres[data->break_list[max_pos]];
}
@@ -499,7 +443,7 @@ int main(int argc, char *argv[]) {
if (save_data) {
for (uint_t j = 0; j < data->num_broken; j++) {
- fprintf(data_out, "%u %g %g ", data->break_list[j],
+ fprintf(data_out, "%u %Lg %g ", data->break_list[j],
data->extern_field[j], data->conductivity[j]);
}
fprintf(data_out, "\n");
@@ -566,21 +510,11 @@ int main(int argc, char *argv[]) {
free(conductivity);
}
- if (save_toughness) {
- char *tough_filename = (char *)malloc(filename_len * sizeof(char));
- snprintf(tough_filename, filename_len, "tuff_%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(toughness, sizeof(double), N, tough_file);
- fclose(tough_file);
- free(tough_filename);
- free(toughness);
- }
-
if (save_energy) {
char *tough_filename = (char *)malloc(filename_len * sizeof(char));
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(double), N, tough_file);
+ fwrite(energy, sizeof(long double), N, tough_file);
fclose(tough_file);
free(tough_filename);
free(energy);
@@ -590,7 +524,7 @@ int main(int argc, char *argv[]) {
char *thres_filename = (char *)malloc(filename_len * sizeof(char));
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(double), N, thres_file);
+ fwrite(thresholds, sizeof(long double), N, thres_file);
fclose(thres_file);
free(thres_filename);
free(thresholds);
@@ -612,7 +546,7 @@ int main(int argc, char *argv[]) {
char *str_filename = (char *)malloc(filename_len * sizeof(char));
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(double), N, str_file);
+ fwrite(crit_stress, sizeof(long double), N, str_file);
fclose(str_file);
free(str_filename);
free(crit_stress);