#include "fracture.h" double f(double damage) { assert(damage <= 1 && damage >= 0); return sqrt(1 - sqrt(1 - damage)); // return 0.5 - 0.68182 * (0.5 - damage); } double update_beta(double beta, unsigned int width, const double *stress, const double *damage, double bound_total) { double total = 0; unsigned int num_totaled = 0; for (unsigned int i = 0; i < pow(width, 2); i++) { unsigned int stress_index = width / 4 + (width / 4 + (i / width) / 2) * width + (i % width) / 2; double outer_damage = f(pow(fabs(stress[i]), beta)); double inner_stress = fabs(2 * stress[stress_index] / bound_total); if (outer_damage > 0 && inner_stress > 0 && inner_stress != 1) { total += log(outer_damage) / log(inner_stress); num_totaled++; } } assert(num_totaled > 0); assert(total == total); double new_beta = total / num_totaled; return new_beta; }