summaryrefslogtreecommitdiff
path: root/src/break_edge.c
diff options
context:
space:
mode:
authorJaron <jaron@kent-dobias.com>2016-11-08 08:17:26 -0500
committerJaron <jaron@kent-dobias.com>2016-11-08 08:17:26 -0500
commit0ad947f800bcbe2c488d2d5cbcdb16c46e6d3857 (patch)
tree225b77daf1eefbf38457696172b5b8cd6095b155 /src/break_edge.c
parentbaae7b05b59917df132fde049a56357a09d45caa (diff)
downloadfuse_networks-0ad947f800bcbe2c488d2d5cbcdb16c46e6d3857.tar.gz
fuse_networks-0ad947f800bcbe2c488d2d5cbcdb16c46e6d3857.tar.bz2
fuse_networks-0ad947f800bcbe2c488d2d5cbcdb16c46e6d3857.zip
various changes, including adding central moments and changing the fuse thresholds to long doubles
Diffstat (limited to 'src/break_edge.c')
-rw-r--r--src/break_edge.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/break_edge.c b/src/break_edge.c
index 01570d8..538b88d 100644
--- a/src/break_edge.c
+++ b/src/break_edge.c
@@ -1,13 +1,21 @@
#include "fracture.h"
-bool break_edge(net_t *instance, uint_t edge, cholmod_common *c) {
+bool break_edge(net_t *instance, uint_t edge, cholmod_common *c, bool refactor) {
instance->fuses[edge] = true;
if (instance->factor != NULL) {
- uint_t w1 = instance->graph->ev_break[2 * edge];
- uint_t w2 = instance->graph->ev_break[2 * edge + 1];
- factor_update(instance->factor, w1, w2, c);
+ if (refactor) {
+ cholmod_sparse *laplacian = gen_laplacian(instance, c, true);
+ CHOL_F(free_factor)(&instance->factor, c);
+ instance->factor = CHOL_F(analyze)(laplacian, c);
+ CHOL_F(factorize)(laplacian, instance->factor, c);
+ CHOL_F(free_sparse)(&laplacian, c);
+ } else {
+ uint_t w1 = instance->graph->ev_break[2 * edge];
+ uint_t w2 = instance->graph->ev_break[2 * edge + 1];
+ factor_update(instance->factor, w1, w2, c);
+ }
}
uint_t v1, v2, s1, s2, dv1, dv2, ds1, ds2;