From 3c6e26add4550990dc81446b2aea00a6e4d2feeb Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Wed, 16 Oct 2019 09:02:16 +0000 Subject: [PATCH] Cleaning up io.c --- src/Makefile.am | 10 src/main.c | 64 --- /dev/null | 90 ----- src/timestep.c | 2 src/io.c | 703 ------------------------------------------- src/io.h | 50 -- 6 files changed, 13 insertions(+), 906 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index c7e3c88..3e55232 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,15 +1,15 @@ -bin_PROGRAMS = trisurf tsmeasure tspoststat +bin_PROGRAMS = trisurf trisurf_SOURCES = main.c GITVERSION:=$(shell git --no-pager describe --tags --always --dirty) AM_CFLAGS = -Wall -Werror -DTS_VERSION=\"$(GITVERSION)\" -fgnu89-inline -Wno-error=date-time AM_CPPFLAGS = ${libxml2_CFLAGS} -fgnu89-inline trisurf_LDADD = libtrisurf.la ${libcurl_LIBS} ${libxml2_LIBS} -tsmeasure_SOURCES = tsmeasure.c -tsmeasure_LDADD = libtrisurf.la ${libcurl_LIBS} ${libxml2_LIBS} +#tsmeasure_SOURCES = tsmeasure.c +#tsmeasure_LDADD = libtrisurf.la ${libcurl_LIBS} ${libxml2_LIBS} -tspoststat_SOURCES = tspoststat.c -tspoststat_LDADD = libtrisurf.la ${libcurl_LIBS} ${libxml2_LIBS} +#tspoststat_SOURCES = tspoststat.c +#tspoststat_LDADD = libtrisurf.la ${libcurl_LIBS} ${libxml2_LIBS} #------------- LIBS ---------- diff --git a/src/io.c b/src/io.c index 30bd4d6..482c0a5 100644 --- a/src/io.c +++ b/src/io.c @@ -1,4 +1,3 @@ - /* vim: set ts=4 sts=4 sw=4 noet : */ #include "general.h" #include<stdio.h> @@ -18,421 +17,6 @@ #include <dirent.h> #include <errno.h> #include <snapshot.h> -/** DUMP STATE TO DISK DRIVE **/ - -ts_bool dump_state(ts_vesicle *vesicle, ts_uint iteration){ - - /* save current state with wrong pointers. Will fix that later */ - ts_uint i,j,k; - FILE *fh=fopen(command_line_args.dump_fullfilename,"wb"); - - /* dump vesicle */ - fwrite(vesicle, sizeof(ts_vesicle)-sizeof(ts_double),1,fh); - /* dump vertex list */ - fwrite(vesicle->vlist, sizeof(ts_vertex_list),1,fh); - /* dump bond list */ - fwrite(vesicle->blist, sizeof(ts_bond_list),1,fh); - /* dump triangle list */ - fwrite(vesicle->tlist, sizeof(ts_triangle_list),1,fh); - /* dump cell list */ - fwrite(vesicle->clist, sizeof(ts_cell_list),1,fh); - /* dump poly list */ - fwrite(vesicle->poly_list, sizeof(ts_poly_list),1,fh); - /* dump filament list */ - fwrite(vesicle->filament_list, sizeof(ts_poly_list),1,fh); - /* level 1 complete */ - - /*dump vertices*/ - for(i=0;i<vesicle->vlist->n;i++){ - fwrite(vesicle->vlist->vtx[i],sizeof(ts_vertex),1,fh); - /* dump pointer offsets for: - neigh - bond - tria - cell is ignored - */ - for(j=0;j<vesicle->vlist->vtx[i]->neigh_no;j++){ - fwrite(&vesicle->vlist->vtx[i]->neigh[j]->idx,sizeof(ts_uint),1,fh); - } - for(j=0;j<vesicle->vlist->vtx[i]->bond_no;j++){ - fwrite(&vesicle->vlist->vtx[i]->bond[j]->idx,sizeof(ts_uint),1,fh); - } - for(j=0;j<vesicle->vlist->vtx[i]->tristar_no;j++){ - fwrite(&vesicle->vlist->vtx[i]->tristar[j]->idx,sizeof(ts_uint),1,fh); - } - } - - /*dump bonds*/ - for(i=0;i<vesicle->blist->n;i++){ - fwrite(vesicle->blist->bond[i],sizeof(ts_bond),1,fh); - /* dump pointer offsets for vtx1 and vtx2 */ - //off=(ts_ulong)(vesicle->blist->bond[i]->vtx1-vesicle->vlist->vtx[0]); - fwrite(&vesicle->blist->bond[i]->vtx1->idx,sizeof(ts_uint),1,fh); - //off=(ts_ulong)(vesicle->blist->bond[i]->vtx2-vesicle->vlist->vtx[0]); - fwrite(&vesicle->blist->bond[i]->vtx2->idx,sizeof(ts_uint),1,fh); - } - - /*dump triangles*/ - for(i=0;i<vesicle->tlist->n;i++){ - fwrite(vesicle->tlist->tria[i],sizeof(ts_triangle),1,fh); - /* dump pointer offsets for vertex */ - fwrite(&vesicle->tlist->tria[i]->vertex[0]->idx,sizeof(ts_uint),1,fh); - fwrite(&vesicle->tlist->tria[i]->vertex[1]->idx,sizeof(ts_uint),1,fh); - fwrite(&vesicle->tlist->tria[i]->vertex[2]->idx,sizeof(ts_uint),1,fh); - /* dump pointer offsets for neigh */ - for(j=0;j<vesicle->tlist->tria[i]->neigh_no;j++){ - fwrite(&vesicle->tlist->tria[i]->neigh[j]->idx,sizeof(ts_uint),1,fh); - } - } - - - /*dump polymeres */ - for(i=0;i<vesicle->poly_list->n;i++){ - fwrite(vesicle->poly_list->poly[i],sizeof(ts_poly),1,fh); - fwrite(vesicle->poly_list->poly[i]->vlist,sizeof(ts_vertex_list),1,fh); - fwrite(vesicle->poly_list->poly[i]->blist,sizeof(ts_bond_list),1,fh); - } - - /* dump poly vertex(monomer) list*/ - for(i=0;i<vesicle->poly_list->n;i++){ - for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){ - fwrite(vesicle->poly_list->poly[i]->vlist->vtx[j],sizeof(ts_vertex),1,fh); - /* dump offset for neigh and bond */ - for(k=0;k<vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh_no;k++){ - // off=(ts_ulong)(vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh[k]-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh[k]->idx,sizeof(ts_uint),1,fh); - } - for(k=0;k<vesicle->poly_list->poly[i]->vlist->vtx[j]->bond_no;k++){ - //off=(ts_ulong)(vesicle->poly_list->poly[i]->vlist->vtx[j]->bond[k]-vesicle->poly_list->poly[i]->blist->bond[0]); - fwrite(&vesicle->poly_list->poly[i]->vlist->vtx[j]->bond[k]->idx,sizeof(ts_uint),1,fh); - } - } - // grafted vtx on vesicle data dump - fwrite(&vesicle->poly_list->poly[i]->grafted_vtx->idx, sizeof(ts_uint),1,fh); - } - /* dump poly bonds between monomers list*/ - for(i=0;i<vesicle->poly_list->n;i++){ - for(j=0;j<vesicle->poly_list->poly[i]->blist->n;j++){ - fwrite(vesicle->poly_list->poly[i]->blist->bond[j],sizeof(ts_bond),1,fh); - /* dump vtx1 and vtx2 offsets */ - //off=(ts_ulong)(vesicle->poly_list->poly[i]->blist->bond[j]->vtx1-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->poly_list->poly[i]->blist->bond[j]->vtx1->idx,sizeof(ts_uint),1,fh); -// off=(ts_ulong)(vesicle->poly_list->poly[i]->blist->bond[j]->vtx2-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->poly_list->poly[i]->blist->bond[j]->vtx2->idx,sizeof(ts_uint),1,fh); - } - } - - - /*dump filamentes grandes svinjas */ - for(i=0;i<vesicle->filament_list->n;i++){ - fwrite(vesicle->filament_list->poly[i],sizeof(ts_poly),1,fh); - fwrite(vesicle->filament_list->poly[i]->vlist,sizeof(ts_vertex_list),1,fh); - fwrite(vesicle->filament_list->poly[i]->blist,sizeof(ts_bond_list),1,fh); - } - - /* dump filamentes vertex(monomer) list*/ - for(i=0;i<vesicle->filament_list->n;i++){ - for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++){ - fwrite(vesicle->filament_list->poly[i]->vlist->vtx[j],sizeof(ts_vertex),1,fh); - /* dump offset for neigh and bond */ - for(k=0;k<vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh_no;k++){ - // off=(ts_ulong)(vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh[k]-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh[k]->idx,sizeof(ts_uint),1,fh); - } - for(k=0;k<vesicle->filament_list->poly[i]->vlist->vtx[j]->bond_no;k++){ - //off=(ts_ulong)(vesicle->poly_list->poly[i]->vlist->vtx[j]->bond[k]-vesicle->poly_list->poly[i]->blist->bond[0]); - fwrite(&vesicle->filament_list->poly[i]->vlist->vtx[j]->bond[k]->idx,sizeof(ts_uint),1,fh); - } - } - } - /* dump poly bonds between monomers list*/ - for(i=0;i<vesicle->filament_list->n;i++){ - for(j=0;j<vesicle->filament_list->poly[i]->blist->n;j++){ - fwrite(vesicle->filament_list->poly[i]->blist->bond[j],sizeof(ts_bond),1,fh); - /* dump vtx1 and vtx2 offsets */ - //off=(ts_ulong)(vesicle->poly_list->poly[i]->blist->bond[j]->vtx1-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->filament_list->poly[i]->blist->bond[j]->vtx1->idx,sizeof(ts_uint),1,fh); -// off=(ts_ulong)(vesicle->poly_list->poly[i]->blist->bond[j]->vtx2-vesicle->poly_list->poly[i]->vlist->vtx[0]); - fwrite(&vesicle->filament_list->poly[i]->blist->bond[j]->vtx2->idx,sizeof(ts_uint),1,fh); - } - } - - - -/* pointer offsets for fixing the restored pointers */ -/* need pointers for - vlist->vtx - blist->bond - tlist->tria - clist->cell - poly_list->poly - and for each poly: - poly_list->poly->vtx - poly_list->poly->bond -*/ - -// fwrite(vesicle->clist, sizeof(ts_cell_list),1, fh); -/* write tape information on vesicle */ -// fwrite(vesicle->tape,sizeof(ts_tape),1,fh); - fwrite(&iteration, sizeof(ts_uint),1,fh); - fclose(fh); - return TS_SUCCESS; -} - - -/** RESTORE DUMP FROM DISK **/ -ts_vesicle *restore_state(ts_uint *iteration){ - ts_uint i,j,k; - FILE *fh=fopen(command_line_args.dump_fullfilename,"rb"); - - struct stat sb; - if (stat(command_line_args.dump_fullfilename, &sb) == -1) { - //dump file does not exist. - return NULL; - } - - //check if it is regular file - if((sb.st_mode & S_IFMT) != S_IFREG) { - //dump file is not a regular file. - ts_fprintf(stderr,"Dump file is not a regular file!\n"); - return NULL; - } - - ts_uint retval; - ts_uint idx; - -/* we restore all the data from the dump */ - /* restore vesicle */ - ts_vesicle *vesicle=(ts_vesicle *)calloc(1,sizeof(ts_vesicle)); - retval=fread(vesicle, sizeof(ts_vesicle)-sizeof(ts_double),1,fh); -// fprintf(stderr,"was here! %e\n",vesicle->dmax); - - /* restore vertex list */ - vesicle->vlist=(ts_vertex_list *)malloc(sizeof(ts_vertex_list)); - retval=fread(vesicle->vlist, sizeof(ts_vertex_list),1,fh); - /* restore bond list */ - vesicle->blist=(ts_bond_list *)malloc(sizeof(ts_bond_list)); - retval=fread(vesicle->blist, sizeof(ts_bond_list),1,fh); - /* restore triangle list */ - vesicle->tlist=(ts_triangle_list *)malloc(sizeof(ts_triangle_list)); - retval=fread(vesicle->tlist, sizeof(ts_triangle_list),1,fh); - /* restore cell list */ - vesicle->clist=(ts_cell_list *)malloc(sizeof(ts_cell_list)); - retval=fread(vesicle->clist, sizeof(ts_cell_list),1,fh); - /* restore poly list */ - vesicle->poly_list=(ts_poly_list *)calloc(1,sizeof(ts_poly_list)); - retval=fread(vesicle->poly_list, sizeof(ts_poly_list),1,fh); - /* restore filament list */ - vesicle->filament_list=(ts_poly_list *)calloc(1,sizeof(ts_poly_list)); - retval=fread(vesicle->filament_list, sizeof(ts_poly_list),1,fh); - /* level 1 complete */ - -/* prerequisity. Bonds must be malloced before vertexes are recreated */ - vesicle->blist->bond=(ts_bond **)calloc(vesicle->blist->n,sizeof(ts_bond *)); - for(i=0;i<vesicle->blist->n;i++){ - vesicle->blist->bond[i]=(ts_bond *)malloc(sizeof(ts_bond)); - } -/* prerequisity. Triangles must be malloced before vertexes are recreated */ - vesicle->tlist->tria=(ts_triangle **)calloc(vesicle->tlist->n,sizeof(ts_triangle *)); - for(i=0;i<vesicle->tlist->n;i++){ - vesicle->tlist->tria[i]=(ts_triangle *)malloc(sizeof(ts_triangle)); -} -/* prerequisity. Vertices must be malloced before vertexes are recreated */ - vesicle->vlist->vtx=(ts_vertex **)calloc(vesicle->vlist->n,sizeof(ts_vertex *)); - for(i=0;i<vesicle->vlist->n;i++){ - vesicle->vlist->vtx[i]=(ts_vertex *)malloc(sizeof(ts_vertex)); - } - /*restore vertices*/ - for(i=0;i<vesicle->vlist->n;i++){ - retval=fread(vesicle->vlist->vtx[i],sizeof(ts_vertex),1,fh); - /*restore neigh, bond, tristar. Ignoring cell */ - vesicle->vlist->vtx[i]->neigh=(ts_vertex **)calloc(vesicle->vlist->vtx[i]->neigh_no, sizeof(ts_vertex *)); - for(j=0;j<vesicle->vlist->vtx[i]->neigh_no;j++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->vlist->vtx[i]->neigh[j]=vesicle->vlist->vtx[idx]; - } - vesicle->vlist->vtx[i]->bond=(ts_bond **)calloc(vesicle->vlist->vtx[i]->bond_no, sizeof(ts_bond *)); - for(j=0;j<vesicle->vlist->vtx[i]->bond_no;j++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); -/* pointer can be assigned only when list of bonds is fully initialized in memory. Thus bondlist popularization must be done before vertex can reference to it */ - vesicle->vlist->vtx[i]->bond[j]=vesicle->blist->bond[idx]; - } - - vesicle->vlist->vtx[i]->tristar=(ts_triangle **)calloc(vesicle->vlist->vtx[i]->tristar_no, sizeof(ts_triangle *)); - for(j=0;j<vesicle->vlist->vtx[i]->tristar_no;j++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); -/* same comment as above */ - vesicle->vlist->vtx[i]->tristar[j]=vesicle->tlist->tria[idx]; - } - - } - - /*restore bonds*/ - // vesicle->blist->bond=(ts_bond **)calloc(vesicle->blist->n,sizeof(ts_bond *)); // done before. - for(i=0;i<vesicle->blist->n;i++){ - // vesicle->blist->bond[i]=(ts_bond *)malloc(sizeof(ts_bond)); //done before. - retval=fread(vesicle->blist->bond[i],sizeof(ts_bond),1,fh); - /* restore vtx1 and vtx2 */ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->blist->bond[i]->vtx1=vesicle->vlist->vtx[idx]; - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->blist->bond[i]->vtx2=vesicle->vlist->vtx[idx]; - } - - /*restore triangles*/ -// vesicle->tlist->tria=(ts_triangle **)calloc(vesicle->tlist->n,sizeof(ts_triangle *)); // done before - for(i=0;i<vesicle->tlist->n;i++){ - // vesicle->tlist->tria[i]=(ts_triangle *)malloc(sizeof(ts_triangle)); // done before - retval=fread(vesicle->tlist->tria[i],sizeof(ts_triangle),1,fh); - /* restore pointers for vertices */ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->tlist->tria[i]->vertex[0]=vesicle->vlist->vtx[idx]; - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->tlist->tria[i]->vertex[1]=vesicle->vlist->vtx[idx]; - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->tlist->tria[i]->vertex[2]=vesicle->vlist->vtx[idx]; - /* restore pointers for neigh */ - vesicle->tlist->tria[i]->neigh=(ts_triangle **)malloc(vesicle->tlist->tria[i]->neigh_no*sizeof(ts_triangle *)); - for(j=0;j<vesicle->tlist->tria[i]->neigh_no;j++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->tlist->tria[i]->neigh[j]=vesicle->tlist->tria[idx]; - } - - } - - /*restore cells */ -/*TODO: do we need to recalculate cells here? */ -/* vesicle->clist->cell=(ts_cell **)malloc(vesicle->clist->cellno*sizeof(ts_cell *)); - for(i=0;i<vesicle->clist->cellno;i++){ - vesicle->clist->cell[i]=(ts_cell *)malloc(sizeof(ts_cell)); - retval=fread(vesicle->clist->cell[i],sizeof(ts_cell),1,fh); - } -*/ - /*restore polymeres */ - vesicle->poly_list->poly = (ts_poly **)calloc(vesicle->poly_list->n,sizeof(ts_poly *)); - for(i=0;i<vesicle->poly_list->n;i++){ - vesicle->poly_list->poly[i]=(ts_poly *)calloc(1,sizeof(ts_poly)); - retval=fread(vesicle->poly_list->poly[i],sizeof(ts_poly),1,fh); - vesicle->poly_list->poly[i]->vlist=(ts_vertex_list *)calloc(1,sizeof(ts_vertex_list)); - retval=fread(vesicle->poly_list->poly[i]->vlist,sizeof(ts_vertex_list),1,fh); - vesicle->poly_list->poly[i]->blist=(ts_bond_list *)calloc(1,sizeof(ts_bond_list)); - retval=fread(vesicle->poly_list->poly[i]->blist,sizeof(ts_bond_list),1,fh); - /* initialize adress space for pointers that will hold specific vertices (monomers) and bonds */ - vesicle->poly_list->poly[i]->vlist->vtx=(ts_vertex **)calloc(vesicle->poly_list->poly[i]->vlist->n,sizeof(ts_vertex *)); - vesicle->poly_list->poly[i]->blist->bond=(ts_bond **)calloc(vesicle->poly_list->poly[i]->blist->n,sizeof(ts_bond *)); - for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){ - vesicle->poly_list->poly[i]->vlist->vtx[j]=(ts_vertex *)malloc(sizeof(ts_vertex)); - } - for(j=0;j<vesicle->poly_list->poly[i]->blist->n;j++){ - vesicle->poly_list->poly[i]->blist->bond[j]=(ts_bond *)malloc(sizeof(ts_bond)); - } - - } - - - /* restore poly vertex(monomer) list*/ - for(i=0;i<vesicle->poly_list->n;i++){ - for(j=0;j<vesicle->poly_list->poly[i]->vlist->n;j++){ - retval=fread(vesicle->poly_list->poly[i]->vlist->vtx[j],sizeof(ts_vertex),1,fh); - - /* restore neigh and bonds */ - vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh=(ts_vertex **)calloc(vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh_no, sizeof(ts_vertex *)); - for(k=0;k<vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh_no;k++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->poly_list->poly[i]->vlist->vtx[j]->neigh[k]=vesicle->poly_list->poly[i]->vlist->vtx[idx]; - } - vesicle->poly_list->poly[i]->vlist->vtx[j]->bond=(ts_bond **)calloc(vesicle->poly_list->poly[i]->vlist->vtx[j]->bond_no, sizeof(ts_bond *)); - for(k=0;k<vesicle->poly_list->poly[i]->vlist->vtx[j]->bond_no;k++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->poly_list->poly[i]->vlist->vtx[j]->bond[k]=vesicle->poly_list->poly[i]->blist->bond[idx]; - } - - } - /* restore grafted vtx on vesicle and grafted_poly */ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->vlist->vtx[idx]->grafted_poly=vesicle->poly_list->poly[i]; - vesicle->poly_list->poly[i]->grafted_vtx=vesicle->vlist->vtx[idx]; - } - - /* restore poly bonds between monomers list*/ - for(i=0;i<vesicle->poly_list->n;i++){ - for(j=0;j<vesicle->poly_list->poly[i]->blist->n;j++){ - // vesicle->poly_list->poly[i]->blist->bond[j]=(ts_bond *)malloc(sizeof(ts_bond)); - retval=fread(vesicle->poly_list->poly[i]->blist->bond[j],sizeof(ts_bond),1,fh); - /* restore vtx1 and vtx2 */ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->poly_list->poly[i]->blist->bond[j]->vtx1=vesicle->poly_list->poly[i]->vlist->vtx[idx]; - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->poly_list->poly[i]->blist->bond[j]->vtx2=vesicle->poly_list->poly[i]->vlist->vtx[idx]; - } - } - - /*restore filaments */ - vesicle->filament_list->poly = (ts_poly **)calloc(vesicle->filament_list->n,sizeof(ts_poly *)); - for(i=0;i<vesicle->filament_list->n;i++){ - vesicle->filament_list->poly[i]=(ts_poly *)calloc(1,sizeof(ts_poly)); - retval=fread(vesicle->filament_list->poly[i],sizeof(ts_poly),1,fh); - vesicle->filament_list->poly[i]->vlist=(ts_vertex_list *)calloc(1,sizeof(ts_vertex_list)); - retval=fread(vesicle->filament_list->poly[i]->vlist,sizeof(ts_vertex_list),1,fh); - vesicle->filament_list->poly[i]->blist=(ts_bond_list *)calloc(1,sizeof(ts_bond_list)); - retval=fread(vesicle->filament_list->poly[i]->blist,sizeof(ts_bond_list),1,fh); - /* initialize adress space for pointers that will hold specific vertices (monomers) and bonds */ - vesicle->filament_list->poly[i]->vlist->vtx=(ts_vertex **)calloc(vesicle->filament_list->poly[i]->vlist->n,sizeof(ts_vertex *)); - vesicle->filament_list->poly[i]->blist->bond=(ts_bond **)calloc(vesicle->filament_list->poly[i]->blist->n,sizeof(ts_bond *)); - for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++){ - vesicle->filament_list->poly[i]->vlist->vtx[j]=(ts_vertex *)malloc(sizeof(ts_vertex)); - } - for(j=0;j<vesicle->filament_list->poly[i]->blist->n;j++){ - vesicle->filament_list->poly[i]->blist->bond[j]=(ts_bond *)malloc(sizeof(ts_bond)); - } - - } - - - /* restore poly vertex(monomer) list*/ - for(i=0;i<vesicle->filament_list->n;i++){ - for(j=0;j<vesicle->filament_list->poly[i]->vlist->n;j++){ - retval=fread(vesicle->filament_list->poly[i]->vlist->vtx[j],sizeof(ts_vertex),1,fh); - - /* restore neigh and bonds */ - vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh=(ts_vertex **)calloc(vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh_no, sizeof(ts_vertex *)); - for(k=0;k<vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh_no;k++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->filament_list->poly[i]->vlist->vtx[j]->neigh[k]=vesicle->filament_list->poly[i]->vlist->vtx[idx]; - } - vesicle->filament_list->poly[i]->vlist->vtx[j]->bond=(ts_bond **)calloc(vesicle->filament_list->poly[i]->vlist->vtx[j]->bond_no, sizeof(ts_bond *)); - for(k=0;k<vesicle->filament_list->poly[i]->vlist->vtx[j]->bond_no;k++){ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->filament_list->poly[i]->vlist->vtx[j]->bond[k]=vesicle->filament_list->poly[i]->blist->bond[idx]; - } - - } - } - - /* restore poly bonds between monomers list*/ - for(i=0;i<vesicle->filament_list->n;i++){ - for(j=0;j<vesicle->filament_list->poly[i]->blist->n;j++){ - // vesicle->poly_list->poly[i]->blist->bond[j]=(ts_bond *)malloc(sizeof(ts_bond)); - retval=fread(vesicle->filament_list->poly[i]->blist->bond[j],sizeof(ts_bond),1,fh); - /* restore vtx1 and vtx2 */ - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->filament_list->poly[i]->blist->bond[j]->vtx1=vesicle->filament_list->poly[i]->vlist->vtx[idx]; - retval=fread(&idx,sizeof(ts_uint),1,fh); - vesicle->filament_list->poly[i]->blist->bond[j]->vtx2=vesicle->filament_list->poly[i]->vlist->vtx[idx]; - } - } - vesicle->tape=parsetape(command_line_args.tape_fullfilename); -// recreating space for cells // - vesicle->clist=init_cell_list(vesicle->tape->ncxmax, vesicle->tape->ncymax, vesicle->tape->nczmax, vesicle->tape->stepsize); - vesicle->clist->max_occupancy=16; -// vesicle->tape=(ts_tape *)malloc(sizeof(ts_tape)); -// retval=fread(vesicle->tape, sizeof(ts_tape),1,fh); - retval=fread(iteration,sizeof(ts_uint),1,fh); - if(retval); - fclose(fh); - return vesicle; -} - ts_bool parse_args(int argc, char **argv){ @@ -624,200 +208,6 @@ fprintf(fd,"trisurf --restore-from-vtk filename.vtu\n"); fprintf(fd,"\n\n"); - return TS_SUCCESS; -} - - - -ts_bool print_vertex_list(ts_vertex_list *vlist){ - ts_uint i; - printf("Number of vertices: %u\n",vlist->n); - for(i=0;i<vlist->n;i++){ - printf("%u: %f %f %f\n", -vlist->vtx[i]->idx,vlist->vtx[i]->x, vlist->vtx[i]->y, vlist->vtx[i]->z); - } - return TS_SUCCESS; -} - -ts_bool print_vertex_neighbours(ts_vertex_list *vlist){ - ts_uint i,j; - ts_vertex **vtx=vlist->vtx; - printf("Vertex id(neigh no): (neighvertex coord) (neighvertex coord) ...\n"); - for(i=0;i<vlist->n;i++){ - printf("%u(%u): ",vtx[i]->idx,vtx[i]->neigh_no); - for(j=0;j<vtx[i]->neigh_no;j++){ - printf("(%f,%f,%f)",vtx[i]->neigh[j]->x, -vtx[i]->neigh[j]->y,vtx[i]->neigh[j]->z); - } - printf("\n"); - } - -return TS_SUCCESS; -} - -ts_bool write_vertex_fcompat_file(ts_vertex_list *vlist,ts_char *filename){ - ts_vertex **vtx=vlist->vtx; - ts_uint i; - FILE *fh; - - fh=fopen(filename, "w"); - if(fh==NULL){ - err("Cannot open file %s for writing"); - return TS_FAIL; - } - for(i=0;i<vlist->n;i++) - fprintf(fh," %E\t%E\t%E\n",vtx[i]->x,vtx[i]->y, vtx[i]->z); - - fclose(fh); -return TS_SUCCESS; -} - - -ts_bool fprint_vertex_list(FILE *fh,ts_vertex_list *vlist){ - ts_uint i,j; - for(i=0;i<vlist->n;i++){ - fprintf(fh," %.17E\t%.17E\t%.17E\t%u\n",vlist->vtx[i]->x, - vlist->vtx[i]->y, vlist->vtx[i]->z, - vlist->vtx[i]->neigh_no); - for(j=0;j<vlist->vtx[i]->neigh_no;j++){ - fprintf(fh,"\t%u",(ts_uint)(vlist->vtx[i]->neigh[j]->idx)); - //-vlist->vtx+1)); - } - fprintf(fh,"\n"); - } - return TS_SUCCESS; -} - -ts_bool fprint_tristar(FILE *fh, ts_vesicle *vesicle){ - ts_uint i,j; - for(i=0;i<vesicle->vlist->n;i++){ - fprintf(fh,"\t%u",vesicle->vlist->vtx[i]->tristar_no); - for(j=0;j<vesicle->vlist->vtx[i]->tristar_no;j++){ - fprintf(fh,"\t%u",(ts_uint)(vesicle->vlist->vtx[i]->tristar[j]->idx));//-vesicle->tlist->tria+1)); - } - fprintf(fh,"\n"); - } - return TS_SUCCESS; -} - -ts_bool fprint_triangle_list(FILE *fh, ts_vesicle *vesicle){ - ts_triangle_list *tlist=vesicle->tlist; - ts_uint i,j; - for(i=0;i<tlist->n;i++){ - fprintf(fh,"\t%u",tlist->tria[i]->neigh_no); - for(j=0;j<tlist->tria[i]->neigh_no;j++){ - fprintf(fh,"\t%u",(ts_uint)(tlist->tria[i]->neigh[j]->idx));//-tlist->tria+1)); - } - fprintf(fh,"\n"); - for(j=0;j<3;j++){ - fprintf(fh,"\t%u",(ts_uint)(tlist->tria[i]->vertex[j]->idx));//-vesicle->vlist->vtx+1)); - } - fprintf(fh,"\n"); - fprintf(fh,"%.17E\t%.17E\t%.17E\n",tlist->tria[i]->xnorm, -tlist->tria[i]->ynorm,tlist->tria[i]->znorm); - fprintf(fh,"0.00000000000000000\n0.00000000000000000\n"); - } - return TS_SUCCESS; -} - -ts_bool fprint_vertex_data(FILE *fh,ts_vertex_list *vlist){ - ts_uint i,j; - for(i=0;i<vlist->n;i++){ - fprintf(fh," %.17E\t%.17E\t%.17E\t%.17E\t%.17E\t%u\n", - vlist->vtx[i]->xk,vlist->vtx[i]->c,vlist->vtx[i]->energy, - vlist->vtx[i]->energy_h, vlist->vtx[i]->curvature, 0); - for(j=0;j<vlist->vtx[i]->bond_no;j++){ - fprintf(fh," %.17E", vlist->vtx[i]->bond[j]->bond_length_dual); - } - fprintf(fh,"\n"); - for(j=0;j<vlist->vtx[i]->bond_no;j++){ - fprintf(fh," %.17E", vlist->vtx[i]->bond[j]->bond_length); - } - fprintf(fh,"\n"); - } - return TS_SUCCESS; -} - -ts_bool fprint_bonds(FILE *fh,ts_vesicle *vesicle){ - ts_uint i; - for(i=0;i<vesicle->blist->n;i++){ - fprintf(fh,"\t%u\t%u\n",(ts_uint)(vesicle->blist->bond[i]->vtx1->idx), -//-vesicle->vlist->vtx+1), - (ts_uint)(vesicle->blist->bond[i]->vtx2->idx)); - //-vesicle->vlist.vtx+1)); - } - return TS_SUCCESS; -} - - -ts_bool write_dout_fcompat_file(ts_vesicle *vesicle, ts_char *filename){ - FILE *fh; - fh=fopen(filename, "w"); - if(fh==NULL){ - err("Cannot open file %s for writing"); - return TS_FAIL; - } - fprintf(fh,"%.17E\n%.17E\n",vesicle->stepsize,vesicle->dmax); - fprint_vertex_list(fh,vesicle->vlist); - fprint_tristar(fh,vesicle); - fprint_triangle_list(fh,vesicle); - fprint_vertex_data(fh,vesicle->vlist); - fprint_bonds(fh,vesicle); - fclose(fh); - return TS_SUCCESS; -} - -ts_bool read_tape_fcompat_file(ts_vesicle *vesicle, ts_char *filename){ - FILE *fh; - char line[255]; - fh=fopen(filename, "r"); - if(fh==NULL){ - err("Cannot open file for reading... Nonexistant file?"); - return TS_FAIL; - } - ts_uint retval=1; - while(retval!=EOF){ - retval=fscanf(fh,"%s",line); - - fprintf(stderr,"%s",line); - } - fclose(fh); - return TS_SUCCESS; -} - -ts_bool write_master_xml_file(ts_char *filename){ - FILE *fh; - ts_char *i,*j; - ts_uint tstep; - ts_char *number; - fh=fopen(filename, "w"); - if(fh==NULL){ - err("Cannot open file %s for writing"); - return TS_FAIL; - } - - fprintf(fh,"<?xml version=\"1.0\"?>\n<VTKFile type=\"Collection\" version=\"0.1\" byte_order=\"LittleEndian\" compressor=\"vtkZLibDataCompressor\">\n<Collection>"); - DIR *dir = opendir(command_line_args.path); - if(dir){ - struct dirent *ent; - tstep=0; - while((ent = readdir(dir)) != NULL) - { - i=rindex(ent->d_name,'.'); - if(i==NULL) continue; - if(strcmp(i+1,"vtu")==0){ - j=rindex(ent->d_name,'_'); - if(j==NULL) continue; - number=strndup(j+1,j-i); - fprintf(fh,"<DataSet timestep=\"%u\" group=\"\" part=\"0\" file=\"%s\"/>\n",atoi(number),ent->d_name); - tstep++; - free(number); - } - } - } - free(dir); - fprintf(fh,"</Collection>\n</VTKFile>\n"); - fclose(fh); return TS_SUCCESS; } @@ -1069,51 +459,6 @@ } -ts_bool write_vertex_vtk_file(ts_vesicle *vesicle,ts_char *filename, ts_char *text){ - ts_vertex_list *vlist=vesicle->vlist; - ts_bond_list *blist=vesicle->blist; - ts_vertex **vtx=vlist->vtx; - ts_uint i; - FILE *fh; - - fh=fopen(filename, "w"); - if(fh==NULL){ - err("Cannot open file %s for writing"); - return TS_FAIL; - } - /* Here comes header of the file */ -// fprintf(stderr,"NSHELL=%u\n",nshell); - fprintf(fh, "# vtk DataFile Version 2.0\n"); - /* TODO: Do a sanity check on text. Max 255 char, must not me \n terminated */ - fprintf(fh, "%s\n", text); - fprintf(fh,"ASCII\n"); - fprintf(fh,"DATASET UNSTRUCTURED_GRID\n"); - fprintf(fh,"POINTS %u double\n", vlist->n); - for(i=0;i<vlist->n;i++){ - fprintf(fh,"%e %e %e\n",vtx[i]->x,vtx[i]->y, vtx[i]->z); - } - - fprintf(fh,"CELLS %u %u\n",blist->n,3*blist->n); - for(i=0;i<blist->n;i++){ - fprintf(fh,"2 %u %u\n",blist->bond[i]->vtx1->idx,blist->bond[i]->vtx2->idx); - } - fprintf(fh,"CELL_TYPES %u\n",blist->n); - for(i=0;i<blist->n;i++) - fprintf(fh,"3\n"); - - fprintf(fh,"POINT_DATA %u\n", vlist->n); - fprintf(fh,"SCALARS scalars long 1\n"); - fprintf(fh,"LOOKUP_TABLE default\n"); - - for(i=0;i<vlist->n;i++) - fprintf(fh,"%u\n",vtx[i]->idx); - - fclose(fh); - return TS_SUCCESS; -} - - - ts_bool write_pov_file(ts_vesicle *vesicle, char *filename){ FILE *fh; ts_uint i; @@ -1302,53 +647,5 @@ break; } - return TS_SUCCESS; -} - - - -ts_bool read_geometry_file(char *fname, ts_vesicle *vesicle){ - FILE *fh; - ts_uint i, nvtx,nedges,ntria; - ts_uint vtxi1,vtxi2; - float x,y,z; - ts_vertex_list *vlist; - fh=fopen(fname, "r"); - if(fh==NULL){ - err("Cannot open file for reading... Nonexistant file?"); - return TS_FAIL; - } - ts_uint retval; - retval=fscanf(fh,"%u %u %u",&nvtx, &nedges, &ntria); - vesicle->vlist=init_vertex_list(nvtx); - vlist=vesicle->vlist; - for(i=0;i<nvtx;i++){ - // fscanf(fh,"%F %F %F",&vlist->vtx[i]->x,&vlist->vtx[i]->y,&vlist->vtx[i]->z); - retval=fscanf(fh,"%F %F %F",&x,&y,&z); - vlist->vtx[i]->x=x; - vlist->vtx[i]->y=y; - vlist->vtx[i]->z=z; - } - for(i=0;i<nedges;i++){ - retval=fscanf(fh,"%u %u",&vtxi1,&vtxi2); - bond_add(vesicle->blist,vesicle->vlist->vtx[vtxi1-1],vesicle->vlist->vtx[vtxi2-1]); - } - //TODO: neighbours from bonds, - //TODO: triangles from neigbours - -// Don't need to read triangles. Already have enough data - /* - for(i=0;i<ntria;i++){ - retval=fscanf(fh,"%u %u %u", &bi1, &bi2, &bi3); - vtxi1=vesicle->blist->vertex1->idx; - vtxi2=vesicle->blist->vertex1->idx; - - } - */ - if(retval); - fclose(fh); - - - return TS_SUCCESS; } diff --git a/src/io.h b/src/io.h index 6ca8331..16bacfb 100644 --- a/src/io.h +++ b/src/io.h @@ -27,53 +27,13 @@ -/** @brief Prints the position of vertices for the whole list - * - * The function is meant more or less as a debug tool, but can be used in production - * environment aswell. - * the output is in form of idx: x y z - * @param *vlist is a structure holding information on vertex list. - * @returns TS_SUCCESS on successful execution, TS_FAIL otherwise. -*/ - -ts_bool print_vertex_list(ts_vertex_list *vlist); - -/** @brief Prints the neighbours of all the vertices - * - * The function is meant more or less as a debug tool, but can be used in production - * environment aswell. - * the output is in form of idx(number of neighbours): (x1,y1,z1) (x2,y2,z2) ... - * @param *vlist is a structure holding information on vertex list. - * @returns TS_SUCCESS on successful execution, TS_FAIL otherwise. -*/ -ts_bool print_vertex_neighbours(ts_vertex_list *vlist); - - -/** @brief Function outputs the vetex list file to comply to old fortran format - * - * @param *vlist is a list of vertices - * @param *filename is a name of the output file to be created (note that if the file already - * exists it will be overwritten. - */ -ts_bool write_vertex_fcompat_file(ts_vertex_list *vlist,ts_char *filename); -ts_bool fprint_vertex_list(FILE *fh,ts_vertex_list *vlist); -ts_bool fprint_tristar(FILE *fh, ts_vesicle *vesicle); -ts_bool fprint_triangle_list(FILE *fh, ts_vesicle *vesicle); -ts_bool fprint_vertex_data(FILE *fh,ts_vertex_list *vlist); -ts_bool fprint_bonds(FILE *fh,ts_vesicle *vesicle); -ts_bool write_dout_fcompat_file(ts_vesicle *vesicle, ts_char *filename); -ts_bool read_tape_fcompat_file(ts_vesicle *vesicle, ts_char *filename); - - -/** @brief Outputs file in vtk format, compatible with paraview. +/** @brief Outputs file in newer vtk xml format, compatible with paraview. * - * @param *vlist is a list of vertices - * @param *filename is a name of the output file. If exists, it will be overwritten - * @param *text is a description line (max. 255 characters) to be included in the file + * @param *vesicle is a list of vertices + * @param *timestepno is a timestep number. Output file will be timestep_XXXXXX.vtu + * @param *cstlist TO BE DOCUMENTED */ -ts_bool write_vertex_vtk_file(ts_vesicle *vesicle,ts_char *filename, ts_char *text); ts_bool write_vertex_xml_file(ts_vesicle *vesicle, ts_uint timestepno, ts_cluster_list *cstlist); -ts_bool write_master_xml_file(ts_char *filename); ts_bool write_pov_file(ts_vesicle *vesicle, char *filename); ts_tape *parsetape(char *filename); @@ -82,6 +42,4 @@ ts_bool getcmdline_tape(cfg_t *cfg, char *opts); ts_bool cmdline_to_tape(cfg_t *cfg, char *key, char *val); ts_bool print_help(FILE *fd); -ts_bool dump_state(ts_vesicle *vesicle, ts_uint iteration); -ts_vesicle *restore_state(ts_uint *iteration); #endif diff --git a/src/main.c b/src/main.c index 3f91f43..47cf2a8 100644 --- a/src/main.c +++ b/src/main.c @@ -26,8 +26,8 @@ */ int main(int argv, char *argc[]){ - ts_vesicle *vesicle; - ts_tape *tape; + ts_vesicle *vesicle=NULL; + ts_tape *tape=NULL; ts_uint start_iteration=0; force_from_tape=0; /* Area and volume for constant area and constant volume are initialized to be zero */ @@ -62,9 +62,6 @@ } else ts_fprintf(stdout,"No .status file. The iteration count will start from 0\n"); -/* Here you should read new tape file, reassign some values in vertex from the tape and assign read tape to vesicle->tape */ -// tape=parsetape(command_line_args.tape_fullfilename); - // vesicle=vtk2vesicle(command_line_args.dump_from_vtk,tape); } else if(command_line_args.force_from_tape){ ts_fprintf(stdout,"************************************************\n"); @@ -77,63 +74,10 @@ ts_fprintf(stdout,"**********************************************************************\n"); ts_fprintf(stdout,"**** Recreating vesicle from dump file and continuing simulation *****\n"); ts_fprintf(stdout,"**********************************************************************\n\n"); - tape=parsetape(command_line_args.tape_fullfilename); - vesicle=restore_state(&start_iteration); - if(vesicle==NULL){ - ts_fprintf(stderr, "Dump file does not exist or is not a regular file! Did you mean to invoke trisurf with --force-from-tape option?\n\n"); - return 1; - } - // nove vrednosti iz tapea... - vesicle->bending_rigidity=tape->xk0; - vtx_set_global_values(vesicle); - vesicle->pswitch =tape->pswitch; - vesicle->pressure=tape->pressure; - vesicle->dmax=tape->dmax*tape->dmax; - poly_assign_filament_xi(vesicle,tape); - free(vesicle->tape); - vesicle->tape=tape; - vesicle->clist->dmin_interspecies = tape->dmin_interspecies*tape->dmin_interspecies; - - - - /* spherical harmonics */ - if(tape->shc>0){ - vesicle->sphHarmonics=complex_sph_init(vesicle->vlist,tape->shc); - } - else { - vesicle->sphHarmonics=NULL; - } - - if(command_line_args.reset_iteration_count) start_iteration=tape->inititer; - else start_iteration++; - - if(start_iteration>=tape->iterations){ - ts_fprintf(stdout, "Simulation already completed. if you want to rerun it try with --force-from-tape or --reset-iteration-count\n\n"); - return 0; - } - - /* if requested in tape, we can have smaller number of polymeres attached to membrane than the number of polymeres in dump file */ - if(vesicle->tape->npoly != vesicle->poly_list->n){ - - ts_fprintf(stdout,"(INFO) the number of polymeres attached to membrane in tape is different than a number of polymeres in dump file!\n"); - if(vesicle->tape->npoly > vesicle->poly_list->n){ - ts_fprintf(stdout,"(INFO) It is possible to decrease the number of polymeres on the membrane, but it is not allowed to increase its number. The maximal allowed number in tape is %d The execution of program will terminate!\n",vesicle->poly_list->n); - fatal("Terminating due to increase of number of polymeres",1); - } else { - remove_random_polymeres(vesicle->poly_list, vesicle->poly_list->n - vesicle->tape->npoly); - ts_fprintf(stdout,"(INFO)\n(INFO) The new number of polymeres from tape is %d.\n\n",vesicle->poly_list->n); - - } - } + ts_fprintf(stderr, "Dump file does not exist or is not a regular file! Did you mean to invoke trisurf with --force-from-tape or --restore-from-vtk option?\n\n"); + fatal("Recreating vesicle from binary dump file not supported anymore. Sorry.",254); } - //printf("nucleus coords: %.17e %.17e %.17e\n",vesicle->nucleus_center[0], vesicle->nucleus_center[1], vesicle->nucleus_center[2]); -// write_vertex_xml_file(vesicle,0); -// exit(1); - - //write_vertex_xml_file(vesicle,1000); run_simulation(vesicle, tape->mcsweeps, tape->inititer, tape->iterations, start_iteration); - write_master_xml_file(command_line_args.output_fullfilename); - write_dout_fcompat_file(vesicle,"dout"); vesicle_free(vesicle); tape_free(tape); return 0; //program finished perfectly ok. We return 0. diff --git a/src/shdiscover.c b/src/shdiscover.c deleted file mode 100644 index cf155ac..0000000 --- a/src/shdiscover.c +++ /dev/null @@ -1,82 +0,0 @@ -/* vim: set ts=4 sts=4 sw=4 noet : */ -#include "general.h" -#include "vertex.h" -#include "initial_distribution.h" -#include "io.h" -#include "vesicle.h" -#include "sh.h" -#include "frame.c" -#include <math.h> -#include <stdlib.h> -int main(int argc, char *argv[]){ - -ts_fprintf(stdout,"SHdiscover was called with %d coefficients!\n",argc-1); -ts_uint n,i,j,l; -ts_int m; -ts_double fi,theta,r,Y; -ts_vesicle *vesicle=initial_distribution_dipyramid(17,60,60,60,0.15); -ts_vertex_list *vlist=vesicle->vlist; -centermass(vesicle); -ts_fprintf(stdout,"Vesicle has a CenterMass in %f,%f,%f\n",vesicle->cm[0],vesicle->cm[1], vesicle->cm[2]); - -n=vlist->n; - -ts_fprintf(stdout,"Tests\n"); -ts_fprintf(stdout,"P(0,0,0.5)=%f (%f)\n",plgndr(0,0,0.5),1.0); -ts_fprintf(stdout,"P(1,0,0.5)=%f (%f)\n",plgndr(1,0,0.5),0.5); -ts_fprintf(stdout,"P(2,0,0.5)=%f (%f)\n",plgndr(2,0,0.5),0.5*(3*0.5*0.5-1)); -ts_fprintf(stdout,"P(2,2,0.5)=%f (ni to:%f)\n",plgndr(2,2,0.5),0.5*(3*0.5*0.5-1)); - -ts_fprintf(stdout,"Y(0,0,pi/6,pi/4)=%f (%f)\n",shY(0,0,M_PI/6,M_PI/4),sqrt(1/(4*M_PI))); -ts_fprintf(stdout,"Y(1,0,pi/6,pi/4)=%f (%f)\n",shY(1,0,M_PI/6,M_PI/4),sqrt(3/(4*M_PI))*cos(M_PI/6)); -ts_fprintf(stdout,"Y(1,0,4*pi/6,6*pi/4)=%f (%f)\n",shY(1,0,4*M_PI/6,6*M_PI/4),sqrt(3/(4*M_PI))*cos(4*M_PI/6)); -ts_fprintf(stdout,"Y(1,1,pi/6,pi/4)=%f (%f)\n",shY(1,1,M_PI/6,M_PI/4),-sqrt(3/(8*M_PI))*sin(M_PI/6)*cos(M_PI/4)); -ts_fprintf(stdout,"Y(2,0,pi/6,pi/4)=%f (%f)\n",shY(2,0,M_PI/6,M_PI/4),sqrt(5/(4*M_PI))*(3.0/2.0*cos(M_PI/6)*cos(M_PI/6)-1.0/2.0)); -ts_fprintf(stdout,"Y(2,-2,pi/6,pi/4)=%f (0)\n",shY(2,-2,M_PI/6,M_PI/4)); -ts_fprintf(stdout,"Y(2,2,pi/6,pi/3)=%f (%f)\n",shY(2,2,M_PI/6,M_PI/3), sqrt(15.0/(32.0*M_PI))*sin(M_PI/6)*sin(M_PI/6)*cos(2*M_PI/3)); - - for(j=1;j<argc;j++){ - l=(int)sqrt(j-1); /* determine l from dataline */ - m=j-1-l*(l+1); /* determine m from dataline */ - ts_fprintf(stdout,"l=%d, m=%d, u=%s\n",l,m,argv[j]); - } - -/*we calculate new position of each vertex of vesicle */ -for(i=0;i<n;i++){ - fi=atan2(vlist->vtx[i]->y, vlist->vtx[i]->x); -/* theta=atan2( - sqrt(vlist->vtx[i]->data->x*vlist->vtx[i]->data->x + - vlist->vtx[i]->data->y*vlist->vtx[i]->data->y), - vlist->vtx[i]->data->z - ); */ - theta=acos( - vlist->vtx[i]->z / - sqrt(vlist->vtx[i]->x*vlist->vtx[i]->x + - vlist->vtx[i]->y*vlist->vtx[i]->y+ - vlist->vtx[i]->z*vlist->vtx[i]->z) - - ); - - - - r=0.0; - for(j=1;j<argc;j++){ - l=(int)sqrt(j-1); /* determine l from dataline */ - m=j-1-l*(l+1); /* determine m from dataline */ - Y=shY(l,m,theta,fi); - r+=fabs(atof(argv[j])*Y); - /*ts_fprintf(stdout,"l=%d, m=%d, u=%s\n",l,m,argv[j]);*/ - } - - vlist->vtx[i]->z=fabs(r)*cos(theta); - vlist->vtx[i]->x=fabs(r)*sin(theta)*cos(fi); - vlist->vtx[i]->y=fabs(r)*sin(theta)*sin(fi); -} - -write_vertex_xml_file(vesicle,0); -write_master_xml_file("test.pvd"); - - -vesicle_free(vesicle); -return 0; -} diff --git a/src/spherical_trisurf.c b/src/spherical_trisurf.c deleted file mode 100644 index 06a84f4..0000000 --- a/src/spherical_trisurf.c +++ /dev/null @@ -1,107 +0,0 @@ -/* vim: set ts=4 sts=4 sw=4 noet : */ -#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,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; -vesicle->stepsize=0.15; -vesicle->clist->max_occupancy=8; -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); -r0=getR0(vesicle); - -preparationSh(vesicle,r0); -calculateYlmi(vesicle); -calculateUlm(vesicle); - -//preloop: -ts_double vmsr, bfsr; -for(i=0;i<1000;i++){ - cell_occupation(vesicle); - for(j=0;j<1000;j++){ - single_timestep(vesicle, &vmsr, &bfsr); - } - centermass(vesicle); - fprintf(stderr, "Preloop %d completed.\n",i+1); -} - -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); - - preparationSh(vesicle,r0); - calculateYlmi(vesicle); - calculateUlm(vesicle); - - storeUlm2(vesicle); - saveAvgUlm2(vesicle); - - write_vertex_xml_file(vesicle,i); - 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); - -return 0; //program finished perfectly ok. We return 0. -} - - - diff --git a/src/spherical_trisurf_ff.c b/src/spherical_trisurf_ff.c deleted file mode 100644 index 8a0902f..0000000 --- a/src/spherical_trisurf_ff.c +++ /dev/null @@ -1,90 +0,0 @@ -/* vim: set ts=4 sts=4 sw=4 noet : */ -#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); -ts_double vmsr,bfsr; -for(i=0;i<500;i++){ - cell_occupation(vesicle); - for(j=0;j<1000;j++){ - single_timestep(vesicle,&vmsr,&bfsr); - } - 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,&vmsr,&bfsr); - } - 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. -} - - diff --git a/src/timestep.c b/src/timestep.c index 81101bf..2202982 100644 --- a/src/timestep.c +++ b/src/timestep.c @@ -124,7 +124,6 @@ bfsr/=(ts_double)mcsweeps; centermass(vesicle); cell_occupation(vesicle); - dump_state(vesicle,i); vesicle_volume(vesicle); //calculates just volume. vesicle_area(vesicle); //calculates area. if(vesicle->tape->constvolswitch==0){ @@ -135,7 +134,6 @@ } if(i>=inititer){ write_vertex_xml_file(vesicle,i-inititer,NULL); - write_master_xml_file(command_line_args.output_fullfilename); epochtime=get_epoch(); gyration_eigen(vesicle, &l1, &l2, &l3); //r0=getR0(vesicle); -- Gitblit v1.9.3