| | |
| | | |
| | | |
| | | //distance with neighbours check |
| | | for(i=0;i<vtx->neigh_no;i++){ |
| | | dist=vtx_distance_sq(vtx,vtx->neigh[i]); |
| | | for(i=0;i<vtx->neigh->n;i++){ |
| | | dist=vtx_distance_sq(vtx,vtx->neigh->vtx[i]); |
| | | if(dist<1.0 || dist>vesicle->dmax) { |
| | | vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); |
| | | return TS_FAIL; |
| | |
| | | |
| | | |
| | | //if all the tests are successful, then energy for vtx and neighbours is calculated |
| | | for(i=0;i<vtx->neigh_no;i++){ |
| | | memcpy((void *)&backupvtx[i+1],(void *)vtx->neigh[i],sizeof(ts_vertex)); |
| | | for(i=0;i<vtx->neigh->n;i++){ |
| | | memcpy((void *)&backupvtx[i+1],(void *)vtx->neigh->vtx[i],sizeof(ts_vertex)); |
| | | } |
| | | |
| | | |
| | |
| | | energy_vertex(vtx); |
| | | delta_energy=vtx->xk*(vtx->energy - oenergy); |
| | | //the same is done for neighbouring vertices |
| | | for(i=0;i<vtx->neigh_no;i++){ |
| | | oenergy=vtx->neigh[i]->energy; |
| | | energy_vertex(vtx->neigh[i]); |
| | | delta_energy+=vtx->neigh[i]->xk*(vtx->neigh[i]->energy-oenergy); |
| | | for(i=0;i<vtx->neigh->n;i++){ |
| | | oenergy=vtx->neigh->vtx[i]->energy; |
| | | energy_vertex(vtx->neigh->vtx[i]); |
| | | delta_energy+=vtx->neigh->vtx[i]->xk*(vtx->neigh->vtx[i]->energy-oenergy); |
| | | } |
| | | // fprintf(stderr, "DE=%f\n",delta_energy); |
| | | //MONTE CARLOOOOOOOO |
| | |
| | | { |
| | | //not accepted, reverting changes |
| | | vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); |
| | | for(i=0;i<vtx->neigh_no;i++){ |
| | | vtx->neigh[i]=memcpy((void *)vtx->neigh[i],(void *)&backupvtx[i+1],sizeof(ts_vertex)); |
| | | for(i=0;i<vtx->neigh->n;i++){ |
| | | vtx->neigh->vtx[i]=memcpy((void *)vtx->neigh->vtx[i],(void *)&backupvtx[i+1],sizeof(ts_vertex)); |
| | | } |
| | | |
| | | //update the normals of triangles that share bead i. |