From 2bb0740b68fdb62d45adc00204b3990ca42ade77 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Mon, 22 Aug 2016 10:11:14 -0400 Subject: started repo again without all the data files gunking the works --- src/coursegrain.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/coursegrain.c (limited to 'src/coursegrain.c') 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; +} -- cgit v1.2.3-70-g09d2