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

# User Rev Content
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 * <

Properties

Name Value
svn:executable