#include "fracture.h" double net_conductivity(const net_t *net, const double *voltages) { if (net->voltage_bound) { // the voltage drop across the network is fixed to one with voltage // boundary conditions, so the conductivity is the total current flowing double tot_cur = 0; for (uint_t i = 0; i < net->graph->num_spanning_edges; i++) { uint_t e = net->graph->spanning_edges[i]; if (!net->fuses[e]) { uint_t v1, v2, s1, s2; double v1y, v2y; v1 = net->graph->ev[2 * e]; v2 = net->graph->ev[2 * e + 1]; v1y = net->graph->vx[2 * v1 + 1]; v2y = net->graph->vx[2 * v2 + 1]; s1 = v1y < v2y ? v1 : v2; s2 = v1y < v2y ? v2 : v1; tot_cur += voltages[s1] - voltages[s2]; } } return fabs(tot_cur); } else { // the current across the network is fixed to one with current boundary // conditions, so the conductivity is the inverse of the total voltage drop return 1 / fabs(voltages[net->graph->nv] - voltages[net->graph->nv + 1]); } }