From 57857b9ebfb2c0a78c2eb1128d3fb4ed8d597ec4 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Sun, 15 Jan 2017 00:50:38 -0500 Subject: about to change a whole bunch to get voltage and toriodal boundaries working --- src/gen_laplacian.c | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) (limited to 'src/gen_laplacian.c') diff --git a/src/gen_laplacian.c b/src/gen_laplacian.c index 04f1f9b..411734c 100644 --- a/src/gen_laplacian.c +++ b/src/gen_laplacian.c @@ -106,7 +106,7 @@ cholmod_sparse *gen_laplacian(const net_t *instance, cholmod_common *c, } else { num_gedges = network->bound_inds[num_bounds] + (num_bounds - 2) * 2; } - if (network->boundary == TORUS_BOUND) num_gedges = 3 * bound_inds[1]; + if (network->boundary == TORUS_BOUND) num_gedges = bound_inds[1]; uint_t num_gverts = network->break_dim; uint_t nnz = num_gverts + 2 * num_gedges; @@ -147,45 +147,30 @@ cholmod_sparse *gen_laplacian(const net_t *instance, cholmod_common *c, acoo[num_gverts + 2*i+1] = -1; acoo[vv]++; acoo[network->nv + i]++; - - rowind[num_gverts + 2 * network->bound_inds[1] + 2*i] = network->nv + i; - colind[num_gverts + 2 * network->bound_inds[1] + 2*i] = network->nv + network->bound_inds[1]; - acoo[num_gverts + 2 * network->bound_inds[1] + 2*i] = -1; - rowind[num_gverts + 2 * network->bound_inds[1] + 2*i+1] = network->nv + network->bound_inds[1]; - colind[num_gverts + 2 * network->bound_inds[1] + 2*i+1] = network->nv + i; - acoo[num_gverts + 2 * network->bound_inds[1] + 2*i+1] = -1; - acoo[network->nv + i]++; - acoo[network->nv + network->bound_inds[1]]++; - - rowind[num_gverts + 4 * network->bound_inds[1] + 2*i] = vv; - colind[num_gverts + 4 * network->bound_inds[1] + 2*i] = network->nv + network->bound_inds[1]; - acoo[num_gverts + 4 * network->bound_inds[1] + 2*i] = -1; - rowind[num_gverts + 4 * network->bound_inds[1] + 2*i+1] = network->nv + network->bound_inds[1]; - colind[num_gverts + 4 * network->bound_inds[1] + 2*i+1] = vv; - acoo[num_gverts + 4 * network->bound_inds[1] + 2*i+1] = -1; - acoo[vv]++; - acoo[network->nv + network->bound_inds[1]]++; } acoo[bound_verts[0]]++; } if (network->boundary != TORUS_BOUND) { - if (network->boundary != EMBEDDED_BOUND) acoo[0]++; - if (voltage_bound) { for (uint_t i = 0; i < num_bounds; i++) { for (uint_t j = 0; j < bound_inds[i + 1] - bound_inds[i]; j++) { acoo[bound_verts[bound_inds[i] + j]]++; - rowind[num_gverts + 2 * (bound_inds[i] + j)] = network->nv; - colind[num_gverts + 2 * (bound_inds[i] + j)] = bound_verts[bound_inds[i] + j]; - rowind[num_gverts + 2 * (bound_inds[i] + j) + 1] = bound_verts[bound_inds[i] + j]; - colind[num_gverts + 2 * (bound_inds[i] + j) + 1] = network->nv; - acoo[network->nv]++; + + rowind[nnz - 1 - 2 * (bound_inds[i] + j)] = bound_verts[bound_inds[i] + j]; + colind[nnz - 1 - 2 * (bound_inds[i] + j)] = num_gverts - 1; + acoo[nnz - 1 - 2 * (bound_inds[i] + j)] = -1; + rowind[nnz - 1 - 2 * (bound_inds[i] + j) - 1] = num_gverts - 1; + colind[nnz - 1 - 2 * (bound_inds[i] + j) - 1] = bound_verts[bound_inds[i] + j]; + acoo[nnz - 1 - 2 * (bound_inds[i] + j) - 1] = -1; + acoo[num_gverts - 1]++; acoo[bound_verts[bound_inds[i] + j]]++; } } } else { for (uint_t i = 0; i < num_bounds; i++) { + if (network->boundary != EMBEDDED_BOUND) acoo[0]++; + rowind[num_verts + i] = num_verts + i; colind[num_verts + i] = num_verts + i; if (i < 2) -- cgit v1.2.3-70-g09d2