Trisurf Monte Carlo simulator
Samo Penic
2010-11-27 73f967e943c8d7a77cb21411de990904f09baba6
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. */
116 struct ts_vertex {
117         ts_uint idx; /**< Represents index of the vertex point. Should become obsolete in C. */        
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. */
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.  */
123         ts_double *bond_length;
124         ts_double *bond_length_dual;
125         ts_double curvature;
126         ts_double energy;
127         ts_double energy_h;
128         ts_uint tristar_no;
129         struct ts_triangle ***tristar;
130         struct ts_bond ***bond;
131         struct ts_cell *cell;
132         ts_double xk;
133         ts_double c;
134         ts_uint id;
135 };
136 typedef struct ts_vertex ts_vertex;
137
73f967 138 typedef struct {
SP 139     ts_uint n;
140     ts_vertex **vtx;
141
142 } ts_vertex_list;
143
144
d7639a 145 /** ts_bond is a structure that describes a bond */
SP 146 typedef struct {
147     ts_vertex *vtx1;
148     ts_vertex *vtx2;
149     ts_double bond_length;
150     ts_double bond_length_dual;
151 } ts_bond;
152
153 struct ts_triangle {
154     ts_uint idx;
155     ts_vertex *vertex[3];
156     ts_uint neigh_no;
157     struct ts_triangle **neigh;
158     ts_double xnorm;
159     ts_double ynorm;
160     ts_double znorm;
161     
162 };
163 typedef struct ts_triangle ts_triangle;
164
165 typedef struct ts_cell {
166     ts_uint idx;
167     ts_vertex **vertex;
168     ts_uint nvertex;
169 } ts_cell;
170
171 typedef struct {
172     ts_vertex **vlist;
173     ts_bond **blist;
174     ts_triangle **tlist;
175     ts_cell **clist;
176     ts_uint nshell;
177     ts_uint nvertex;
178     ts_uint nbond;
179     ts_uint ntria;
180     ts_cell ncell;
181     ts_double dcell;
182     ts_double shift;
183     ts_double max_occupancy;
184     ts_uint ncmax[3];
185     ts_double bending_rigidity;
186     ts_double dmax;
187     ts_double stepsize;
188     ts_double cm[3];
189 } ts_vesicle;
190
191
192 /* GLOBAL VARIABLES */
193
194 int quiet;
195
196
197 /* FUNCTIONS */
198
199 /** Non-fatal error function handler:
200  *      @param text is a description of an error
201  *      @returns doesn't return anything
202 */
203 void err(char *text);
204
205 /** Fatal error function handler:
206  *      @param text is a description of an error
207  *      @param errcode is a (non-zero) error code
208  *      @returns terminates the execution of program with errcode set
209 */
210 void fatal(char *text, ts_int errcode);
211
212 //ts_uint ts_fprintf(FILE *fd, char *fmt, va_list ap);
213
73f967 214 #define VTX(vlist,n) &(vlist->vtx[n])
SP 215
d7639a 216 #endif