Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/interface/nglib.h
3206 views
1
#ifndef NGLIB
2
#define NGLIB
3
4
/**************************************************************************/
5
/* File: nglib.hh */
6
/* Author: Joachim Schoeberl */
7
/* Date: 7. May. 2000 */
8
/**************************************************************************/
9
10
/*
11
12
Interface to the netgen meshing kernel
13
14
*/
15
16
/// Data type for NETGEN mesh
17
typedef void * Ng_Mesh;
18
19
/// Data type for NETGEN CSG geomty
20
typedef void * Ng_CSG_Geometry;
21
22
/// Data type for NETGEN 2D geomty
23
typedef void * Ng_Geometry_2D;
24
25
/// Data type for NETGEN STL geomty
26
typedef void * Ng_STL_Geometry;
27
28
29
30
// max number of nodes per element
31
#define NG_VOLUME_ELEMENT_MAXPOINTS 10
32
33
// implemented element types:
34
enum Ng_Volume_Element_Type { NG_TET = 1, NG_PYRAMID = 2, NG_PRISM = 3,
35
NG_TET10 = 4 };
36
37
// max number of nodes per surface element
38
#define NG_SURFACE_ELEMENT_MAXPOINTS 6
39
40
// implemented element types:
41
enum Ng_Surface_Element_Type { NG_TRIG = 1, NG_QUAD = 2,
42
NG_TRIG6 = 3 };
43
44
45
46
class Ng_Meshing_Parameters
47
{
48
public:
49
50
double maxh;
51
double fineness; // 0 .. coarse, 1 .. fine
52
int secondorder;
53
char * meshsize_filename;
54
int quad_dominated;
55
56
Ng_Meshing_Parameters();
57
};
58
59
60
enum Ng_Result { NG_OK = 0,
61
NG_SURFACE_INPUT_ERROR = 1,
62
NG_VOLUME_FAILURE = 2,
63
NG_STL_INPUT_ERROR = 3,
64
NG_SURFACE_FAILURE = 4,
65
NG_FILE_NOT_FOUND = 5 };
66
67
68
69
70
71
// initialize, deconstruct Netgen library:
72
void Ng_Init ();
73
void Ng_Exit ();
74
75
// ===== Elmer related additions =====
76
77
// return surface and volume element in pi + underlying stl number
78
Ng_Surface_Element_Type
79
EG_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * ptrignum);
80
81
// return surface element bc property:
82
int
83
EG_GetSurfaceElementBCProperty(Ng_Mesh * mesh, int i);
84
85
// return segment bcnum
86
void
87
EG_GetSegmentBCProperty (Ng_Mesh *mesh, Ng_Geometry_2D *geom, int num, int * bcnum);
88
89
90
// Generates new mesh structure
91
Ng_Mesh * Ng_NewMesh ();
92
void Ng_DeleteMesh (Ng_Mesh * mesh);
93
94
// feeds points, surface elements and volume elements to the mesh
95
void Ng_AddPoint (Ng_Mesh * mesh, double * x);
96
void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
97
int * pi);
98
void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et,
99
int * pi);
100
101
// ask for number of points, surface and volume elements
102
int Ng_GetNP (Ng_Mesh * mesh);
103
int Ng_GetNSE (Ng_Mesh * mesh);
104
int Ng_GetNE (Ng_Mesh * mesh);
105
106
// return point coordinates
107
void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);
108
109
// return surface and volume element in pi
110
Ng_Surface_Element_Type
111
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi);
112
113
Ng_Volume_Element_Type
114
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi);
115
116
117
// Defines MeshSize Functions
118
void Ng_RestrictMeshSizeGlobal (Ng_Mesh * mesh, double h);
119
void Ng_RestrictMeshSizePoint (Ng_Mesh * mesh, double * p, double h);
120
void Ng_RestrictMeshSizeBox (Ng_Mesh * mesh, double * pmin, double * pmax, double h);
121
122
// generates volume mesh from surface mesh
123
Ng_Result Ng_GenerateVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp);
124
125
void Ng_SaveMesh(Ng_Mesh * mesh, const char* filename);
126
Ng_Mesh * Ng_LoadMesh(const char* filename);
127
128
129
130
131
132
// **********************************************************
133
// ** 2D Meshing **
134
// **********************************************************
135
136
137
// feeds points and boundary to mesh
138
139
void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x);
140
void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2);
141
142
// ask for number of points, elements and boundary segments
143
int Ng_GetNP_2D (Ng_Mesh * mesh);
144
int Ng_GetNE_2D (Ng_Mesh * mesh);
145
int Ng_GetNSeg_2D (Ng_Mesh * mesh);
146
147
// return point coordinates
148
void Ng_GetPoint_2D (Ng_Mesh * mesh, int num, double * x);
149
150
// return 2d triangles
151
void Ng_GetElement_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
152
153
// return 2d boundary segment
154
void Ng_GetSegment_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
155
156
157
// load 2d netgen spline geometry
158
Ng_Geometry_2D * Ng_LoadGeometry_2D (const char * filename);
159
160
// generate 2d mesh, mesh is allocated by function
161
Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
162
Ng_Mesh ** mesh,
163
Ng_Meshing_Parameters * mp);
164
165
void Ng_HP_Refinement (Ng_Geometry_2D * geom,
166
Ng_Mesh * mesh,
167
int levels);
168
169
170
171
172
173
// **********************************************************
174
// ** STL Meshing **
175
// **********************************************************
176
177
178
// loads geometry from STL file
179
Ng_STL_Geometry * Ng_STL_LoadGeometry (const char * filename, int binary = 0);
180
181
182
// generate new STL Geometry
183
Ng_STL_Geometry * Ng_STL_NewGeometry ();
184
185
186
// fills STL Geometry
187
// positive orientation
188
// normal vector may be null-pointer
189
void Ng_STL_AddTriangle (Ng_STL_Geometry * geom,
190
double * p1, double * p2, double * p3,
191
double * nv = NULL);
192
193
// add (optional) edges :
194
void Ng_STL_AddEdge (Ng_STL_Geometry * geom,
195
double * p1, double * p2);
196
197
// after adding triangles (and edges) initialize
198
Ng_Result Ng_STL_InitSTLGeometry (Ng_STL_Geometry * geom);
199
200
// automatically generates edges:
201
Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
202
Ng_Mesh* mesh,
203
Ng_Meshing_Parameters * mp);
204
205
206
// generates mesh, empty mesh must be already created.
207
Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
208
Ng_Mesh * mesh,
209
Ng_Meshing_Parameters * mp);
210
211
212
#ifdef ACIS
213
214
// **********************************************************
215
// ** ACIS Meshing **
216
// **********************************************************
217
218
/// Data type for NETGEN STL geomty
219
typedef void * Ng_ACIS_Geometry;
220
221
// loads geometry from STL file
222
Ng_ACIS_Geometry * Ng_ACIS_LoadGeometry (const char * filename);
223
224
// generates mesh, empty mesh must be already created.
225
Ng_Result Ng_ACIS_GenerateSurfaceMesh (Ng_ACIS_Geometry * geom,
226
Ng_Mesh * mesh,
227
Ng_Meshing_Parameters * mp);
228
229
230
#endif
231
232
233
#endif
234
235