From b5cd8cc72380e9ca576ec942753391df85a2a436 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Thu, 28 Feb 2019 19:14:54 +0000 Subject: [PATCH] Many new plugins :D --- src/vertexmove.c | 50 ++++++++++++++++---------------------------------- 1 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/vertexmove.c b/src/vertexmove.c index e62967b..c512ccd 100644 --- a/src/vertexmove.c +++ b/src/vertexmove.c @@ -23,56 +23,38 @@ ts_double delta_energy, delta_energy_cv,oenergy,dvol=0.0, darea=0.0, dstretchenergy=0.0; ts_double costheta,sintheta,phi,r; //This will hold all the information of vtx and its neighbours - ts_vertex backupvtx[20], *constvol_vtx_moved=NULL, *constvol_vtx_backup=NULL; - memcpy((void *)&backupvtx[0],(void *)vtx,sizeof(ts_vertex)); + ts_vertex backupvtx[20], *constvol_vtx_moved=NULL, *constvol_vtx_backup=NULL; + memcpy((void *)&backupvtx[0],(void *)vtx,sizeof(ts_vertex)); -//random move in a sphere with radius stepsize: - r=vesicle->stepsize*rn[0]; - phi=rn[1]*2*M_PI; - costheta=2*rn[2]-1; - sintheta=sqrt(1-pow(costheta,2)); - vtx->x=vtx->x+r*sintheta*cos(phi); - vtx->y=vtx->y+r*sintheta*sin(phi); - vtx->z=vtx->z+r*costheta; + //random move in a sphere with radius stepsize: + r=vesicle->stepsize*rn[0]; + phi=rn[1]*2*M_PI; + costheta=2*rn[2]-1; + sintheta=sqrt(1-pow(costheta,2)); + vtx->x=vtx->x+r*sintheta*cos(phi); + vtx->y=vtx->y+r*sintheta*sin(phi); + vtx->z=vtx->z+r*costheta; - -// TODO: Maybe faster if checks only nucleus-neighboring cells -// Nucleus penetration check: -//#define SQ(x) x*x -if(vesicle->R_nucleus>0.0){ - if ((vtx->x-vesicle->nucleus_center[0])*(vtx->x-vesicle->nucleus_center[0])+ (vtx->y-vesicle->nucleus_center[1])*(vtx->y-vesicle->nucleus_center[1]) + (vtx->z-vesicle->nucleus_center[2])*(vtx->z-vesicle->nucleus_center[2]) < vesicle->R_nucleus){ - vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); - return TS_FAIL; - } -} else if(vesicle->R_nucleusX>0.0){ -// fprintf(stderr,"DEBUG, (Rx, Ry,Rz)^2=(%f,%f,%f)\n",vesicle->R_nucleusX, vesicle->R_nucleusY, vesicle->R_nucleusZ); -// if (SQ(vtx->x-vesicle->nucleus_center[0])/vesicle->R_nucleusX + SQ(vtx->y-vesicle->nucleus_center[1])/vesicle->R_nucleusY + SQ(vtx->z-vesicle->nucleus_center[2])/vesicle->R_nucleusZ < 1.0){ - if ((vtx->x-vesicle->nucleus_center[0])*(vtx->x-vesicle->nucleus_center[0])/vesicle->R_nucleusX + (vtx->y-vesicle->nucleus_center[1])*(vtx->y-vesicle->nucleus_center[1])/vesicle->R_nucleusY + (vtx->z-vesicle->nucleus_center[2])*(vtx->z-vesicle->nucleus_center[2])/vesicle->R_nucleusZ < 1.0){ -// if (SQ(vtx->x)/vesicle->R_nucleusX + SQ(vtx->y)/vesicle->R_nucleusY + SQ(vtx->z)/vesicle->R_nucleusZ < 1.0){ - vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); - return TS_FAIL; - } - -} - - // plane confinement check whether the new position of vertex will be out of bounds +// plane confinement check whether the new position of vertex will be out of bounds if(vesicle->tape->plane_confinement_switch){ if(vtx->z>vesicle->confinement_plane.z_max || vtx->z<vesicle->confinement_plane.z_min){ vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); return TS_FAIL; } } -//#undef SQ /* Entry point for plugin vm_hard_constraint() function */ - for(i=0; i<vesicle->plist->n;i++){ - retval = vesicle->plist->plugin[i]->function->vm_hard_constraint(vesicle,vtx,&backupvtx[0]); + ts_plugin_chain *ptr=vesicle->plist->chain->vm_hard_constraint; + while(ptr!=NULL){ + retval = ptr->plugin->function->vm_hard_constraint(vesicle,vtx, &backupvtx[0]); if(retval==TS_FAIL){ vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); return TS_FAIL; } + ptr=ptr->next; } + //if all the tests are successful, then energy for vtx and neighbours is calculated for(i=0;i<vtx->neigh_no;i++){ -- Gitblit v1.9.3