From a0f0a3ac3363a9cc058e1de3f64dac2598d9c787 Mon Sep 17 00:00:00 2001 From: Samo <samo@beti.(none)> Date: Tue, 10 Jul 2012 07:37:45 +0000 Subject: [PATCH] Added source for fast-forward sh --- src/spherical_trisurf_ff.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 112 insertions(+), 0 deletions(-) diff --git a/src/spherical_trisurf_ff.c b/src/spherical_trisurf_ff.c new file mode 100644 index 0000000..867f37d --- /dev/null +++ b/src/spherical_trisurf_ff.c @@ -0,0 +1,112 @@ +#include<stdio.h> +#include<math.h> +#include "general.h" +#include "vertex.h" +#include "bond.h" +#include "triangle.h" +#include "cell.h" +#include "vesicle.h" +#include "io.h" +#include "initial_distribution.h" +#include "frame.h" +#include "timestep.h" +#include "sh.h" + +/** Entrance function to the program + * @param argv is a number of parameters used in program call (including the program name + * @param argc is a pointer to strings (character arrays) which holds the arguments + * @returns returns 0 on success, any other number on fail. +*/ +ts_bool saveAvgUlm2(ts_vesicle *vesicle); +int main(int argv, char *argc[]){ +ts_uint i,j; +ts_vesicle *vesicle; +ts_double r0; +vesicle=initial_distribution_dipyramid(17,60,60,60,0.15); +//parsetape(vesicle,&i); + +//these four must come from parsetype! +vesicle->dmax=1.67*1.67; +vesicle->stepsize=0.15; +vesicle->clist->max_occupancy=8; +vesicle->bending_rigidity=30.0*30.0; +for(i=0;i<vesicle->vlist->n;i++){ + vesicle->vlist->vtx[i]->xk=vesicle->bending_rigidity; +} +//fprintf(stderr,"xk=%f",vesicle->bending_rigidity); + + centermass(vesicle); +vesicle->sphHarmonics=sph_init(vesicle->vlist, 21); + +vesicle_volume(vesicle); +r0=getR0(vesicle); + +preparationSh(vesicle,r0); +calculateYlmi(vesicle); +calculateUlm(vesicle); +for(i=0;i<500;i++){ + cell_occupation(vesicle); + for(j=0;j<1000;j++){ + single_timestep(vesicle); + } + centermass(vesicle); + fprintf(stderr, "Preloop %d completed.\n",i+1); +} + +vesicle->bending_rigidity=25.0; +for(i=0;i<vesicle->vlist->n;i++){ + vesicle->vlist->vtx[i]->xk=vesicle->bending_rigidity; +} + + +for(i=0;i<10000;i++){ + cell_occupation(vesicle); + for(j=0;j<1000;j++){ + single_timestep(vesicle); + } + centermass(vesicle); + vesicle_volume(vesicle); + r0=getR0(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); +} +write_master_xml_file("test.pvd"); +write_dout_fcompat_file(vesicle,"dout"); +vesicle_free(vesicle); + +return 0; //program finished perfectly ok. We return 0. +} + + + +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