From 1121faa13a2038facad22073f0fc610903d98691 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo@CAE-linux.(none)>
Date: Fri, 05 Sep 2014 20:18:05 +0000
Subject: [PATCH] First variant of constant volume constrant (a new one proposed by Miha after reading his article). It seems to work, however there are still some things to be done, such as Miha's derivation of the epsvol (0.003% is used at the moment) and solving the problem of additional global variables.

---
 src/spherical_trisurf.c |   84 +++++++++++++++++++++++------------------
 1 files changed, 47 insertions(+), 37 deletions(-)

diff --git a/src/spherical_trisurf.c b/src/spherical_trisurf.c
index f266c11..0669981 100644
--- a/src/spherical_trisurf.c
+++ b/src/spherical_trisurf.c
@@ -19,11 +19,14 @@
 */
 ts_bool saveAvgUlm2(ts_vesicle *vesicle);
 int main(int argv, char *argc[]){
-ts_uint i,j;
+ts_uint i,j,k;
 ts_vesicle *vesicle;
 ts_double r0;
 vesicle=initial_distribution_dipyramid(17,60,60,60,0.15);
 //parsetape(vesicle,&i);
+
+//similar to nmax in fortran code
+ts_uint nmax;
 
 //these four must come from parsetype!
 vesicle->dmax=1.67*1.67;
@@ -32,6 +35,22 @@
 vesicle->bending_rigidity=25.0;
 //fprintf(stderr,"xk=%f",vesicle->bending_rigidity);
 
+	centermass(vesicle);
+cell_occupation(vesicle);
+
+//test if the structure is internally organized into cells correctly 
+ts_uint cind;
+for(i=0;i<vesicle->vlist->n;i++){
+	cind=vertex_self_avoidance(vesicle, vesicle->vlist->vtx[i]);
+
+	if(vesicle->clist->cell[cind]==vesicle->vlist->vtx[i]->cell){
+		//fprintf(stdout,"(T) Idx match!\n");
+	} else {
+		fprintf(stderr,"(T) ***** Idx don't match!\n");
+
+	}
+}
+//end test
 vesicle->sphHarmonics=sph_init(vesicle->vlist, 21);
 
 vesicle_volume(vesicle);
@@ -41,27 +60,41 @@
 calculateYlmi(vesicle);
 calculateUlm(vesicle);
 
-
-
-for(i=0;i<10000;i++){
-	centermass(vesicle);
+//preloop:
+ts_double vmsr, bfsr;
+for(i=0;i<1000;i++){
 	cell_occupation(vesicle);
 	for(j=0;j<1000;j++){
-		single_timestep(vesicle);
+		single_timestep(vesicle, &vmsr, &bfsr);
 	}	
-vesicle_volume(vesicle);
-r0=getR0(vesicle);
+	centermass(vesicle);
+	fprintf(stderr, "Preloop %d completed.\n",i+1);
+}
 
-preparationSh(vesicle,r0);
-calculateYlmi(vesicle);
-calculateUlm(vesicle);
+nmax=1000;
+for(i=0;i<nmax;i++){
+	for(j=0;j<200;j++){
+		cell_occupation(vesicle);
+		for(k=0;k<5;k++){
+		single_timestep(vesicle, &vmsr, &bfsr);
+		}
+		centermass(vesicle);
+	}	
+    vesicle_volume(vesicle);
+    r0=getR0(vesicle);
 
-storeUlm2(vesicle);
-saveAvgUlm2(vesicle);
+    preparationSh(vesicle,r0);
+    calculateYlmi(vesicle);
+    calculateUlm(vesicle);
+
+    storeUlm2(vesicle);
+    saveAvgUlm2(vesicle);
 
 	write_vertex_xml_file(vesicle,i);
-	fprintf(stderr, "Loop %d completed.\n",i+1);
+	fprintf(stderr, "Loop %d out of %d completed.\n",i+1,nmax);
+
 }
+
 write_master_xml_file("test.pvd");
 write_dout_fcompat_file(vesicle,"dout");
 vesicle_free(vesicle);
@@ -71,26 +104,3 @@
 
 
 
-ts_bool saveAvgUlm2(ts_vesicle *vesicle){
-
-	FILE *fh;
-	
-	fh=fopen("sph2out.dat", "w");
-	if(fh==NULL){
-		err("Cannot open file %s for writing");
-		return TS_FAIL;
-	}
-
-	ts_spharm *sph=vesicle->sphHarmonics;
-	ts_int i,j;
-	fprintf(fh,"l,\tm,\tulm^2avg\n");
-	for(i=0;i<sph->l;i++){
-    		for(j=0;j<2*i+1;j++){
-		fprintf(fh,"%d,\t%d,\t%e\n", i, j-i, sph->sumUlm2[i][j]/(ts_double)sph->N);
-
-    		}
-    fprintf(fh,"\n");
-	}
-	fclose(fh);
-	return TS_SUCCESS;
-}

--
Gitblit v1.9.3