| | |
| | | /* vim: set ts=4 sts=4 sw=4 noet : */ |
| | | #include<stdlib.h> |
| | | #include "general.h" |
| | | #include "vertex.h" |
| | |
| | | ts_cell_list *init_cell_list(ts_uint ncmax1, ts_uint ncmax2, ts_uint ncmax3, ts_double stepsize){ |
| | | ts_uint i; |
| | | ts_uint nocells=ncmax1*ncmax2*ncmax3; |
| | | ts_cell_list *clist=(ts_cell_list *)malloc(sizeof(ts_cell_list)); |
| | | ts_cell_list *clist=(ts_cell_list *)calloc(1,sizeof(ts_cell_list)); |
| | | if(clist==NULL) fatal("Error while allocating memory for cell list!",100); |
| | | |
| | | clist->ncmax[0]=ncmax1; |
| | |
| | | clist->cellno=nocells; |
| | | clist->dcell=1.0/(1.0 + stepsize); |
| | | clist->shift=(ts_double) clist->ncmax[0]/2; |
| | | |
| | | clist->cell=(ts_cell **)malloc(nocells*sizeof(ts_cell *)); |
| | | clist->max_occupancy=16; /* hard coded max occupancy? */ |
| | | clist->cell=(ts_cell **)calloc(nocells,sizeof(ts_cell *)); |
| | | if(clist->cell==NULL) fatal("Error while allocating memory for cell list! ncmax too large?",101); |
| | | |
| | | for(i=0;i<nocells;i++){ |
| | |
| | | cell_occupation=clist->cell[neigh_cidx]->nvertex; |
| | | // fprintf(stderr, "cell_occupation=%i\n",cell_occupation); |
| | | if(cell_occupation>clist->max_occupancy){ |
| | | ts_fprintf(stderr,"max occupancy= %d, cell occupation= %d", clist->max_occupancy, cell_occupation); |
| | | fatal("Neighbouring cell occupation more than set max_occupancy value.",2000); |
| | | } |
| | | // Now we check whether we didn't come close to some other vertices in the same |
| | |
| | | for(l=0;l<cell_occupation;l++){ |
| | | |
| | | //carefull with this checks! |
| | | if(clist->cell[neigh_cidx]->vertex[l]->idx!=vtx->idx){ |
| | | 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]->vertex[l],vtx); |
| | | // fprintf(stderr,"dist was %f\n",dist); |
| | | |
| | | // if(vtx->idx==1) |
| | | // fprintf(stderr,"VTX(0) ima bliznji vertex z indeksom, %d, tipa %d \n", clist->cell[neigh_cidx]->vertex[l]->idx, clist->cell[neigh_cidx]->vertex[l]->id); |
| | | // if(vtx->idx==0 && clist->cell[neigh_cidx]->vertex[l]->idx==0) |
| | | // fprintf(stderr,"*** dist was %f\n",dist); |
| | | |
| | | if(dist<=1.0 || (dist<=clist->dmin_interspecies && (clist->cell[neigh_cidx]->vertex[l]->id != vtx->id))) return TS_FAIL; |
| | | } |
| | | } |