From 7ec6fb63c690080d0624c7bf138d0fd84fe7664e Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Tue, 15 May 2018 16:11:14 +0000 Subject: [PATCH] First working version, not debugged and energy assigned to vesicles on timesteps --- src/io.c | 32 +++++++++++++++ src/tape | 4 +- src/bondflip.c | 11 +++++ src/energy.c | 4 ++ src/initial_distribution.c | 2 src/general.h | 1 src/energy.h | 2 + src/vertexmove.c | 24 +++++++++++- 8 files changed, 73 insertions(+), 7 deletions(-) diff --git a/src/bondflip.c b/src/bondflip.c index 66c40f7..13ec263 100644 --- a/src/bondflip.c +++ b/src/bondflip.c @@ -176,7 +176,6 @@ /* vesicle_volume(vesicle); fprintf(stderr,"Volume in the beginning=%1.16e\n", vesicle->volume); */ - /* fix data structure for flipped bond */ ts_flip_bond(k,it,km,kp, bond,lm, lp, lm2, lp1, vesicle->tape->w); @@ -189,6 +188,12 @@ delta_energy+=it->xk* it->energy; delta_energy+=bond->energy; /* attraction with neighboring vertices, that have spontaneous curvature */ //Neigbours of k, it, km, kp don't change its energy. + if(vesicle->tape->stretchswitch==1){ + oldenergy+=lm->energy+lp->energy; + stretchenergy(vesicle,lm); + stretchenergy(vesicle,lp); + delta_energy+=lm->energy+lp->energy; + } delta_energy-=oldenergy; if(vesicle->pswitch == 1 || vesicle->tape->constvolswitch>0){ @@ -334,6 +339,10 @@ // fprintf(stderr,"Restoration complete!!!\n"); // vesicle_volume(vesicle); // fprintf(stderr,"Volume after fail=%1.16e\n", vesicle->volume); + if(vesicle->tape->stretchswitch==1){ + stretchenergy(vesicle,lm); + stretchenergy(vesicle,lp); + } return TS_FAIL; } diff --git a/src/energy.c b/src/energy.c index 4d27995..810edd1 100644 --- a/src/energy.c +++ b/src/energy.c @@ -238,3 +238,7 @@ return vesicle->tape->F*ddp; } + +void stretchenergy(ts_vesicle *vesicle, ts_triangle *triangle){ + triangle->energy=vesicle->tape->xkA0/vesicle->tlist->n*pow((triangle->area/vesicle->tlist->a0-1),2); +} diff --git a/src/energy.h b/src/energy.h index 1b97fa9..9d1f47c 100644 --- a/src/energy.h +++ b/src/energy.h @@ -8,4 +8,6 @@ ts_bool sweep_attraction_bond_energy(ts_vesicle *vesicle); inline ts_bool attraction_bond_energy(ts_bond *bond, ts_double w); ts_double direct_force_energy(ts_vesicle *vesicle, ts_vertex *vtx, ts_vertex *vtx_old); + +void stretchenergy(ts_vesicle *vesicle, ts_triangle *triangle); #endif diff --git a/src/general.h b/src/general.h index 9a8feab..7676000 100644 --- a/src/general.h +++ b/src/general.h @@ -201,6 +201,7 @@ struct ts_triangle_list{ ts_uint n; + ts_double a0; ts_triangle **tria; }; typedef struct ts_triangle_list ts_triangle_list; diff --git a/src/initial_distribution.c b/src/initial_distribution.c index 0274038..59bf808 100644 --- a/src/initial_distribution.c +++ b/src/initial_distribution.c @@ -112,7 +112,7 @@ vesicle->sphHarmonics=NULL; } - + vesicle->tlist->a0=sqrt(3)/2*pow((vesicle->tape->dmax+1.0),2); return TS_SUCCESS; } diff --git a/src/io.c b/src/io.c index f513501..83bb26d 100644 --- a/src/io.c +++ b/src/io.c @@ -826,6 +826,7 @@ ts_bond_list *blist=vesicle->blist; ts_vertex **vtx=vlist->vtx; ts_uint i,j; + ts_double senergy=0.0; char filename[10000]; char just_name[255]; FILE *fh; @@ -973,7 +974,36 @@ } } fprintf(fh,"</DataArray>\n"); - + if(vesicle->tape->stretchswitch==1){ + fprintf(fh,"<DataArray type=\"Float64\" Name=\"stretching_energy\" format=\"ascii\">"); + for(i=0;i<vlist->n;i++){ + senergy=0.0; + for(j=0;j<vtx[i]->tristar_no;j++){ + senergy+=vtx[i]->tristar[j]->energy; + } + fprintf(fh,"%.17e ",senergy); + } + //polymeres + if(poly){ + poly_idx=vlist->n; + for(i=0;i<vesicle->poly_list->n;i++){ + for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++,poly_idx++){ + fprintf(fh,"%.17e ", 0.0); + } + } + } + //filaments + if(fil){ + poly_idx=vlist->n+monono*polyno; + for(i=0;i<vesicle->filament_list->n;i++){ + for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++,poly_idx++){ + // fprintf(stderr,"was here\n"); + fprintf(fh,"%.17e ", 0.0); + } + } + } + fprintf(fh,"</DataArray>\n"); + } fprintf(fh,"</PointData>\n<CellData>\n</CellData>\n<Points>\n<DataArray type=\"Float64\" Name=\"Koordinate tock\" NumberOfComponents=\"3\" format=\"ascii\">\n"); diff --git a/src/tape b/src/tape index 70f526a..9e81e14 100644 --- a/src/tape +++ b/src/tape @@ -26,7 +26,7 @@ #Stretching stretchswitch=1 -xkA0=10.0 +xkA0=1.0 ####### Polymer (brush) definitions ########### # npoly is a number of polymers attached to npoly distinct vertices on vesicle @@ -61,7 +61,7 @@ ####### Program Control ############ #how many MC sweeps between subsequent records of states to disk #200000 -mcsweeps=2000 +mcsweeps=200 #how many initial mcsweeps*inititer MC sweeps before recording to disk? #2 inititer=1 diff --git a/src/vertexmove.c b/src/vertexmove.c index 2517f69..401dddf 100644 --- a/src/vertexmove.c +++ b/src/vertexmove.c @@ -21,7 +21,7 @@ ts_double dist; ts_bool retval; ts_uint cellidx; - ts_double delta_energy, delta_energy_cv,oenergy,dvol=0.0, darea=0.0; + 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; @@ -113,7 +113,10 @@ for(i=0;i<vtx->tristar_no;i++) darea-=vtx->tristar[i]->area; } - + //stretching energy 1 of 3 + if(vesicle->tape->stretchswitch==1){ + for(i=0;i<vtx->tristar_no;i++) dstretchenergy-=vtx->tristar[i]->energy/3.0; + } delta_energy=0; // vesicle_volume(vesicle); @@ -191,6 +194,17 @@ } /* Vertices with spontaneous curvature may have spontaneous force perpendicular to the surface of the vesicle. additional delta energy is calculated in this function */ delta_energy+=direct_force_energy(vesicle,vtx,backupvtx); + + //stretching energy 2 of 3 + if(vesicle->tape->stretchswitch==1){ + for(i=0;i<vtx->tristar_no;i++){ + stretchenergy(vesicle, vtx->tristar[i]); + dstretchenergy+=vtx->tristar[i]->energy/3.0; + } + } + + delta_energy+=dstretchenergy; + /* No poly-bond energy for now! if(vtx->grafted_poly!=NULL){ delta_energy+= @@ -221,6 +235,12 @@ //update the normals of triangles that share bead i. for(i=0;i<vtx->tristar_no;i++) triangle_normal_vector(vtx->tristar[i]); + //stretching energy 3 of 3 + if(vesicle->tape->stretchswitch==1){ + for(i=0;i<vtx->tristar_no;i++){ + stretchenergy(vesicle,vtx->tristar[i]); + } + } // fprintf(stderr, "before vtx(x,y,z)=%e,%e,%e\n",constvol_vtx_moved->x, constvol_vtx_moved->y, constvol_vtx_moved->z); if(vesicle->tape->constvolswitch == 1){ -- Gitblit v1.9.3