From 624f819d40ca2204b0a128970dcd3d9ca7e17699 Mon Sep 17 00:00:00 2001
From: mihaf <miha.fosnaric@gmail.com>
Date: Fri, 14 Mar 2014 09:36:05 +0000
Subject: [PATCH] Added filaments inside the vesicle. TODO: tape etc.

---
 src/poly.c                 |   85 ++++++++++++++++++++++++++++--------------
 src/tape                   |   10 ++++
 src/initial_distribution.c |    2 
 src/general.h              |    8 +++
 src/poly.h                 |    2 
 5 files changed, 75 insertions(+), 32 deletions(-)

diff --git a/src/general.h b/src/general.h
index 3308faa..26e8b55 100644
--- a/src/general.h
+++ b/src/general.h
@@ -256,11 +256,17 @@
    	ts_double cm[3];
 	ts_double volume;
 	ts_spharm *sphHarmonics;
-
+// Polymers outside the vesicle and attached to the vesicle membrane (polymer brush):
 	ts_poly_list *poly_list;
+// Filaments inside the vesicle (not attached to the vesicel membrane:
+	ts_poly_list *filament_list;
+
 	ts_double spring_constant;
 	ts_double pressure;
 	ts_int pswitch;
+
+	ts_double R_nucleus;
+
 } ts_vesicle;
 
 
diff --git a/src/initial_distribution.c b/src/initial_distribution.c
index 7601f13..f450dbf 100644
--- a/src/initial_distribution.c
+++ b/src/initial_distribution.c
@@ -38,7 +38,7 @@
 ts_vesicle *create_vesicle_from_tape(ts_tape *tape){
 	ts_vesicle *vesicle;
 	vesicle=initial_distribution_dipyramid(tape->nshell,tape->ncxmax,tape->ncymax,tape->nczmax,tape->stepsize);
-	vesicle->poly_list=init_poly_list(tape->npoly,tape->nmono, vesicle->vlist);
+	vesicle->poly_list=init_poly_list(tape->npoly,tape->nmono, vesicle->vlist, vesicle);
 	vesicle->spring_constant=tape->kspring;
 	poly_assign_spring_const(vesicle);
 	
diff --git a/src/poly.c b/src/poly.c
index 2057db1..aa41184 100644
--- a/src/poly.c
+++ b/src/poly.c
@@ -20,8 +20,10 @@
 	ts_poly	*poly=(ts_poly *)calloc(1,sizeof(ts_poly));
 	poly->vlist = init_vertex_list(n);
 	poly->blist = init_bond_list();
-	poly->grafted_vtx = grafted_vtx;
-	grafted_vtx->grafted_poly = poly;
+	if (grafted_vtx!=NULL){
+		poly->grafted_vtx = grafted_vtx;
+		grafted_vtx->grafted_poly = poly;
+	}
 
 	ts_uint i;
 	for(i=0;i<n-1;i++){
@@ -38,45 +40,72 @@
 }
 
 
-ts_poly_list *init_poly_list(ts_uint n_poly, ts_uint n_mono, ts_vertex_list *vlist){
+ts_poly_list *init_poly_list(ts_uint n_poly, ts_uint n_mono, ts_vertex_list *vlist, ts_vesicle *vesicle){
 	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; //idx;
 	ts_uint gvtxi;
 	ts_double xnorm,ynorm,znorm,normlength;
+	ts_double dphi,dh;
+	ts_uint ji;
 
-	if (n_poly > vlist->n){fatal("Number of polymers larger then numbero f vertices on a vesicle.",310);}
+	// Grafting polymers:
+	if (vlist!=NULL){
+		if (n_poly > vlist->n){fatal("Number of polymers larger then numbero f vertices on a vesicle.",310);}
 	
-	while(i<n_poly){
-		gvtxi = rand() % vlist->n;
-		if (vlist->vtx[gvtxi]->grafted_poly == NULL){
-		poly_list->poly[i] = init_poly(n_mono, vlist->vtx[gvtxi]);
-		i++;
+		while(i<n_poly){
+			gvtxi = rand() % vlist->n;
+			if (vlist->vtx[gvtxi]->grafted_poly == NULL){
+			poly_list->poly[i] = init_poly(n_mono, vlist->vtx[gvtxi]);
+			i++;
+			}
 		}
 	}
-	
+	else
+	{
+		for(i=0;i<n_poly;i++){
+			poly_list->poly[i] = init_poly(n_mono, NULL);
+		}
+	}
+
 	poly_list->n = n_poly;
 
-/* Make straight poylmers normal to membrane. Dist. between poly vertices put to 1*/
-	for (i=0;i<poly_list->n;i++){
+	if (vlist!=NULL){
+	/* Make straight grafted poylmers normal to membrane (polymer brush). Dist. between poly vertices put to 1*/
+		for (i=0;i<poly_list->n;i++){
+	
+			xnorm=0.0;
+			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;	
+			}
+			normlength=sqrt(xnorm*xnorm+ynorm*ynorm+znorm*znorm);
+			xnorm=xnorm/normlength;
+			ynorm=ynorm/normlength;
+			znorm=znorm/normlength;
 
-		xnorm=0.0;
-		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;	
+			for (j=0;j<poly_list->poly[i]->vlist->n;j++){
+				poly_list->poly[i]->vlist->vtx[j]->x = poly_list->poly[i]->grafted_vtx->x + xnorm*(ts_double)(j+1);
+				poly_list->poly[i]->vlist->vtx[j]->y = poly_list->poly[i]->grafted_vtx->y + ynorm*(ts_double)(j+1);
+				poly_list->poly[i]->vlist->vtx[j]->z = poly_list->poly[i]->grafted_vtx->z + znorm*(ts_double)(j+1);
+			}
 		}
-		normlength=sqrt(xnorm*xnorm+ynorm*ynorm+znorm*znorm);
-		xnorm=xnorm/normlength;
-		ynorm=ynorm/normlength;
-		znorm=znorm/normlength;
-
-		for (j=0;j<poly_list->poly[i]->vlist->n;j++){
-			poly_list->poly[i]->vlist->vtx[j]->x = poly_list->poly[i]->grafted_vtx->x + xnorm*(ts_double)(j+1);
-			poly_list->poly[i]->vlist->vtx[j]->y = poly_list->poly[i]->grafted_vtx->y + ynorm*(ts_double)(j+1);
-			poly_list->poly[i]->vlist->vtx[j]->z = poly_list->poly[i]->grafted_vtx->z + znorm*(ts_double)(j+1);
+	}
+	else
+	{
+	/* Make filaments inside the vesicle. Helix with radius... Dist. between poly vertices put to 1*/
+		dphi = 2*asin(1/2/vesicle->R_nucleus)*1.001;
+		dh = dphi/2/M_PI*1.001;
+		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;
+			}
 		}
 	}
 
diff --git a/src/poly.h b/src/poly.h
index 9bdec52..68c83c1 100644
--- a/src/poly.h
+++ b/src/poly.h
@@ -5,7 +5,7 @@
 
 ts_poly	*init_poly(ts_uint n, ts_vertex *grafted_vtx);
 
-ts_poly_list *init_poly_list(ts_uint n_poly, ts_uint n_mono, ts_vertex_list *vlist);
+ts_poly_list *init_poly_list(ts_uint n_poly, ts_uint n_mono, ts_vertex_list *vlist, ts_vesicle *vesicle);
 
 ts_bool poly_free(ts_poly *poly);
 
diff --git a/src/tape b/src/tape
index bd02323..38871bd 100644
--- a/src/tape
+++ b/src/tape
@@ -14,7 +14,7 @@
 # pressure difference: p_inside - p_outside (in units kT/l_min^3):
 pressure=0.0
 
-####### Polymer definitions ###########
+####### Polymer (brush) definitions ###########
 # npoly is a number of polymers attached to npoly distinct vertices on vesicle
 npoly=0
 # nmono is a number of monomers in each polymer
@@ -22,6 +22,14 @@
 # Spring constant between monomers of the polymer
 k_spring=800
 
+####### Filament (inside the vesicle) definitions ###########
+# npoly is a number of polymers attached to npoly distinct vertices on vesicle
+nfil=0
+# nmono is a number of monomers in each filament
+nfono=10
+# Spring constant between monomers of the filament
+k_sfring=800
+
 #######  Cell definitions ############
 nxmax=60
 nymax=60

--
Gitblit v1.9.3