From fe24d29b3c8684f08dccd01f5785aa48b7137322 Mon Sep 17 00:00:00 2001 From: mihaf <miha.fosnaric@gmail.com> Date: Tue, 25 Mar 2014 12:49:06 +0000 Subject: [PATCH] Added nucleus. Better initial configuration of filaments. --- src/timestep.c | 6 ++- src/poly.c | 26 ++++++++++--- src/tape | 10 ++-- src/initial_distribution.c | 5 +- src/vertexmove.c | 24 +++++++++-- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/src/initial_distribution.c b/src/initial_distribution.c index a93e2ee..0587d18 100644 --- a/src/initial_distribution.c +++ b/src/initial_distribution.c @@ -41,7 +41,9 @@ vesicle=initial_distribution_dipyramid(tape->nshell,tape->ncxmax,tape->ncymax,tape->nczmax,tape->stepsize); // Nucleus: - vesicle->R_nucleus=tape->R_nucleus; + vesicle->R_nucleus=tape->R_nucleus*tape->R_nucleus; + + vesicle->clist->dmin_interspecies = tape->dmin_interspecies*tape->dmin_interspecies; //Initialize grafted polymers (brush): vesicle->poly_list=init_poly_list(tape->npoly,tape->nmono, vesicle->vlist, vesicle); @@ -79,7 +81,6 @@ vesicle->nshell=tape->nshell; vesicle->dmax=tape->dmax*tape->dmax; /* dmax^2 in the vesicle dmax variable */ - vesicle->clist->dmin_interspecies = tape->dmin_interspecies*tape->dmin_interspecies; vesicle->bending_rigidity=tape->xk0; vtx_set_global_values(vesicle); /* make xk0 default value for every vertex */ ts_fprintf(stdout, "Tape setting: xk0=%e\n",tape->xk0); diff --git a/src/poly.c b/src/poly.c index 5cfc6e0..b2b13f9 100644 --- a/src/poly.c +++ b/src/poly.c @@ -58,7 +58,6 @@ ts_uint gvtxi; ts_double xnorm,ynorm,znorm,normlength; ts_double dphi,dh; - ts_uint ji; // Grafting polymers: if (vlist!=NULL){ @@ -108,14 +107,29 @@ else { /* Make filaments inside the vesicle. Helix with radius... Dist. between poly vertices put to 1*/ - dphi = 2.0*asin(1.0/2.0/vesicle->R_nucleus)*1.001; + ts_double a,R,H,tantheta,h,r,phi,A0=1.2; + + a = A0*(ts_double)vesicle->nshell; + R = A0*((ts_double)vesicle->nshell)/(2.0*sin(M_PI/5.0)); + H = sqrt(a*a - R*R); + tantheta = sqrt(R*R - a*a/4.0)/H; + + h = -H + sqrt(vesicle->clist->dmin_interspecies)*1.5; + r = (H-fabs(h))*tantheta - sqrt(vesicle->clist->dmin_interspecies)*1.5; + dphi = 2.0*asin(1.0/2.0/r)*1.001; dh = dphi/2.0/M_PI*1.001; + phi=0.0; for(i=0;i<poly_list->n;i++){ for (j=0;j<poly_list->poly[i]->vlist->n;j++){ - ji = j + i*poly_list->poly[i]->vlist->n; - poly_list->poly[i]->vlist->vtx[j]->x = vesicle->R_nucleus*cos(ji*dphi); - poly_list->poly[i]->vlist->vtx[j]->y = vesicle->R_nucleus*sin(ji*dphi); - poly_list->poly[i]->vlist->vtx[j]->z = ji*dh - (dh*poly_list->n*poly_list->poly[i]->vlist->n/2.0); + h = h + dh; + r = (H-fabs(h))*tantheta - sqrt(vesicle->clist->dmin_interspecies)*1.5; + dphi = 2.0*asin(1.0/2.0/r)*1.001; + dh = dphi/2.0/M_PI*1.001; + phi+=dphi; + //ji = j + i*poly_list->poly[i]->vlist->n; + poly_list->poly[i]->vlist->vtx[j]->x = r*cos(phi); + poly_list->poly[i]->vlist->vtx[j]->y = r*sin(phi); + poly_list->poly[i]->vlist->vtx[j]->z = h;// ji*dh - (dh*poly_list->n*poly_list->poly[i]->vlist->n/2.0); } } } diff --git a/src/tape b/src/tape index 8d589d0..e7e42e7 100644 --- a/src/tape +++ b/src/tape @@ -4,7 +4,7 @@ # dmax is the max. bond length (in units l_min) dmax=1.7 # dmin_interspecies in the min. dist. between different vertex species (in units l_min) -dmin_interspecies=1 +dmin_interspecies=1.2 # bending rigidity of the membrane (in units kT) xk0=10.0 # max step size (in units l_min) @@ -12,7 +12,7 @@ # Pressure calculations # (pswitch=1: calc. p*dV energy contribution) -pswitch = 1 +pswitch = 0 # pressure difference: p_inside - p_outside (in units kT/l_min^3): pressure=-2.0 @@ -26,7 +26,7 @@ ####### Filament (inside the vesicle) definitions ########### # nfil is a number of filaments inside the vesicle -nfil=1 +nfil=2 # nfono is a number of monomers in each filament nfono=300 # Persistence lenght of the filaments (in units l_min) @@ -44,11 +44,11 @@ ####### Program Control ############ #how many MC sweeps between subsequent records of states to disk -mcsweeps=100 +mcsweeps=1000 #how many initial mcsweeps*inititer MC sweeps before recording to disk? inititer=0 #how many records do you want on the disk iteration are there in a run? -iterations=20 +iterations=100 #shut up if we are using cluster!!! diff --git a/src/timestep.c b/src/timestep.c index 3369b9f..af152e4 100644 --- a/src/timestep.c +++ b/src/timestep.c @@ -11,7 +11,7 @@ ts_bool run_simulation(ts_vesicle *vesicle, ts_uint mcsweeps, ts_uint inititer, ts_uint iterations, ts_uint start_iteration){ ts_uint i, j; - char filename[255]; +// char filename[255]; centermass(vesicle); cell_occupation(vesicle); @@ -26,8 +26,10 @@ dump_state(vesicle,i); if(i>=inititer){ write_vertex_xml_file(vesicle,i-inititer); + write_master_xml_file("test.pvd"); + // sprintf(filename,"timestep-%05d.pov",i-inititer); - write_pov_file(vesicle,filename); + // write_pov_file(vesicle,filename); } } return TS_SUCCESS; diff --git a/src/vertexmove.c b/src/vertexmove.c index da8e70f..9139ae2 100644 --- a/src/vertexmove.c +++ b/src/vertexmove.c @@ -67,11 +67,18 @@ } } - //self avoidance check with distant vertices - cellidx=vertex_self_avoidance(vesicle, vtx); - //check occupation number - retval=cell_occupation_number_and_internal_proximity(vesicle->clist,cellidx,vtx); - +// TODO: Maybe faster if checks only nucleus-neighboring cells +// Nucleus penetration check: + if (vtx->x*vtx->x + vtx->y*vtx->y + vtx->z*vtx->z < vesicle->R_nucleus){ + vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); + return TS_FAIL; + } + +//self avoidance check with distant vertices + cellidx=vertex_self_avoidance(vesicle, vtx); + //check occupation number + retval=cell_occupation_number_and_internal_proximity(vesicle->clist,cellidx,vtx); + if(retval==TS_FAIL){ vtx=memcpy((void *)vtx,(void *)&backupvtx[0],sizeof(ts_vertex)); return TS_FAIL; @@ -291,6 +298,13 @@ } } +// TODO: Maybe faster if checks only nucleus-neighboring cells +// Nucleus penetration check: + if (vtx->x*vtx->x + vtx->y*vtx->y + vtx->z*vtx->z < vesicle->R_nucleus){ + vtx=memcpy((void *)vtx,(void *)&backupvtx,sizeof(ts_vertex)); + return TS_FAIL; + } + //self avoidance check with distant vertices cellidx=vertex_self_avoidance(vesicle, vtx); -- Gitblit v1.9.3