From cef6cace886115944d4abc04f37a6741c437bce1 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Sat, 08 Mar 2014 11:50:45 +0000 Subject: [PATCH] debugged seg_fault. Found error in io.h. However, it is unknown why bond_no is not equal to neigh_no --- src/vertexmove.c | 57 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/vertexmove.c b/src/vertexmove.c index f78fd61..7f6391f 100644 --- a/src/vertexmove.c +++ b/src/vertexmove.c @@ -18,7 +18,7 @@ ts_double dist; ts_bool retval; ts_uint cellidx; - ts_double delta_energy,oenergy; + ts_double delta_energy,oenergy,dvol=0.0; ts_double costheta,sintheta,phi,r; //This will hold all the information of vtx and its neighbours ts_vertex backupvtx[20]; @@ -57,6 +57,16 @@ return TS_FAIL; } } + +// Distance with grafted poly-vertex check: + if(vtx->grafted_poly!=NULL){ + dist=vtx_distance_sq(vtx,vtx->grafted_poly->vlist->vtx[0]); + if(dist<1.0 || dist>vesicle->dmax) { + vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); + return TS_FAIL; + } + } + //self avoidance check with distant vertices cellidx=vertex_self_avoidance(vesicle, vtx); //check occupation number @@ -73,7 +83,9 @@ memcpy((void *)&backupvtx[i+1],(void *)vtx->neigh[i],sizeof(ts_vertex)); } - + if(vesicle->pswitch == 1){ + for(i=0;i<vtx->tristar_no;i++) dvol-=vtx->tristar[i]->volume; + }; delta_energy=0; //update the normals of triangles that share bead i. @@ -88,14 +100,18 @@ delta_energy+=vtx->neigh[i]->xk*(vtx->neigh[i]->energy-oenergy); } + if(vesicle->pswitch == 1){ + for(i=0;i<vtx->tristar_no;i++) dvol+=vtx->tristar[i]->volume; + delta_energy-=vesicle->pressure*dvol; + }; + +/* No poly-bond energy for now! if(vtx->grafted_poly!=NULL){ delta_energy+= (pow(sqrt(vtx_distance_sq(vtx, vtx->grafted_poly->vlist->vtx[0])-1),2)- pow(sqrt(vtx_distance_sq(&backupvtx[0], vtx->grafted_poly->vlist->vtx[0])-1),2)) *vtx->grafted_poly->k; - - } - +*/ // fprintf(stderr, "DE=%f\n",delta_energy); //MONTE CARLOOOOOOOO if(delta_energy>=0){ @@ -139,11 +155,12 @@ ts_uint i; ts_bool retval; ts_uint cellidx; - ts_double delta_energy; +// ts_double delta_energy; ts_double costheta,sintheta,phi,r; + ts_double dist; //This will hold all the information of vtx and its neighbours ts_vertex backupvtx; - ts_bond backupbond[2]; +// ts_bond backupbond[2]; memcpy((void *)&backupvtx,(void *)vtx,sizeof(ts_vertex)); //random move in a sphere with radius stepsize: @@ -157,13 +174,23 @@ //distance with neighbours check -// for(i=0;i<vtx->neigh_no;i++){ -// dist=vtx_distance_sq(vtx,vtx->neigh[i]); -// if(dist<1.0 || dist>vesicle->dmax) { -// vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); -// return TS_FAIL; -// } -// } + for(i=0;i<vtx->neigh_no;i++){ + dist=vtx_distance_sq(vtx,vtx->neigh[i]); + if(dist<1.0 || dist>vesicle->dmax) { + vtx=memcpy((void *)vtx,(void *)&backupvtx,sizeof(ts_vertex)); + return TS_FAIL; + } + } + +// Distance with grafted vesicle-vertex check: + if(vtx==poly->vlist->vtx[0]){ + dist=vtx_distance_sq(vtx,poly->grafted_vtx); + if(dist<1.0 || dist>vesicle->dmax) { + vtx=memcpy((void *)vtx,(void *)&backupvtx,sizeof(ts_vertex)); + return TS_FAIL; + } + } + //self avoidance check with distant vertices cellidx=vertex_self_avoidance(vesicle, vtx); @@ -177,6 +204,7 @@ //if all the tests are successful, then energy for vtx and neighbours is calculated +/* Energy ignored for now! delta_energy=0; for(i=0;i<vtx->bond_no;i++){ memcpy((void *)&backupbond[i],(void *)vtx->bond[i],sizeof(ts_bond)); @@ -214,6 +242,7 @@ return TS_FAIL; } } +*/ // oldcellidx=vertex_self_avoidance(vesicle, &backupvtx[0]); if(vtx->cell!=vesicle->clist->cell[cellidx]){ -- Gitblit v1.9.3