summaryrefslogtreecommitdiff
path: root/src/coursegrain.c
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jkentdobias@g.hmc.edu>2016-08-22 10:11:14 -0400
committerJaron Kent-Dobias <jkentdobias@g.hmc.edu>2016-08-22 10:11:14 -0400
commit2bb0740b68fdb62d45adc00204b3990ca42ade77 (patch)
treea52975e3460da781467ddb70aaa8d76840d01bb4 /src/coursegrain.c
downloadfuse_networks-2bb0740b68fdb62d45adc00204b3990ca42ade77.tar.gz
fuse_networks-2bb0740b68fdb62d45adc00204b3990ca42ade77.tar.bz2
fuse_networks-2bb0740b68fdb62d45adc00204b3990ca42ade77.zip
started repo again without all the data files gunking the works
Diffstat (limited to 'src/coursegrain.c')
-rw-r--r--src/coursegrain.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/coursegrain.c b/src/coursegrain.c
new file mode 100644
index 0000000..bd84e1c
--- /dev/null
+++ b/src/coursegrain.c
@@ -0,0 +1,40 @@
+
+#include "fracture.h"
+
+finst *coursegrain_square(finst *instance, fnet *network_p, cholmod_common *c) {
+ unsigned int width = sqrt(instance->network->num_edges);
+ assert(width % 4 == 0);
+
+ finst *instance_p = create_instance(network_p, instance->inf,
+ instance->voltage_bound, true, c);
+
+ unsigned int width_p = width / 2;
+ bool *fuses = instance->fuses;
+
+ for (unsigned int i = 0; i < network_p->num_edges; i++) {
+ int xp = i / width_p;
+ int yp = i % width_p;
+ unsigned int x1 = 2 * xp;
+ unsigned int y1 = (2 * yp - 1) % width;
+ unsigned int x2 = 2 * xp;
+ unsigned int y2 = 2 * yp;
+ unsigned int x3 = 2 * xp + 1;
+ unsigned int y3 = (2 * yp - 1) % width;
+ unsigned int x4 = 2 * xp + 1;
+ unsigned int y4 = 2 * yp;
+ bool f1 = fuses[width * x1 + y1];
+ bool f2 = fuses[width * x2 + y2];
+ bool f3 = fuses[width * x3 + y3];
+ bool f4 = fuses[width * x4 + y4];
+
+ if ((f1 && f2) || (f3 && f4)) {
+ // instance_p->fuses[i] = true;
+ // instance_p->num_remaining_edges--;
+ break_edge(instance_p, i, c);
+ }
+ }
+
+ // fin_instance(instance_p, c);
+
+ return instance_p;
+}