Trisurf Monte Carlo simulator
Samo Penic
2014-03-05 719c9febac2eaff9483fda487b57684afbb59bb2
commit | author | age
d7639a 1 #ifndef _GENERAL_H
SP 2 #define _GENERAL_H
3
4 #include<stdarg.h>
7958e9 5 #include<stdio.h>
d7639a 6
SP 7 /* @brief This is a header file, defining general constants and structures.
8   * @file header.h
9   * @author Samo Penic
10   * @date 5.3.2001
311301 11   * 
d7639a 12   * Header file for general inclusion in all the code, defining data structures
SP 13   * and general constans. All datatypes used in the code is also defined here.
14   *
311301 15   * Miha: branch trisurf-polyel
d7639a 16   */
SP 17
18 /* Defines */
19 /** @brief Return value of type bz_bool that indiceates successful function finish 
20   *
21   * Function usualy return some value, which are the result of certain operation. Functions that don't
22   * return any parameters can return value, that indicates if the function call finished successfully.
23   * In case of successful function run, the functions should return TS_SUCCESS to the caller. This define
24   * is set here to get uniformity among all the functions used in program.
25   *
26   * Example of usage:
27   *        ts_boot somefunction(ts_int param1, ....){
28   *            ...
29   *            return TS_SUCCESS;
30   *        }
31   */
32 #define TS_SUCCESS 0
33
34 /** @brief Return value of type bz_bool that indicates unsuccessful function finish 
35   *
36   * Function usualy return some value, which are the result of certain operation. Functions that don't
37   * return any parameters can return value, that indicates if the function call finished successfully.
38   * In case of unsuccessful function run, the functions should return TS_FAIL to the caller. This define
39   * is set here to get uniformity among all the functions used in program.
40   *
41   * Example of usage:
42   *
43   *        ts_boot somefunction(ts_int param1, ....){
44   *            ...
45   *            return TS_FAIL;
46   *        }
47   */
48 #define TS_FAIL 1
49
50 /* CONSTANTS */
51
52 /* DATA TYPES */
53 /** @brief Sets the default datatype for ts_double
54  *
55  * Requred for some functions to work, like "pow" from math.h. If ts_double is defined as
56  * float program must run with "powf". Where type dependant function is used it checks this
57  * define directive to decide which version to compile in. Available options
58  *
59  *    TS_DOUBLE_FLOAT
60  *    TS_DOUBLE_DOUBLE
61  *    TS_DOUBLE_LONGDOUBLE
62 */
63 #define TS_DOUBLE_DOUBLE
64
bba37c 65 /** @brief Constant defines the size by which vertex_list expands at once, so expansion is not needed each time new data arrives. Also
SP 66  * vlist will be decreased by same steps.
67  */
8ed8fd 68 #define TS_VLIST_CHUNK 7
bba37c 69
d7639a 70 /** For the purpose of greater flexibility all data types used in the program
SP 71  *  shouldn't use standard C types, but should use types defined here.
72  *    ts_int (uses int)
73  */
74 typedef int ts_int;
75 /** For the purpose of greater flexibility all data types used in the program
76  *  shouldn't use standard C types, but should use types defined here.
77  *    ts_uint (uses unsigned int)
78  */
79 typedef unsigned int ts_uint;
80 /** For the purpose of greater flexibility all data types used in the program
81  *  shouldn't use standard C types, but should use types defined here.
82  *    ts_long (uses long)
83  */
84 typedef long ts_long;
85 /** For the purpose of greater flexibility all data types used in the program
86  *  shouldn't use standard C types, but should use types defined here.
87  *    ts_ulong (uses unsigned long)
88  */
89 typedef unsigned long ts_ulong;
90 /** For the purpose of greater flexibility all data types used in the program
91  *  shouldn't use standard C types, but should use types defined here.
92  *    ts_float (uses float)
93  */
94 typedef float ts_float;
95 /** For the purpose of greater flexibility all data types used in the program
96  *  shouldn't use standard C types, but should use types defined here.
97  *    ts_double (uses double)
98  */
99 typedef double ts_double;
100 /** For the purpose of greater flexibility all data types used in the program
101  *  shouldn't use standard C types, but should use types defined here.
102  *    ts_char (uses char)
103  */
104 typedef char ts_char;
105 /** For the purpose of greater flexibility all data types used in the program
106  *  shouldn't use standard C types, but should use types defined here.
107  *    ts_uchar (uses unsigned char)
108  */
109 typedef unsigned char ts_uchar;
110 /** For the purpose of greater flexibility all data types used in the program
111  *  shouldn't use standard C types, but should use types defined here.
112  *    ts_bool (uses char)
113  */
114 typedef char ts_bool;
115
116
117 /* STRUCTURES */
118
523bf1 119
SP 120 /** @brief Data structure for keeping the coordinates in selected coordinate
121  * system
122  */
123 #define TS_COORD_CARTESIAN 0
124 #define TS_COORD_SPHERICAL 1
125 #define TS_COORD_CYLINDRICAL 2
126
127 typedef struct {
128     ts_double e1;
129     ts_double e2;
130     ts_double e3;
131     ts_uint coord_type;
132 } ts_coord;
133
719c9f 134 <<<<<<< HEAD
523bf1 135
SP 136
bba37c 137
719c9f 138 =======
SP 139 >>>>>>> e9eab4fb2f72383a1a2adbe5f09f7bbd1fd45768
d7639a 140 /** @brief Data structure of all data connected to a vertex
SP 141  *
8f6a69 142  *  ts_vertex holds the data for one single point (bead, vertex). To understand how to use it
d7639a 143  *  here is a detailed description of the fields in the data structure. */
8f6a69 144 struct ts_vertex {
SP 145         ts_uint idx;
a10dd5 146         ts_double x; /**< The x coordinate of vertex. */
d7639a 147         ts_double y; /**< The y coordinate of vertex. */
SP 148         ts_double z; /**< The z coordinate of vertex. */
64c113 149 //        ts_uint neigh_no; /**< The number of neighbours. */
SP 150 //        struct ts_vertex **neigh; /**< The pointer that holds neigh_no pointers to this structure. */
151     struct ts_vertex_list *neigh;
a10dd5 152         ts_double *bond_length; /**< Obsolete! The bond lenght is moved to ts_bond */
SP 153         ts_double *bond_length_dual; /**< Obsolete! Bond length in dual lattice is moved to ts_bond! */
d7639a 154         ts_double curvature;
SP 155         ts_double energy;
156         ts_double energy_h;
157         ts_uint tristar_no;
a10dd5 158         struct ts_triangle **tristar; /**< The list of triangles this vertex belongs to. This is an array of pointers to ts_triangle structure of tristar_no length */
SP 159         ts_uint bond_no;
160         struct ts_bond **bond; /**< Array of pointers of lenght bond_no that stores information on bonds. */
161         struct ts_cell *cell; /**< Which cell do we belong to? */
d7639a 162         ts_double xk;
SP 163         ts_double c;
164         ts_uint id;
523bf1 165         ts_double projArea;
SP 166         ts_double relR;
167         ts_double solAngle;
1d5dff 168     struct ts_poly *grafted_poly;
737714 169 };
d7639a 170 typedef struct ts_vertex ts_vertex;
SP 171
64c113 172 struct ts_vertex_list{
73f967 173     ts_uint n;
64c113 174     ts_uint list_size;
a10dd5 175     ts_vertex **vtx;
73f967 176
64c113 177 };
SP 178 typedef struct ts_vertex_list ts_vertex_list;
73f967 179
e016c4 180 struct ts_bond {
fedf2b 181         ts_uint idx;
d7639a 182     ts_vertex *vtx1;
SP 183     ts_vertex *vtx2;
d33abe 184     ts_vertex *adjvtx[2];
d335d9 185     struct ts_triangle *tria[2];
d7639a 186     ts_double bond_length;
SP 187     ts_double bond_length_dual;
a63f17 188     ts_bool tainted;
fedf2b 189     ts_double energy;
a10dd5 190 };
SP 191 typedef struct ts_bond ts_bond;
192
193 struct ts_bond_list {
194     ts_uint n;
195     ts_bond **bond;
196 };
197 typedef struct ts_bond_list ts_bond_list;
198
41a035 199 struct ts_triangle {
SP 200     ts_uint idx;
d7639a 201     ts_vertex *vertex[3];
SP 202     ts_uint neigh_no;
203     struct ts_triangle **neigh;
204     ts_double xnorm;
205     ts_double ynorm;
206     ts_double znorm;
523bf1 207     ts_double area; // firstly needed for sh.c
c9d07c 208     ts_double volume; // firstly needed for sh.c
a10dd5 209 };
d7639a 210 typedef struct ts_triangle ts_triangle;
a10dd5 211
SP 212 struct ts_triangle_list{
213     ts_uint n;
214     ts_triangle **tria;
215 };
a2a676 216 typedef struct ts_triangle_list ts_triangle_list;
d7639a 217
SP 218
bb77ca 219 typedef struct ts_cell {
SP 220     ts_uint idx;
34d3de 221     ts_vertex **vertex;
SP 222     ts_uint nvertex;
bb77ca 223 } ts_cell; 
SP 224
225 typedef struct ts_cell_list{
226     ts_uint ncmax[3];
227     ts_uint cellno;
228     ts_cell **cell;
d7639a 229     ts_double dcell;
SP 230     ts_double shift;
231     ts_double max_occupancy;
bb77ca 232 } ts_cell_list;
SP 233
234
235 typedef struct {
523bf1 236     ts_uint l;
SP 237     ts_double **ulm;
262607 238     ts_double **sumUlm2;
SP 239     ts_uint N;
621830 240     ts_double **co;
eb8605 241     ts_double ***Ylmi;
523bf1 242 } ts_spharm;
SP 243
244
245
1d5dff 246 struct ts_poly {
M 247     ts_vertex_list *vlist;
248     ts_bond_list *blist;
249     ts_vertex *grafted_vtx;
48bb92 250     ts_double k;
1d5dff 251 };
M 252 typedef struct ts_poly ts_poly;
253
254
255 struct ts_poly_list {
256     ts_uint    n;
257     ts_poly **poly;
258 };
259 typedef struct ts_poly_list ts_poly_list;
260
261
262
263
523bf1 264 typedef struct {
bb77ca 265     ts_vertex_list *vlist;
SP 266     ts_bond_list *blist;
267     ts_triangle_list *tlist;
48bb92 268     ts_cell_list *clist;
bb77ca 269     ts_uint nshell;
48bb92 270     ts_double bending_rigidity;
M 271     ts_double dmax;
272     ts_double stepsize;
273        ts_double cm[3];
274     ts_double volume;
275     ts_spharm *sphHarmonics;
276
1d5dff 277     ts_poly_list *poly_list;
48bb92 278     ts_double spring_constant;
d7639a 279 } ts_vesicle;
SP 280
281
523bf1 282
SP 283
d7639a 284 /* GLOBAL VARIABLES */
SP 285
286 int quiet;
287
288
289 /* FUNCTIONS */
290
291 /** Non-fatal error function handler:
292  *      @param text is a description of an error
293  *      @returns doesn't return anything
294 */
295 void err(char *text);
296
297 /** Fatal error function handler:
298  *      @param text is a description of an error
299  *      @param errcode is a (non-zero) error code
300  *      @returns terminates the execution of program with errcode set
301 */
302 void fatal(char *text, ts_int errcode);
303
7958e9 304 ts_uint ts_fprintf(FILE *fd, char *fmt, ...);
d7639a 305
737714 306 #define VTX(n) &(vlist->vtx[n])
SP 307 #define VTX_DATA(n) vlist->vtx[n].data
73f967 308
d7639a 309 #endif