diff options
author | Jaron <jaron@kent-dobias.com> | 2017-06-22 22:40:47 -0400 |
---|---|---|
committer | Jaron <jaron@kent-dobias.com> | 2017-06-22 22:40:47 -0400 |
commit | d59fc339a40a47405bfef8c1313e324adca70479 (patch) | |
tree | addf46044c3a1507bd4069797c6218c457b67e5f /lib/correlations.c | |
parent | f4a50f1332ff323c42aa9664292910fd78933c15 (diff) | |
parent | 4764d5d407347d4dd5990411b243b3ec4bd75bff (diff) | |
download | fuse_networks-d59fc339a40a47405bfef8c1313e324adca70479.tar.gz fuse_networks-d59fc339a40a47405bfef8c1313e324adca70479.tar.bz2 fuse_networks-d59fc339a40a47405bfef8c1313e324adca70479.zip |
lots of changes for merge
Diffstat (limited to 'lib/correlations.c')
-rw-r--r-- | lib/correlations.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/correlations.c b/lib/correlations.c new file mode 100644 index 0000000..63532ec --- /dev/null +++ b/lib/correlations.c @@ -0,0 +1,47 @@ + +#include "fracture.h" + +double *get_corr(net_t *instance, uint_t **dists, cholmod_common *c) { + uint_t nv = instance->graph->dnv; + uint_t ne = instance->graph->ne; + uint_t *ev = instance->graph->dev; + bool nulldists = false; + if (dists == NULL) { + dists = graph_dists(instance->graph, false); + nulldists = true; + } + double *corr = calloc(nv, sizeof(double)); + uint_t *numat = calloc(nv, sizeof(uint_t)); + + for (uint_t i = 0; i < ne; i++) { + uint_t v1 = ev[2 * i]; + uint_t v2 = ev[2 * i + 1]; + for (uint_t j = 0; j < ne; j++) { + uint_t v3 = ev[2 * j]; + uint_t v4 = ev[2 * j + 1]; + uint_t dist1 = dists[v1][v3]; + uint_t dist2 = dists[v1][v4]; + uint_t dist3 = dists[v2][v3]; + uint_t dist4 = dists[v2][v4]; + uint_t dist = (dist1 + dist2 + dist3 + dist4) / 4; + corr[dist] += instance->fuses[i] && instance->fuses[j]; + numat[dist]++; + } + } + + for (uint_t i = 0; i < nv; i++) { + if (numat[i] > 0) { + corr[i] /= numat[i]; + } + } + + if (nulldists) { + for (int i = 0; i < nv; i++) { + free(dists[i]); + } + free(dists); + } + + return corr; +} + |