Trisurf Monte Carlo simulator
Samo Penic
2013-12-07 40aa5b1bea828225a582b191600996f0674b2760
Finished io.c. Changes made also in poly.c to accomodate unique indexing of all vertices for purpose of visualization
3 files modified
80 ■■■■ changed files
src/io.c 53 ●●●●● patch | view | raw | blame | history
src/poly.c 19 ●●●● patch | view | raw | blame | history
src/tape 8 ●●●● patch | view | raw | blame | history
src/io.c
@@ -207,7 +207,7 @@
    ts_vertex_list *vlist=vesicle->vlist;
    ts_bond_list *blist=vesicle->blist;
    ts_vertex **vtx=vlist->vtx;
    ts_uint i;
    ts_uint i,j;
        char filename[255];
    FILE *fh;
@@ -218,29 +218,69 @@
        return TS_FAIL;
    }
    /* Here comes header of the file */
    //find number of extra vtxs and bonds of polymeres
    ts_uint monono=0, polyno=0;
    ts_bool poly=0;
    if(vesicle->poly_list!=NULL){
        if(vesicle->poly_list->poly[0]!=NULL){
        polyno=vesicle->poly_list->n;
        monono=vesicle->poly_list->poly[0]->vlist->n;
        poly=1;
        }
    }
    fprintf(fh, "<?xml version=\"1.0\"?>\n<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\">\n <UnstructuredGrid>\n");
    fprintf(fh, "<Piece NumberOfPoints=\"%u\" NumberOfCells=\"%u\">\n",vlist->n, blist->n);
    fprintf(fh, "<Piece NumberOfPoints=\"%u\" NumberOfCells=\"%u\">\n",vlist->n+monono*polyno, blist->n+monono*polyno);
    fprintf(fh,"<PointData Scalars=\"scalars\">\n<DataArray type=\"Int64\" Name=\"scalars\" format=\"ascii\">");
       for(i=0;i<vlist->n;i++){
        fprintf(fh,"%u ",vtx[i]->idx);
    }
    //polymeres
    if(poly){
        for(i=0;i<vesicle->poly_list->n;i++){
            for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){
                fprintf(fh,"%u ", vesicle->poly_list->poly[i]->vlist->vtx[j]->idx);
            }
        }
    }
    fprintf(fh,"</DataArray>\n</PointData>\n<CellData>\n</CellData>\n<Points>\n<DataArray type=\"Float64\" Name=\"Koordinate tock\" NumberOfComponents=\"3\" format=\"ascii\">\n");
    for(i=0;i<vlist->n;i++){
        fprintf(fh,"%e %e %e\n",vtx[i]->x,vtx[i]->y, vtx[i]->z);
    }
    //polymeres
    if(poly){
        for(i=0;i<vesicle->poly_list->n;i++){
            for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){
                fprintf(fh,"%e %e %e\n", vesicle->poly_list->poly[i]->vlist->vtx[j]->x,vesicle->poly_list->poly[i]->vlist->vtx[j]->y, vesicle->poly_list->poly[i]->vlist->vtx[j]->z );
            }
        }
    }
    fprintf(fh,"</DataArray>\n</Points>\n<Cells>\n<DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\">");
    for(i=0;i<blist->n;i++){
            fprintf(fh,"%u %u\n",blist->bond[i]->vtx1->idx,blist->bond[i]->vtx2->idx);
    }
    //polymeres
    if(poly){
        for(i=0;i<vesicle->poly_list->n;i++){
            for(j=0;j<vesicle->poly_list->poly[i]->blist->n;j++){
                fprintf(fh,"%u %u\n", vesicle->poly_list->poly[i]->blist->bond[j]->vtx1->idx,vesicle->poly_list->poly[i]->blist->bond[j]->vtx2->idx);
            }
    //grafted bonds
        fprintf(fh,"%u %u\n", vesicle->poly_list->poly[i]->grafted_vtx->idx, vesicle->poly_list->poly[i]->vlist->vtx[0]->idx);
        }
    }
    fprintf(fh,"</DataArray>\n<DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\">");
    for (i=2;i<blist->n*2+1;i+=2){
    for (i=2;i<(blist->n+monono*polyno)*2+1;i+=2){
    fprintf(fh,"%u ",i);
    }
    fprintf(fh,"\n");
    fprintf(fh,"</DataArray>\n<DataArray type=\"UInt8\" Name=\"types\" format=\"ascii\">\n");
     for (i=0;i<blist->n;i++){
     for (i=0;i<blist->n+monono*polyno;i++){
        fprintf(fh,"3 ");
    }
@@ -303,6 +343,8 @@
    long int brezveze2=1;
    ts_double xk0=25.0, dmax=1.67,stepsize=0.15;
    long int iter=1000, init=1000, mcsw=1000;
    cfg_opt_t opts[] = {
        CFG_SIMPLE_INT("nshell", &nshell),
        CFG_SIMPLE_INT("npoly", &npoly),
@@ -352,6 +394,9 @@
    cfg_free(cfg);
    free(buf);
  //  fprintf(stderr,"NSHELL=%u\n",vesicle->nshell);
    return vesicle;
}
src/poly.c
@@ -26,7 +26,7 @@
ts_poly_list *init_poly_list(ts_uint n_poly, ts_uint n_mono, ts_vertex_list *vlist){
    ts_poly_list *poly_list=(ts_poly_list *)calloc(1,sizeof(ts_poly_list));
    poly_list->poly    = (ts_poly **)calloc(n_poly,sizeof(ts_poly *));
    ts_uint i=0,j=0;
    ts_uint i=0,j=0, idx;
    ts_uint gvtxi;
    ts_double xnorm,ynorm,znorm,normlength;
@@ -49,9 +49,9 @@
        ynorm=0.0;
        znorm=0.0;
        for (j=0;j<poly_list->poly[i]->grafted_vtx->tristar_no;j++){
            xnorm+=poly_list->poly[i]->grafted_vtx->tristar[j]->xnorm;
            ynorm+=poly_list->poly[i]->grafted_vtx->tristar[j]->ynorm;
            znorm+=poly_list->poly[i]->grafted_vtx->tristar[j]->znorm;
            xnorm-=poly_list->poly[i]->grafted_vtx->tristar[j]->xnorm;
            ynorm-=poly_list->poly[i]->grafted_vtx->tristar[j]->ynorm;
            znorm-=poly_list->poly[i]->grafted_vtx->tristar[j]->znorm;
        }
        normlength=sqrt(xnorm*xnorm+ynorm*ynorm+znorm*znorm);
        xnorm=xnorm/normlength;
@@ -65,6 +65,17 @@
        }
    }
        //index correction for polymeres. Important, since each vtx has to have unique id
    idx=vlist->n;
    for(i=0;i<n_poly;i++){
        for(j=0;j<n_mono;j++,idx++){
            poly_list->poly[i]->vlist->vtx[j]->idx=idx;
        }
    }
    return poly_list;
}
src/tape
@@ -10,7 +10,7 @@
####### Polymer definitions ###########
# npoly is a number of polymers attached to npoly distinct vertices on vesicle
npoly=1000
npoly=10
# nmono is a number of monomers in each polymere
nmono=15
@@ -22,11 +22,11 @@
####### Program Control ############
#how many MC sweeps between subsequent records of states to disk
mcsweeps=100
mcsweeps=10
#how many initial mcsweeps*inititer MC sweeps before recording to disk?
inititer=100
inititer=1
#how many records do you want on the disk iteration are there in a run?
iterations=1000
iterations=100
#shut up if we are using cluster!!!