From 142a67fe82b830e5c7816914afa62445959c87ca Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Tue, 05 Nov 2013 14:04:21 +0000 Subject: [PATCH] changes in bondflip call. No need to bondflip all the bonds, but only as many bonds as there are vertices. Also, rnvec seems to be not needed for bondflip, so it is commented out --- src/cell.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/cell.c b/src/cell.c index 18586ee..246866b 100644 --- a/src/cell.c +++ b/src/cell.c @@ -49,17 +49,17 @@ ts_uint cellidx; ts_uint ncx, ncy,ncz; ts_cell_list *clist=vesicle->clist; - ncx=(ts_uint)((vtx->data->x-vesicle->cm[0])*clist->dcell+clist->shift); - ncy=(ts_uint)((vtx->data->y-vesicle->cm[1])*clist->dcell+clist->shift); - ncz=(ts_uint)((vtx->data->z-vesicle->cm[2])*clist->dcell+clist->shift); + ncx=(ts_uint)((vtx->x-vesicle->cm[0])*clist->dcell+clist->shift); + ncy=(ts_uint)((vtx->y-vesicle->cm[1])*clist->dcell+clist->shift); + ncz=(ts_uint)((vtx->z-vesicle->cm[2])*clist->dcell+clist->shift); - if(ncx == clist->ncmax[0]-1 || ncx == 2){ + if(ncx >= clist->ncmax[0]-1 || ncx <= 2){ fatal("Vesicle is positioned outside the cell covered area. Coordinate x is the problem.",1500); } - if(ncy == clist->ncmax[1]-1 || ncy == 2){ + if(ncy >= clist->ncmax[1]-1 || ncy <= 2){ fatal("Vesicle is positioned outside the cell covered area. Coordinate y is the problem.",1500); } - if(ncz == clist->ncmax[2]-1 || ncz == 2){ + if(ncz >= clist->ncmax[2]-1 || ncz <= 2){ fatal("Vesicle is positioned outside the cell covered area. Coordinate z is the problem.",1500); } cellidx=ncz+(ncy-1)*clist->ncmax[2] + (ncx-1)*clist->ncmax[2]* @@ -69,16 +69,48 @@ //TODO: looks ok, but debug anyway in the future -ts_bool cell_add_vertex(ts_cell *cell, ts_vertex *vtx){ +inline ts_bool cell_add_vertex(ts_cell *cell, ts_vertex *vtx){ + ts_uint i; + for(i=0;i<cell->nvertex;i++){ + if(cell->vertex[i]==vtx){ + //vertex is already in the cell! + //fprintf(stderr,"VTX in the cell!\n"); + return TS_FAIL; + } + } + //fprintf(stderr,"VTX added to the cell!\n"); cell->nvertex++; cell->vertex=(ts_vertex **)realloc(cell->vertex,cell->nvertex*sizeof(ts_vertex *)); if(cell->vertex == NULL){ fatal("Reallocation of memory failed during insertion of vertex in cell_add_vertex",3); } cell->vertex[cell->nvertex-1]=vtx; + vtx->cell=cell; return TS_SUCCESS; } +inline ts_bool cell_remove_vertex(ts_cell *cell, ts_vertex *vtx){ + ts_uint i,j=0; + for(i=0;i<cell->nvertex;i++){ + if(cell->vertex[i]!=vtx){ + cell->vertex[j]=cell->vertex[i]; + j++; + } + } + if(j==i){ + fatal("Vertex was not in the cell!",3); + } + //fprintf(stderr, "Vertex deleted from the cell!\n"); + +/* resize memory. potentionally time consuming */ + cell->nvertex--; + cell->vertex=(ts_vertex **)realloc(cell->vertex,cell->nvertex*sizeof(ts_vertex *)); + if(vtx->neigh == NULL && vtx->neigh_no!=0) + if(cell->vertex == NULL){ + fatal("Reallocation of memory failed during removal of vertex in cell_remove_vertex",3); + } + return TS_SUCCESS; +} ts_bool cell_list_cell_occupation_clear(ts_cell_list *clist){ ts_uint i; @@ -93,7 +125,7 @@ } // TODO: compiles ok, but it is completely untested and undebugged. It was debugged before rewrite, but this was long time ago. -ts_bool cell_occupation_number_and_internal_proximity(ts_cell_list *clist, ts_uint cellidx, ts_vertex *vtx, ts_vertex *tvtx){ +ts_bool cell_occupation_number_and_internal_proximity(ts_cell_list *clist, ts_uint cellidx, ts_vertex *vtx){ ts_uint ncx,ncy,ncz,remainder,cell_occupation; ts_uint i,j,k,l,neigh_cidx; ts_double dist; @@ -117,17 +149,18 @@ // cell! if(cell_occupation>1){ for(l=0;l<cell_occupation;l++){ - if(clist->cell[neigh_cidx]->vertex[l]!=vtx){ + + //carefull with this checks! + if(clist->cell[neigh_cidx]->vertex[l]->idx!=vtx->idx){ // fprintf(stderr,"calling dist on vertex %i\n",l); - dist=vtx_distance_sq(clist->cell[neigh_cidx]->vertex[l],tvtx); + dist=vtx_distance_sq(clist->cell[neigh_cidx]->vertex[l],vtx); // fprintf(stderr,"dist was %f\n",dist); - if(dist<1) return TS_FAIL; + if(dist<=1.0) return TS_FAIL; } } } } } - } - + } return TS_SUCCESS; } -- Gitblit v1.9.3