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

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