ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/optimisation/src/maillage_com.h
Revision: 199
Committed: Tue Jul 21 15:00:12 2009 UTC (15 years, 9 months ago) by picher
Content type: text/plain
File size: 18196 byte(s)
Log Message:
Projet d'optimisation

File Contents

# Content
1 //* [ 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 * <

Properties

Name Value
svn:executable