MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_maillage.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// fem_maillage.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include <fstream>
26 #include <iostream>
27 #include <string.h>
28 #include <math.h>
29 
30 
31 #include "fem_maillage.h"
32 #include "fem_segment2.h"
33 #include "fem_mini_segment2.h"
34 #include "fem_segment3.h"
35 #include "fem_triangle3.h"
36 #include "fem_triangle6.h"
37 #include "fem_quadrangle4.h"
38 #include "fem_quadrangle8.h"
39 #include "fem_tetra4.h"
40 #include "fem_tetra10.h"
41 #include "fem_hexa8.h"
42 #include "fem_hexa20.h"
43 #include "fem_penta6.h"
44 #include "fem_penta15.h"
45 #include "fem_graph_noeud.h"
46 #include "mg_gestionnaire.h"
47 #include "mc_gestionnaire.h"
48 #include "mc_propriete.h"
49 #include "mc_materiau.h"
50 #include "ot_decalage_parametre.h"
51 #include "tpl_map_entite.h"
52 #include "tpl_liste_entite.h"
54 
55 
56 
57 FEM_MAILLAGE::FEM_MAILLAGE(MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg):MG_IDENTIFICATEUR(),mg_geometrie(geo),maillage(mai),degre(deg),deforme(0),reaction(0),est_structure(false)
58 {
59 }
60 
61 FEM_MAILLAGE::FEM_MAILLAGE(unsigned long num,MG_GEOMETRIE* geo,MG_MAILLAGE* mai,int deg):MG_IDENTIFICATEUR(num),mg_geometrie(geo),maillage(mai),degre(deg),deforme(0),reaction(0),est_structure(false)
62 {
63 }
64 
66 {
72 }
73 
75 {
78  long decalage=mai->get_id()-this->get_id();
79  LISTE_ENTITE::const_iterator i;
80  for (i=lst_entite.begin();i!=lst_entite.end();i++)
81  {
83  ele.dupliquer(mai,decalage);
84  }
85  return mai;
86 }
87 
89 {
90  return mg_geometrie;
91 }
92 
94 {
95  return maillage;
96 }
97 
99 {
100  return degre;
101 }
102 
104 {
105 degre=deg;
106 }
107 
108 
109 
111 {
112  return ( lst_entite.find ( id ) != lst_entite.end() );
113 }
114 
116 {
117  gest=mggest;
118 }
119 
121 {
122  FEM_NOEUD* femnoeud;
123  if (num==0) femnoeud=new FEM_NOEUD(mgnoeud);
124  else femnoeud=new FEM_NOEUD(num,mgnoeud);
125  int resultat = ajouter_fem_noeud(femnoeud);
126  if (resultat==FAIL)
127  {
128  delete femnoeud;
129  return NULL;
130  }
131  return femnoeud;
132 }
133 
135 {
136  gest->recherche_bonid(*femnoeud);
137  MG_IDENTIFICATEUR *id=femnoeud;
138  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
139  if (!p.second)
140  {
141  return FAIL;
142  }
143 
144  std::pair<const unsigned long,FEM_NOEUD*> tmp(femnoeud->get_id(),femnoeud);
145  lst_fem_noeud.insert(tmp);
146  return OK;
147 }
148 
149 
151 {
152  LISTE_FEM_NOEUD::iterator i=lst_fem_noeud.find(num);
153  if (i==lst_fem_noeud.end())
154  {
155  return NULL;
156  }
157  return ((*i).second);
158 }
159 
160 
161 
163 {
164  if (!(num<lst_fem_noeud.size()))
165  {
166  return NULL;
167  }
168  LISTE_FEM_NOEUD::iterator i = lst_fem_noeud.begin();
169  std::advance(i, num);
170 
171  return ((*i).second);
172 }
173 
174 FEM_NOEUD* FEM_MAILLAGE::get_premier_noeud(LISTE_FEM_NOEUD::iterator & it)
175 {
176  it = lst_fem_noeud.begin();
177  if (it == lst_fem_noeud.end())
178  return NULL;
179  return it->second ;
180 }
181 
182 FEM_NOEUD* FEM_MAILLAGE::get_suivant_noeud(LISTE_FEM_NOEUD::iterator & it)
183 {
184  it++;
185  if (it==lst_fem_noeud.end())
186  return NULL;
187  return it->second;
188 }
189 
191 {
192  return lst_fem_noeud.size();
193 }
194 
195 
197 {
198  FEM_NOEUD* femnoeud=get_fem_noeudid(num);
199  if (femnoeud==NULL)
200  {
201  return FAIL;
202  }
203  MG_IDENTIFICATEUR* id=femnoeud;
204  LISTE_ENTITE::iterator i=lst_entite.find(id);
205  lst_entite.erase(i);
206  LISTE_FEM_NOEUD::iterator j=lst_fem_noeud.find(num);
207  lst_fem_noeud.erase(j);
208  delete femnoeud;
209  return OK;
210 }
211 
212 
214 {
215  FEM_NOEUD* femnoeud=get_fem_noeud(num);
216  if (femnoeud==NULL)
217  {
218  return FAIL;
219  }
220  MG_IDENTIFICATEUR* id=femnoeud;
221  LISTE_ENTITE::iterator i=lst_entite.find(id);
222  lst_entite.erase(i);
223  LISTE_FEM_NOEUD::iterator j=lst_fem_noeud.begin();
224  for (unsigned int k=0;k<num;k++) j++;
225  lst_fem_noeud.erase(j);
226  delete femnoeud;
227  return OK;
228 }
229 
230 
232 {
233  while (get_nb_fem_noeud()!=0)
234  {
235  LISTE_FEM_NOEUD::iterator j=lst_fem_noeud.begin();
236  FEM_NOEUD* femnoeud=(*j).second;
237  MG_IDENTIFICATEUR* id=femnoeud;
238  LISTE_ENTITE::iterator i=lst_entite.find(id);
239  lst_entite.erase(i);
240  lst_fem_noeud.erase(j);
241  delete femnoeud;
242  }
243 }
244 
245 
247 {
248  gest->recherche_bonid(*femnoeud);
249  MG_IDENTIFICATEUR *id=femnoeud;
250  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
251  if (!p.second)
252  {
253  return FAIL;
254  }
255 
256  std::pair<const unsigned long,FEM_ELEMENT0*> tmp(femnoeud->get_id(),femnoeud);
257  lst_fem_element0.insert(tmp);
258  return OK;
259 }
260 
262 {
263  LISTE_FEM_ELEMENT0::iterator i=lst_fem_element0.find(num);
264  if (i==lst_fem_element0.end())
265  {
266  return NULL;
267  }
268  return ((*i).second);
269 }
270 
272 {
273  return lst_fem_element0.size();
274 }
275 
276 
277 
279 {
280  if (!(num<lst_fem_element0.size()))
281  {
282  return NULL;
283  }
284  LISTE_FEM_ELEMENT0::iterator i=lst_fem_element0.begin();
285  for (unsigned long j=0;j<num;j++) i++;
286  return ((*i).second);
287 }
288 
289 
290 
292 {
294  if (fem==NULL)
295  {
296  return FAIL;
297  }
298  MG_IDENTIFICATEUR* id=fem;
299  LISTE_ENTITE::iterator i=lst_entite.find(id);
300  lst_entite.erase(i);
301  LISTE_FEM_ELEMENT0::iterator j=lst_fem_element0.find(num);
302  lst_fem_element0.erase(j);
303  delete fem;
304  return OK;
305 }
306 
308 {
309  FEM_ELEMENT0* fem=get_fem_element0(num);
310  if (fem==NULL)
311  {
312  return FAIL;
313  }
314  MG_IDENTIFICATEUR* id=fem;
315  LISTE_ENTITE::iterator i=lst_entite.find(id);
316  lst_entite.erase(i);
317  LISTE_FEM_ELEMENT0::iterator j=lst_fem_element0.find(num);
318  lst_fem_element0.erase(j);
319  delete fem;
320  return OK;
321 }
322 
324 {
325  while (get_nb_fem_element0()!=0)
326  {
327  LISTE_FEM_ELEMENT0::iterator j=lst_fem_element0.begin();
328  FEM_ELEMENT0* fem=(*j).second;
329  MG_IDENTIFICATEUR* id=fem;
330  LISTE_ENTITE::iterator i=lst_entite.find(id);
331  lst_entite.erase(i);
332  lst_fem_element0.erase(j);
333  delete fem;
334  }
335 }
336 
337 
338 FEM_ELEMENT0* FEM_MAILLAGE::get_premier_element0(LISTE_FEM_ELEMENT0::iterator & it)
339 {
340  it = lst_fem_element0.begin();
341  if (it == lst_fem_element0.end())
342  return NULL;
343  return it->second ;
344 }
345 
346 FEM_ELEMENT0* FEM_MAILLAGE::get_suivant_element0(LISTE_FEM_ELEMENT0::iterator & it)
347 {
348  it++;
349  if (it==lst_fem_element0.end())
350  return NULL;
351  return it->second;
352 }
353 
354 
355 
356 
358 {
359  gest->recherche_bonid(*femsegment);
360  MG_IDENTIFICATEUR *id=femsegment;
361  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
362  if (!p.second)
363  {
364  return FAIL;
365  }
366 
367  std::pair<const unsigned long,FEM_ELEMENT1*> tmp(femsegment->get_id(),femsegment);
368  lst_fem_element1.insert(tmp);
369  return OK;
370 }
371 
373 {
374  LISTE_FEM_ELEMENT1::iterator i=lst_fem_element1.find(num);
375  if (i==lst_fem_element1.end())
376  {
377  return NULL;
378  }
379  return ((*i).second);
380 }
381 
383 {
384  return lst_fem_element1.size();
385 }
386 
387 
388 
390 {
391  if (!(num<lst_fem_element1.size()))
392  {
393  return NULL;
394  }
395  LISTE_FEM_ELEMENT1::iterator i=lst_fem_element1.begin();
396  for (unsigned long j=0;j<num;j++) i++;
397  return ((*i).second);
398 }
399 
400 
401 
403 {
404  FEM_ELEMENT1* femsegment=get_fem_element1id(num);
405  if (femsegment==NULL)
406  {
407  return FAIL;
408  }
409  MG_IDENTIFICATEUR* id=femsegment;
410  LISTE_ENTITE::iterator i=lst_entite.find(id);
411  lst_entite.erase(i);
412  LISTE_FEM_ELEMENT1::iterator j=lst_fem_element1.find(num);
413  lst_fem_element1.erase(j);
414  delete femsegment;
415  return OK;
416 }
417 
419 {
420  FEM_ELEMENT1* femsegment=get_fem_element1(num);
421  if (femsegment==NULL)
422  {
423  return FAIL;
424  }
425  MG_IDENTIFICATEUR* id=femsegment;
426  LISTE_ENTITE::iterator i=lst_entite.find(id);
427  lst_entite.erase(i);
428  LISTE_FEM_ELEMENT1::iterator j=lst_fem_element1.find(num);
429  lst_fem_element1.erase(j);
430  delete femsegment;
431  return OK;
432 }
433 
435 {
436  while (get_nb_fem_element1()!=0)
437  {
438  LISTE_FEM_ELEMENT1::iterator j=lst_fem_element1.begin();
439  FEM_ELEMENT1* femsegment=(*j).second;
440  MG_IDENTIFICATEUR* id=femsegment;
441  LISTE_ENTITE::iterator i=lst_entite.find(id);
442  lst_entite.erase(i);
443  lst_fem_element1.erase(j);
444  delete femsegment;
445  }
446 }
447 
448 
449 FEM_ELEMENT1* FEM_MAILLAGE::get_premier_element1(LISTE_FEM_ELEMENT1::iterator & it)
450 {
451  it = lst_fem_element1.begin();
452  if (it == lst_fem_element1.end())
453  return NULL;
454  return it->second ;
455 }
456 
457 FEM_ELEMENT1* FEM_MAILLAGE::get_suivant_element1(LISTE_FEM_ELEMENT1::iterator & it)
458 {
459  it++;
460  if (it==lst_fem_element1.end())
461  return NULL;
462  return it->second;
463 }
464 
465 
466 
467 
468 
470 {
471  gest->recherche_bonid(*femtriangle);
472  MG_IDENTIFICATEUR *id=femtriangle;
473  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
474  if (!p.second)
475  {
476  return FAIL;
477  }
478 
479  std::pair<const unsigned long,FEM_ELEMENT2*> tmp(femtriangle->get_id(),femtriangle);
480  lst_fem_element2.insert(tmp);
481  return OK;
482 }
483 
485 {
486  LISTE_FEM_ELEMENT2::iterator i=lst_fem_element2.find(num);
487  if (i==lst_fem_element2.end())
488  {
489  return NULL;
490  }
491  return ((*i).second);
492 }
493 
495 {
496  return lst_fem_element2.size();
497 }
498 
499 
500 
502 {
503  if (!(num<lst_fem_element2.size()))
504  {
505  return NULL;
506  }
507  LISTE_FEM_ELEMENT2::iterator i=lst_fem_element2.begin();
508  for (unsigned long j=0;j<num;j++) i++;
509  return ((*i).second);
510 }
511 
512 
513 
515 {
516  FEM_ELEMENT2* femtriangle=get_fem_element2id(num);
517  if (femtriangle==NULL)
518  {
519  return FAIL;
520  }
521  MG_IDENTIFICATEUR* id=femtriangle;
522  LISTE_ENTITE::iterator i=lst_entite.find(id);
523  lst_entite.erase(i);
524  LISTE_FEM_ELEMENT2::iterator j=lst_fem_element2.find(num);
525  lst_fem_element2.erase(j);
526  delete femtriangle;
527  return OK;
528 }
529 
531 {
532  FEM_ELEMENT2* femtriangle=get_fem_element2(num);
533  if (femtriangle==NULL)
534  {
535  return FAIL;
536  }
537  MG_IDENTIFICATEUR* id=femtriangle;
538  LISTE_ENTITE::iterator i=lst_entite.find(id);
539  lst_entite.erase(i);
540  LISTE_FEM_ELEMENT2::iterator j=lst_fem_element2.find(num);
541  lst_fem_element2.erase(j);
542  delete femtriangle;
543  return OK;
544 }
545 
547 {
548  while (get_nb_fem_element2()!=0)
549  {
550  LISTE_FEM_ELEMENT2::iterator j=lst_fem_element2.begin();
551  FEM_ELEMENT2* femtriangle=(*j).second;
552  MG_IDENTIFICATEUR* id=femtriangle;
553  LISTE_ENTITE::iterator i=lst_entite.find(id);
554  lst_entite.erase(i);
555  lst_fem_element2.erase(j);
556  delete femtriangle;
557  }
558 }
559 
560 
561 FEM_ELEMENT2* FEM_MAILLAGE::get_premier_element2(LISTE_FEM_ELEMENT2::iterator & it)
562 {
563  it = lst_fem_element2.begin();
564  if (it == lst_fem_element2.end())
565  return NULL;
566  return it->second ;
567 }
568 
569 FEM_ELEMENT2* FEM_MAILLAGE::get_suivant_element2(LISTE_FEM_ELEMENT2::iterator & it)
570 {
571  it++;
572  if (it==lst_fem_element2.end())
573  return NULL;
574  return it->second;
575 }
576 
577 
578 
579 
581 {
582  gest->recherche_bonid(*femele);
583  MG_IDENTIFICATEUR *id=femele;
584  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
585  if (!p.second)
586  {
587  return FAIL;
588  }
589 
590  std::pair<const unsigned long,FEM_ELEMENT3*> tmp(femele->get_id(),femele);
591  lst_fem_element3.insert(tmp);
592  return OK;
593 }
594 
596 {
597  LISTE_FEM_ELEMENT3::iterator i=lst_fem_element3.find(num);
598  if (i==lst_fem_element3.end())
599  {
600  return NULL;
601  }
602  return ((*i).second);
603 }
604 
606 {
607  return lst_fem_element3.size();
608 }
609 
610 
611 
613 {
614  if (!(num<lst_fem_element3.size()))
615  {
616  return NULL;
617  }
618  LISTE_FEM_ELEMENT3::iterator i=lst_fem_element3.begin();
619  for (unsigned long j=0;j<num;j++) i++;
620  return ((*i).second);
621 }
622 
623 
624 
626 {
627  FEM_ELEMENT3* femele=get_fem_element3id(num);
628  if (femele==NULL)
629  {
630  return FAIL;
631  }
632  MG_IDENTIFICATEUR* id=femele;
633  LISTE_ENTITE::iterator i=lst_entite.find(id);
634  lst_entite.erase(i);
635  LISTE_FEM_ELEMENT3::iterator j=lst_fem_element3.find(num);
636  lst_fem_element3.erase(j);
637  delete femele;
638  return OK;
639 }
640 
642 {
643  FEM_ELEMENT3* femele=get_fem_element3(num);
644  if (femele==NULL)
645  {
646  return FAIL;
647  }
648  MG_IDENTIFICATEUR* id=femele;
649  LISTE_ENTITE::iterator i=lst_entite.find(id);
650  lst_entite.erase(i);
651  LISTE_FEM_ELEMENT3::iterator j=lst_fem_element3.find(num);
652  lst_fem_element3.erase(j);
653  delete femele;
654  return OK;
655 }
656 
658 {
659  while (get_nb_fem_element3()!=0)
660  {
661  LISTE_FEM_ELEMENT3::iterator j=lst_fem_element3.begin();
662  FEM_ELEMENT3* femele=(*j).second;
663  MG_IDENTIFICATEUR* id=femele;
664  LISTE_ENTITE::iterator i=lst_entite.find(id);
665  lst_entite.erase(i);
666  lst_fem_element3.erase(j);
667  delete femele;
668  }
669 }
670 
671 
672 FEM_ELEMENT3* FEM_MAILLAGE::get_premier_element3(LISTE_FEM_ELEMENT3::iterator & it)
673 {
674  it = lst_fem_element3.begin();
675  if (it == lst_fem_element3.end())
676  return NULL;
677  return it->second ;
678 }
679 
680 FEM_ELEMENT3* FEM_MAILLAGE::get_suivant_element3(LISTE_FEM_ELEMENT3::iterator & it)
681 {
682  it++;
683  if (it==lst_fem_element3.end())
684  return NULL;
685  return it->second;
686 }
687 
688 
689 
691 {
692  gest->recherche_bonid(*femele);
693  MG_IDENTIFICATEUR *id=femele;
694  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
695  if (!p.second)
696  {
697  return FAIL;
698  }
699 
700  std::pair<const unsigned long,XFEM_ELEMENT0*> tmp(femele->get_id(),femele);
701  lst_xfem_element0.insert(tmp);
702  return OK;
703 }
704 
706 {
707  LISTE_XFEM_ELEMENT0::iterator i=lst_xfem_element0.find(num);
708  if (i==lst_xfem_element0.end())
709  {
710  return NULL;
711  }
712  return ((*i).second);
713 }
714 
716 {
717  return lst_xfem_element0.size();
718 }
719 
720 
721 
723 {
724  if (!(num<lst_xfem_element0.size()))
725  {
726  return NULL;
727  }
728  LISTE_XFEM_ELEMENT0::iterator i=lst_xfem_element0.begin();
729  for (unsigned long j=0;j<num;j++) i++;
730  return ((*i).second);
731 }
732 
733 
734 
736 {
737  XFEM_ELEMENT0* femele=get_xfem_element0id(num);
738  if (femele==NULL)
739  {
740  return FAIL;
741  }
742  MG_IDENTIFICATEUR* id=femele;
743  LISTE_ENTITE::iterator i=lst_entite.find(id);
744  lst_entite.erase(i);
745  LISTE_XFEM_ELEMENT0::iterator j=lst_xfem_element0.find(num);
746  lst_xfem_element0.erase(j);
747  delete femele;
748  return OK;
749 }
750 
752 {
753  XFEM_ELEMENT0* femele=get_xfem_element0(num);
754  if (femele==NULL)
755  {
756  return FAIL;
757  }
758  MG_IDENTIFICATEUR* id=femele;
759  LISTE_ENTITE::iterator i=lst_entite.find(id);
760  lst_entite.erase(i);
761  LISTE_XFEM_ELEMENT0::iterator j=lst_xfem_element0.find(num);
762  lst_xfem_element0.erase(j);
763  delete femele;
764  return OK;
765 }
766 
768 {
769  while (get_nb_xfem_element0()!=0)
770  {
771  LISTE_XFEM_ELEMENT0::iterator j=lst_xfem_element0.begin();
772  XFEM_ELEMENT0* femele=(*j).second;
773  MG_IDENTIFICATEUR* id=femele;
774  LISTE_ENTITE::iterator i=lst_entite.find(id);
775  lst_entite.erase(i);
776  lst_xfem_element0.erase(j);
777  delete femele;
778  }
779 }
780 
781 
782 XFEM_ELEMENT0* FEM_MAILLAGE::get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator & it)
783 {
784  it = lst_xfem_element0.begin();
785  if (it == lst_xfem_element0.end())
786  return NULL;
787  return it->second ;
788 }
789 
790 XFEM_ELEMENT0* FEM_MAILLAGE::get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator & it)
791 {
792  it++;
793  if (it==lst_xfem_element0.end())
794  return NULL;
795  return it->second;
796 }
797 
798 
799 
800 
802 {
803  gest->recherche_bonid(*femele);
804  MG_IDENTIFICATEUR *id=femele;
805  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
806  if (!p.second)
807  {
808  return FAIL;
809  }
810 
811  std::pair<const unsigned long,XFEM_ELEMENT1*> tmp(femele->get_id(),femele);
812  lst_xfem_element1.insert(tmp);
813  return OK;
814 }
815 
817 {
818  LISTE_XFEM_ELEMENT1::iterator i=lst_xfem_element1.find(num);
819  if (i==lst_xfem_element1.end())
820  {
821  return NULL;
822  }
823  return ((*i).second);
824 }
825 
827 {
828  return lst_xfem_element1.size();
829 }
830 
831 
832 
834 {
835  if (!(num<lst_xfem_element1.size()))
836  {
837  return NULL;
838  }
839  LISTE_XFEM_ELEMENT1::iterator i=lst_xfem_element1.begin();
840  for (unsigned long j=0;j<num;j++) i++;
841  return ((*i).second);
842 }
843 
844 
845 
847 {
848  XFEM_ELEMENT1* femele=get_xfem_element1id(num);
849  if (femele==NULL)
850  {
851  return FAIL;
852  }
853  MG_IDENTIFICATEUR* id=femele;
854  LISTE_ENTITE::iterator i=lst_entite.find(id);
855  lst_entite.erase(i);
856  LISTE_XFEM_ELEMENT1::iterator j=lst_xfem_element1.find(num);
857  lst_xfem_element1.erase(j);
858  delete femele;
859  return OK;
860 }
861 
863 {
864  XFEM_ELEMENT1* femele=get_xfem_element1(num);
865  if (femele==NULL)
866  {
867  return FAIL;
868  }
869  MG_IDENTIFICATEUR* id=femele;
870  LISTE_ENTITE::iterator i=lst_entite.find(id);
871  lst_entite.erase(i);
872  LISTE_XFEM_ELEMENT1::iterator j=lst_xfem_element1.find(num);
873  lst_xfem_element1.erase(j);
874  delete femele;
875  return OK;
876 }
877 
879 {
880  while (get_nb_xfem_element1()!=0)
881  {
882  LISTE_XFEM_ELEMENT1::iterator j=lst_xfem_element1.begin();
883  XFEM_ELEMENT1* femele=(*j).second;
884  MG_IDENTIFICATEUR* id=femele;
885  LISTE_ENTITE::iterator i=lst_entite.find(id);
886  lst_entite.erase(i);
887  lst_xfem_element1.erase(j);
888  delete femele;
889  }
890 }
891 
892 
893 XFEM_ELEMENT1* FEM_MAILLAGE::get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator & it)
894 {
895  it = lst_xfem_element1.begin();
896  if (it == lst_xfem_element1.end())
897  return NULL;
898  return it->second ;
899 }
900 
901 XFEM_ELEMENT1* FEM_MAILLAGE::get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator & it)
902 {
903  it++;
904  if (it==lst_xfem_element1.end())
905  return NULL;
906  return it->second;
907 }
908 
909 
910 
911 
912 
914 {
915  gest->recherche_bonid(*femele);
916  MG_IDENTIFICATEUR *id=femele;
917  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
918  if (!p.second)
919  {
920  return FAIL;
921  }
922 
923  std::pair<const unsigned long,XFEM_ELEMENT2*> tmp(femele->get_id(),femele);
924  lst_xfem_element2.insert(tmp);
925  return OK;
926 }
927 
929 {
930  LISTE_XFEM_ELEMENT2::iterator i=lst_xfem_element2.find(num);
931  if (i==lst_xfem_element2.end())
932  {
933  return NULL;
934  }
935  return ((*i).second);
936 }
937 
939 {
940  return lst_xfem_element2.size();
941 }
942 
943 
944 
946 {
947  if (!(num<lst_xfem_element2.size()))
948  {
949  return NULL;
950  }
951  LISTE_XFEM_ELEMENT2::iterator i=lst_xfem_element2.begin();
952  for (unsigned long j=0;j<num;j++) i++;
953  return ((*i).second);
954 }
955 
956 
957 
959 {
960  XFEM_ELEMENT2* femele=get_xfem_element2id(num);
961  if (femele==NULL)
962  {
963  return FAIL;
964  }
965  MG_IDENTIFICATEUR* id=femele;
966  LISTE_ENTITE::iterator i=lst_entite.find(id);
967  lst_entite.erase(i);
968  LISTE_XFEM_ELEMENT2::iterator j=lst_xfem_element2.find(num);
969  lst_xfem_element2.erase(j);
970  delete femele;
971  return OK;
972 }
973 
975 {
976  XFEM_ELEMENT2* femele=get_xfem_element2(num);
977  if (femele==NULL)
978  {
979  return FAIL;
980  }
981  MG_IDENTIFICATEUR* id=femele;
982  LISTE_ENTITE::iterator i=lst_entite.find(id);
983  lst_entite.erase(i);
984  LISTE_XFEM_ELEMENT2::iterator j=lst_xfem_element2.find(num);
985  lst_xfem_element2.erase(j);
986  delete femele;
987  return OK;
988 }
989 
991 {
992  while (get_nb_xfem_element2()!=0)
993  {
994  LISTE_XFEM_ELEMENT2::iterator j=lst_xfem_element2.begin();
995  XFEM_ELEMENT2* femele=(*j).second;
996  MG_IDENTIFICATEUR* id=femele;
997  LISTE_ENTITE::iterator i=lst_entite.find(id);
998  lst_entite.erase(i);
999  lst_xfem_element2.erase(j);
1000  delete femele;
1001  }
1002 }
1003 
1004 
1005 XFEM_ELEMENT2* FEM_MAILLAGE::get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator & it)
1006 {
1007  it = lst_xfem_element2.begin();
1008  if (it == lst_xfem_element2.end())
1009  return NULL;
1010  return it->second ;
1011 }
1012 
1013 XFEM_ELEMENT2* FEM_MAILLAGE::get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator & it)
1014 {
1015  it++;
1016  if (it==lst_xfem_element2.end())
1017  return NULL;
1018  return it->second;
1019 }
1020 
1021 
1022 
1023 
1024 
1026 {
1027  gest->recherche_bonid(*femele);
1028  MG_IDENTIFICATEUR *id=femele;
1029  std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1030  if (!p.second)
1031  {
1032  return FAIL;
1033  }
1034 
1035  std::pair<const unsigned long,XFEM_ELEMENT3*> tmp(femele->get_id(),femele);
1036  lst_xfem_element3.insert(tmp);
1037  return OK;
1038 }
1039 
1041 {
1042  LISTE_XFEM_ELEMENT3::iterator i=lst_xfem_element3.find(num);
1043  if (i==lst_xfem_element3.end())
1044  {
1045  return NULL;
1046  }
1047  return ((*i).second);
1048 }
1049 
1051 {
1052  return lst_xfem_element3.size();
1053 }
1054 
1055 
1056 
1058 {
1059  if (!(num<lst_xfem_element3.size()))
1060  {
1061  return NULL;
1062  }
1063  LISTE_XFEM_ELEMENT3::iterator i=lst_xfem_element3.begin();
1064  for (unsigned long j=0;j<num;j++) i++;
1065  return ((*i).second);
1066 }
1067 
1068 
1069 
1071 {
1072  XFEM_ELEMENT3* femele=get_xfem_element3id(num);
1073  if (femele==NULL)
1074  {
1075  return FAIL;
1076  }
1077  MG_IDENTIFICATEUR* id=femele;
1078  LISTE_ENTITE::iterator i=lst_entite.find(id);
1079  lst_entite.erase(i);
1080  LISTE_XFEM_ELEMENT3::iterator j=lst_xfem_element3.find(num);
1081  lst_xfem_element3.erase(j);
1082  delete femele;
1083  return OK;
1084 }
1085 
1087 {
1088  XFEM_ELEMENT3* femele=get_xfem_element3(num);
1089  if (femele==NULL)
1090  {
1091  return FAIL;
1092  }
1093  MG_IDENTIFICATEUR* id=femele;
1094  LISTE_ENTITE::iterator i=lst_entite.find(id);
1095  lst_entite.erase(i);
1096  LISTE_XFEM_ELEMENT3::iterator j=lst_xfem_element3.find(num);
1097  lst_xfem_element3.erase(j);
1098  delete femele;
1099  return OK;
1100 }
1101 
1103 {
1104  while (get_nb_xfem_element3()!=0)
1105  {
1106  LISTE_XFEM_ELEMENT3::iterator j=lst_xfem_element3.begin();
1107  XFEM_ELEMENT3* femele=(*j).second;
1108  MG_IDENTIFICATEUR* id=femele;
1109  LISTE_ENTITE::iterator i=lst_entite.find(id);
1110  lst_entite.erase(i);
1111  lst_xfem_element3.erase(j);
1112  delete femele;
1113  }
1114 }
1115 
1116 
1117 XFEM_ELEMENT3* FEM_MAILLAGE::get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator & it)
1118 {
1119  it = lst_xfem_element3.begin();
1120  if (it == lst_xfem_element3.end())
1121  return NULL;
1122  return it->second ;
1123 }
1124 
1125 XFEM_ELEMENT3* FEM_MAILLAGE::get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator & it)
1126 {
1127  it++;
1128  if (it==lst_xfem_element3.end())
1129  return NULL;
1130  return it->second;
1131 }
1132 
1133 
1134 
1135 
1136 void FEM_MAILLAGE::enregistrer(std::ostream& o,double version)
1137 {
1138 
1139  if (est_structure==true)
1140  {
1141  if (mg_geometrie==NULL) o << "%" << get_id() << "=FEM_MAILLAGE_STRUCTURE(" << degre << ",$" << maillage->get_id()<< ",NULL," << boite_englobante.get_xmin() << "," << boite_englobante.get_ymin() << "," << boite_englobante.get_zmin() << "," << boite_englobante.get_xmax() << "," << boite_englobante.get_ymax() << ","<< boite_englobante.get_zmax() << "," << nx <<"," << ny << "," << nz << ");" << std::endl;
1142  else o << "%" << get_id() << "=FEM_MAILLAGE_STRUCTURE("<< degre << ",$" << maillage->get_id() << ",$" << mg_geometrie->get_id() <<"," << boite_englobante.get_xmin() << "," << boite_englobante.get_ymin() << "," << boite_englobante.get_zmin() << "," << boite_englobante.get_xmax() << "," << boite_englobante.get_ymax() << ","<< boite_englobante.get_zmax() << "," << nx <<"," << ny << "," << nz <<");" << std::endl;
1143 
1144  }
1145  else
1146  {
1147  if (mg_geometrie==NULL) o << "%" << get_id() << "=FEM_MAILLAGE(" << degre << ",$" << maillage->get_id() << " );" << std::endl;
1148  else o << "%" << get_id() << "=FEM_MAILLAGE("<< degre << ",$" << maillage->get_id() << ",$" << mg_geometrie->get_id() <<");" << std::endl;
1149  }
1150 
1151 
1152  LISTE_ENTITE::const_iterator i;
1153  for (i=lst_entite.begin();i!=lst_entite.end();i++)
1154  (*i)->enregistrer(o,version);
1155 }
1156 
1157 void FEM_MAILLAGE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
1158 {
1159  LISTE_ENTITE::const_iterator i;
1160  for (i=lst_entite.begin();i!=lst_entite.end();i++)
1161  (*i)->get_fichier_dependant(liste_fichier);
1162 }
1163 
1164 void FEM_MAILLAGE::exporter_cosmos(std::string& nomfic)
1165 {
1166  char chaine[500];
1167  sprintf(chaine,"%s.ses",nomfic.c_str());
1168  std::ofstream of1(chaine,std::ios::out|std::ios::trunc);
1169  of1.precision(16);
1170  of1.setf(std::ios::showpoint);
1171  of1 << "TITLE, " << chaine << " : Fichier FEM de maillage MAGiC" << std::endl;
1172  if (degre==1) of1 << "EGROUP,1,TETRA4,0,0,0,0,0,0,0,0;" << std::endl;
1173  if (degre==2) of1 << "EGROUP,1,TETRA10,0,0,0,0,0,0,0,0;" << std::endl;
1174  int nb_volume=mg_geometrie->get_nb_mg_volume();
1175  int nbNoeuds = 0;
1176 
1177 
1178  for (int i=0;i<nb_volume;i++)
1179  {
1181  if (mgvol->get_num_materiau()>=0)
1182  {
1184  MC_MATERIAU* mat=mtgest.get_materiau(mgvol->get_num_materiau());
1185  for (int m=0; m<mat->get_nb_propriete();m++)
1186  {
1187  MC_PROPRIETE* prop=mat->get_propriete(m);
1188  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", " << prop->get_nom() <<", " << prop->get_valeur(m) << ";" << std::endl;
1189  }
1190  /* MT_PROPRIETE* prop=mat->get_propriete("EX");
1191  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", EX, " << prop->get_valeur(2) << ";" << std::endl;
1192  prop=mat->get_propriete("NUXY");
1193  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", NUXY, " << prop->get_valeur(2) << ";" << std::endl;
1194  prop=mat->get_propriete("GXY");
1195  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", GXY, " << prop->get_valeur(2) << ";" << std::endl;
1196  prop=mat->get_propriete("DENS");
1197  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", DENS, " << prop->get_valeur(2) << ";" << std::endl;
1198  prop=mat->get_propriete("SIGXT");
1199  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGXT, " << prop->get_valeur(2) << ";" << std::endl;
1200  prop=mat->get_propriete("SIGYLD");
1201  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", SIGYLD, " << prop->get_valeur(2) << ";" << std::endl;
1202  prop=mat->get_propriete("ALPX");
1203  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", ALPX, " << prop->get_valeur(2) << ";" << std::endl;
1204  prop=mat->get_propriete("KX");
1205  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", KX, " << prop->get_valeur(2) << ";" << std::endl;
1206  prop=mat->get_propriete("C");
1207  of1<< "MPROP, "<< mgvol->get_num_materiau()+1 << ", C , " << prop->get_valeur(2) << ";" << std::endl;*/
1208  }
1209  }
1210  int nb_coques = mg_geometrie->get_nb_mg_coque();
1211  for (int i=0;i<nb_coques;i++)
1212  {
1213  MG_COQUE *mgcoque=mg_geometrie->get_mg_coque(i);
1214  if (mgcoque->get_num_materiau()>=0)
1215  {
1217  MC_MATERIAU* mat=mtgest.get_materiau(mgcoque->get_num_materiau());
1218  for (int m=0; m<mat->get_nb_propriete();m++)
1219  {
1220  MC_PROPRIETE* prop=mat->get_propriete(m);
1221  of1<< "MPROP, "<< mgcoque->get_num_materiau()+1 << ", " << prop->get_nom() <<", " << prop->get_valeur(m) << ";" << std::endl;
1222  }
1223  }
1224  }
1225  int nb_poutres = mg_geometrie->get_nb_mg_poutre();
1226  for (int i=0;i<nb_poutres;i++)
1227  {
1228  MG_POUTRE *mgpoutre=mg_geometrie->get_mg_poutre(i);
1229  if (mgpoutre->get_num_materiau()>=0)
1230  {
1232  MC_MATERIAU* mat=mtgest.get_materiau(mgpoutre->get_num_materiau());
1233 
1234  for (int m=0; m<mat->get_nb_propriete();m++)
1235  {
1236  MC_PROPRIETE* prop=mat->get_propriete(m);
1237  of1<< "MPROP, "<< mgpoutre->get_num_materiau()+1 << ", " << prop->get_nom() <<", " << prop->get_valeur(m) << ";" << std::endl;
1238  }
1239  }
1240  }
1241 
1242 
1243 
1244  of1 << "ACTSET,CS,0;" << std::endl;
1245  of1 << "ACTSET,EG,1;" << std::endl;
1246 
1247  int ii=0;
1248  double valeurunite=mg_geometrie->get_valeur_unite();
1249  for (LISTE_FEM_NOEUD::iterator i=lst_fem_noeud.begin();i!=lst_fem_noeud.end();i++)
1250  {
1251  FEM_NOEUD* noeud=((*i).second);
1252  of1 << "ND, " << noeud->get_numero() << ", " << noeud->get_x()*valeurunite << ", " << noeud->get_y()*valeurunite << ", " << noeud->get_z()*valeurunite << ";" << std::endl;
1253  char nom[3];
1254  int nb=noeud->get_lien_topologie()->get_nb_ccf();
1255  for (int k=0;k<nb;k++)
1256  {
1257  noeud->get_lien_topologie()->get_type_ccf(k,nom);
1258  if (strcmp(nom,"Da")==0) of1 << "DND , " << noeud->get_numero() << ", AL, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1259  if (strcmp(nom,"Dx")==0) of1 << "DND , " << noeud->get_numero() << ", UX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1260  if (strcmp(nom,"Dy")==0) of1 << "DND , " << noeud->get_numero() << ", UY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1261  if (strcmp(nom,"Dz")==0) of1 << "DND , " << noeud->get_numero() << ", UZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1262  if (strcmp(nom,"Fx")==0) of1 << "FND , " << noeud->get_numero() << ", FX, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1263  if (strcmp(nom,"Fy")==0) of1 << "FND , " << noeud->get_numero() << ", FY, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1264  if (strcmp(nom,"Fz")==0) of1 << "FND , " << noeud->get_numero() << ", FZ, " << noeud->get_lien_topologie()->get_valeur_ccf(k) << ", " << noeud->get_numero() << ", 1;" << std::endl;
1265  }
1266  ii++;
1267  }
1268  nbNoeuds = ii;
1269  ii=0;
1270 
1271  int nummat=-10; // num�o du mat�iau
1272  for (LISTE_FEM_ELEMENT3::iterator i=lst_fem_element3.begin();i!=lst_fem_element3.end();i++)
1273  {
1274  FEM_ELEMENT3* tetra=((*i).second);
1275  MG_VOLUME* vol=(MG_VOLUME*)tetra->get_lien_topologie();
1276  int nummatac=vol->get_num_materiau();
1277  if ((nummatac!=nummat) && (nummatac!=-1))
1278  {
1279  nummat=nummatac;
1280  of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
1281  }
1282  if (degre==1) of1 << "EL, " << ii+1 << ", VL, 1, 4, " << tetra->get_fem_noeud(0)->get_numero() << ", " << tetra->get_fem_noeud(1)->get_numero() << ", " << tetra->get_fem_noeud(2)->get_numero() << ", " << tetra->get_fem_noeud(3)->get_numero() << ", " ;
1283  if (degre==2) of1 << "EL, " << ii+1 << ", VL, 1,10, " << tetra->get_fem_noeud(0)->get_numero() << ", " << tetra->get_fem_noeud(2)->get_numero() << ", " << tetra->get_fem_noeud(4)->get_numero() << ", " << tetra->get_fem_noeud(9)->get_numero() << ", " << tetra->get_fem_noeud(1)->get_numero() << ", " << tetra->get_fem_noeud(3)->get_numero() << ", " << tetra->get_fem_noeud(5)->get_numero() << ", " << tetra->get_fem_noeud(6)->get_numero() << ", " << tetra->get_fem_noeud(7)->get_numero() << ", " << tetra->get_fem_noeud(8)->get_numero() << ", " ;
1284  ii++;
1285  MG_TETRA* tet=(MG_TETRA*)tetra->get_mg_element_maillage();
1286  if (tet->get_triangle1()->get_lien_topologie()->get_dimension()!=3) of1 << "1, ";
1287  else of1 << "0, ";
1288  if (tet->get_triangle2()->get_lien_topologie()->get_dimension()!=3) of1 << "1, ";
1289  else of1 << "0, ";
1290  if (tet->get_triangle3()->get_lien_topologie()->get_dimension()!=3) of1 << "1, ";
1291  else of1 << "0, ";
1292  if (tet->get_triangle4()->get_lien_topologie()->get_dimension()!=3) of1 << "1;" << std::endl ;
1293  else of1 << "0;" << std::endl;
1294  char nom[3];
1295  int nb=tet->get_triangle1()->get_lien_topologie()->get_nb_ccf();
1296  for (int k=0;k<nb;k++)
1297  {
1298  tet->get_triangle1()->get_lien_topologie()->get_type_ccf(k,nom);
1299  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 1;" << std::endl;
1300  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 2;" << std::endl;
1301  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 3;" << std::endl;
1302  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle1()->get_lien_topologie()->get_valeur_ccf(k) << ", 1, " << ii << ", 1, 4;" << std::endl;
1303  }
1305  for (int k=0;k<nb;k++)
1306  {
1307  tet->get_triangle2()->get_lien_topologie()->get_type_ccf(k,nom);
1308  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 1;" << std::endl;
1309  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 2;" << std::endl;
1310  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 3;" << std::endl;
1311  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle2()->get_lien_topologie()->get_valeur_ccf(k) << ", 2, " << ii << ", 1, 4;" << std::endl;
1312  }
1314  for (int k=0;k<nb;k++)
1315  {
1316  tet->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
1317  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 1;" << std::endl;
1318  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 2;" << std::endl;
1319  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 3;" << std::endl;
1320  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle3()->get_lien_topologie()->get_valeur_ccf(k) << ", 3, " << ii << ", 1, 4;" << std::endl;
1321  }
1323  for (int k=0;k<nb;k++)
1324  {
1325  tet->get_triangle4()->get_lien_topologie()->get_type_ccf(k,nom);
1326  if (strcmp(nom,"Px")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1;" << std::endl;
1327  if (strcmp(nom,"Py")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2;" << std::endl;
1328  if (strcmp(nom,"Pz")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3;" << std::endl;
1329  if (strcmp(nom,"Pn")==0) of1 << "PEL , " << ii << ", " << tet->get_triangle4()->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4;" << std::endl;
1330  }
1331  }
1332 
1333 
1334  //*********************************************************
1335  // Les t�tras sont finis, maintenant le maillage des Coques
1336  //*********************************************************
1337  if (nb_coques>0)
1338  {
1339  if (degre==1) of1 << "EGROUP,2,SHELL3,0,0,0,0,0,0,0,0;" << std::endl; // Formulation coques minces... SHELL3T pout �aisses
1340  if (degre==2) of1 << "EGROUP,2,SHELL6,0,0,0,0,0,0,0,0;" << std::endl;
1341  }
1342 
1343  if (nb_poutres>0 || nb_coques>0 )
1344  {
1345  of1 << "EGROUP,3,BEAM3D,0,0,0,0,0,0,0,0;"<< std::endl; //Egroup des mini-poutres
1346  of1 << "RCONST,3,3,1,3," << "1, 1 , 1; " << std::endl;
1347  of1 << "EGROUP,4,RBAR;"<< std::endl; // EGroup des RBAR
1348  of1 << "EGROUP,5,BEAM3D,0,0,0,0,0,0,0,0;"<< std::endl; //Egroup des mini-poutres infiniment rigide
1349  of1 << "RCONST,5,5,1,3," << "0.01, 0.01 , 0.01; " << std::endl;
1350  of1 << "EGROUP,6,BEAM3D,0,0,0,0,0,0,0,0;"<< std::endl; //Egroup des mini-poutres avec inertie dans juste une direction (je sais, il n'est pas obligatoire, mais �a aide au d�buggage d'avoir un #5...)
1351  of1 << "RCONST,6,6,1,3," << "1e-16, 0.01 , 1e-16; " << std::endl;
1352  }
1353 
1354  int RCset =7;
1355 
1356  LISTE_MG_COQUE::iterator ico;
1357  MG_COQUE *mgcoque=mg_geometrie->get_premier_coque(ico);
1358  while (mgcoque)
1359  {
1360  int nummatac=mgcoque->get_num_materiau();
1361  if ((nummatac!=nummat)&&(nummatac!=-1)) // si c'est = 0 alors on place le dernier mat�iau choisi.
1362  {
1363  nummat=nummatac;
1364  of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
1365  }
1366 
1367  for (int numcoquille=0;numcoquille<mgcoque->get_nb_mg_coquille();numcoquille++)
1368  {
1369  MG_COQUILLE* mgcoquille = mgcoque->get_mg_coquille(numcoquille);
1370  for (int cf = 0; cf<mgcoquille->get_nb_mg_coface();cf++)
1371  {
1372  MG_COFACE* mgcoface = mgcoquille->get_mg_coface(cf);
1373  MG_FACE* mgface = mgcoface->get_face();
1374 
1375  double epaisseur=-1;
1376  for (int k=0;k<mgface->get_nb_ccf();k++) // aller chercher l'�aisseur de la coque
1377  {
1378  char nomCCF[3];
1379  mgface->get_type_ccf(k,nomCCF);
1380  if (strcmp(nomCCF,"EP")==0)
1381  epaisseur = mgface-> get_valeur_ccf(k);
1382  }
1383  of1 << "ACTSET,EG,2;"<< std::endl;
1384  of1 << "RCONST,2,"<< ++RCset << ",1,1," << epaisseur << ";" << std::endl; // le real constant, s'active automatiquement
1385 
1387  int nbelem=lien_maillage->get_nb();
1388  for (int i=0;i<nbelem;i++)
1389  {
1390  FEM_ELEMENT2* femtriangle=(FEM_ELEMENT2*)lien_maillage->get(i);
1391  if (!contient(femtriangle)) continue;
1392  if (degre==1) of1 << "EL, " << ++ii << ", SF, 0, 3, " <<femtriangle->get_fem_noeud(0)->get_numero()<< ","<< femtriangle->get_fem_noeud(1)->get_numero()<<","<<femtriangle->get_fem_noeud(2)->get_numero()<< ";" << std::endl;
1393  if (degre==2) of1 << "EL, " << ++ii << ", SF, 0, 6, " <<femtriangle->get_fem_noeud(0)->get_numero()<< ","<< femtriangle->get_fem_noeud(2)->get_numero()<<","<<femtriangle->get_fem_noeud(4)->get_numero()<< ","<<femtriangle->get_fem_noeud(1)->get_numero()<< ","<<femtriangle->get_fem_noeud(3)->get_numero()<<","<<femtriangle->get_fem_noeud(5)->get_numero()<<";"<< std::endl;
1394  // dans les noeuds des sommets sont, 1, 2 et 3. les noeuds sur les segments sont 4 5 et 6
1395 
1396  long nbc;
1397  MG_TRIANGLE* mgtri=(MG_TRIANGLE*)femtriangle->get_mg_element_maillage();
1398  char nom[3];
1399 
1400  nbc = mgtri->get_segment1()->get_lien_topologie()->get_nb_ccf();
1401  for (int z =0 ; z< nbc; z++) // le premier segment
1402  { // il y a au moins une CCF "EP" qu'il faut ignorer
1403  mgtri->get_segment1()->get_lien_topologie()->get_type_ccf(z,nom); // ->get_triangle3()->get_lien_topologie()->get_type_ccf(k,nom);
1404  if (strcmp(nom,"EP")==0) continue;
1405  if (strcmp(nom,"Px")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment1()->get_lien_topologie()->get_valeur_ccf(z) << ", 1, " << ii << ", 1, 1; C* CCF de Coque... " << std::endl;
1406  if (strcmp(nom,"Py")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment1()->get_lien_topologie()->get_valeur_ccf(z)<< ", 1, " << ii << ", 1, 2; C* CCF de Coque... " << std::endl;
1407  if (strcmp(nom,"Pz")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment1()->get_lien_topologie()->get_valeur_ccf(z) << ", 1, " << ii << ", 1, 3; C* CCF de Coque... "<< std::endl;
1408  if (strcmp(nom,"Pn")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment1()->get_lien_topologie()->get_valeur_ccf(z) << ", 1, " << ii << ", 1, 4; C* CCF de Coque... " << std::endl;
1409  }
1410  nbc = mgtri->get_segment2()->get_lien_topologie()->get_nb_ccf();
1411  for (int z =0 ; z< nbc; z++)
1412  {
1413  mgtri->get_segment2()->get_lien_topologie()->get_type_ccf(z,nom);
1414  if (strcmp(nom,"EP")==0) continue;
1415  if (strcmp(nom,"Px")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment2()->get_lien_topologie()->get_valeur_ccf(z) << ", 2, " << ii << ", 1, 1; C* CCF de Coque... " << std::endl;
1416  if (strcmp(nom,"Py")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment2()->get_lien_topologie()->get_valeur_ccf(z) << ", 2, " << ii << ", 1, 2; C* CCF de Coque... " << std::endl;
1417  if (strcmp(nom,"Pz")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment2()->get_lien_topologie()->get_valeur_ccf(z) << ", 2, " << ii << ", 1, 3; C* CCF de Coque... "<< std::endl;
1418  if (strcmp(nom,"Pn")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment2()->get_lien_topologie()->get_valeur_ccf(z) << ", 2, " << ii << ", 1, 4; C* CCF de Coque... " << std::endl;
1419  }
1420  nbc = mgtri->get_segment3()->get_lien_topologie()->get_nb_ccf();
1421  for (int z =0 ; z< nbc; z++)
1422  {
1423  mgtri->get_segment3()->get_lien_topologie()->get_type_ccf(z,nom);
1424  if (strcmp(nom,"EP")==0) continue;
1425  if (strcmp(nom,"Px")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment3()->get_lien_topologie()->get_valeur_ccf(z) << ", 3, " << ii << ", 1, 1; C* CCF de Coque... " << std::endl;
1426  if (strcmp(nom,"Py")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment3()->get_lien_topologie()->get_valeur_ccf(z) << ", 3, " << ii << ", 1, 2; C* CCF de Coque... " << std::endl;
1427  if (strcmp(nom,"Pz")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment3()->get_lien_topologie()->get_valeur_ccf(z) << ", 3, " << ii << ", 1, 3; C* CCF de Coque... "<< std::endl;
1428  if (strcmp(nom,"Pn")==0) of1 << "PEL, " << ii << ", " << mgtri->get_segment3()->get_lien_topologie()->get_valeur_ccf(z) << ", 3, " << ii << ", 1, 4; C* CCF de Coque... " << std::endl;
1429  }
1430 
1431 
1432  nbc = mgtri->get_lien_topologie()->get_nb_ccf(); // et pour la face elle-m�e
1433  for (int z =0 ; z< nbc; z++)
1434  {
1435  mgtri->get_lien_topologie()->get_type_ccf(z,nom);
1436  if (strcmp(nom,"EP")==0) continue;
1437  if (strcmp(nom,"Px")==0) of1 << "PEL, " << ii << ", " << mgtri->get_lien_topologie()->get_valeur_ccf(z) << ", 4, " << ii << ", 1, 1; C* CCF de Coque... " << std::endl;
1438  if (strcmp(nom,"Py")==0) of1 << "PEL, " << ii << ", " << mgtri->get_lien_topologie()->get_valeur_ccf(z) << ", 4, " << ii << ", 1, 2; C* CCF de Coque... " << std::endl;
1439  if (strcmp(nom,"Pz")==0) of1 << "PEL, " << ii << ", " << mgtri->get_lien_topologie()->get_valeur_ccf(z) << ", 4, " << ii << ", 1, 3; C* CCF de Coque... "<< std::endl;
1440  if (strcmp(nom,"Pn")==0) of1 << "PEL, " << ii << ", " << mgtri->get_lien_topologie()->get_valeur_ccf(z) << ", 4, " << ii << ", 1, 4; C* CCF de Coque... " << std::endl;
1441  }
1442 
1443  }
1444 
1445  } // next face
1446  } // next coquille
1447  mgcoque = mg_geometrie->get_suivant_coque(ico);
1448  }// next coque
1449 
1450 
1451 
1452 
1453 
1454  LISTE_MG_POUTRE::iterator it_po;
1455  MG_POUTRE* mgpoutre = mg_geometrie->get_premier_poutre(it_po);
1456  while (mgpoutre)
1457  {
1458  //MG_POUTRE* mgpoutre = mg_geometrie->get_mg_poutre(i);
1459  int nummatac=mgpoutre->get_num_materiau();
1460  if ((nummatac!=nummat)&&(nummatac!=-1))
1461  {
1462  nummat=nummatac;
1463  of1 << "ACTSET, MP," << nummat+1 << ";" << std::endl;
1464  }
1465 
1466  for (int j = 0;j<mgpoutre->get_nb_mg_boucle();j++)
1467  {
1468  MG_BOUCLE* mgboucle = mgpoutre->get_mg_boucle(j);
1469 
1470  for (int k = 0 ; k<mgboucle->get_nb_mg_coarete();k++)
1471  {
1472  MG_COARETE* mgcoarete = mgboucle->get_mg_coarete(k);
1473  MG_ARETE* mgarete = mgcoarete->get_arete();
1474 
1475  double IXX = 0;
1476  double IYY = 0;
1477  double Aire = 0;
1478  double x3 = 0;
1479  double y3 = 0;
1480  double z3 = 0;
1481 
1482  for (int k=0;k<mgarete->get_nb_ccf();k++)
1483  {
1484  char nomCCF[3];
1485  mgarete->get_type_ccf(k,nomCCF);
1486  if (strcmp(nomCCF,"As")==0)
1487  Aire = mgarete->get_valeur_ccf(k);
1488  if (strcmp(nomCCF,"IX")==0)
1489  IXX = mgarete->get_valeur_ccf(k);
1490  if (strcmp(nomCCF,"IY")==0)
1491  IYY = mgarete->get_valeur_ccf(k);
1492  if (strcmp(nomCCF,"NX")==0)
1493  x3 = mgarete->get_valeur_ccf(k);
1494  if (strcmp(nomCCF, "NY")==0)
1495  y3 = mgarete->get_valeur_ccf(k);
1496  if (strcmp(nomCCF, "NZ")==0)
1497  z3 = mgarete->get_valeur_ccf(k);
1498  }
1499 
1500  if ( Aire==-7) // -7 est un flag pour diff�rencier les mini-poutres...
1501  { // mini-poutre
1502  of1 << "Actset,EG,5;"<<std::endl;
1503  of1 << "Actset,RC,5;"<<std::endl;
1504  of1 << "C* MINI - POUTRE" << std:: endl;
1505 
1506  for (int t = 0; t< mgarete->get_lien_fem_maillage()->get_nb();t++)
1507  {
1508  FEM_ELEMENT1* femseg = (FEM_ELEMENT1*)mgarete->get_lien_fem_maillage()->get(t);
1509  of1 << "EL, " << ++ii << ", CR, 0, 2, " <<femseg->get_fem_noeud(0)->get_numero()<< ","<< femseg->get_fem_noeud(1)->get_numero()<<";" << std::endl;
1510  } // next segment
1511  }
1512  else
1513  { // poutre normale
1514  of1 << "Actset,EG,3;"<<std::endl;
1515  of1 << "ND,"<< ++nbNoeuds/* NDMAX+1 */ << "," << x3*valeurunite << "," << y3*valeurunite << "," << z3*valeurunite << ";" << std::endl; // cr�ation du trois�me point (qui est un noeud) ND,1,5,6,7
1516  of1 << "RCONST,3,"<< ++RCset << ",1,3," << Aire << "," << IXX << "," << IYY << ";" << std::endl; //RCONST,3,66,1,3,99,98,97 ; EG associ�e RC , start location, nombre de constantes, aire, inertie XX, inertie YY
1517 
1518  for (int t = 0; t< mgarete->get_lien_fem_maillage()->get_nb();t++)
1519  {
1520  FEM_ELEMENT1* femseg = (FEM_ELEMENT1*)mgarete->get_lien_fem_maillage()->get(t);
1521  if (!contient(femseg)) continue;
1522  if (degre==1) of1 << "EL, " << ++ii << ", CR, 0, 3, " <<femseg->get_fem_noeud(0)->get_numero()<< ","<< femseg->get_fem_noeud(1)->get_numero()<<","<< nbNoeuds << ";" << std::endl;
1523 
1524  for (int k=0;k<mgarete->get_nb_ccf();k++)
1525  {
1526  char nom[3];
1527  mgarete->get_type_ccf(k,nom);
1528  if (strcmp(nom,"Px")==0) of1 << "PEL, " << ii << ", " << femseg->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 1; C* CCF de Coque... " << std::endl;
1529  if (strcmp(nom,"Py")==0) of1 << "PEL, " << ii << ", " << femseg->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 2; C* CCF de Coque... " << std::endl;
1530  if (strcmp(nom,"Pz")==0) of1 << "PEL, " << ii << ", " << femseg->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 3; C* CCF de Coque... "<< std::endl;
1531  if (strcmp(nom,"Pn")==0) of1 << "PEL, " << ii << ", " << femseg->get_lien_topologie()->get_valeur_ccf(k) << ", 4, " << ii << ", 1, 4; C* CCF de Coque... " << std::endl; // l�� va en arracher!!!
1532  }
1533  } // next segment
1534  }
1535 
1536 
1537  } // next arete
1538  } // next boucle
1539  mgpoutre=mg_geometrie->get_suivant_poutre(it_po);
1540  } // next poutre
1541 
1542  LISTE_MG_ARETE::iterator ita;
1543  MG_ARETE* mgarete = mg_geometrie->get_premier_arete(ita);
1544 
1545  while (mgarete)
1546  {
1547  double Aire = 0;
1548 
1549  for (int k=0;k<mgarete->get_nb_ccf();k++)
1550  {
1551  char nomCCF[3];
1552  mgarete->get_type_ccf(k,nomCCF);
1553  if (strcmp(nomCCF,"As")==0)
1554  Aire = mgarete->get_valeur_ccf(k);
1555  }
1556 
1557  if ( Aire==-7) // -7 est un flag pour diff�rencier les mini-poutres... non orient�e
1558  { // mini-poutre
1559  of1 << "Actset,EG,5;"<<std::endl;
1560  of1 << "Actset,RC,5;"<<std::endl;
1561  of1 << "C* MINI - POUTRE" << std:: endl;
1562 
1563  for (int t = 0; t< mgarete->get_lien_fem_maillage()->get_nb();t++)
1564  {
1565  FEM_ELEMENT1* femseg = (FEM_ELEMENT1*)mgarete->get_lien_fem_maillage()->get(t);
1566  if (!contient(femseg)) continue;
1567  of1 << "EL, " << ++ii << ", CR, 0, 2, " <<femseg->get_fem_noeud(0)->get_numero()<< ","<< femseg->get_fem_noeud(1)->get_numero()<<";" << std::endl;
1568  }
1569  }
1570  mgarete=mg_geometrie->get_suivant_arete(ita);
1571  }
1572 
1573 
1574 
1575  //************************************************************
1576  // Pour mettre des mini-poutres sur les faces concern�es *****
1577  //*************************************************************
1578 
1579  LISTE_MG_FACE::iterator itf;
1580  MG_FACE* mgface = mg_geometrie->get_premier_face(itf);
1581 
1582 
1583  while (mgface)
1584  {
1585  for (int k=0;k<mgface->get_nb_ccf();k++)
1586  {
1587  char nomCCF[3];
1588  mgface->get_type_ccf(k,nomCCF);
1589 
1590  if (strcmp(nomCCF,"FI")==0)
1591  {
1592  TPL_LISTE_ENTITE<FEM_ELEMENT_MAILLAGE*> * lien_fem_maillage = mgface->get_lien_fem_maillage();
1593  FEM_ELEMENT_MAILLAGE* element;
1594 
1595  //si on a une faceinterne de poutre alors on a une CCF "Po" = 0
1596  // sinon la CCF Po est �gale � 1 et on a une coque
1597  int Poutre = -1;
1598 
1599  for (int z=0;z<mgface->get_nb_ccf();z++)
1600  {
1601  char nomCCF2[3];
1602  mgface->get_type_ccf(z,nomCCF);
1603  if (strcmp(nomCCF,"Po")==0)
1604  {
1605  Poutre = mgface->get_valeur_ccf(z);
1606  }
1607  }
1608 
1609 
1610  if (Poutre ==0)
1611  { // mini-poutres pour des poutres
1612  of1 << "ACTSET,EG,5; C* Face avec mini-poutres de POUTRE"<<std::endl;
1613  of1 << "ACTSET,RC,5;"<<std::endl;
1614  for (int i = 0 ; i< lien_fem_maillage->get_nb();i++)
1615  {
1616  FEM_ELEMENT2* femtriangle=(FEM_ELEMENT2*)lien_fem_maillage->get(i) ;
1617 
1618  FEM_NOEUD* nd0 =femtriangle->get_fem_noeud(0);
1619  FEM_NOEUD* nd1 =femtriangle->get_fem_noeud(1);
1620  FEM_NOEUD* nd2= femtriangle->get_fem_noeud(2);
1621 
1622  // Pour des mini-poutres de rigidit� infinie //EL,1,CR,0,3,1,2,3,0,0,0,0,0,0 num ��ent, CR, flag asso, nb noeuds, #1, #2, #3 ;
1623  //si on veut orienter les propri�t�s,
1624  of1 << "EL, " << ++ii << ", CR, 0, 2, " <<nd0->get_numero()<< "," << nd1->get_numero()<< ";" << std::endl;
1625  of1 << "EL, " << ++ii << ", CR, 0, 2, " <<nd1->get_numero()<< "," << nd2->get_numero()<< ";" << std::endl;
1626  of1 << "EL, " << ++ii << ", CR, 0, 2, " <<nd0->get_numero()<< "," << nd2->get_numero()<< ";" << std::endl;
1627  }
1628  }
1629  else if (Poutre==1)
1630  { // mini-poutres pour des coques
1631  of1 << "ACTSET,EG,6; C* Face avec mini-poutres de COQUE"<<std::endl;
1632  of1 << "ACTSET,RC,6;"<<std::endl;
1633  for (int i = 0 ; i< lien_fem_maillage->get_nb();i++)
1634  {
1635  FEM_ELEMENT2* femtriangle=(FEM_ELEMENT2*)lien_fem_maillage->get(i) ;
1636 
1637  FEM_NOEUD* nd0 =femtriangle->get_fem_noeud(0);
1638  FEM_NOEUD* nd1 =femtriangle->get_fem_noeud(1);
1639  FEM_NOEUD* nd2= femtriangle->get_fem_noeud(2);
1640 
1641  of1 << "EL, " << ++ii << ", CR, 0, 3, " <<nd0->get_numero()<< "," << nd1->get_numero()<< "," << nd2->get_numero()<< ";" << std::endl;
1642  of1 << "EL, " << ++ii << ", CR, 0, 3, " <<nd1->get_numero()<< "," << nd2->get_numero()<< "," << nd0->get_numero()<< ";" << std::endl;
1643  of1 << "EL, " << ++ii << ", CR, 0, 3, " <<nd0->get_numero()<< "," << nd2->get_numero()<< "," << nd1->get_numero()<< ";" << std::endl;
1644  }
1645  }
1646  } // end if FI
1647  } // next CCF
1648  mgface= mg_geometrie->get_suivant_face(itf);
1649  } // end while face
1650 
1651 
1652 
1653 
1654 
1655  of1<< "EPLOT;"<<std::endl;
1656  of1<< "PSCALE;"<<std::endl;
1657 
1658 }
1659 
1660 
1662 {
1663  if (!deforme) return 0.;
1664  LISTE_FEM_NOEUD::iterator it;
1665  double max=0.,dmax=0.;
1666  for (FEM_NOEUD* noeud=get_premier_noeud(it);noeud;noeud=get_suivant_noeud(it))
1667  {
1668  double x=noeud->get_x();
1669  double y=noeud->get_y();
1670  double z=noeud->get_z();
1671  double dx=noeud->get_dx();
1672  double dy=noeud->get_dy();
1673  double dz=noeud->get_dz();
1674  if (fabs(x)>max) max=fabs(x);
1675  if (fabs(y)>max) max=fabs(y);
1676  if (fabs(z)>max) max=fabs(z);
1677  if (fabs(dx)>dmax) dmax=fabs(dx);
1678  if (fabs(dy)>dmax) dmax=fabs(dy);
1679  if (fabs(dz)>dmax) dmax=fabs(dz);
1680  }
1681  if (dmax<1e-10) return 0;
1682  double coef=0.1*max/dmax;
1683  return coef;
1684 }
1685 
1686 
1687 
1688 
1689 void FEM_MAILLAGE::calcul_deforme(FEM_SOLUTION* solx,int numx,FEM_SOLUTION* soly,int numy,FEM_SOLUTION* solz,int numz)
1690 {
1691  LISTE_FEM_NOEUD::iterator it;
1692  solx->active_solution(numx);
1693  for (FEM_NOEUD* noeud=get_premier_noeud(it);noeud;noeud=get_suivant_noeud(it))
1694 
1695  noeud->change_dx(noeud->get_solution()/get_mg_geometrie()->get_valeur_unite());
1696 
1697  soly->active_solution(numy);
1698  for (FEM_NOEUD* noeud=get_premier_noeud(it);noeud;noeud=get_suivant_noeud(it))
1699 
1700  noeud->change_dy(noeud->get_solution()/get_mg_geometrie()->get_valeur_unite());
1701 
1702  solz->active_solution(numz);
1703  for (FEM_NOEUD* noeud=get_premier_noeud(it);noeud;noeud=get_suivant_noeud(it))
1704 
1705  noeud->change_dz(noeud->get_solution()/get_mg_geometrie()->get_valeur_unite());
1706 
1707  deforme=1;
1708 }
1709 
1710 
1712 {
1713  return deforme;
1714 }
1715 
1717 {
1718  deforme=1;
1719 }
1720 
1722 {
1723  deforme=0;
1724 }
1725 
1727 {
1728  return reaction;
1729 }
1730 
1732 {
1733  reaction=1;
1734 }
1735 
1737 {
1738  reaction=0;
1739 }
1740 
1741 void FEM_MAILLAGE::calcul_somme_reaction(double &rx,double &ry,double &rz)
1742 {
1743 rx=0.;
1744 ry=0.;
1745 rz=0.;
1746 LISTE_FEM_NOEUD::iterator it;
1747 for (FEM_NOEUD* no=get_premier_noeud(it);no!=NULL;no=get_suivant_noeud(it))
1748  {
1749  rx=rx+no->get_rx();
1750  ry=ry+no->get_ry();
1751  rz=rz+no->get_rz();
1752  }
1753 }
1754 
1755 
1756 
1757 
1758 
1759 std::ostream& operator << (std::ostream& o,FEM_MAILLAGE& maillage)
1760 {
1762  return o;
1763 }
1764 
1765 
1766 void FEM_MAILLAGE::decompte(int &nb_noeud,int &nb_seg2,int &nb_seg3,int &nb_tri3,int &nb_tri6,int &nb_quad4,int &nb_quad8,int &nb_tet4,int &nb_tet10,int &nb_hex8,int &nb_hex20)
1767 {
1768 nb_noeud=get_nb_fem_noeud();
1769 LISTE_FEM_ELEMENT1::iterator it1;
1770 for (FEM_ELEMENT1* ele=get_premier_element1(it1);ele!=NULL;ele=get_suivant_element1(it1))
1771  {
1772  int nb=ele->get_nb_fem_noeud();
1773  if (nb==2) nb_seg2++;
1774  if (nb==3) nb_seg3++;
1775  }
1776 LISTE_FEM_ELEMENT2::iterator it2;
1777 for (FEM_ELEMENT2* ele=get_premier_element2(it2);ele!=NULL;ele=get_suivant_element2(it2))
1778  {
1779  int nb=ele->get_nb_fem_noeud();
1780  if (nb==3) nb_tri3++;
1781  if (nb==4) nb_quad4++;
1782  if (nb==6) nb_tri6++;
1783  if (nb==8) nb_quad8++;
1784  }
1785 LISTE_FEM_ELEMENT3::iterator it3;
1786 for (FEM_ELEMENT3* ele=get_premier_element3(it3);ele!=NULL;ele=get_suivant_element3(it3))
1787  {
1788  int nb=ele->get_nb_fem_noeud();
1789  if (nb==4) nb_tet4++;
1790  if (nb==8) nb_hex8++;
1791  if (nb==10) nb_tet10++;
1792  if (nb==20) nb_hex20++;
1793  }
1794 }
1795 
1796 
1797 void FEM_MAILLAGE::change_param_structure(BOITE_3D btmp,int nxtmp,int nytmp,int nztmp)
1798 {
1799 boite_englobante=btmp;
1800 nx=nxtmp;
1801 ny=nytmp;
1802 nz=nztmp;
1803 est_structure=true;
1804 }
1805 
1806 
1807 bool FEM_MAILLAGE::get_param_structure(BOITE_3D &btmp,int &nxtmp,int &nytmp,int &nztmp)
1808 {
1809 if (est_structure==true)
1810  {
1811  btmp=boite_englobante;
1812  nxtmp=nx;
1813  nytmp=ny;
1814  nztmp=nz;
1815  return true;
1816  }
1817 return false;
1818 }
1819 
1821 {
1822 return est_structure;
1823 }
1824 
FEM_MAILLAGE::get_suivant_element0
FEM_ELEMENT0 * get_suivant_element0(LISTE_FEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:346
FEM_MAILLAGE::lst_fem_noeud
LISTE_FEM_NOEUD lst_fem_noeud
Definition: fem_maillage.h:206
FEM_MAILLAGE::ajouter_fem_element0
int ajouter_fem_element0(FEM_ELEMENT0 *femnoeud)
Definition: fem_maillage.cpp:246
FEM_MAILLAGE::get_fem_element0
FEM_ELEMENT0 * get_fem_element0(unsigned int num)
Definition: fem_maillage.cpp:278
FEM_MAILLAGE::get_xfem_element1id
XFEM_ELEMENT1 * get_xfem_element1id(unsigned long num)
Definition: fem_maillage.cpp:816
MC_MATERIAU
Definition: mc_materiau.h:31
FEM_MAILLAGE::get_fichier_dependant
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
Definition: fem_maillage.cpp:1157
FEM_MAILLAGE::calcul_coef
double calcul_coef(void)
Definition: fem_maillage.cpp:1661
FEM_MAILLAGE::get_fem_element1id
FEM_ELEMENT1 * get_fem_element1id(unsigned long num)
Definition: fem_maillage.cpp:372
FEM_MAILLAGE::get_nb_xfem_element2
unsigned int get_nb_xfem_element2(void)
Definition: fem_maillage.cpp:938
fem_hexa8.h
MG_TRIANGLE::get_segment1
virtual MG_SEGMENT * get_segment1(void)
Definition: mg_triangle.cpp:142
FEM_MAILLAGE::ajouter_fem_element2
int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle)
Definition: fem_maillage.cpp:469
FEM_SOLUTION
Definition: fem_solution.h:40
MG_POUTRE::get_num_materiau
int get_num_materiau(void)
Definition: mg_poutre.cpp:163
FEM_MAILLAGE::boite_englobante
BOITE_3D boite_englobante
Definition: fem_maillage.h:223
FEM_MAILLAGE::get_suivant_element3
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:680
XFEM_ELEMENT2
Definition: xfem_element2.h:34
MG_BOUCLE
Definition: mg_boucle.h:35
gestionversion.h
MG_BOUCLE::get_nb_mg_coarete
virtual int get_nb_mg_coarete(void)
Definition: mg_boucle.cpp:78
FEM_MAILLAGE::supprimer_fem_element3id
int supprimer_fem_element3id(unsigned long num)
Definition: fem_maillage.cpp:625
MG_GESTIONNAIRE::ajouter_fem_maillage
int ajouter_fem_maillage(FEM_MAILLAGE *femmai)
Definition: mg_gestionnaire.cpp:641
FEM_MAILLAGE::gest
MG_GESTIONNAIRE * gest
Definition: fem_maillage.h:216
FEM_MAILLAGE::supprimer_xfem_element1
int supprimer_xfem_element1(unsigned int num)
Definition: fem_maillage.cpp:862
fem_maillage_quadratique_outils.h
FAIL
const int FAIL
Definition: mg_definition.h:39
FEM_MAILLAGE::supprimer_tout_xfem_element2
void supprimer_tout_xfem_element2(void)
Definition: fem_maillage.cpp:990
XFEM_ELEMENT3
Definition: xfem_element3.h:34
BOITE_3D::get_xmin
double get_xmin(void)
Definition: ot_boite_3d.cpp:104
FEM_MAILLAGE::calcul_deforme
void calcul_deforme(class FEM_SOLUTION *solx, int numx, class FEM_SOLUTION *soly, int numy, class FEM_SOLUTION *solz, int numz)
Definition: fem_maillage.cpp:1689
FEM_MAILLAGE::get_xfem_element2id
XFEM_ELEMENT2 * get_xfem_element2id(unsigned long num)
Definition: fem_maillage.cpp:928
mg_gestionnaire.h
FEM_MAILLAGE::get_fem_element2
FEM_ELEMENT2 * get_fem_element2(unsigned int num)
Definition: fem_maillage.cpp:501
FEM_ELEMENT3::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
FEM_MAILLAGE::dupliquer
FEM_MAILLAGE * dupliquer(MG_GESTIONNAIRE *gest)
Definition: fem_maillage.cpp:74
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
FEM_MAILLAGE::supprimer_tout_xfem_element3
void supprimer_tout_xfem_element3(void)
Definition: fem_maillage.cpp:1102
FEM_MAILLAGE::get_nb_fem_element0
unsigned int get_nb_fem_element0(void)
Definition: fem_maillage.cpp:271
fem_mini_segment2.h
FEM_MAILLAGE::get_xfem_element3id
XFEM_ELEMENT3 * get_xfem_element3id(unsigned long num)
Definition: fem_maillage.cpp:1040
FEM_MAILLAGE::supprimer_fem_element0id
int supprimer_fem_element0id(unsigned long num)
Definition: fem_maillage.cpp:291
fem_maillage.h
FEM_MAILLAGE::get_suivant_xelement3
XFEM_ELEMENT3 * get_suivant_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:1125
FEM_MAILLAGE::decompte
void decompte(int &nb_noeud, int &nb_seg2, int &nb_seg3, int &nb_tri3, int &nb_tri6, int &nb_quad4, int &nb_quad8, int &nb_tet4, int &nb_tet10, int &nb_hex8, int &nb_hex20)
Definition: fem_maillage.cpp:1766
FEM_MAILLAGE::calcul_somme_reaction
void calcul_somme_reaction(double &rx, double &ry, double &rz)
Definition: fem_maillage.cpp:1741
MG_COARETE
Definition: mg_coarete.h:31
FEM_MAILLAGE::supprimer_tout_fem_element0
void supprimer_tout_fem_element0(void)
Definition: fem_maillage.cpp:323
fem_tetra10.h
MG_POUTRE::get_mg_boucle
virtual MG_BOUCLE * get_mg_boucle(int num)
Definition: mg_poutre.cpp:70
FEM_MAILLAGE::reaction
int reaction
Definition: fem_maillage.h:220
MG_GEOMETRIE::get_premier_face
MG_FACE * get_premier_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1338
MG_TRIANGLE::get_segment2
virtual MG_SEGMENT * get_segment2(void)
Definition: mg_triangle.cpp:147
MG_COFACE::get_face
virtual MG_FACE * get_face(void)
Definition: mg_coface.cpp:58
MG_VOLUME::get_num_materiau
virtual int get_num_materiau(void)
Definition: mg_volume.cpp:181
FEM_MAILLAGE::lst_fem_element2
LISTE_FEM_ELEMENT2 lst_fem_element2
Definition: fem_maillage.h:209
FEM_MAILLAGE::lst_entite
LISTE_ENTITE lst_entite
Definition: fem_maillage.h:205
FEM_ELEMENT_MAILLAGE::get_lien_topologie
virtual class MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: fem_element_maillage.cpp:89
FEM_MAILLAGE::get_suivant_xelement1
XFEM_ELEMENT1 * get_suivant_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:901
FEM_MAILLAGE::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_maillage.cpp:1136
FEM_ELEMENT3
Definition: fem_element3.h:34
FEM_MAILLAGE::get_premier_noeud
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:174
MG_GEOMETRIE::get_mg_poutre
MG_POUTRE * get_mg_poutre(unsigned int num)
Definition: mg_geometrie.cpp:1945
MG_COQUE::get_mg_coquille
virtual MG_COQUILLE * get_mg_coquille(int num)
Definition: mg_coque.cpp:74
FEM_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: fem_maillage.cpp:88
FEM_MAILLAGE::active_reaction
void active_reaction(void)
Definition: fem_maillage.cpp:1731
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
fem_quadrangle8.h
FEM_MAILLAGE::get_param_structure
bool get_param_structure(BOITE_3D &btmp, int &nxtmp, int &nytmp, int &nztmp)
Definition: fem_maillage.cpp:1807
mc_materiau.h
XFEM_ELEMENT1
Definition: xfem_element1.h:34
OK
const int OK
Definition: mg_definition.h:38
MG_TRIANGLE
Definition: mg_triangle.h:38
FEM_MAILLAGE::desactive_reaction
void desactive_reaction(void)
Definition: fem_maillage.cpp:1736
MG_VOLUME
Definition: mg_volume.h:33
MG_COQUILLE
Definition: mg_coquille.h:34
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
MG_TRIANGLE::get_segment3
virtual MG_SEGMENT * get_segment3(void)
Definition: mg_triangle.cpp:152
FEM_MAILLAGE::supprimer_xfem_element3id
int supprimer_xfem_element3id(unsigned long num)
Definition: fem_maillage.cpp:1070
FEM_MAILLAGE::get_premier_element0
FEM_ELEMENT0 * get_premier_element0(LISTE_FEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:338
MG_COFACE
Definition: mg_coface.h:33
FEM_MAILLAGE::ny
int ny
Definition: fem_maillage.h:224
MG_TETRA
Definition: mg_tetra.h:37
FEM_MAILLAGE::get_nb_xfem_element0
unsigned int get_nb_xfem_element0(void)
Definition: fem_maillage.cpp:715
FEM_MAILLAGE::change_gestionnaire
void change_gestionnaire(class MG_GESTIONNAIRE *mggest)
Definition: fem_maillage.cpp:115
FEM_MAILLAGE::get_fem_element2id
FEM_ELEMENT2 * get_fem_element2id(unsigned long num)
Definition: fem_maillage.cpp:484
MG_GEOMETRIE::get_gest_materiau
char * get_gest_materiau(void)
Definition: mg_geometrie.cpp:2637
FEM_MAILLAGE::get_fem_noeudid
FEM_NOEUD * get_fem_noeudid(unsigned long num)
Definition: fem_maillage.cpp:150
FEM_NOEUD::get_numero
int get_numero(void)
Definition: fem_noeud.cpp:328
FEM_MAILLAGE::get_xfem_element2
XFEM_ELEMENT2 * get_xfem_element2(unsigned int num)
Definition: fem_maillage.cpp:945
mc_gestionnaire.h
FEM_MAILLAGE::supprimer_xfem_element0
int supprimer_xfem_element0(unsigned int num)
Definition: fem_maillage.cpp:751
FEM_MAILLAGE::supprimer_tout_fem_element3
void supprimer_tout_fem_element3(void)
Definition: fem_maillage.cpp:657
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE::supprimer_xfem_element2id
int supprimer_xfem_element2id(unsigned long num)
Definition: fem_maillage.cpp:958
FEM_MAILLAGE::get_mg_maillage
MG_MAILLAGE * get_mg_maillage(void)
Definition: fem_maillage.cpp:93
FEM_MAILLAGE::lst_xfem_element0
LISTE_XFEM_ELEMENT0 lst_xfem_element0
Definition: fem_maillage.h:211
FEM_MAILLAGE::get_nb_fem_noeud
unsigned int get_nb_fem_noeud(void)
Definition: fem_maillage.cpp:190
FEM_MAILLAGE::supprimer_fem_element2id
int supprimer_fem_element2id(unsigned long num)
Definition: fem_maillage.cpp:514
FEM_MAILLAGE::get_fem_element3id
FEM_ELEMENT3 * get_fem_element3id(unsigned long num)
Definition: fem_maillage.cpp:595
ot_decalage_parametre.h
FEM_MAILLAGE::supprimer_fem_element1id
int supprimer_fem_element1id(unsigned long num)
Definition: fem_maillage.cpp:402
fem_segment3.h
MG_POUTRE
Definition: mg_poutre.h:33
FEM_MAILLAGE::get_premier_element2
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:561
MG_ELEMENT_TOPOLOGIQUE::get_type_ccf
virtual void get_type_ccf(int num, char *nom)
Definition: mg_element_topologique.cpp:95
MAGIC_VERSION_FICHIER_DOUBLE
#define MAGIC_VERSION_FICHIER_DOUBLE
Definition: version.h:7
FEM_MAILLAGE::supprimer_tout_fem_element2
void supprimer_tout_fem_element2(void)
Definition: fem_maillage.cpp:546
fem_quadrangle4.h
FEM_MAILLAGE::supprimer_xfem_element1id
int supprimer_xfem_element1id(unsigned long num)
Definition: fem_maillage.cpp:846
BOITE_3D::get_zmax
double get_zmax(void)
Definition: ot_boite_3d.cpp:129
MG_GEOMETRIE::get_nb_mg_poutre
unsigned int get_nb_mg_poutre(void)
Definition: mg_geometrie.cpp:1974
BOITE_3D::get_ymin
double get_ymin(void)
Definition: ot_boite_3d.cpp:114
FEM_MAILLAGE::exporter_cosmos
void exporter_cosmos(std::string &nomfic)
Definition: fem_maillage.cpp:1164
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
FEM_MAILLAGE::get_xfem_element3
XFEM_ELEMENT3 * get_xfem_element3(unsigned int num)
Definition: fem_maillage.cpp:1057
FEM_MAILLAGE::existe_reaction
int existe_reaction(void)
Definition: fem_maillage.cpp:1726
FEM_MAILLAGE::lst_xfem_element2
LISTE_XFEM_ELEMENT2 lst_xfem_element2
Definition: fem_maillage.h:213
FEM_MAILLAGE::desactive_deforme
void desactive_deforme(void)
Definition: fem_maillage.cpp:1721
FEM_MAILLAGE::change_param_structure
void change_param_structure(BOITE_3D btmp, int nxtmp, int nytmp, int nztmp)
Definition: fem_maillage.cpp:1797
FEM_MAILLAGE::get_suivant_element1
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:457
MG_GEOMETRIE::get_premier_poutre
MG_POUTRE * get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
Definition: mg_geometrie.cpp:1957
FEM_MAILLAGE::supprimer_fem_element3
int supprimer_fem_element3(unsigned int num)
Definition: fem_maillage.cpp:641
FEM_SOLUTION::active_solution
void active_solution(int num)
Definition: fem_solution.cpp:490
FEM_MAILLAGE::degre
int degre
Definition: fem_maillage.h:218
MC_GESTIONNAIRE
Definition: mc_gestionnaire.h:31
FEM_ELEMENT_MAILLAGE
Definition: fem_element_maillage.h:35
FEM_MAILLAGE::est_structure
bool est_structure
Definition: fem_maillage.h:225
FEM_MAILLAGE::deforme
int deforme
Definition: fem_maillage.h:219
FEM_MAILLAGE::get_suivant_xelement0
XFEM_ELEMENT0 * get_suivant_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:790
FEM_MAILLAGE::get_fem_noeud
FEM_NOEUD * get_fem_noeud(unsigned int num)
Definition: fem_maillage.cpp:162
mc_propriete.h
MG_COQUE::get_num_materiau
int get_num_materiau(void)
Definition: mg_coque.cpp:235
BOITE_3D::get_xmax
double get_xmax(void)
Definition: ot_boite_3d.cpp:109
FEM_MAILLAGE::supprimer_fem_element2
int supprimer_fem_element2(unsigned int num)
Definition: fem_maillage.cpp:530
FEM_MAILLAGE
Definition: fem_maillage.h:66
MG_POUTRE::get_nb_mg_boucle
virtual int get_nb_mg_boucle(void)
Definition: mg_poutre.cpp:65
XFEM_ELEMENT0
Definition: xfem_element0.h:36
FEM_MAILLAGE::supprimer_tout_xfem_element1
void supprimer_tout_xfem_element1(void)
Definition: fem_maillage.cpp:878
FEM_MAILLAGE::supprimer_xfem_element0id
int supprimer_xfem_element0id(unsigned long num)
Definition: fem_maillage.cpp:735
MG_ELEMENT_TOPOLOGIQUE::get_nb_ccf
virtual int get_nb_ccf(void)
Definition: mg_element_topologique.cpp:154
MG_NOEUD
Definition: mg_noeud.h:41
operator<<
std::ostream & operator<<(std::ostream &o, FEM_MAILLAGE &maillage)
Definition: fem_maillage.cpp:1759
FEM_ELEMENT_MAILLAGE::dupliquer
virtual FEM_ELEMENT_MAILLAGE * dupliquer(class FEM_MAILLAGE *mgmai, long decalage)=0
FEM_MAILLAGE::nx
int nx
Definition: fem_maillage.h:224
FEM_MAILLAGE::get_premier_xelement0
XFEM_ELEMENT0 * get_premier_xelement0(LISTE_XFEM_ELEMENT0::iterator &it)
Definition: fem_maillage.cpp:782
FEM_MAILLAGE::ajouter_fem_element1
int ajouter_fem_element1(FEM_ELEMENT1 *femsegment)
Definition: fem_maillage.cpp:357
FEM_ELEMENT_MAILLAGE::get_mg_element_maillage
virtual class MG_ELEMENT_MAILLAGE * get_mg_element_maillage(void)
Definition: fem_element_maillage.cpp:81
FEM_MAILLAGE::get_nb_fem_element2
unsigned int get_nb_fem_element2(void)
Definition: fem_maillage.cpp:494
FEM_ELEMENT1
Definition: fem_element1.h:34
MG_GEOMETRIE::get_premier_coque
MG_COQUE * get_premier_coque(LISTE_MG_COQUE::iterator &it)
Definition: mg_geometrie.cpp:1830
FEM_MAILLAGE::supprimer_tout_xfem_element0
void supprimer_tout_xfem_element0(void)
Definition: fem_maillage.cpp:767
tpl_map_entite.h
FEM_MAILLAGE::ajouter_xfem_element2
int ajouter_xfem_element2(XFEM_ELEMENT2 *femelement2)
Definition: fem_maillage.cpp:913
FEM_MAILLAGE::FEM_MAILLAGE
FEM_MAILLAGE(class MG_GEOMETRIE *geo, class MG_MAILLAGE *mai, int deg)
Definition: fem_maillage.cpp:57
FEM_MAILLAGE::maillage
MG_MAILLAGE * maillage
Definition: fem_maillage.h:217
fem_graph_noeud.h
MG_TETRA::get_triangle1
virtual MG_TRIANGLE * get_triangle1(void)
Definition: mg_tetra.cpp:163
FEM_MAILLAGE::~FEM_MAILLAGE
virtual ~FEM_MAILLAGE()
Definition: fem_maillage.cpp:65
FEM_MAILLAGE::get_nb_fem_element3
unsigned int get_nb_fem_element3(void)
Definition: fem_maillage.cpp:605
FEM_MAILLAGE::get_nb_xfem_element3
unsigned int get_nb_xfem_element3(void)
Definition: fem_maillage.cpp:1050
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
MG_GEOMETRIE::get_nb_mg_coque
unsigned int get_nb_mg_coque(void)
Definition: mg_geometrie.cpp:1847
FEM_MAILLAGE::get_suivant_element2
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:569
FEM_MAILLAGE::supprimer_xfem_element2
int supprimer_xfem_element2(unsigned int num)
Definition: fem_maillage.cpp:974
FEM_MAILLAGE::get_xfem_element0
XFEM_ELEMENT0 * get_xfem_element0(unsigned int num)
Definition: fem_maillage.cpp:722
FEM_MAILLAGE::get_premier_xelement1
XFEM_ELEMENT1 * get_premier_xelement1(LISTE_XFEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:893
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
MG_TETRA::get_triangle2
virtual MG_TRIANGLE * get_triangle2(void)
Definition: mg_tetra.cpp:168
FEM_MAILLAGE::supprimer_tout_fem_element1
void supprimer_tout_fem_element1(void)
Definition: fem_maillage.cpp:434
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
FEM_MAILLAGE::existe_deforme
int existe_deforme(void)
Definition: fem_maillage.cpp:1711
fem_penta15.h
BOITE_3D::get_ymax
double get_ymax(void)
Definition: ot_boite_3d.cpp:119
FEM_MAILLAGE::get_est_structure
bool get_est_structure(void)
Definition: fem_maillage.cpp:1820
FEM_MAILLAGE::get_premier_element1
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:449
FEM_MAILLAGE::get_xfem_element0id
XFEM_ELEMENT0 * get_xfem_element0id(unsigned long num)
Definition: fem_maillage.cpp:705
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_MAILLAGE::supprimer_fem_element1
int supprimer_fem_element1(unsigned int num)
Definition: fem_maillage.cpp:418
MG_GEOMETRIE::get_premier_arete
MG_ARETE * get_premier_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:907
MG_GEOMETRIE::get_nb_mg_volume
unsigned int get_nb_mg_volume(void)
Definition: mg_geometrie.cpp:1712
FEM_MAILLAGE::supprimer_xfem_element3
int supprimer_xfem_element3(unsigned int num)
Definition: fem_maillage.cpp:1086
FEM_MAILLAGE::mg_geometrie
MG_GEOMETRIE * mg_geometrie
Definition: fem_maillage.h:215
FEM_MAILLAGE::adapte_degre_importation_maillage
void adapte_degre_importation_maillage(int deg)
Definition: fem_maillage.cpp:103
MC_PROPRIETE::get_valeur
double get_valeur(int num)
Definition: mc_propriete.cpp:59
fem_penta6.h
FEM_MAILLAGE::supprimer_fem_element0
int supprimer_fem_element0(unsigned int num)
Definition: fem_maillage.cpp:307
BOITE_3D
Definition: ot_boite_3d.h:27
MG_BOUCLE::get_mg_coarete
virtual MG_COARETE * get_mg_coarete(int num)
Definition: mg_boucle.cpp:84
fem_triangle6.h
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
FEM_ELEMENT1::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
MG_GEOMETRIE::get_suivant_poutre
MG_POUTRE * get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
Definition: mg_geometrie.cpp:1965
FEM_MAILLAGE::get_premier_xelement2
XFEM_ELEMENT2 * get_premier_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:1005
fem_tetra4.h
MG_GESTIONNAIRE::recherche_bonid
void recherche_bonid(MG_IDENTIFICATEUR &ident)
Definition: mg_gestionnaire.cpp:69
FEM_MAILLAGE::lst_fem_element1
LISTE_FEM_ELEMENT1 lst_fem_element1
Definition: fem_maillage.h:208
FEM_MAILLAGE::get_fem_element1
FEM_ELEMENT1 * get_fem_element1(unsigned int num)
Definition: fem_maillage.cpp:389
MG_GEOMETRIE::get_valeur_unite
double get_valeur_unite(void)
Definition: mg_geometrie.cpp:2652
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
MG_ELEMENT_MAILLAGE::get_lien_topologie
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: mg_element_maillage.cpp:51
fem_segment2.h
FEM_MAILLAGE::contient
bool contient(MG_IDENTIFICATEUR *id)
Definition: fem_maillage.cpp:110
BOITE_3D::get_zmin
double get_zmin(void)
Definition: ot_boite_3d.cpp:124
fem_triangle3.h
MG_ELEMENT_TOPOLOGIQUE::get_lien_fem_maillage
virtual TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > * get_lien_fem_maillage(void)
Definition: mg_element_topologique.cpp:67
MG_GEOMETRIE
Definition: mg_geometrie.h:84
MG_MAILLAGE
Definition: mg_maillage.h:62
FEM_MAILLAGE::get_degre
int get_degre(void)
Definition: fem_maillage.cpp:98
MG_GEOMETRIE::get_mg_coque
MG_COQUE * get_mg_coque(unsigned int num)
Definition: mg_geometrie.cpp:1818
FEM_MAILLAGE::get_suivant_noeud
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:182
TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * >
fem_hexa20.h
MG_COQUILLE::get_nb_mg_coface
virtual int get_nb_mg_coface(void)
Definition: mg_coquille.cpp:76
MG_COQUILLE::get_mg_coface
virtual MG_COFACE * get_mg_coface(int num)
Definition: mg_coquille.cpp:90
FEM_MAILLAGE::lst_fem_element3
LISTE_FEM_ELEMENT3 lst_fem_element3
Definition: fem_maillage.h:210
FEM_MAILLAGE::lst_fem_element0
LISTE_FEM_ELEMENT0 lst_fem_element0
Definition: fem_maillage.h:207
MC_PROPRIETE
Definition: mc_propriete.h:36
MG_TETRA::get_triangle4
virtual MG_TRIANGLE * get_triangle4(void)
Definition: mg_tetra.cpp:178
FEM_MAILLAGE::get_fem_element3
FEM_ELEMENT3 * get_fem_element3(unsigned int num)
Definition: fem_maillage.cpp:612
MG_ARETE
Definition: mg_arete.h:36
MG_FACE
Definition: mg_face.h:34
MG_COQUE
Definition: mg_coque.h:33
MG_COQUE::get_nb_mg_coquille
virtual int get_nb_mg_coquille(void)
Definition: mg_coque.cpp:69
MG_ELEMENT_TOPOLOGIQUE::get_valeur_ccf
virtual bool get_valeur_ccf(char *nom, double &val)
Definition: mg_element_topologique.cpp:310
FEM_MAILLAGE::supprimer_tout_fem_noeud
void supprimer_tout_fem_noeud(void)
Definition: fem_maillage.cpp:231
FEM_MAILLAGE::get_suivant_xelement2
XFEM_ELEMENT2 * get_suivant_xelement2(LISTE_XFEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:1013
MG_GEOMETRIE::get_suivant_coque
MG_COQUE * get_suivant_coque(LISTE_MG_COQUE::iterator &it)
Definition: mg_geometrie.cpp:1838
MG_IDENTIFICATEUR
Definition: mg_identificateur.h:34
FEM_MAILLAGE::get_nb_xfem_element1
unsigned int get_nb_xfem_element1(void)
Definition: fem_maillage.cpp:826
FEM_MAILLAGE::ajouter_xfem_element3
int ajouter_xfem_element3(XFEM_ELEMENT3 *femelement3)
Definition: fem_maillage.cpp:1025
FEM_MAILLAGE::nz
int nz
Definition: fem_maillage.h:224
FEM_ELEMENT0
Definition: fem_element0.h:36
FEM_MAILLAGE::get_fem_element0id
FEM_ELEMENT0 * get_fem_element0id(unsigned long num)
Definition: fem_maillage.cpp:261
MG_GEOMETRIE::get_suivant_face
MG_FACE * get_suivant_face(LISTE_MG_FACE::iterator &it)
Definition: mg_geometrie.cpp:1346
FEM_MAILLAGE::ajouter_fem_noeud
FEM_NOEUD * ajouter_fem_noeud(MG_NOEUD *mgnoeud, unsigned long num=0)
Definition: fem_maillage.cpp:120
FEM_MAILLAGE::get_xfem_element1
XFEM_ELEMENT1 * get_xfem_element1(unsigned int num)
Definition: fem_maillage.cpp:833
MG_COARETE::get_arete
virtual MG_ARETE * get_arete(void)
Definition: mg_coarete.cpp:58
tpl_liste_entite.h
FEM_MAILLAGE::ajouter_xfem_element0
int ajouter_xfem_element0(XFEM_ELEMENT0 *femelement0)
Definition: fem_maillage.cpp:690
FEM_MAILLAGE::supprimer_fem_noeudid
int supprimer_fem_noeudid(unsigned long num)
Definition: fem_maillage.cpp:196
FEM_MAILLAGE::ajouter_fem_element3
int ajouter_fem_element3(FEM_ELEMENT3 *femelement3)
Definition: fem_maillage.cpp:580
MG_GEOMETRIE::get_mg_volume
MG_VOLUME * get_mg_volume(unsigned int num)
Definition: mg_geometrie.cpp:1683
MC_GESTIONNAIRE::get_materiau
class MC_MATERIAU * get_materiau(int num)
Definition: mc_gestionnaire.cpp:231
MG_TETRA::get_triangle3
virtual MG_TRIANGLE * get_triangle3(void)
Definition: mg_tetra.cpp:173
FEM_MAILLAGE::active_deforme
void active_deforme(void)
Definition: fem_maillage.cpp:1716
MG_GEOMETRIE::get_suivant_arete
MG_ARETE * get_suivant_arete(LISTE_MG_ARETE::iterator &it)
Definition: mg_geometrie.cpp:915
FEM_MAILLAGE::ajouter_xfem_element1
int ajouter_xfem_element1(XFEM_ELEMENT1 *femelement1)
Definition: fem_maillage.cpp:801
FEM_MAILLAGE::get_nb_fem_element1
unsigned int get_nb_fem_element1(void)
Definition: fem_maillage.cpp:382
FEM_MAILLAGE::lst_xfem_element3
LISTE_XFEM_ELEMENT3 lst_xfem_element3
Definition: fem_maillage.h:214
FEM_MAILLAGE::get_premier_element3
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:672
FEM_MAILLAGE::lst_xfem_element1
LISTE_XFEM_ELEMENT1 lst_xfem_element1
Definition: fem_maillage.h:212
FEM_MAILLAGE::get_premier_xelement3
XFEM_ELEMENT3 * get_premier_xelement3(LISTE_XFEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:1117
mat
#define mat(i, j)
FEM_MAILLAGE::supprimer_fem_noeud
int supprimer_fem_noeud(unsigned int num)
Definition: fem_maillage.cpp:213
MC_PROPRIETE::get_nom
char * get_nom(void)
Definition: mc_propriete.cpp:74
m
#define m(i, j)