From 8c91d2bcad7df7c647f1379483673183329ddfe8 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Tue, 05 Jul 2016 10:53:31 +0000 Subject: [PATCH] Fixed some bugs in cluster.c, added a line in cluster.h --- src/cluster.c | 23 +++++++++++++++-------- src/cluster.h | 1 + src/tspoststat.c | 5 +++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 60d09c1..bb431f2 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -39,12 +39,14 @@ for(i=0;i<cstlist->n;i++){ if(cstlist->cluster[i]==NULL){ + if(i>=n) break; + //printf("Have to do compacting n=%d\n ",n); do{ n--; } while(cstlist->cluster[n]==NULL && n>i); - if(i<=n) break; cstlist->cluster[i]=cstlist->cluster[n]; cstlist->cluster[n]=NULL; + //printf("After compacting n=%d\n",n); } } cstlist->cluster=(ts_cluster **)realloc(cstlist->cluster,n*sizeof(ts_cluster *)); @@ -53,7 +55,7 @@ } -ts_bool cluster_join(ts_cluster *cluster1, ts_cluster *cluster2){ +ts_bool cluster_join(ts_cluster_list *cstlist, ts_cluster *cluster1, ts_cluster *cluster2){ ts_cluster *master_cluster,*slave_cluster; ts_uint i; if(cluster1->idx<cluster2->idx){ @@ -66,8 +68,13 @@ for(i=0;i<slave_cluster->nvtx;i++){ cluster_add_vertex(master_cluster,slave_cluster->vtx[i]); } - cluster_free(slave_cluster); - slave_cluster=NULL; + //find cluster in the list and free the location of the cluster + for(i=0;i<cstlist->n;i++){ + if(cstlist->cluster[i]==slave_cluster){ + cluster_free(slave_cluster); + cstlist->cluster[i]=NULL; + } + } return TS_SUCCESS; } @@ -113,13 +120,13 @@ return NULL; } -ts_bool cluster_vertex_neighbor_check(ts_vertex *vtx){ +ts_bool cluster_vertex_neighbor_check(ts_cluster_list *cstlist, ts_vertex *vtx){ int j; for(j=0;j<vtx->neigh_no;j++){ if(vtx->neigh[j]->cluster!=NULL){ if(vtx->neigh[j]->cluster!=vtx->cluster){ - cluster_join(vtx->cluster, vtx->neigh[j]->cluster); + cluster_join(cstlist, vtx->cluster, vtx->neigh[j]->cluster); } } } @@ -136,7 +143,7 @@ //for each vertex vtx=vesicle->vlist->vtx[i]; if(is_clusterable(vtx)){ - if(vtx->cluster!=NULL){ + if(vtx->cluster==NULL){ //find first neigbor with cluster index cst=cluster_vertex_neighbor(vtx); if(cst==NULL){ @@ -146,7 +153,7 @@ } else { //we are added to the first cluster found cluster_add_vertex(cst,vtx); - cluster_vertex_neighbor_check(vtx); + cluster_vertex_neighbor_check(cstlist, vtx); cluster_list_compact(cstlist); } diff --git a/src/cluster.h b/src/cluster.h index 5250628..327fa02 100644 --- a/src/cluster.h +++ b/src/cluster.h @@ -5,4 +5,5 @@ ts_bool cluster_add_vertex(ts_cluster *cluster, ts_vertex *vtx); ts_bool cluster_free(ts_cluster *cluster); ts_bool cluster_list_free(ts_cluster_list *cstlist); +ts_bool clusterize_vesicle(ts_vesicle *vesicle, ts_cluster_list *cstlist); #endif diff --git a/src/tspoststat.c b/src/tspoststat.c index 5fb1380..fdc822b 100644 --- a/src/tspoststat.c +++ b/src/tspoststat.c @@ -18,6 +18,7 @@ #include "shcomplex.h" #include "dumpstate.h" #include "restore.h" +#include "cluster.h" #include <string.h> #include <getopt.h> #include <sys/stat.h> @@ -103,6 +104,10 @@ fprintf(stdout,"%d %.17e %.17e %.17e %.17e %.17e %.17e\n",atoi(number),vesicle->volume, vesicle->area,l1,l2,l3, (ts_double)count_bonds_with_energy(vesicle->blist)/(ts_double)vesicle->blist->n), tstep++; + ts_cluster_list *cstlist=init_cluster_list(); + clusterize_vesicle(vesicle,cstlist); + printf("No clusters=%d\n",cstlist->n); + cluster_list_free(cstlist); free(number); tape_free(vesicle->tape); vesicle_free(vesicle); -- Gitblit v1.9.3