Trisurf Monte Carlo simulator
Samo Penic
2010-11-27 73771431acbfbd1ffa2f3aeabb21fed9016fca42
commit | author | age
d7639a 1 #ifndef _GENERAL_H
SP 2 #define _GENERAL_H
3
4 #include<stdarg.h>
5
6 /* @brief This is a header file, defining general constants and structures.
7   * @file header.h
8   * @author Samo Penic
9   * @date 5.3.2001
10   *
11   * Header file for general inclusion in all the code, defining data structures
12   * and general constans. All datatypes used in the code is also defined here.
13   *
14   */
15
16 /* Defines */
17 /** @brief Return value of type bz_bool that indiceates successful function finish 
18   *
19   * Function usualy return some value, which are the result of certain operation. Functions that don't
20   * return any parameters can return value, that indicates if the function call finished successfully.
21   * In case of successful function run, the functions should return TS_SUCCESS to the caller. This define
22   * is set here to get uniformity among all the functions used in program.
23   *
24   * Example of usage:
25   *        ts_boot somefunction(ts_int param1, ....){
26   *            ...
27   *            return TS_SUCCESS;
28   *        }
29   */
30 #define TS_SUCCESS 0
31
32 /** @brief Return value of type bz_bool that indicates unsuccessful function finish 
33   *
34   * Function usualy return some value, which are the result of certain operation. Functions that don't
35   * return any parameters can return value, that indicates if the function call finished successfully.
36   * In case of unsuccessful function run, the functions should return TS_FAIL to the caller. This define
37   * is set here to get uniformity among all the functions used in program.
38   *
39   * Example of usage:
40   *
41   *        ts_boot somefunction(ts_int param1, ....){
42   *            ...
43   *            return TS_FAIL;
44   *        }
45   */
46 #define TS_FAIL 1
47
48 /* CONSTANTS */
49
50 /* DATA TYPES */
51 /** @brief Sets the default datatype for ts_double
52  *
53  * Requred for some functions to work, like "pow" from math.h. If ts_double is defined as
54  * float program must run with "powf". Where type dependant function is used it checks this
55  * define directive to decide which version to compile in. Available options
56  *
57  *    TS_DOUBLE_FLOAT
58  *    TS_DOUBLE_DOUBLE
59  *    TS_DOUBLE_LONGDOUBLE
60 */
61 #define TS_DOUBLE_DOUBLE
62
63 /** For the purpose of greater flexibility all data types used in the program
64  *  shouldn't use standard C types, but should use types defined here.
65  *    ts_int (uses int)
66  */
67 typedef int ts_int;
68 /** For the purpose of greater flexibility all data types used in the program
69  *  shouldn't use standard C types, but should use types defined here.
70  *    ts_uint (uses unsigned int)
71  */
72 typedef unsigned int ts_uint;
73 /** For the purpose of greater flexibility all data types used in the program
74  *  shouldn't use standard C types, but should use types defined here.
75  *    ts_long (uses long)
76  */
77 typedef long ts_long;
78 /** For the purpose of greater flexibility all data types used in the program
79  *  shouldn't use standard C types, but should use types defined here.
80  *    ts_ulong (uses unsigned long)
81  */
82 typedef unsigned long ts_ulong;
83 /** For the purpose of greater flexibility all data types used in the program
84  *  shouldn't use standard C types, but should use types defined here.
85  *    ts_float (uses float)
86  */
87 typedef float ts_float;
88 /** For the purpose of greater flexibility all data types used in the program
89  *  shouldn't use standard C types, but should use types defined here.
90  *    ts_double (uses double)
91  */
92 typedef double ts_double;
93 /** For the purpose of greater flexibility all data types used in the program
94  *  shouldn't use standard C types, but should use types defined here.
95  *    ts_char (uses char)
96  */
97 typedef char ts_char;
98 /** For the purpose of greater flexibility all data types used in the program
99  *  shouldn't use standard C types, but should use types defined here.
100  *    ts_uchar (uses unsigned char)
101  */
102 typedef unsigned char ts_uchar;
103 /** For the purpose of greater flexibility all data types used in the program
104  *  shouldn't use standard C types, but should use types defined here.
105  *    ts_bool (uses char)
106  */
107 typedef char ts_bool;
108
109
110 /* STRUCTURES */
111
112 /** @brief Data structure of all data connected to a vertex
113  *
114  *  ts_vertex holds the data for one single point (bead, vertex) in the space. To understand how to use it
115  *  here is a detailed description of the fields in the data structure. */
737714 116 struct ts_vertex_data {
d7639a 117         ts_uint idx; /**< Represents index of the vertex point. Should become obsolete in C. */        
SP 118         ts_double x; /**< The x coordinate of vertex. */        
119         ts_double y; /**< The y coordinate of vertex. */
120         ts_double z; /**< The z coordinate of vertex. */
121         ts_uint neigh_no; /**< The number of neighbours. */
737714 122         struct ts_vertex **neigh; /**< The pointer that holds neigh_no pointers to this structure. Careful when using pointers to pointers! Also developers do mistakes here.  */
d7639a 123         ts_double *bond_length;
SP 124         ts_double *bond_length_dual;
125         ts_double curvature;
126         ts_double energy;
127         ts_double energy_h;
128         ts_uint tristar_no;
737714 129         struct ts_triangle **tristar;
SP 130         struct ts_bond **bond;
d7639a 131         struct ts_cell *cell;
SP 132         ts_double xk;
133         ts_double c;
134         ts_uint id;
135 };
737714 136 typedef struct ts_vertex_data ts_vertex_data;
SP 137
138 struct ts_vertex {
139         ts_uint idx;
140         ts_vertex_data *data;
141 };
d7639a 142 typedef struct ts_vertex ts_vertex;
SP 143
73f967 144 typedef struct {
SP 145     ts_uint n;
737714 146     ts_vertex *vtx;
73f967 147
SP 148 } ts_vertex_list;
149
150
d7639a 151 /** ts_bond is a structure that describes a bond */
SP 152 typedef struct {
153     ts_vertex *vtx1;
154     ts_vertex *vtx2;
155     ts_double bond_length;
156     ts_double bond_length_dual;
157 } ts_bond;
158
159 struct ts_triangle {
160     ts_uint idx;
161     ts_vertex *vertex[3];
162     ts_uint neigh_no;
163     struct ts_triangle **neigh;
164     ts_double xnorm;
165     ts_double ynorm;
166     ts_double znorm;
167     
168 };
169 typedef struct ts_triangle ts_triangle;
170
171 typedef struct ts_cell {
172     ts_uint idx;
173     ts_vertex **vertex;
174     ts_uint nvertex;
175 } ts_cell;
176
177 typedef struct {
178     ts_vertex **vlist;
179     ts_bond **blist;
180     ts_triangle **tlist;
181     ts_cell **clist;
182     ts_uint nshell;
183     ts_uint nvertex;
184     ts_uint nbond;
185     ts_uint ntria;
186     ts_cell ncell;
187     ts_double dcell;
188     ts_double shift;
189     ts_double max_occupancy;
190     ts_uint ncmax[3];
191     ts_double bending_rigidity;
192     ts_double dmax;
193     ts_double stepsize;
194     ts_double cm[3];
195 } ts_vesicle;
196
197
198 /* GLOBAL VARIABLES */
199
200 int quiet;
201
202
203 /* FUNCTIONS */
204
205 /** Non-fatal error function handler:
206  *      @param text is a description of an error
207  *      @returns doesn't return anything
208 */
209 void err(char *text);
210
211 /** Fatal error function handler:
212  *      @param text is a description of an error
213  *      @param errcode is a (non-zero) error code
214  *      @returns terminates the execution of program with errcode set
215 */
216 void fatal(char *text, ts_int errcode);
217
218 //ts_uint ts_fprintf(FILE *fd, char *fmt, va_list ap);
219
737714 220 #define VTX(n) &(vlist->vtx[n])
SP 221 #define VTX_DATA(n) vlist->vtx[n].data
73f967 222
d7639a 223 #endif