ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/optimisation/src/element_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: 28789 byte(s)
Log Message:
Projet d'optimisation

File Contents

# User Rev Content
1 picher 199 //* [ FreSOP - base ] **************************************** element_com.h * >
2     //
3     // ver.: 20090616
4    
5     #ifndef _element_com_h
6     #define _element_com_h
7    
8     #include "bib_0000.h"
9     #include "bib_m000.h"
10     #include "bib_m012.h"
11     #include "maz.h"
12     #include "mulm.h"
13     #include "noeuds_com.h"
14    
15     //******************************************************************************
16     // constantes globales du module element_com
17    
18     //------------------------------------------------------------------------------
19     //-- constantes publiques (à l'usage de tous)
20    
21     // #define co_max_gm_par_element 5 // un élément peut appartenir à, au plus, ce nombre de gm
22    
23     #define co_type_el_aster_POI1 1
24     #define co_type_el_aster_SEG2 2
25     #define co_type_el_aster_SEG3 3
26     #define co_type_el_aster_SEG4 4
27     #define co_type_el_aster_TRIA3 5
28     #define co_type_el_aster_TRIA6 6
29     #define co_type_el_aster_TRIA7 7
30     #define co_type_el_aster_QUAD4 8
31     #define co_type_el_aster_QUAD8 9
32     #define co_type_el_aster_QUAD9 10
33     #define co_type_el_aster_HEXA8 11
34     #define co_type_el_aster_HEXA20 12
35     #define co_type_el_aster_HEXA27 13
36     #define co_type_el_aster_PENTA6 14
37     #define co_type_el_aster_PENTA15 15
38     #define co_type_el_aster_TETRA4 16
39     #define co_type_el_aster_TETRA10 17
40     #define co_type_el_aster_PYRAM5 18
41     #define co_type_el_aster_PYRAM13 19
42    
43     //------------------------------------------------------------------------------
44     //-- constantes privées (à l'usage de JM) - ne pas utiliser
45    
46     #define co_nbr_max_noeuds 27 // ne pas changer cette valeur !! - nombre maximal de noeuds pour un élément
47     #define co_lcc_max_nom_champ_resu 10 // ne pas changer cette valeur !!
48     #define co_lcc_max_nom_element 8 // ne pas changer cette valeur !! - longueur maximale de la chaine de caractéres dans laquelle est stocké la désignation de l'élément selon code-aster
49     #define co_lcc_max_nom_symbo 20 // ne pas changer cette valeur !!
50     #define co_max_champs_resu 100 // ne pas changer cette valeur !!
51     #define co_max_type_element 19 // ne pas changer cette valeur !!
52     #define co_max_types_elements 20 // ne pas changer cette valeur !!
53     #define co_max_voisins 408 // ne pas changer cette valeur !!
54     #define co_max_voi_type_a 200 // ne pas changer cette valeur !!
55     #define co_max_voi_type_f 8 // ne pas changer cette valeur !!
56     #define co_max_voi_type_s 200 // ne pas changer cette valeur !!
57    
58     //******************************************************************************
59     // structures globales du module element_com
60    
61     //------------------------------------------------------------------------------
62     //-- structures privées (à l'usage de JM) - ne pas utiliser
63    
64     struct ty_infos_elements {
65    
66     char nom[ co_lcc_max_nom_element ] ;
67     ulong nbr_noeuds ;
68     ulong dim ;
69     ulong nbr_ncv_type_a ;
70     ulong nbr_ncv_type_f ;
71    
72     };
73    
74     extern ty_infos_elements infos_elements[ co_max_types_elements ];
75    
76     struct ty_champ_resu {
77    
78     char nom_champ[ co_lcc_max_nom_champ_resu ] ; // ex.: SIXX, VMIS
79     char nom_symbo[ co_lcc_max_nom_symbo ] ; // ex.: SIGM_ELNO_DEPL, EPSI_ELNO_DEPL
80     ulong nbr_items ;
81     vifl *V_items ;
82    
83     };
84    
85     //******************************************************************************
86     // classes globales du module element_com
87    
88     //------------------------------------------------------------------------------
89     //-- notes:
90     //--
91     //-- (1) on suppose que la numérotation des noeuds commence | 1
92     //-- (2) on suppose que la numérotation des éléments commence | 1
93     //-- (3) on suppose que la numérotation des groupes de mailles commence | 1
94     //--
95     //-- (4) type d'élément:
96     //--
97     //-- type = 0 : l'élément n'est pas défini ou n'existe pas
98     //-- type = 1 : POI1
99     //-- type = 2 : SEG2
100     //-- type = 3 : SEG3
101     //-- type = 4 : SEG4
102     //-- type = 5 : TRIA3
103     //-- type = 6 : TRIA6
104     //-- type = 7 : TRIA7
105     //-- type = 8 : QUAD4
106     //-- type = 9 : QUAD8
107     //-- type = 10 : QUAD9
108     //-- type = 11 : HEXA8
109     //-- type = 12 : HEXA20
110     //-- type = 13 : HEXA27
111     //-- type = 14 : PENTA6
112     //-- type = 15 : PENTA15
113     //-- type = 16 : TETRA4
114     //-- type = 17 : TETRA10
115     //-- type = 18 : PYRAM5
116     //-- type = 19 : PYRAM13
117    
118     //------------------------------------------------------------------------------
119     //-- référence rapide des méthodes publiques pour la classe o_element_com
120     //--
121     //-- o_element_com
122     //-- ~o_element_com
123     //-- def_prms
124     //-- ren_existence_resu
125     //-- ren_no_champ_resu
126     //-- ren_nbr_items_champ_resu
127     //-- ren_item_champ_resu
128     //-- ren_coord_centre_geo
129     //-- def_design
130     //-- ren_app_noeud
131     //-- ren_design
132     //-- ren_dim
133     //-- ren_idc_noeud
134     //-- ren_no_noeud
135     //-- ren_no
136     //-- ren_nos_noeuds_min_max
137     //-- ren_type
138     //-- ren_vno_noeuds
139     //-- def_voi_type_a
140     //-- def_voi_type_f
141     //-- def_voi_type_s
142     //-- ren_nbr_ncv_type_a
143     //-- ren_nbr_ncv_type_f
144     //-- ren_nbr_voi_type_a
145     //-- ren_nbr_voi_type_f
146     //-- ren_nbr_voi_type_s
147     //-- ren_nos_voi_type_a
148     //-- ren_nos_voi_type_f
149     //-- ren_nos_voi_type_s
150     //-- ren_nbr_noeuds
151     //-- affiche_bio
152    
153     class o_element_com {
154    
155     //============================================================================
156     //=============================== ATTRIBUTS ==================================
157     //============================================================================
158    
159     ulong no ; // numéro de l'élément dans le fichier maillage
160    
161     ulong type ; // type d'élément (voir ci-haut)
162    
163     ty_RSLT design ; // appartenance (co_oui, co_non ou co_non_defini) de l'élément au domaine de design (optimisation topologique)
164    
165     vifl volume ;
166    
167     vifl x_cs ; // coordonnées du centre spatial de l'élément
168     vifl y_cs ;
169     vifl z_cs ;
170    
171     //-- infos sur les noeuds ----------------------------------------------------
172    
173     ulong no_noeud_max ;
174     ulong no_noeud_min ;
175    
176     ulong *vno_noeuds ; // vecteur contenant les numéros des noeuds de l'élément
177    
178     ptr_o_noeuds_com noeuds ;
179    
180     // //-- infos sur les groupe de mailles -----------------------------------------
181     //
182     // ulong nbr_gm ; // nombre de gm auxquels appartient l'élément
183     //
184     // ulong vnos_gm[ co_max_gm_par_element ] ; //vecteur des numéros de gm auxquels appartient l'élément
185    
186     //-- infos sur les éléments voisins ------------------------------------------
187    
188     ulong nbr_voi_type_a ; // nombre de voisins avec une arète commune
189     ulong nbr_voi_type_f ; // nombre de voisins avec une face commune
190     ulong nbr_voi_type_s ; // nombre de voisins avec un sommet commun
191    
192     ulong *vnos_voi_type_a ;
193     ulong *vnos_voi_type_f ;
194     ulong *vnos_voi_type_s ;
195    
196     //-- champs résultats --------------------------------------------------------
197    
198     ulong nbr_CR ;
199    
200     ty_champ_resu V_CR[co_max_champs_resu] ;
201    
202     //-- drapeaux d'exécution ----------------------------------------------------
203    
204     ty_RSLT def_prms_OK ;
205     ty_RSLT noeuds_OK ;
206    
207     //============================================================================
208     //=========================== MéTHODES PRIVéES ===============================
209     //============================================================================
210    
211     //============================================================================
212     //== initialisation de la classe
213    
214     ty_RSLT initialisation ( void );
215    
216     //============================================================================
217     //== gestion de mémoire
218    
219     ty_RSLT alloc_vno_noeuds ( void );
220    
221     ty_RSLT alloc_vno_voisins ( void );
222    
223     ty_RSLT desalloc_tout ( void );
224    
225     public:
226    
227     //============================================================================
228     //========================== MéTHODES PUBLIQUES ==============================
229     //============================================================================
230    
231     o_element_com ( void );
232     ~o_element_com ( void );
233    
234     //============================================================================
235     //== définition des paramétres de la classe
236    
237     ty_RSLT def_prms ( ulong _no ,
238     ulong _type ,
239     ulong *_vno_noeuds ,
240     ptr_o_noeuds_com _noeuds );
241    
242     //============================================================================
243     //== accesseurs et mutateurs
244    
245     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
246     //=- gestion des champs résultats (déformations, contraintes, etc.)
247    
248     ty_RSLT def_CR ( char *_nom_symbo , // nom symbolique (Code_Aster)
249     ulong _nbr_champs ,
250     ulong _nbr_items ,
251     char **_V_nom_champs ,
252     vifl *_M_items );
253    
254     //----------------------------------------------------------------------------
255     //-- renvoie la valeur moyennée d'un champ résultat
256     //--
257     //-- +--------------------------------------------+-------------------------+
258     //-- | condition | résultat d'exécution |
259     //-- +--------------------------------------------+-------------------------+
260     //-- +--------------------------------------------+-------------------------+
261    
262     ty_RSLT ren_CRm ( char *_nom_symbo , // nom symbolique (Code_Aster)
263     char *_nom_champ ,
264    
265     vifl *_CRm );
266    
267     ty_RSLT ren_existence_CR ( char *_nom_symbo , // nom symbolique (Code_Aster)
268     char *_nom_champ );
269    
270     //----------------------------------------------------------------------------
271     //-- renvoie la valeur d'un item de champ résultat
272     //--
273     //-- +--------------------------------------------+-------------------------+
274     //-- | condition | résultat d'exécution |
275     //-- +--------------------------------------------+-------------------------+
276     //-- | item trouvé | co_pas_de_probleme |
277     //-- | item pas trouvé | co_probleme |
278     //-- +--------------------------------------------+-------------------------+
279    
280     ty_RSLT ren_item_CR ( char *_nom_symbo , // nom symbolique (Code_Aster)
281     char *_nom_champ ,
282     ulong _no_item , // base 1
283    
284     vifl *_item );
285    
286     //----------------------------------------------------------------------------
287     //-- renvoie le nombre d'items pour un champ résultat
288     //--
289     //-- +--------------------------------------------+-------------------------+
290     //-- | condition | résultat d'exécution |
291     //-- +--------------------------------------------+-------------------------+
292     //-- +--------------------------------------------+-------------------------+
293    
294     ty_RSLT ren_nbr_items_CR ( char *_nom_symbo , // nom symbolique (Code_Aster)
295     char *_nom_champ ,
296    
297     ulong *_nbr_items );
298    
299     ty_RSLT ren_no_CR ( char *_nom_symbo , // nom symbolique (Code_Aster)
300     char *_nom_champ ,
301    
302     ulong *_no_CR ); // base 1
303    
304     //----------------------------------------------------------------------------
305     //-- renvoie les coordonnées du centre spatial de l'élément
306     //--
307     //-- +--------------------------------------------+-------------------------+
308     //-- | condition | résultat d'exécution |
309     //-- +--------------------------------------------+-------------------------+
310     //-- +--------------------------------------------+-------------------------+
311    
312     ty_RSLT ren_coord_centre_spatial ( vifl *_x_cs ,
313     vifl *_y_cs ,
314     vifl *_z_cs );
315    
316     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
317     //=- ...
318    
319     //----------------------------------------------------------------------------
320     //-- définition de l'appartenance de l'élément au domaine de design
321     //--
322     //-- +--------------------------------------------+-------------------------+
323     //-- | condition particulière | résultat d'exécution |
324     //-- +--------------------------------------------+-------------------------+
325     //-- | def_prms_OK = co_non | co_probleme_1 |
326     //-- +--------------------------------------------+-------------------------+
327    
328     ty_RSLT def_design ( ty_RSLT _design );
329    
330     //----------------------------------------------------------------------------
331     //-- vérifie si un noeud appartient à l'élément
332     //--
333     //-- +--------------------------------------------+-------------------------+
334     //-- | condition particulière | résultat d'exécution |
335     //-- +--------------------------------------------+-------------------------+
336     //-- | le noeud appartient | l'élément | co_oui |
337     //-- | le noeud n'appartient pas | l'élément | co_non |
338     //-- | def_prms_OK = co_non | co_probleme_1 |
339     //-- +--------------------------------------------+-------------------------+
340    
341     ty_RSLT ren_app_noeud ( ulong _no_noeud );
342    
343     //----------------------------------------------------------------------------
344     //-- vérifie l'appartenance de l'élément au domaine de design
345     //--
346     //-- +--------------------------------------------+-------------------------+
347     //-- | condition particulière | résultat d'exécution |
348     //-- +--------------------------------------------+-------------------------+
349     //-- | def_prms_OK = co_non | co_probleme_1 |
350     //-- | _design = NULL | co_probleme_2 |
351     //-- +--------------------------------------------+-------------------------+
352    
353     ty_RSLT ren_design ( ty_RSLT *_design );
354    
355     //----------------------------------------------------------------------------
356     //-- renvoie la dimensionnalité de l'élément (1, 2 ou 3 selon que l'élément
357     //-- est un élément 1D, 2D ou 3D).
358     //--
359     //-- +--------------------------------------------+-------------------------+
360     //-- | condition particulière | résultat d'exécution |
361     //-- +--------------------------------------------+-------------------------+
362     //-- | def_prms_OK = co_non | co_probleme_1 |
363     //-- | _dim = NULL | co_probleme_2 |
364     //-- +--------------------------------------------+-------------------------+
365    
366     ty_RSLT ren_dim ( ulong *_dim );
367    
368     //----------------------------------------------------------------------------
369     //-- renvoie l'indice (base 1) d'un noeud dans le vecteur des noeuds
370     //--
371     //-- +--------------------------------------------+-------------------------+
372     //-- | condition particulière | résultat d'exécution |
373     //-- +--------------------------------------------+-------------------------+
374     //-- | def_prms_OK = co_non | co_probleme_1 |
375     //-- | _idc_noeud = NULL | co_probleme_2 |
376     //-- +--------------------------------------------+-------------------------+
377    
378     ty_RSLT ren_idc_noeud ( ulong _no_noeud ,
379    
380     ulong *_idc_noeud ); // base 1
381    
382     //----------------------------------------------------------------------------
383     //-- renvoie le numéro d'un des noeuds de l'élément
384     //--
385     //-- +--------------------------------------------+-------------------------+
386     //-- | condition | résultat d'exécution |
387     //-- +--------------------------------------------+-------------------------+
388     //-- | 1. prob.: noeuds_OK = co_non | co_probleme_1 |
389     //-- | 2. prob.: _no_noeud = NULL | co_probleme_2 |
390     //-- | 0. OK | co_pas_de_probleme |
391     //-- +--------------------------------------------+-------------------------+
392    
393     ty_RSLT ren_no_noeud ( ulong _idc_noeud , // indice du noeud (base 1)
394    
395     ulong *_no_noeud );
396    
397     //----------------------------------------------------------------------------
398     //-- renvoie le numéro de l'élément
399     //--
400     //-- +--------------------------------------------+-------------------------+
401     //-- | condition particulière | résultat d'exécution |
402     //-- +--------------------------------------------+-------------------------+
403     //-- | def_prms_OK = co_non | co_probleme_1 |
404     //-- | _no = NULL | co_probleme_2 |
405     //-- +--------------------------------------------+-------------------------+
406    
407     ty_RSLT ren_no ( ulong *_no );
408    
409     //----------------------------------------------------------------------------
410     //-- renvoie les numéros de noeuds min et max de l'élément
411     //--
412     //-- +--------------------------------------------+-------------------------+
413     //-- | condition particulière | résultat d'exécution |
414     //-- +--------------------------------------------+-------------------------+
415     //-- | def_prms_OK = co_non | co_probleme_1 |
416     //-- | _no_noeud_min = NULL | co_probleme_2 |
417     //-- | _no_noeud_max = NULL | co_probleme_3 |
418     //-- +--------------------------------------------+-------------------------+
419    
420     ty_RSLT ren_nos_noeuds_min_max
421     ( ulong *_no_noeud_min ,
422     ulong *_no_noeud_max );
423    
424     //----------------------------------------------------------------------------
425     //-- renvoie le type de l'élément (voir ci-haut pour plus de détails)
426     //--
427     //-- +--------------------------------------------+-------------------------+
428     //-- | condition particulière | résultat d'exécution |
429     //-- +--------------------------------------------+-------------------------+
430     //-- | def_prms_OK = co_non | co_probleme_1 |
431     //-- | _type = NULL | co_probleme_2 |
432     //-- +--------------------------------------------+-------------------------+
433    
434     ty_RSLT ren_type ( ulong *_type );
435    
436     //----------------------------------------------------------------------------
437     //-- renvoie un pointeur vers le vecteur des nos des noeuds de l'élément ----- !! méthode | éliminer/remplacer
438    
439     ty_RSLT ren_vno_noeuds ( ulong **_vno_noeuds );
440    
441     // //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
442     // //=- gestion des numéros de groupes de mailles
443     //
444     // ty_RSLT ajouter_no_gm ( ulong _no_gm ); // base 1
445     //
446     // ty_RSLT def_no_gm ( ulong _idc_no_gm , // base 1
447     // ulong _no_gm ); // base 1
448     //
449     // ty_RSLT def_vnos_gm ( ulong _nbr_nos_gm ,
450     // ulong *_vnos_gm );
451     //
452     // ty_RSLT eliminer_no_gm ( ulong _no_gm ); // base 1
453     //
454     // ty_RSLT ren_nbr_nos_gm ( ulong *_nbr_nos_gm ); // base 1
455     //
456     // ty_RSLT ren_no_gm ( ulong _idc_no_gm , // base 1
457     //
458     // ulong *_no_gm ); // base 1
459     //
460     // ty_RSLT ren_vnos_gm ( ulong *_vnos_gm ); // copie
461    
462     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
463     //=- gestion des voisins
464    
465     ty_RSLT def_voi_type_a ( ulong _nbr_voi_type_a ,
466     ulong *_vnos_voi_type_a );
467     ty_RSLT def_voi_type_f ( ulong _nbr_voi_type_f ,
468     ulong *_vnos_voi_type_f );
469     ty_RSLT def_voi_type_s ( ulong _nbr_voi_type_s ,
470     ulong *_vnos_voi_type_s );
471    
472     //----------------------------------------------------------------------------
473     //-- renvoie le nombre de noeuds communs pour avoir un voisin sur une arète,
474     //-- une face ou un sommet
475     //--
476     //-- +--------------------------------------------+-------------------------+
477     //-- | condition particulière | résultat d'exécution |
478     //-- +--------------------------------------------+-------------------------+
479     //-- | _nbr_ncv_type_a ou _f = NULL | co_probleme_arg |
480     //-- | o_element_com::type = 0 | co_n_existe_pas |
481     //-- | o_element_com::type > co_max_type_element | co_probleme_1 |
482     //-- +--------------------------------------------+-------------------------+
483    
484     ty_RSLT ren_nbr_ncv_type_a ( ulong *_nbr_ncv_type_a );
485     ty_RSLT ren_nbr_ncv_type_f ( ulong *_nbr_ncv_type_f );
486    
487     ty_RSLT ren_nbr_voi_type_a ( ulong *_nbr_voi_type_a );
488     ty_RSLT ren_nbr_voi_type_f ( ulong *_nbr_voi_type_f );
489     ty_RSLT ren_nbr_voi_type_s ( ulong *_nbr_voi_type_s );
490    
491     ty_RSLT ren_nos_voi_type_a ( ulong *_vnos_voi_type_a ); // copie
492     ty_RSLT ren_nos_voi_type_f ( ulong *_vnos_voi_type_f ); // copie
493     ty_RSLT ren_nos_voi_type_s ( ulong *_vnos_voi_type_s ); // copie
494    
495     //----------------------------------------------------------------------------
496     //-- renvoie le nombre de noeuds de l'élément
497     //--
498     //-- +--------------------------------------------+-------------------------+
499     //-- | condition particulière | résultat d'exécution |
500     //-- +--------------------------------------------+-------------------------+
501     //-- | def_prms_OK = co_non | co_probleme_1 |
502     //-- | _nbr_noeuds = NULL | co_probleme_2 |
503     //-- +--------------------------------------------+-------------------------+
504     //-- | OK | co_pas_de_probléme |
505     //-- +--------------------------------------------+-------------------------+
506    
507     ty_RSLT ren_nbr_noeuds ( ulong *_nbr_noeuds );
508    
509     //----------------------------------------------------------------------------
510     //-- renvoie le volume de l'élément
511     //--
512     //-- +--------------------------------------------+-------------------------+
513     //-- | condition | résultat d'exécution |
514     //-- +--------------------------------------------+-------------------------+
515     //-- | 0. OK | co_pas_de_probleme |
516     //-- +--------------------------------------------+-------------------------+
517    
518     ty_RSLT ren_volume ( vifl *_volume );
519    
520     //============================================================================
521     //== autres méthodes
522    
523     //-- affiche les infos sur la classe -----------------------------------------
524    
525     ty_RSLT affiche_bio ( void );
526    
527     };
528    
529     typedef o_element_com *ptr_o_element_com;
530    
531     //******************************************************************************
532     // initialisation de element_com h
533    
534     ty_RSLT init_element_com( void );
535    
536     //******************************************************************************
537     // finitialisation de element_com h
538    
539     ty_RSLT finit_element_com( void );
540    
541     #endif
542    
543    
544     //------------------------------------------------------------------------------
545     // structure de données pour les champs résultats
546     //
547     // nbr_champs_resu
548     //
549     // V_champs_resu ---[1]---|--> nom_symbo
550     // |--> nom_champ
551     // |--> nbr_items
552     // |--> V_items ---[1]---|--> 3.8e+08
553     // ---[2]---|--> 4.1e+08
554     // ...
555     //
556     // ---[2]---|--> nom_symbo
557     // |--> nom_champ
558     // |--> nbr_items
559     // |--> V_items ---[1]---|--> 3.8e+08
560     // ---[2]---|--> 4.1e+08
561     // ...
562     //
563     // ...
564    
565    
566    
567    
568    
569    
570    
571    
572    
573    
574    
575    
576    
577    
578    
579    
580    
581    
582    
583    
584    
585    
586    
587    
588    
589    

Properties

Name Value
svn:executable