From 523bf18206f550a315c6c17e5a0a253381b0f8bf Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Thu, 07 Jun 2012 11:16:16 +0000 Subject: [PATCH] Spherical harmonics. Almost everyhing is done. Missing triangle area calculation when vertex is moved or bond is flipped. Also missing volume calculation on vertex move or bondflip. Calculation of co coefficient is not done completely yet. Problems are in numbering the coefficients. Newly added data structure ts_spharm is referenced from ts_vesicle. Missing function for initialization and freeing the memory of that datastructure -- but that memory is already used by some functions. --- src/cell.c | 38 +++++++++++++++++--------------------- 1 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/cell.c b/src/cell.c index b3d90e4..47d7fab 100644 --- a/src/cell.c +++ b/src/cell.c @@ -19,19 +19,15 @@ if(clist->cell==NULL) fatal("Error while allocating memory for cell list! ncmax too large?",101); for(i=0;i<nocells;i++){ - clist->cell[i]=(ts_cell *)malloc(sizeof(ts_cell)); + clist->cell[i]=(ts_cell *)calloc(1,sizeof(ts_cell)); if(clist->cell[i]==NULL) fatal("Error while allocating memory for cell list! ncmax too large?",102); clist->cell[i]->idx=i+1; // We enumerate cells! Probably never required! - clist->cell[i]->data=(ts_cell_data *)calloc(1,sizeof(ts_cell_data)); } return clist; } ts_bool cell_free(ts_cell* cell){ - if(cell->data!=NULL){ - if(cell->data->vertex!=NULL) free(cell->data->vertex); - free(cell->data); - } + if(cell->vertex!=NULL) free(cell->vertex); free(cell); return TS_SUCCESS; } @@ -53,9 +49,9 @@ 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){ fatal("Vesicle is positioned outside the cell covered area. Coordinate x is the problem.",1500); @@ -74,12 +70,12 @@ //TODO: looks ok, but debug anyway in the future ts_bool cell_add_vertex(ts_cell *cell, ts_vertex *vtx){ - cell->data->nvertex++; - cell->data->vertex=(ts_vertex **)realloc(cell->data->vertex,cell->data->nvertex*sizeof(ts_vertex *)); - if(vtx->data->neigh == NULL){ - fatal("Reallocation of memory failed during insertion of vertex neighbour in vertex_add_neighbour",3); + 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->data->vertex[cell->data->nvertex-1]=vtx; + cell->vertex[cell->nvertex-1]=vtx; return TS_SUCCESS; } @@ -87,11 +83,11 @@ ts_bool cell_list_cell_occupation_clear(ts_cell_list *clist){ ts_uint i; for(i=0;i<clist->cellno;i++){ - if(clist->cell[i]->data->vertex != NULL){ - free(clist->cell[i]->data->vertex); - clist->cell[i]->data->vertex=NULL; + if(clist->cell[i]->vertex != NULL){ + free(clist->cell[i]->vertex); + clist->cell[i]->vertex=NULL; } - clist->cell[i]->data->nvertex=0; + clist->cell[i]->nvertex=0; } return TS_SUCCESS; } @@ -112,7 +108,7 @@ for(k=ncz-1;k<=ncz+1;k++){ neigh_cidx=k+(j-1)*clist->ncmax[2]+(i-1)*clist->ncmax[2]*clist->ncmax[1] -1; // fprintf(stderr,"neigh_cell_index=%i\n",neigh_cidx); - cell_occupation=clist->cell[neigh_cidx]->data->nvertex; + cell_occupation=clist->cell[neigh_cidx]->nvertex; // fprintf(stderr, "cell_occupation=%i\n",cell_occupation); if(cell_occupation>clist->max_occupancy){ fatal("Neighbouring cell occupation more than set max_occupancy value.",2000); @@ -121,9 +117,9 @@ // cell! if(cell_occupation>1){ for(l=0;l<cell_occupation;l++){ - if(clist->cell[neigh_cidx]->data->vertex[l]!=vtx){ + if(clist->cell[neigh_cidx]->vertex[l]!=vtx){ // fprintf(stderr,"calling dist on vertex %i\n",l); - dist=vtx_distance_sq(clist->cell[neigh_cidx]->data->vertex[l],tvtx); + dist=vtx_distance_sq(clist->cell[neigh_cidx]->vertex[l],tvtx); // fprintf(stderr,"dist was %f\n",dist); if(dist<1) return TS_FAIL; } -- Gitblit v1.9.3