1 |
picher |
199 |
//* [ FreSOP - base ] *************************************** maillage_com.h * > |
2 |
|
|
// |
3 |
|
|
// ver.: 20090624 |
4 |
|
|
|
5 |
|
|
#ifndef _maillage_com_h |
6 |
|
|
#define _maillage_com_h |
7 |
|
|
|
8 |
|
|
#include "element_com.h" |
9 |
|
|
#include "gm_com.h" |
10 |
|
|
#include "gn_com.h" |
11 |
|
|
#include "noeuds_com.h" |
12 |
|
|
|
13 |
|
|
#include "bib_0000.h" |
14 |
|
|
#include "bib_m000.h" |
15 |
|
|
#include "bib_m012.h" |
16 |
|
|
|
17 |
|
|
//------------------------------------------------------------------------------ |
18 |
|
|
//-- notes: |
19 |
|
|
//-- |
20 |
|
|
//-- (1) on suppose que la numérotation des noeuds commence à 1 |
21 |
|
|
//-- (2) on suppose que la numérotation des éléments commence à 1 |
22 |
|
|
//-- (3) on suppose que la numérotation des groupes de mailles commence à 1 |
23 |
|
|
|
24 |
|
|
class o_maillage_com { |
25 |
|
|
|
26 |
|
|
//============================================================================ |
27 |
|
|
//=============================== ATTRIBUTS ================================== |
28 |
|
|
//============================================================================ |
29 |
|
|
|
30 |
|
|
ulong nbr_elements ; // nombre d'éléments |
31 |
|
|
ulong nbr_gm ; // nombre de groupes de mailles |
32 |
|
|
ulong nbr_gn ; // nombre de groupes de noeuds |
33 |
|
|
ulong nbr_noeuds ; // nombre de noeuds |
34 |
|
|
|
35 |
|
|
ulong no_element_max ; // plus grand numéro d'élément |
36 |
|
|
ulong no_noeud_max ; // plus grand numéro de noeud |
37 |
|
|
|
38 |
|
|
ptr_o_noeuds_com noeuds ; // pointeur vers les noeuds |
39 |
|
|
ptr_o_element_com *velements ; // pointeur vers le vecteur des éléments |
40 |
|
|
ptr_o_gm_com *vgm ; // pointeur vers le vecteur des groupes de mailles |
41 |
|
|
|
42 |
|
|
ulong dim_max ; // dimensionnalité (espace) maximale du maillage : 1, 2, 3 |
43 |
|
|
ulong dim_max_element ; // dimensionnalité (élément) maximale du maillage : 1, 2, 3 |
44 |
|
|
|
45 |
|
|
//-- drapeaux d'exécution ---------------------------------------------------- |
46 |
|
|
|
47 |
|
|
ty_RSLT def_prms_OK ; |
48 |
|
|
|
49 |
|
|
//============================================================================ |
50 |
|
|
//=========================== MéTHODES PRIVéES =============================== |
51 |
|
|
//============================================================================ |
52 |
|
|
|
53 |
|
|
//============================================================================ |
54 |
|
|
//== initialisation de la classe |
55 |
|
|
|
56 |
|
|
ty_RSLT initialisation ( void ); |
57 |
|
|
|
58 |
|
|
//============================================================================ |
59 |
|
|
//== gestion de mémoire |
60 |
|
|
|
61 |
|
|
ty_RSLT alloc_gm ( void ); |
62 |
|
|
|
63 |
|
|
ty_RSLT alloc_tout ( void ); |
64 |
|
|
|
65 |
|
|
ty_RSLT desalloc_gm ( void ); |
66 |
|
|
|
67 |
|
|
ty_RSLT desalloc_tout ( void ); |
68 |
|
|
|
69 |
|
|
public: |
70 |
|
|
|
71 |
|
|
//============================================================================ |
72 |
|
|
//========================== MéTHODES PUBLIQUES ============================== |
73 |
|
|
//============================================================================ |
74 |
|
|
|
75 |
|
|
o_maillage_com ( void ); |
76 |
|
|
~o_maillage_com ( void ); |
77 |
|
|
|
78 |
|
|
//============================================================================ |
79 |
|
|
//== définition des paramétres de la classe |
80 |
|
|
|
81 |
|
|
ty_RSLT def_prms ( ulong _nbr_elements , |
82 |
|
|
ulong _no_element_max , |
83 |
|
|
ulong _nbr_noeuds , |
84 |
|
|
ulong _no_noeud_max , |
85 |
|
|
ulong _nbr_gm , |
86 |
|
|
ulong _nbr_gn ); |
87 |
|
|
|
88 |
|
|
//============================================================================ |
89 |
|
|
//== accesseurs et mutateurs |
90 |
|
|
|
91 |
|
|
ty_RSLT def_dim_max ( ulong _dim_max ); |
92 |
|
|
|
93 |
|
|
ty_RSLT def_dim_max_element ( ulong _dim_max_element ); |
94 |
|
|
|
95 |
|
|
//---------------------------------------------------------------------------- |
96 |
|
|
//-- renvoie un pointeur vers un élément |
97 |
|
|
//-- |
98 |
|
|
//-- note: Il est possible que l'élément ne soit pas défini ou qu'il |
99 |
|
|
//-- n'existe pas. Dans un tel cas, le type de l'élément est 0. Il est |
100 |
|
|
//-- possible d'obtenir le type de l'élément en appelant la méthode |
101 |
|
|
//-- o_element_com::ée. |
102 |
|
|
//-- |
103 |
|
|
//-- +--------------------------------------------+-------------------------+ |
104 |
|
|
//-- | condition | résultat d'exécution | |
105 |
|
|
//-- +--------------------------------------------+-------------------------+ |
106 |
|
|
//-- | 1. prob.: _no_element = 0 | co_probleme_1 | |
107 |
|
|
//-- | 2. prob.: _no_element > no_element_max | co_probleme_2 | |
108 |
|
|
//-- | 3. prob.: _element = NULL | co_probleme_3 | |
109 |
|
|
//-- | 4. prob.: o_maillage_com::velements = NULL | co_probleme_4 | |
110 |
|
|
//-- | 0. OK | co_pas_de_probleme | |
111 |
|
|
//-- +--------------------------------------------+-------------------------+ |
112 |
|
|
|
113 |
|
|
ty_RSLT ren_element ( ulong _no_element , // no de l'élément (base 1) |
114 |
|
|
|
115 |
|
|
ptr_o_element_com *_element ); |
116 |
|
|
|
117 |
|
|
//------------------------------------------------------------------------[1]- |
118 |
|
|
//-- renvoie le nombre d'éléments auxquels appartient un noeud |
119 |
|
|
//-- |
120 |
|
|
//-- +--------------------------------------------+-------------------------+ |
121 |
|
|
//-- | condition particulière | résultat d'exécution | |
122 |
|
|
//-- +--------------------------------------------+-------------------------+ |
123 |
|
|
//-- | _no_noeud invalide | co_probleme_1 | !! |
124 |
|
|
//-- | _vnos_elements = NULL | co_probleme_2 | !! |
125 |
|
|
//-- +--------------------------------------------+-------------------------+ |
126 |
|
|
|
127 |
|
|
ty_RSLT ren_nbr_elements_noeud |
128 |
|
|
( ulong _no_noeud , |
129 |
|
|
|
130 |
|
|
ulong *_nbr_elements ); |
131 |
|
|
|
132 |
|
|
//------------------------------------------------------------------------[1]- |
133 |
|
|
//-- renvoie les nos d'éléments auxquels appartient un noeud |
134 |
|
|
//-- |
135 |
|
|
//-- +--------------------------------------------+-------------------------+ |
136 |
|
|
//-- | condition particulière | résultat d'exécution | |
137 |
|
|
//-- +--------------------------------------------+-------------------------+ |
138 |
|
|
//-- | _no_noeud invalide | co_probleme_1 | !! |
139 |
|
|
//-- | _vnos_elements = NULL | co_probleme_2 | !! |
140 |
|
|
//-- +--------------------------------------------+-------------------------+ |
141 |
|
|
|
142 |
|
|
ty_RSLT ren_nos_elements_noeud |
143 |
|
|
( ulong _no_noeud , |
144 |
|
|
|
145 |
|
|
ulong *_vnos_elements ); |
146 |
|
|
|
147 |
|
|
//---------------------------------------------------------------------------- |
148 |
|
|
//-- renvoie les coordonnées du centre spatial d'un élément |
149 |
|
|
//-- |
150 |
|
|
//-- +--------------------------------------------+-------------------------+ |
151 |
|
|
//-- | condition | résultat d'exécution | |
152 |
|
|
//-- +--------------------------------------------+-------------------------+ |
153 |
|
|
//-- +--------------------------------------------+-------------------------+ |
154 |
|
|
|
155 |
|
|
ty_RSLT ren_coord_centre_spatial_element |
156 |
|
|
( ulong _no_element , // base 1 |
157 |
|
|
|
158 |
|
|
vifl *_x_cs , |
159 |
|
|
vifl *_y_cs , |
160 |
|
|
vifl *_z_cs ); |
161 |
|
|
|
162 |
|
|
//---------------------------------------------------------------------------- |
163 |
|
|
//-- renvoie le type d'un élément (voir o_element_com.h pour plus de détails) |
164 |
|
|
//-- |
165 |
|
|
//-- +--------------------------------------------+-------------------------+ |
166 |
|
|
//-- | condition particulière | résultat d'exécution | |
167 |
|
|
//-- +--------------------------------------------+-------------------------+ |
168 |
|
|
//-- | def_prms_OK = co_non | co_probleme_1 | !! |
169 |
|
|
//-- | _type = NULL | co_probleme_2 | |
170 |
|
|
//-- +--------------------------------------------+-------------------------+ |
171 |
|
|
|
172 |
|
|
ty_RSLT ren_type_element ( ulong _no_element , // base 1 |
173 |
|
|
|
174 |
|
|
ulong *_type ); |
175 |
|
|
|
176 |
|
|
//-- renvoie un pointeur vers un groupe de mailles --------------------------- |
177 |
|
|
|
178 |
|
|
ty_RSLT ren_gm ( ulong _no_gm , // no du groupe de mailles (base 1) |
179 |
|
|
|
180 |
|
|
ptr_o_gm_com *_gm ); |
181 |
|
|
|
182 |
|
|
//-- renvoie le nombre total d'éléments -------------------------------------- |
183 |
|
|
|
184 |
|
|
ty_RSLT ren_nbr_elements ( ulong *_nbr_elements ); |
185 |
|
|
|
186 |
|
|
//-- renvoie le nombre d'éléments d'un certain type -------------------------- |
187 |
|
|
|
188 |
|
|
ty_RSLT ren_nbr_elements_type( ulong _type , |
189 |
|
|
|
190 |
|
|
ulong *_nbr_elements ); |
191 |
|
|
|
192 |
|
|
//-- renvoie le nombre d'éléments 3D ----------------------------------------- |
193 |
|
|
|
194 |
|
|
ty_RSLT ren_nbr_elements_3D ( ulong *_nbr_elements_3D ); |
195 |
|
|
|
196 |
|
|
//-- renvoie le nombre total de groupes de mailles --------------------------- |
197 |
|
|
|
198 |
|
|
ty_RSLT ren_nbr_gm ( ulong *_nbr_gm ); |
199 |
|
|
|
200 |
|
|
//-- renvoie le nombre total de noeuds dans le maillage ---------------------- |
201 |
|
|
|
202 |
|
|
ty_RSLT ren_nbr_noeuds ( ulong *_nbr_noeuds ); |
203 |
|
|
|
204 |
|
|
//-- renvoie le numéro max des éléments -------------------------------------- |
205 |
|
|
|
206 |
|
|
ty_RSLT ren_no_element_max ( ulong *_no_element_max ); |
207 |
|
|
|
208 |
|
|
//-- renvoie le numéro max des noeuds ---------------------------------------- |
209 |
|
|
|
210 |
|
|
ty_RSLT ren_no_noeud_max ( ulong *_no_noeud_max ); |
211 |
|
|
|
212 |
|
|
//-- renvoie un pointeur vers les noeuds (pas de copie) ---------------------- |
213 |
|
|
|
214 |
|
|
ty_RSLT ren_noeuds ( ptr_o_noeuds_com *_noeuds ); |
215 |
|
|
|
216 |
|
|
ty_RSLT ren_type_element ( char *_cc , |
217 |
|
|
|
218 |
|
|
ulong *_type ); |
219 |
|
|
|
220 |
|
|
//-- renvoie un pointeur vers les éléments ----------------------------------- |
221 |
|
|
|
222 |
|
|
ty_RSLT ren_velements ( ptr_o_element_com |
223 |
|
|
**_velements ); |
224 |
|
|
|
225 |
|
|
//-- renvoie les éléments 3D ------------------------------------------------- |
226 |
|
|
|
227 |
|
|
ty_RSLT ren_elements_3D ( ptr_o_element_com |
228 |
|
|
*_V_elements_3D ); |
229 |
|
|
|
230 |
|
|
//-- interface avec les o_element_com ---------------------------------------- |
231 |
|
|
|
232 |
|
|
ty_RSLT def_prms_element ( ulong _no_element , // base 1 |
233 |
|
|
ulong _type , |
234 |
|
|
ulong *_vnos_noeuds ); |
235 |
|
|
|
236 |
|
|
//-- interface avec les o_noeuds_com ----------------------------------------- |
237 |
|
|
|
238 |
|
|
ty_RSLT def_coord_noeud ( ulong _no_noeud , // base 1 |
239 |
|
|
vifl *_x , |
240 |
|
|
vifl *_y , |
241 |
|
|
vifl *_z ); |
242 |
|
|
|
243 |
|
|
ty_RSLT def_coord_noeuds ( vifl *_vx , |
244 |
|
|
vifl *_vy , |
245 |
|
|
vifl *_vz ); |
246 |
|
|
|
247 |
|
|
//-- détermination du voisinnage des éléments -------------------------------- |
248 |
|
|
|
249 |
|
|
ty_RSLT trouve_voisins_sg ( void ); |
250 |
|
|
|
251 |
|
|
ty_RSLT trouve_voisins_sg2 ( void ); |
252 |
|
|
|
253 |
|
|
ty_RSLT trouve_voisins_spr ( void ); |
254 |
|
|
|
255 |
|
|
|
256 |
|
|
//---------------------------------------------------------------------------- |
257 |
|
|
//-- renvoie le nombre de voisins d'un élément (sphère et centre spatial) |
258 |
|
|
//-- |
259 |
|
|
//-- note: les voisins sont du même type que l'élément central |
260 |
|
|
//-- |
261 |
|
|
//-- +--------------------------------------------+-------------------------+ |
262 |
|
|
//-- | condition particulière | résultat d'exécution | |
263 |
|
|
//-- +--------------------------------------------+-------------------------+ |
264 |
|
|
//-- +--------------------------------------------+-------------------------+ |
265 |
|
|
|
266 |
|
|
ty_RSLT ren_nbr_voisins_sphere |
267 |
|
|
( ulong _no_element_centre , |
268 |
|
|
vifl *_rayon , |
269 |
|
|
|
270 |
|
|
ulong *_nbr_voisins ); |
271 |
|
|
|
272 |
|
|
//---------------------------------------------------------------------------- |
273 |
|
|
//-- renvoie les voisins d'un élément (sphère et centre spatial) |
274 |
|
|
//-- |
275 |
|
|
//-- notes: |
276 |
|
|
//-- |
277 |
|
|
//-- (1) les voisins sont du même type que l'élément central |
278 |
|
|
//-- (2) Si on ne veut pas avoir la distance, poser: _V_distance = NULL |
279 |
|
|
//-- |
280 |
|
|
//-- +--------------------------------------------+-------------------------+ |
281 |
|
|
//-- | condition particulière | résultat d'exécution | |
282 |
|
|
//-- +--------------------------------------------+-------------------------+ |
283 |
|
|
//-- +--------------------------------------------+-------------------------+ |
284 |
|
|
|
285 |
|
|
ty_RSLT ren_voisins_sphere ( ulong _no_element_centre , |
286 |
|
|
vifl *_rayon , |
287 |
|
|
|
288 |
|
|
ulong *_V_nos_voisins , |
289 |
|
|
vifl *_V_distance ); |
290 |
|
|
|
291 |
|
|
//---------------------------------------------------------------------------- |
292 |
|
|
//-- renvoie les voisins d'un élément (sphère et centre spatial) |
293 |
|
|
//-- |
294 |
|
|
//-- notes: |
295 |
|
|
//-- |
296 |
|
|
//-- (1) les voisins sont du même type que l'élément central |
297 |
|
|
//-- (2) renvoie les numéros des éléments voisins ET la distance entre les |
298 |
|
|
//-- centres spatiaux donc _V_distance != NULL |
299 |
|
|
//-- |
300 |
|
|
//-- +--------------------------------------------+-------------------------+ |
301 |
|
|
//-- | condition particulière | résultat d'exécution | |
302 |
|
|
//-- +--------------------------------------------+-------------------------+ |
303 |
|
|
//-- +--------------------------------------------+-------------------------+ |
304 |
|
|
|
305 |
|
|
ty_RSLT ren_voisins_sphere_v2( ulong _no_element_centre , |
306 |
|
|
vifl *_rayon , |
307 |
|
|
|
308 |
|
|
ulong *_V_nos_voisins , |
309 |
|
|
vifl *_V_distance ); |
310 |
|
|
|
311 |
|
|
//---------------------------------------------------------------------------- |
312 |
|
|
//-- renvoie les numéros des noeuds les plus près d'un point de référence |
313 |
|
|
//-- classés en ordre croissant de distance (euclidienne) ainsi que la |
314 |
|
|
//-- distance pour chacun de ces noeuds |
315 |
|
|
//-- |
316 |
|
|
//-- +--------------------------------------------+-------------------------+ |
317 |
|
|
//-- | condition particulière | résultat d'exécution | |
318 |
|
|
//-- +--------------------------------------------+-------------------------+ |
319 |
|
|
//-- | _nbr_noeuds invalide | co_probleme_1 | |
320 |
|
|
//-- | _x, _y ou _z = NULL | co_probleme_2 | |
321 |
|
|
//-- | _vnos_noeuds = NULL | co_probleme_3 | |
322 |
|
|
//-- | _vdistance = NULL | co_probleme_4 | |
323 |
|
|
//-- | o_noeuds_com::vx = NULL | co_probleme_5 | |
324 |
|
|
//-- +--------------------------------------------+-------------------------+ |
325 |
|
|
|
326 |
|
|
ty_RSLT ren_nos_noeuds ( ulong _nbr_noeuds , // nombre de noeuds |
327 |
|
|
vifl *_x , // coordonnées du point de référence |
328 |
|
|
vifl *_y , |
329 |
|
|
vifl *_z , |
330 |
|
|
|
331 |
|
|
ulong *_V_nos_noeuds , // pointeur vers la zone mémoire où il faut stocker les nos de noeuds |
332 |
|
|
vifl *_V_distance ); // pointeur vers la zone mémoire où il faut stocker la distance pour chaque noeud dans _vnos_noeuds |
333 |
|
|
|
334 |
|
|
|
335 |
|
|
|
336 |
|
|
ty_RSLT ren_nbr_gm_element ( ulong _no_element , |
337 |
|
|
|
338 |
|
|
ulong *_nbr_gm ); |
339 |
|
|
|
340 |
|
|
ty_RSLT ren_no_gm_element ( ulong _no_element , |
341 |
|
|
|
342 |
|
|
ulong *_vno_gm ); // base 1 |
343 |
|
|
|
344 |
|
|
|
345 |
|
|
|
346 |
|
|
ty_RSLT voisinage_TETRA4 ( ulong _no_el , |
347 |
|
|
ulong _type ); |
348 |
|
|
|
349 |
|
|
ty_RSLT voisinage_HEXA8 ( ulong _no_el , |
350 |
|
|
ulong _type ); |
351 |
|
|
|
352 |
|
|
}; |
353 |
|
|
|
354 |
|
|
typedef o_maillage_com *ptr_o_maillage_com; |
355 |
|
|
|
356 |
|
|
//****************************************************************************** |
357 |
|
|
// initialisation de maillage_com h |
358 |
|
|
|
359 |
|
|
ty_RSLT init_maillage_com( void ); |
360 |
|
|
|
361 |
|
|
//****************************************************************************** |
362 |
|
|
// finitialisation de maillage_com h |
363 |
|
|
|
364 |
|
|
ty_RSLT finit_maillage_com( void ); |
365 |
|
|
|
366 |
|
|
#endif |
367 |
|
|
|
368 |
|
|
//* [ FreSOP - base ] *************************************** maillage_com.h * < |