summaryrefslogtreecommitdiff
path: root/src/fracture.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fracture.c')
-rw-r--r--src/fracture.c145
1 files changed, 28 insertions, 117 deletions
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);