Trisurf Monte Carlo simulator
Samo Penic
2013-11-05 200815edf1548d444aa3b5db908a1628adeb2a05
Vertex tainting done
4 files modified
47 ■■■■■ changed files
src/general.h 1 ●●●● patch | view | raw | blame | history
src/timestep.c 9 ●●●●● patch | view | raw | blame | history
src/vertex.c 33 ●●●●● patch | view | raw | blame | history
src/vertex.h 4 ●●● patch | view | raw | blame | history
src/general.h
@@ -154,6 +154,7 @@
        ts_double projArea;
        ts_double relR;
        ts_double solAngle;
    ts_int locked;
};
typedef struct ts_vertex ts_vertex;
src/timestep.c
@@ -7,6 +7,7 @@
#include "vertexmove.h"
#include "bondflip.h"
#include "frame.h"
#include "vertex.h"
#include "io.h"
ts_bool run_simulation(ts_vesicle *vesicle, ts_uint mcsweeps, ts_uint inititer, ts_uint iterations){
    ts_uint i, j;
@@ -35,7 +36,15 @@
        rnvec[0]=drand48();
        rnvec[1]=drand48();
        rnvec[2]=drand48();
    vertex_taint(vesicle->vlist->vtx[i],1);
//        ts_fprintf(stdout, "Vertex %d should be tainted, level=%d.\n", i, vesicle->vlist->vtx[i]->locked);
    if(vertex_tainted(vesicle->vlist->vtx[i],1,1)){
        ts_fprintf(stdout, "Vertex %d tainted, level=%d. Waiting....\n", i, vesicle->vlist->vtx[i]->locked);
        while(vertex_tainted(vesicle->vlist->vtx[i],1,1));
    }
        retval=single_verticle_timestep(vesicle,vesicle->vlist->vtx[i],rnvec);
    vertex_untaint(vesicle->vlist->vtx[i],1);
//        ts_fprintf(stdout, "Vertex %d should be untainted, level=%d.\n", i, vesicle->vlist->vtx[i]->locked);
    }
//    ts_int cnt=0;
src/vertex.c
@@ -311,3 +311,36 @@
    return vlist;
}
ts_bool vertex_taint(ts_vertex *vtx, ts_uint level){
    if(level==0){
        vtx->locked++;
        return TS_SUCCESS;
    }
    ts_uint i;
    for(i=0; i<vtx->neigh_no; i++){
        vertex_taint(vtx->neigh[i], level-1);
    }
        vtx->locked++;
    return TS_SUCCESS;
}
ts_bool vertex_untaint(ts_vertex *vtx, ts_uint level){
    if(level==0){
        vtx->locked--;
        return TS_SUCCESS;
    }
    ts_uint i;
    for(i=0; i<vtx->neigh_no; i++){
        vertex_untaint(vtx->neigh[i], level-1);
    }
        vtx->locked--;
    return TS_SUCCESS;
}
inline ts_bool vertex_tainted(ts_vertex *vtx, ts_uint level, ts_uint amount){
    if(vtx->locked>amount) return 1;
    else return 0;
}
src/vertex.h
@@ -30,5 +30,7 @@
ts_bool vtx_duplicate(ts_vertex *cvtx, ts_vertex *ovtx);
ts_vertex **vtx_neigh_copy(ts_vertex_list *vlist,ts_vertex *ovtx);
ts_vertex_list *vertex_list_copy(ts_vertex_list *ovlist);
ts_bool vertex_taint(ts_vertex *vtx, ts_uint level);
ts_bool vertex_untaint(ts_vertex *vtx, ts_uint level);
inline ts_bool vertex_tainted(ts_vertex *vtx, ts_uint level, ts_uint amount);
#endif