diff options
author | Jaron <jaron@kent-dobias.com> | 2016-11-08 08:17:26 -0500 |
---|---|---|
committer | Jaron <jaron@kent-dobias.com> | 2016-11-08 08:17:26 -0500 |
commit | 0ad947f800bcbe2c488d2d5cbcdb16c46e6d3857 (patch) | |
tree | 225b77daf1eefbf38457696172b5b8cd6095b155 /src/break_edge.c | |
parent | baae7b05b59917df132fde049a56357a09d45caa (diff) | |
download | fuse_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.c | 16 |
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; |