Trisurf Monte Carlo simulator
Samo Penic
2014-02-11 23d807748be58e5178c04304d9cc788bf122eb12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<stdlib.h>
#include<unistd.h>
#include"general.h"
#include"vesicle.h"
#include "memory.h"
 
ts_bool init_memory_block(ts_memory *mem){
/* calculate number of bonds, triangles */
ts_uint nbonds=3*(mem->vertex_no-2);
ts_uint ntria=2*(mem->vertex_no-2);
ts_uint ncells=mem->ncmax[0]*mem->ncmax[1]*mem->ncmax[2];
 
ts_uint memsize=sizeof(ts_vesicle)+
  sizeof(ts_vertex_list)+ sizeof(ts_bond_list)+ sizeof(ts_triangle_list) +
  sizeof(ts_cell_list) +
  mem->vertex_no*(sizeof(ts_vertex)+sizeof(ts_vertex *)) +
  nbonds*(sizeof(ts_bond)+sizeof(ts_bond *))+
  ntria*(sizeof(ts_triangle)+ sizeof(ts_triangle *))+
  ncells*(sizeof(ts_cell)+ sizeof(ts_cell *))+
  MAX_VTXNEIGH*mem->vertex_no*sizeof(ts_vertex *)+
  MAX_TRISTAR*mem->vertex_no*sizeof(ts_triangle *)+
  MAX_VTXNEIGH*mem->vertex_no*sizeof(ts_bond *)+
  3*ntria*sizeof(ts_triangle *)+
  MAX_CELL_OCCUPANCY*ncells*sizeof(ts_vertex *);
/* here add size of memory for additional structures!!! */ 
printf("The page size for this system is %ld bytes.\n",
           sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */
 
printf("We need to initialize %d B of memory to hold info about vesicle\n",memsize);
 
void *ptr=calloc(1,memsize);
 
    if(ptr==NULL) fatal("Couldn't initialize memory block in memory.c", TS_ERR_MEM_ALLOC);
 
/*initialize pointers */
void *rptr=ptr;
//Vesicle and basic lists
mem->vesicle=(ts_vesicle *)rptr;
rptr+=sizeof(ts_vesicle);
mem->vlist=(ts_vertex_list *)rptr;
rptr+=sizeof(ts_vertex_list);
mem->blist=(ts_bond_list *)rptr;
rptr+=sizeof(ts_bond_list);
mem->tlist=(ts_triangle_list *)rptr;
rptr+=sizeof(ts_triangle_list);
mem->clist=(ts_cell_list *)rptr;
rptr+=sizeof(ts_cell_list);
 
//Vertex related memory
mem->vtx_ptr=(ts_vertex **)rptr;
rptr+=mem->vertex_no*sizeof(ts_vertex *);
mem->vtx=(ts_vertex *)rptr;
rptr+=mem->vertex_no*sizeof(ts_vertex);
mem->vtx_neighbours_ptr=(ts_vertex **)rptr;
rptr+=mem->vertex_no*MAX_VTXNEIGH*sizeof(ts_vertex *);
mem->tristar=(ts_triangle **)rptr;
rptr+=mem->vertex_no*MAX_TRISTAR*sizeof(ts_triangle *);
mem->vtx_neighbond=(ts_bond **)rptr;
rptr+=mem->vertex_no*MAX_VTXNEIGH*sizeof(ts_bond *);
 
 
//Bond related memory
mem->bond_ptr=(ts_bond **)rptr;
rptr+=nbonds*sizeof(ts_bond *);
mem->bond=(ts_bond *)rptr;
rptr+=nbonds*sizeof(ts_bond);
 
 
//Triangle related memory
mem->tria_ptr=(ts_triangle **)rptr;
rptr+=ntria*sizeof(ts_triangle *);
mem->tria=(ts_triangle *)rptr;
rptr+=ntria*sizeof(ts_triangle);
mem->trianeigh=(ts_triangle **)rptr;
rptr+=ntria*3*sizeof(ts_triangle *);
 
//Cell related memory
mem->cell_ptr=(ts_cell **)rptr;
rptr+=ncells*sizeof(ts_cell *);
mem->cell=(ts_cell *)rptr;
rptr+=ncells*sizeof(ts_cell);
mem->cell_ocupancy=(ts_vertex **)rptr;
rptr+= MAX_CELL_OCCUPANCY*ncells*sizeof(ts_vertex *);
printf("Ptr diff in b=%ld\n",(rptr-ptr));
    
return TS_SUCCESS;
}