diff options
-rw-r--r-- | src/get_conductivity.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/get_conductivity.c b/src/get_conductivity.c index 8c4d228..23b7056 100644 --- a/src/get_conductivity.c +++ b/src/get_conductivity.c @@ -1,24 +1,35 @@ #include "fracture.h" -double get_conductivity(net_t *inst, double *voltage, cholmod_common *c) { - if (inst->voltage_bound) { +double get_conductivity(net_t *net, double *voltages, cholmod_common *c) { + 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 (unsigned int i = 0; i < inst->graph->num_spanning_edges; i++) { - unsigned int e = inst->graph->spanning_edges[i]; - if (!inst->fuses[e]) { - unsigned int v1 = inst->graph->ev[2*e]; - unsigned int v2 = inst->graph->ev[2*e+1]; - double v1y = inst->graph->vx[2 * v1 + 1]; - double v2y = inst->graph->vx[2 * v2 + 1]; - unsigned int s1 = v1y < v2y ? v1 : v2; - unsigned int s2 = v1y < v2y ? v2 : v1; - tot_cur += voltage[s1] - voltage[s2]; + 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 { - return 1 / fabs(voltage[inst->graph->nv] - voltage[inst->graph->nv + 1]); + // 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]); } } |