Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/post/src/geometry.h
3196 views
1
/*****************************************************************************
2
*
3
* Elmer, A Finite Element Software for Multiphysical Problems
4
*
5
* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 2
10
* of the License, or (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program (in file fem/GPL-2); if not, write to the
19
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20
* Boston, MA 02110-1301, USA.
21
*
22
*****************************************************************************/
23
24
/*******************************************************************************
25
*
26
* Type & structure definitions for objects & geometry. This is really the
27
* definition of the structure of ElmerPost.
28
*
29
*******************************************************************************
30
*
31
* Author: Juha Ruokolainen
32
*
33
* Address: CSC - IT Center for Science Ltd.
34
* Keilaranta 14, P.O. BOX 405
35
* 02101 Espoo, Finland
36
* Tel. +358 0 457 2723
37
* Telefax: +358 0 457 2302
38
* EMail: [email protected]
39
*
40
* Date: 26 Sep 1995
41
*
42
* Modified by:
43
*
44
* Date of modification:
45
*
46
******************************************************************************/
47
48
#ifdef MODULE_GEOMETRY
49
# define GEO_EXT
50
#else
51
# define GEO_EXT extern
52
#endif
53
54
#define GEO_TRIANGLE_BLOCK_SIZE 4096
55
#define GEO_VERTEX_BLOCK_SIZE 4096
56
57
#define FLOAT float
58
59
typedef struct group_s
60
{
61
struct group_s *Next;
62
int status,Open;
63
char *Name;
64
} group_t;
65
66
/*
67
* Triangle
68
*/
69
typedef struct
70
{
71
int v[3]; /* vertex pointers */
72
FLOAT Fu[3]; /* triangle normal */
73
FLOAT u[3][3]; /* vertex normals */
74
75
struct element_s *Element;
76
77
int Count;
78
logical_t Edge[3]; /* beginning of an edge flag */
79
} triangle_t;
80
81
/*
82
* list of faces connected to a vertex
83
*/
84
typedef struct vertex_face_s
85
{
86
int Face;
87
struct vertex_face_s *Next;
88
} vertex_face_t;
89
90
/*
91
* vertex def's
92
*/
93
typedef struct vertex_s
94
{
95
FLOAT x[3];
96
vertex_face_t *Faces;
97
logical_t ElementModelNode;
98
} vertex_t;
99
100
typedef struct
101
{
102
FLOAT x[3],y[3],z[3];
103
FLOAT u[3],v[3],w[3];
104
FLOAT c[3],f[3];
105
} polygon_t;
106
107
typedef enum
108
{
109
line_style_line,line_style_cylinder
110
} line_style_t;
111
112
typedef struct line_s
113
{
114
float x[3];
115
float y[3];
116
float z[3];
117
float f[3],c[3];
118
} line_t;
119
120
/*
121
* Edges of elements are hold in an array of lists that are
122
* indexed by smallest numbered vertex of a particular edge.
123
*/
124
typedef enum
125
{
126
edge_style_all, edge_style_free
127
} edge_style_t;
128
129
typedef struct edge_list_s
130
{
131
struct edge_list_s *Next;
132
int Entry,Count;
133
struct element_s *Element;
134
} edge_list_t;
135
136
typedef struct edge_s
137
{
138
edge_list_t *EdgeList;
139
} edge_t;
140
141
/*
142
* geometry def's
143
*/
144
typedef struct geometry_s
145
{
146
struct Geometry_s *Next;
147
char *Name;
148
149
triangle_t *Triangles;
150
int TriangleCount,MaxTriangleCount;
151
152
vertex_t *Vertices;
153
int VertexCount,MaxVertexCount;
154
155
edge_t *Edges;
156
157
double Scale;
158
vertex_t MinMax[2];
159
} geometry_t;
160
161
GEO_EXT geometry_t Geometry;
162
163
typedef struct data_s
164
{
165
int a;
166
} data_t;
167
168
169
void geo_free_groups( group_t *groups );
170
int geo_add_vertex( geometry_t *geometry, vertex_t *vertex );
171
void geo_free_edge_tables( geometry_t *geometry );
172
void geo_free_vertex_face_tables( geometry_t *geometry );
173
int geo_add_triangle( geometry_t *geometry, triangle_t *triangle );
174
void geo_triangle_normal( geometry_t *geom,triangle_t *triangle );
175
void geo_vertex_normals( geometry_t *geometry, double Ang ) ;
176
177