Trisurf Monte Carlo simulator
Samo Penic
2010-11-27 73f967e943c8d7a77cb21411de990904f09baba6
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
#ifndef _GENERAL_H
#define _GENERAL_H
 
#include<stdarg.h>
 
/* @brief This is a header file, defining general constants and structures.
  * @file header.h
  * @author Samo Penic
  * @date 5.3.2001
  *
  * Header file for general inclusion in all the code, defining data structures
  * and general constans. All datatypes used in the code is also defined here.
  *
  */
 
/* Defines */
/** @brief Return value of type bz_bool that indiceates successful function finish 
  *
  * Function usualy return some value, which are the result of certain operation. Functions that don't
  * return any parameters can return value, that indicates if the function call finished successfully.
  * In case of successful function run, the functions should return TS_SUCCESS to the caller. This define
  * is set here to get uniformity among all the functions used in program.
  *
  * Example of usage:
  *        ts_boot somefunction(ts_int param1, ....){
  *            ...
  *            return TS_SUCCESS;
  *        }
  */
#define TS_SUCCESS 0
 
/** @brief Return value of type bz_bool that indicates unsuccessful function finish 
  *
  * Function usualy return some value, which are the result of certain operation. Functions that don't
  * return any parameters can return value, that indicates if the function call finished successfully.
  * In case of unsuccessful function run, the functions should return TS_FAIL to the caller. This define
  * is set here to get uniformity among all the functions used in program.
  *
  * Example of usage:
  *
  *        ts_boot somefunction(ts_int param1, ....){
  *            ...
  *            return TS_FAIL;
  *        }
  */
#define TS_FAIL 1
 
/* CONSTANTS */
 
/* DATA TYPES */
/** @brief Sets the default datatype for ts_double
 *
 * Requred for some functions to work, like "pow" from math.h. If ts_double is defined as
 * float program must run with "powf". Where type dependant function is used it checks this
 * define directive to decide which version to compile in. Available options
 *
 *    TS_DOUBLE_FLOAT
 *    TS_DOUBLE_DOUBLE
 *    TS_DOUBLE_LONGDOUBLE
*/
#define TS_DOUBLE_DOUBLE
 
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_int (uses int)
 */
typedef int ts_int;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_uint (uses unsigned int)
 */
typedef unsigned int ts_uint;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_long (uses long)
 */
typedef long ts_long;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_ulong (uses unsigned long)
 */
typedef unsigned long ts_ulong;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_float (uses float)
 */
typedef float ts_float;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_double (uses double)
 */
typedef double ts_double;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_char (uses char)
 */
typedef char ts_char;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_uchar (uses unsigned char)
 */
typedef unsigned char ts_uchar;
/** For the purpose of greater flexibility all data types used in the program
 *  shouldn't use standard C types, but should use types defined here.
 *    ts_bool (uses char)
 */
typedef char ts_bool;
 
 
/* STRUCTURES */
 
/** @brief Data structure of all data connected to a vertex
 *
 *  ts_vertex holds the data for one single point (bead, vertex) in the space. To understand how to use it
 *  here is a detailed description of the fields in the data structure. */
struct ts_vertex {
        ts_uint idx; /**< Represents index of the vertex point. Should become obsolete in C. */        
        ts_double x; /**< The x coordinate of vertex. */        
        ts_double y; /**< The y coordinate of vertex. */
        ts_double z; /**< The z coordinate of vertex. */
        ts_uint neigh_no; /**< The number of neighbours. */
        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.  */
        ts_double *bond_length;
        ts_double *bond_length_dual;
        ts_double curvature;
        ts_double energy;
        ts_double energy_h;
        ts_uint tristar_no;
        struct ts_triangle ***tristar;
        struct ts_bond ***bond;
        struct ts_cell *cell;
        ts_double xk;
        ts_double c;
        ts_uint id;
};
typedef struct ts_vertex ts_vertex;
 
typedef struct {
    ts_uint n;
    ts_vertex **vtx;
 
} ts_vertex_list;
 
 
/** ts_bond is a structure that describes a bond */
typedef struct {
    ts_vertex *vtx1;
    ts_vertex *vtx2;
    ts_double bond_length;
    ts_double bond_length_dual;
} ts_bond;
 
struct ts_triangle {
    ts_uint idx;
    ts_vertex *vertex[3];
    ts_uint neigh_no;
    struct ts_triangle **neigh;
    ts_double xnorm;
    ts_double ynorm;
    ts_double znorm;
    
};
typedef struct ts_triangle ts_triangle;
 
typedef struct ts_cell {
    ts_uint idx;
    ts_vertex **vertex;
    ts_uint nvertex;
} ts_cell;
 
typedef struct {
    ts_vertex **vlist;
    ts_bond **blist;
    ts_triangle **tlist;
    ts_cell **clist;
    ts_uint nshell;
    ts_uint nvertex;
    ts_uint nbond;
    ts_uint ntria;
    ts_cell ncell;
    ts_double dcell;
    ts_double shift;
    ts_double max_occupancy;
    ts_uint ncmax[3];
    ts_double bending_rigidity;
    ts_double dmax;
    ts_double stepsize;
    ts_double cm[3];
} ts_vesicle;
 
 
/* GLOBAL VARIABLES */
 
int quiet;
 
 
/* FUNCTIONS */
 
/** Non-fatal error function handler:
 *      @param text is a description of an error
 *      @returns doesn't return anything
*/
void err(char *text);
 
/** Fatal error function handler:
 *      @param text is a description of an error
 *      @param errcode is a (non-zero) error code
 *      @returns terminates the execution of program with errcode set
*/
void fatal(char *text, ts_int errcode);
 
//ts_uint ts_fprintf(FILE *fd, char *fmt, va_list ap);
 
#define VTX(vlist,n) &(vlist->vtx[n])
 
#endif