Trisurf Monte Carlo simulator
Samo Penic
2019-03-08 2afc2f4f1dd89518995f1b5a539aea932aecab65
commit | author | age
7f6076 1 /* vim: set ts=4 sts=4 sw=4 noet : */
d7639a 2 #include<general.h>
SP 3 #include "vesicle.h"
bb77ca 4 #include "vertex.h"
SP 5 #include "triangle.h"
6 #include "bond.h"
7 #include "cell.h"
7958e9 8 #include "stdlib.h"
a2db52 9 #include "poly.h"
632960 10 #include "sh.h"
459ff9 11 #include "shcomplex.h"
ca9f26 12 #include "plugins.h"
8db569 13
bb77ca 14 ts_vesicle *init_vesicle(ts_uint N, ts_uint ncmax1, ts_uint ncmax2, ts_uint
SP 15 ncmax3, ts_double stepsize){
8db569 16     ts_vesicle *vesicle=(ts_vesicle *)calloc(1,sizeof(ts_vesicle));
bb77ca 17     vesicle->vlist=init_vertex_list(N);
SP 18     vesicle->blist=init_bond_list();
19     vesicle->tlist=init_triangle_list();
20     vesicle->clist=init_cell_list(ncmax1, ncmax2, ncmax3, stepsize);
7958e9 21     return vesicle;
bb77ca 22 }
SP 23
d7639a 24 ts_bool vesicle_translate(ts_vesicle *vesicle,ts_double x, ts_double y, ts_double z){
SP 25     ts_uint i;
7958e9 26     ts_vertex **vtx=vesicle->vlist->vtx;
bb77ca 27     ts_uint nn=vesicle->vlist->n;
d7639a 28     for(i=0;i<nn;i++){
8f6a69 29         vtx[i]->x+=x;
SP 30         vtx[i]->y+=y;
31         vtx[i]->z+=z;
d7639a 32     }
SP 33     return TS_SUCCESS;
34 }
35
36 ts_bool vesicle_free(ts_vesicle *vesicle){
7958e9 37     vtx_list_free(vesicle->vlist);
bb77ca 38     bond_list_free(vesicle->blist);
SP 39     triangle_list_free(vesicle->tlist);
40     cell_list_free(vesicle->clist);
a2db52 41     poly_list_free(vesicle->poly_list);
701026 42     poly_list_free(vesicle->filament_list);
459ff9 43     complex_sph_free(vesicle->sphHarmonics);
ca9f26 44     plugin_list_free(vesicle->plist);
7958e9 45     free(vesicle);
d7639a 46     return TS_SUCCESS;
SP 47 }
523bf1 48
c9d07c 49 /* @brief Function makes a sum of partial volumes of each triangle. Volumes of
SP 50  *
51  * Partial volumes are calculated when we calculate normals of triangles. It is
52  * relatively easy to calculate the volume of vesicle if we take into account
53  * that the volume of the whole vertex is simply sum of all partial volumes of
54  * all the triangles.
55  */
523bf1 56 ts_bool vesicle_volume(ts_vesicle *vesicle){
SP 57     ts_double volume;
58     ts_uint i;
59     ts_triangle **tria=vesicle->tlist->tria;
60     volume=0;
61     for(i=0; i<vesicle->tlist->n;i++){
c9d07c 62     volume=volume+tria[i]->volume;
523bf1 63     }
SP 64     vesicle->volume=volume;
65     return TS_SUCCESS;
66 }
c0ae90 67
SP 68 /* @brief Function makes a sum of partial areas of each triangle.
69  *
70  *
71  *
72  */
73 ts_bool vesicle_area(ts_vesicle *vesicle){
74     ts_double area;
75     ts_uint i;
76     ts_triangle **tria=vesicle->tlist->tria;
77     area=0;
78     for(i=0;i<vesicle->tlist->n;i++){
79         area=area+tria[i]->area;
80     }
81     vesicle->area=area;
82     return TS_SUCCESS;
83 }
810894 84
M 85 ts_double vesicle_meancurvature(ts_vesicle *vesicle){
86 // Integrates (H dA) over vesicle area A, where H=(C1+C2)/2.
87 // (To be devided by A outside of function)
88     ts_double mc;
89     ts_uint i;
90     mc=0;
91     for(i=0;i<vesicle->vlist->n;i++){
92         mc=mc+vesicle->vlist->vtx[i]->curvature;
93     }
94     return mc/2.0;
95 }