ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_gestionnaire.cpp
Revision: 951
Committed: Fri Aug 10 15:17:17 2018 UTC (6 years, 9 months ago) by couturad
File size: 27386 byte(s)
Log Message:
-> Ajout de Project Chrono (voir CMakeLists.txt).
-> Ajout d'un générateur de microstructure basé sur la dynamique des corps rigides (MSTRUCT_GENERATEUR_DCR).
-> Ajout d'un opérateur de décallage de la topologie (MG_CG_OP_TRANSF_DECALLAGE).
-> Retrait de «using namespace std»  (conflit avec namespace chrono) et modification des fichiers affectés.
-> Modification de mailleur2d.cpp afin d'enregistrer un fichier MAGiC (void.magic) lorsque le nombre d'itération dépasse la valeur maximale.

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // mg_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27    
28     #include "mg_gestionnaire.h"
29 couturad 906 #include "mg_cg_modele.h"
30 francois 283
31    
32    
33    
34 couturad 740
35 francois 283 #include <fstream>
36     //#include "affiche.h"
37     //#include "message.h"
38    
39    
40    
41 francois 763 MG_GESTIONNAIRE::MG_GESTIONNAIRE():entiteidmax(0),ouvertsld(0),version_fichier(VERSIONFICHIER)
42 francois 283 {
43    
44    
45     }
46    
47     MG_GESTIONNAIRE::~MG_GESTIONNAIRE()
48     {
49 francois 674 supprimer_tout_fem_solution();
50 francois 283 supprimer_tout_mg_solution();
51     supprimer_tout_mg_maillage();
52 couturad 919 supprimer_tout_fem_maillage();
53 couturad 906 supprimer_tout_mgcg_modele();
54 francois 283 supprimer_tout_mg_geometrie();
55 couturad 919 supprimer_tout_mg_construction();
56 couturad 906 supprimer_tout_mg_arbre();
57 francois 793 }
58 francois 283
59 francois 793 void MG_GESTIONNAIRE::vide(void)
60     {
61     supprimer_tout_fem_solution();
62     supprimer_tout_mg_solution();
63     supprimer_tout_mg_maillage();
64 couturad 919 supprimer_tout_fem_maillage();
65 couturad 906 supprimer_tout_mgcg_modele();
66 francois 793 supprimer_tout_mg_geometrie();
67 couturad 919 supprimer_tout_mg_construction();
68 couturad 906 supprimer_tout_mg_arbre();
69 francois 793 entiteidmax=1;
70 francois 283 }
71    
72     void MG_GESTIONNAIRE::recherche_bonid(MG_IDENTIFICATEUR &ident)
73     {
74     if (ident.get_id()==0)
75     {
76     entiteidmax++;
77     ident.change_id(entiteidmax);
78     }
79     else
80     {
81     if (ident.get_id()>entiteidmax) entiteidmax=ident.get_id();
82     }
83     }
84    
85     void MG_GESTIONNAIRE::recherche_bonidvisuel(MG_IDENTIFICATEUR &ident)
86     {
87     if (ident.get_id()==0)
88     {
89     entitevisuelidmax++;
90     ident.change_id(entitevisuelidmax);
91     }
92     else
93     {
94     if (ident.get_id()>entitevisuelidmax) entitevisuelidmax=ident.get_id();
95     }
96     }
97    
98 couturad 906 // ENTITE MG_CG_MODELE
99    
100     int MG_GESTIONNAIRE::ajouter_mgcg_modele(MG_CG_MODELE* mgcg_modele)
101     {
102     recherche_bonid(*mgcg_modele);
103     MG_IDENTIFICATEUR *id=mgcg_modele;
104     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
105     if (!p.second) return FAIL;
106     std::pair<const unsigned long,MG_CG_MODELE*> tmp(mgcg_modele->get_id(),mgcg_modele);
107     lst_mgcg_modele.insert(tmp);
108     mgcg_modele->change_mg_gestionnaire(this);
109     return OK;
110     }
111    
112     MG_CG_MODELE* MG_GESTIONNAIRE::get_mgcg_modeleid(long unsigned int num)
113     {
114     LISTE_MGCG_MODELE::iterator i=lst_mgcg_modele.find(num);
115     if (i==lst_mgcg_modele.end())
116     {
117     return NULL;
118     }
119     return ((*i).second);
120     }
121    
122     MG_CG_MODELE* MG_GESTIONNAIRE::get_mgcg_modele(unsigned int num)
123     {
124     if (!(num<lst_mgcg_modele.size()))
125     {
126     return NULL;
127     }
128     LISTE_MGCG_MODELE::iterator i=lst_mgcg_modele.begin();
129     for (unsigned long j=0;j<num;j++) i++;
130     return ((*i).second);
131     }
132    
133     unsigned int MG_GESTIONNAIRE::get_nb_mgcg_modele(void)
134     {
135     return lst_mgcg_modele.size();
136     }
137    
138     MG_CG_MODELE* MG_GESTIONNAIRE::get_premier_mgcg_modele(LISTE_MGCG_MODELE::iterator& it)
139     {
140     it = lst_mgcg_modele.begin();
141     if (it == lst_mgcg_modele.end())
142     return NULL;
143     return it->second ;
144     }
145    
146     MG_CG_MODELE* MG_GESTIONNAIRE::get_suivant_mgcg_modele(LISTE_MGCG_MODELE::iterator& it)
147     {
148     it++;
149     if (it==lst_mgcg_modele.end())
150     return NULL;
151     return it->second;
152     }
153    
154     int MG_GESTIONNAIRE::supprimer_mgcg_modele(unsigned int num)
155     {
156     MG_CG_MODELE* mgcg_modele=get_mgcg_modele(num);
157     if (mgcg_modele==NULL)
158     {
159     return FAIL;
160     }
161     MG_IDENTIFICATEUR* id=mgcg_modele;
162     LISTE_ENTITE::iterator i=lst_entite.find(id);
163     lst_entite.erase(i);
164     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.find(id->get_id());
165     lst_mgcg_modele.erase(j);
166     delete mgcg_modele;
167     return OK;
168     }
169    
170     int MG_GESTIONNAIRE::supprimer_mgcg_modeleid(long unsigned int num)
171     {
172     MG_CG_MODELE* mgcg_modele=get_mgcg_modeleid(num);
173     if (mgcg_modele==NULL)
174     {
175     return FAIL;
176     }
177     MG_IDENTIFICATEUR* id=mgcg_modele;
178     LISTE_ENTITE::iterator i=lst_entite.find(id);
179     lst_entite.erase(i);
180     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.find(num);
181     lst_mgcg_modele.erase(j);
182     delete mgcg_modele;
183     return OK;
184     }
185    
186     void MG_GESTIONNAIRE::supprimer_tout_mgcg_modele(void)
187     {
188     while (get_nb_mgcg_modele()!=0)
189     {
190     LISTE_MGCG_MODELE::iterator j=lst_mgcg_modele.begin();
191     MG_CG_MODELE* mgcg_modele=(*j).second;
192     MG_IDENTIFICATEUR* id=mgcg_modele;
193     LISTE_ENTITE::iterator i=lst_entite.find(id);
194     lst_entite.erase(i);
195     lst_mgcg_modele.erase(j);
196     delete mgcg_modele;
197     }
198     }
199    
200    
201     // FIN ENTITE MG_CG_MODELE
202    
203    
204    
205    
206 francois 686 // ENTITE MG_ARBRE
207     int MG_GESTIONNAIRE::ajouter_mg_arbre(MG_ARBRE *mgarbre)
208     {
209     recherche_bonid(*mgarbre);
210     MG_IDENTIFICATEUR *id=mgarbre;
211     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
212     if (!p.second) return FAIL;
213     std::pair<const unsigned long,MG_ARBRE*> tmp(mgarbre->get_id(),mgarbre);
214     lst_mg_arbre.insert(tmp);
215     mgarbre->change_gestionnaire(this);
216     return OK;
217     }
218 francois 283
219    
220 francois 686 MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbreid(unsigned long num)
221     {
222     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.find(num);
223     if (i==lst_mg_arbre.end())
224     {
225     // afficheur << INEXISTE << enderr;
226     return NULL;
227     }
228     return ((*i).second);
229     }
230    
231    
232    
233     MG_ARBRE* MG_GESTIONNAIRE::get_mg_arbre(unsigned int num)
234     {
235     if (!(num<lst_mg_arbre.size()))
236     {
237     // afficheur << INEXISTE << enderr;
238     return NULL;
239     }
240     LISTE_MG_ARBRE::iterator i=lst_mg_arbre.begin();
241     for (unsigned long j=0;j<num;j++) i++;
242     return ((*i).second);
243     }
244    
245     MG_ARBRE* MG_GESTIONNAIRE::get_premier_arbre(LISTE_MG_ARBRE::iterator &it)
246     {
247     it = lst_mg_arbre.begin();
248     if (it == lst_mg_arbre.end())
249     return NULL;
250     return it->second ;
251     }
252    
253     MG_ARBRE* MG_GESTIONNAIRE::get_suivant_arbre(LISTE_MG_ARBRE::iterator &it)
254     {
255     it++;
256     if (it==lst_mg_arbre.end())
257     return NULL;
258     return it->second;
259     }
260    
261     unsigned int MG_GESTIONNAIRE::get_nb_mg_arbre(void)
262     {
263     return lst_mg_arbre.size();
264     }
265    
266    
267     int MG_GESTIONNAIRE::supprimer_mg_arbreid(unsigned long num)
268     {
269     MG_ARBRE* mgarbre=get_mg_arbreid(num);
270     if (mgarbre==NULL)
271     {
272     // afficheur << INEXISTE2 << enderr;
273     return FAIL;
274     }
275     MG_IDENTIFICATEUR* id=mgarbre;
276     LISTE_ENTITE::iterator i=lst_entite.find(id);
277     lst_entite.erase(i);
278     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(num);
279     lst_mg_arbre.erase(j);
280     delete mgarbre;
281     return OK;
282     }
283    
284    
285     int MG_GESTIONNAIRE::supprimer_mg_arbre(unsigned int num)
286     {
287     MG_ARBRE* mgarbre=get_mg_arbre(num);
288     if (mgarbre==NULL)
289     {
290     // afficheur << INEXISTE2 << enderr;
291     return FAIL;
292     }
293     MG_IDENTIFICATEUR* id=mgarbre;
294     LISTE_ENTITE::iterator i=lst_entite.find(id);
295     lst_entite.erase(i);
296     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.find(id->get_id());
297     lst_mg_arbre.erase(j);
298     delete mgarbre;
299     return OK;
300     }
301    
302    
303     void MG_GESTIONNAIRE::supprimer_tout_mg_arbre(void)
304     {
305     while (get_nb_mg_arbre()!=0)
306     {
307     LISTE_MG_ARBRE::iterator j=lst_mg_arbre.begin();
308     MG_ARBRE* mgarbre=(*j).second;
309     MG_IDENTIFICATEUR* id=mgarbre;
310     LISTE_ENTITE::iterator i=lst_entite.find(id);
311     lst_entite.erase(i);
312     lst_mg_arbre.erase(j);
313     delete mgarbre;
314     }
315     }
316     // ENTITE MG_GEOMETRIE
317 francois 283 int MG_GESTIONNAIRE::ajouter_mg_geometrie(MG_GEOMETRIE *mggeo)
318     {
319     recherche_bonid(*mggeo);
320     MG_IDENTIFICATEUR *id=mggeo;
321     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
322     if (!p.second) return FAIL;
323     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(mggeo->get_id(),mggeo);
324     lst_mg_geometrie.insert(tmp);
325     mggeo->change_gestionnaire(this);
326     return OK;
327     }
328    
329    
330     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrieid(unsigned long num)
331     {
332     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.find(num);
333     if (i==lst_mg_geometrie.end())
334     {
335     // afficheur << INEXISTE << enderr;
336     return NULL;
337     }
338     return ((*i).second);
339     }
340    
341    
342    
343     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_geometrie(unsigned int num)
344     {
345     if (!(num<lst_mg_geometrie.size()))
346     {
347     // afficheur << INEXISTE << enderr;
348     return NULL;
349     }
350     LISTE_MG_GEOMETRIE::iterator i=lst_mg_geometrie.begin();
351     for (unsigned long j=0;j<num;j++) i++;
352     return ((*i).second);
353     }
354    
355     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
356     {
357     it = lst_mg_geometrie.begin();
358     if (it == lst_mg_geometrie.end())
359     return NULL;
360     return it->second ;
361     }
362    
363     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_geometrie(LISTE_MG_GEOMETRIE::iterator &it)
364     {
365     it++;
366     if (it==lst_mg_geometrie.end())
367     return NULL;
368     return it->second;
369     }
370    
371     unsigned int MG_GESTIONNAIRE::get_nb_mg_geometrie(void)
372     {
373     return lst_mg_geometrie.size();
374     }
375    
376    
377     int MG_GESTIONNAIRE::supprimer_mg_geometrieid(unsigned long num)
378     {
379     MG_GEOMETRIE* mggeo=get_mg_geometrieid(num);
380     if (mggeo==NULL)
381     {
382     // afficheur << INEXISTE2 << enderr;
383     return FAIL;
384     }
385     MG_IDENTIFICATEUR* id=mggeo;
386     LISTE_ENTITE::iterator i=lst_entite.find(id);
387     lst_entite.erase(i);
388     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(num);
389     lst_mg_geometrie.erase(j);
390     delete mggeo;
391     return OK;
392     }
393    
394    
395     int MG_GESTIONNAIRE::supprimer_mg_geometrie(unsigned int num)
396     {
397     MG_GEOMETRIE* mggeo=get_mg_geometrie(num);
398     if (mggeo==NULL)
399     {
400     // afficheur << INEXISTE2 << enderr;
401     return FAIL;
402     }
403     MG_IDENTIFICATEUR* id=mggeo;
404     LISTE_ENTITE::iterator i=lst_entite.find(id);
405     lst_entite.erase(i);
406     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.find(id->get_id());
407     lst_mg_geometrie.erase(j);
408     delete mggeo;
409     return OK;
410     }
411    
412    
413     void MG_GESTIONNAIRE::supprimer_tout_mg_geometrie(void)
414     {
415     while (get_nb_mg_geometrie()!=0)
416     {
417     LISTE_MG_GEOMETRIE::iterator j=lst_mg_geometrie.begin();
418     MG_GEOMETRIE* mggeo=(*j).second;
419     MG_IDENTIFICATEUR* id=mggeo;
420     LISTE_ENTITE::iterator i=lst_entite.find(id);
421     lst_entite.erase(i);
422     lst_mg_geometrie.erase(j);
423     delete mggeo;
424     }
425     }
426    
427 couturad 919 //ENTITE CONSTRUTION
428    
429     int MG_GESTIONNAIRE::ajouter_mg_construction(MG_GEOMETRIE *construction)
430     {
431     recherche_bonid(*construction);
432     MG_IDENTIFICATEUR *id=construction;
433     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
434     if (!p.second) return FAIL;
435     std::pair<const unsigned long,MG_GEOMETRIE*> tmp(construction->get_id(),construction);
436     lst_mg_construction.insert(tmp);
437     construction->change_gestionnaire(this);
438     return OK;
439     }
440    
441    
442     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_constructionid(unsigned long num)
443     {
444     LISTE_MG_CONSTRUCTION::iterator i=lst_mg_construction.find(num);
445     if (i==lst_mg_construction.end())
446     {
447     // afficheur << INEXISTE << enderr;
448     return NULL;
449     }
450     return ((*i).second);
451     }
452    
453    
454    
455     MG_GEOMETRIE* MG_GESTIONNAIRE::get_mg_construction(unsigned int num)
456     {
457     if (!(num<lst_mg_construction.size()))
458     {
459     // afficheur << INEXISTE << enderr;
460     return NULL;
461     }
462     LISTE_MG_CONSTRUCTION::iterator i=lst_mg_construction.begin();
463     for (unsigned long j=0;j<num;j++) i++;
464     return ((*i).second);
465     }
466    
467     MG_GEOMETRIE* MG_GESTIONNAIRE::get_premier_construction(LISTE_MG_CONSTRUCTION::iterator &it)
468     {
469     it = lst_mg_construction.begin();
470     if (it == lst_mg_construction.end())
471     return NULL;
472     return it->second ;
473     }
474    
475     MG_GEOMETRIE* MG_GESTIONNAIRE::get_suivant_construction(LISTE_MG_CONSTRUCTION::iterator &it)
476     {
477     it++;
478     if (it==lst_mg_construction.end())
479     return NULL;
480     return it->second;
481     }
482    
483     unsigned int MG_GESTIONNAIRE::get_nb_mg_construction(void)
484     {
485     return lst_mg_construction.size();
486     }
487    
488    
489     int MG_GESTIONNAIRE::supprimer_mg_constructionid(unsigned long num)
490     {
491     MG_GEOMETRIE* construction=get_mg_constructionid(num);
492     if (construction==NULL)
493     {
494     // afficheur << INEXISTE2 << enderr;
495     return FAIL;
496     }
497     MG_IDENTIFICATEUR* id=construction;
498     LISTE_ENTITE::iterator i=lst_entite.find(id);
499     lst_entite.erase(i);
500     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.find(num);
501 couturad 944 lst_mg_construction.erase(j);
502 couturad 919 delete construction;
503     return OK;
504     }
505    
506    
507     int MG_GESTIONNAIRE::supprimer_mg_construction(unsigned int num)
508     {
509     MG_GEOMETRIE* construction=get_mg_construction(num);
510     if (construction==NULL)
511     {
512     // afficheur << INEXISTE2 << enderr;
513     return FAIL;
514     }
515     MG_IDENTIFICATEUR* id=construction;
516     LISTE_ENTITE::iterator i=lst_entite.find(id);
517     lst_entite.erase(i);
518     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.find(id->get_id());
519     lst_mg_construction.erase(j);
520     delete construction;
521     return OK;
522     }
523    
524    
525     void MG_GESTIONNAIRE::supprimer_tout_mg_construction(void)
526     {
527     while (get_nb_mg_construction()!=0)
528     {
529     LISTE_MG_CONSTRUCTION::iterator j=lst_mg_construction.begin();
530     MG_GEOMETRIE* construction=(*j).second;
531     MG_IDENTIFICATEUR* id=construction;
532     LISTE_ENTITE::iterator i=lst_entite.find(id);
533     lst_entite.erase(i);
534     lst_mg_construction.erase(j);
535     delete construction;
536     }
537     }
538    
539 francois 283 // ENTITE MG_MAILLAGE
540    
541    
542     int MG_GESTIONNAIRE::ajouter_mg_maillage(MG_MAILLAGE *mgmai)
543     {
544     recherche_bonid(*mgmai);
545     MG_IDENTIFICATEUR *id=mgmai;
546     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
547     if (!p.second)
548     {
549     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
550     return FAIL;
551     }
552    
553     std::pair<const unsigned long,MG_MAILLAGE*> tmp(mgmai->get_id(),mgmai);
554     lst_mg_maillage.insert(tmp);
555     mgmai->change_gestionnaire(this);
556     return OK;
557     }
558    
559    
560     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillageid(unsigned long num)
561     {
562     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.find(num);
563     if (i==lst_mg_maillage.end())
564     {
565     // afficheur << INEXISTE << enderr;
566     return NULL;
567     }
568     return ((*i).second);
569     }
570    
571    
572    
573     MG_MAILLAGE* MG_GESTIONNAIRE::get_mg_maillage(unsigned int num)
574     {
575     if (!(num<lst_mg_maillage.size()))
576     {
577     // afficheur << INEXISTE << enderr;
578     return NULL;
579     }
580     LISTE_MG_MAILLAGE::iterator i=lst_mg_maillage.begin();
581     for (unsigned long j=0;j<num;j++) i++;
582     return ((*i).second);
583     }
584    
585    
586     MG_MAILLAGE* MG_GESTIONNAIRE::get_premier_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
587     {
588     it = lst_mg_maillage.begin();
589     if (it == lst_mg_maillage.end())
590     return NULL;
591     return it->second ;
592     }
593    
594     MG_MAILLAGE* MG_GESTIONNAIRE::get_suivant_mg_maillage(LISTE_MG_MAILLAGE::iterator &it)
595     {
596     it++;
597     if (it==lst_mg_maillage.end())
598     return NULL;
599     return it->second;
600     }
601    
602    
603     unsigned int MG_GESTIONNAIRE::get_nb_mg_maillage(void)
604     {
605     return lst_mg_maillage.size();
606     }
607    
608    
609     int MG_GESTIONNAIRE::supprimer_mg_maillageid(unsigned long num)
610     {
611     MG_MAILLAGE* mgmai=get_mg_maillageid(num);
612     if (mgmai==NULL)
613     {
614     // afficheur << INEXISTE2 << enderr;
615     return FAIL;
616     }
617     MG_IDENTIFICATEUR* id=mgmai;
618     LISTE_ENTITE::iterator i=lst_entite.find(id);
619     lst_entite.erase(i);
620     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(num);
621     lst_mg_maillage.erase(j);
622     delete mgmai;
623     return OK;
624     }
625    
626    
627     int MG_GESTIONNAIRE::supprimer_mg_maillage(unsigned int num)
628     {
629     MG_MAILLAGE* mgmai=get_mg_maillage(num);
630     if (mgmai==NULL)
631     {
632     // afficheur << INEXISTE2 << enderr;
633     return FAIL;
634     }
635     MG_IDENTIFICATEUR* id=mgmai;
636     LISTE_ENTITE::iterator i=lst_entite.find(id);
637     lst_entite.erase(i);
638     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.find(id->get_id());
639     lst_mg_maillage.erase(j);
640     delete mgmai;
641     return OK;
642     }
643    
644    
645     void MG_GESTIONNAIRE::supprimer_tout_mg_maillage(void)
646     {
647     while (get_nb_mg_maillage()!=0)
648     {
649     LISTE_MG_MAILLAGE::iterator j=lst_mg_maillage.begin();
650     MG_MAILLAGE* mgmai=(*j).second;
651     MG_IDENTIFICATEUR* id=mgmai;
652     LISTE_ENTITE::iterator i=lst_entite.find(id);
653     lst_entite.erase(i);
654     lst_mg_maillage.erase(j);
655     delete mgmai;
656     }
657    
658     }
659    
660    
661    
662    
663     // ENTITE FEM_MAILLAGE
664    
665    
666    
667    
668     int MG_GESTIONNAIRE::ajouter_fem_maillage(FEM_MAILLAGE *femmai)
669     {
670     recherche_bonid(*femmai);
671     MG_IDENTIFICATEUR *id=femmai;
672     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
673     if (!p.second)
674     {
675     // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
676     return FAIL;
677     }
678    
679     std::pair<const unsigned long,FEM_MAILLAGE*> tmp(femmai->get_id(),femmai);
680     lst_fem_maillage.insert(tmp);
681     femmai->change_gestionnaire(this);
682     return OK;
683     }
684    
685    
686     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillageid(unsigned long num)
687     {
688     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.find(num);
689     if (i==lst_fem_maillage.end())
690     {
691     // afficheur << INEXISTE << enderr;
692     return NULL;
693     }
694     return ((*i).second);
695     }
696    
697    
698    
699     FEM_MAILLAGE* MG_GESTIONNAIRE::get_fem_maillage(unsigned int num)
700     {
701     if (!(num<lst_fem_maillage.size()))
702     {
703     // afficheur << INEXISTE << enderr;
704     return NULL;
705     }
706     LISTE_FEM_MAILLAGE::iterator i=lst_fem_maillage.begin();
707     for (unsigned long j=0;j<num;j++) i++;
708     return ((*i).second);
709     }
710    
711    
712    
713     unsigned int MG_GESTIONNAIRE::get_nb_fem_maillage(void)
714     {
715     return lst_fem_maillage.size();
716     }
717    
718    
719     int MG_GESTIONNAIRE::supprimer_fem_maillageid(unsigned long num)
720     {
721     FEM_MAILLAGE* femmai=get_fem_maillageid(num);
722     if (femmai==NULL)
723     {
724     // afficheur << INEXISTE2 << enderr;
725     return FAIL;
726     }
727     MG_IDENTIFICATEUR* id=femmai;
728     LISTE_ENTITE::iterator i=lst_entite.find(id);
729     lst_entite.erase(i);
730     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(num);
731     lst_fem_maillage.erase(j);
732     delete femmai;
733     return OK;
734     }
735    
736    
737     int MG_GESTIONNAIRE::supprimer_fem_maillage(unsigned int num)
738     {
739     FEM_MAILLAGE* femmai=get_fem_maillage(num);
740     if (femmai==NULL)
741     {
742     // afficheur << INEXISTE2 << enderr;
743     return FAIL;
744     }
745     MG_IDENTIFICATEUR* id=femmai;
746     LISTE_ENTITE::iterator i=lst_entite.find(id);
747     lst_entite.erase(i);
748     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.find(id->get_id());
749     lst_fem_maillage.erase(j);
750     delete femmai;
751     return OK;
752     }
753    
754    
755     void MG_GESTIONNAIRE::supprimer_tout_fem_maillage(void)
756     {
757     while (get_nb_fem_maillage()!=0)
758     {
759     LISTE_FEM_MAILLAGE::iterator j=lst_fem_maillage.begin();
760     FEM_MAILLAGE* femmai=(*j).second;
761     MG_IDENTIFICATEUR* id=femmai;
762     LISTE_ENTITE::iterator i=lst_entite.find(id);
763     lst_entite.erase(i);
764     lst_fem_maillage.erase(j);
765     delete femmai;
766     }
767    
768     }
769    
770     FEM_MAILLAGE* MG_GESTIONNAIRE::get_premier_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
771     {
772     it = lst_fem_maillage.begin();
773     if (it == lst_fem_maillage.end())
774     return NULL;
775     return it->second ;
776     }
777    
778     FEM_MAILLAGE* MG_GESTIONNAIRE::get_suivant_fem_maillage(LISTE_FEM_MAILLAGE::iterator &it)
779     {
780     it++;
781     if (it==lst_fem_maillage.end())
782     return NULL;
783     return it->second;
784     }
785    
786    
787    
788    
789    
790     // ENTITE MG_SOLUTION
791    
792    
793    
794    
795    
796    
797     int MG_GESTIONNAIRE::ajouter_mg_solution(MG_SOLUTION *mgsol)
798     {
799     recherche_bonid(*mgsol);
800     MG_IDENTIFICATEUR *id=mgsol;
801     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
802     if (!p.second)
803     {
804     return FAIL;
805     }
806    
807     std::pair<const unsigned long,MG_SOLUTION*> tmp(mgsol->get_id(),mgsol);
808     lst_mg_solution.insert(tmp);
809     return OK;
810     }
811    
812    
813     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solutionid(unsigned long num)
814     {
815     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.find(num);
816     if (i==lst_mg_solution.end())
817     {
818     return NULL;
819     }
820     return ((*i).second);
821     }
822    
823    
824    
825     MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(unsigned int num)
826     {
827     if (!(num<lst_mg_solution.size()))
828     {
829     return NULL;
830     }
831     LISTE_MG_SOLUTION::iterator i=lst_mg_solution.begin();
832     for (unsigned long j=0;j<num;j++) i++;
833     return ((*i).second);
834     }
835    
836 francois 326 MG_SOLUTION* MG_GESTIONNAIRE::get_mg_solution(MG_MAILLAGE* mg,int nb_champs,char *nomfichier,char *nomsolution)
837     {
838     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
839     while (j!=lst_mg_solution.end())
840     {
841    
842     MG_SOLUTION* mgsol=(*j).second;
843     if (mgsol->get_maillage()==mg)
844     if (mgsol->get_nb_champ()==nb_champs)
845     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
846     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
847     return mgsol;
848     j++;
849     }
850     return NULL;
851     }
852 francois 283
853     MG_SOLUTION* MG_GESTIONNAIRE::get_premier_mg_solution(LISTE_MG_SOLUTION::iterator &it)
854     {
855     it = lst_mg_solution.begin();
856     if (it == lst_mg_solution.end())
857     return NULL;
858     return it->second ;
859     }
860    
861     MG_SOLUTION* MG_GESTIONNAIRE::get_suivant_mg_solution(LISTE_MG_SOLUTION::iterator &it)
862     {
863     it++;
864     if (it==lst_mg_solution.end())
865     return NULL;
866     return it->second;
867     }
868    
869    
870     unsigned int MG_GESTIONNAIRE::get_nb_mg_solution(void)
871     {
872     return lst_mg_solution.size();
873     }
874    
875    
876     int MG_GESTIONNAIRE::supprimer_mg_solutionid(unsigned long num)
877     {
878     MG_SOLUTION* mgsol=get_mg_solutionid(num);
879     if (mgsol==NULL)
880     {
881     return FAIL;
882     }
883     MG_IDENTIFICATEUR* id=mgsol;
884     LISTE_ENTITE::iterator i=lst_entite.find(id);
885     lst_entite.erase(i);
886     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(num);
887     lst_mg_solution.erase(j);
888     mgsol->efface();
889     delete mgsol;
890     return OK;
891     }
892    
893    
894     int MG_GESTIONNAIRE::supprimer_mg_solution(unsigned int num)
895     {
896     MG_SOLUTION* mgsol=get_mg_solution(num);
897     if (mgsol==NULL)
898     {
899     return FAIL;
900     }
901     MG_IDENTIFICATEUR* id=mgsol;
902     LISTE_ENTITE::iterator i=lst_entite.find(id);
903     lst_entite.erase(i);
904     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.find(id->get_id());
905     lst_mg_solution.erase(j);
906     mgsol->efface();
907     delete mgsol;
908     return OK;
909     }
910    
911    
912     void MG_GESTIONNAIRE::supprimer_tout_mg_solution(void)
913     {
914     while (get_nb_mg_solution()!=0)
915     {
916     LISTE_MG_SOLUTION::iterator j=lst_mg_solution.begin();
917     MG_SOLUTION* mgsol=(*j).second;
918     MG_IDENTIFICATEUR* id=mgsol;
919     LISTE_ENTITE::iterator i=lst_entite.find(id);
920     lst_entite.erase(i);
921     lst_mg_solution.erase(j);
922     delete mgsol;
923     }
924    
925     }
926    
927    
928    
929    
930     // ENTITE FEM_SOLUTION
931    
932    
933    
934    
935    
936     int MG_GESTIONNAIRE::ajouter_fem_solution(FEM_SOLUTION *mgsol)
937     {
938     recherche_bonid(*mgsol);
939     MG_IDENTIFICATEUR *id=mgsol;
940     std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
941     if (!p.second)
942     {
943     return FAIL;
944     }
945    
946     std::pair<const unsigned long,FEM_SOLUTION*> tmp(mgsol->get_id(),mgsol);
947     lst_fem_solution.insert(tmp);
948     return OK;
949     }
950    
951    
952     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solutionid(unsigned long num)
953     {
954     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.find(num);
955     if (i==lst_fem_solution.end())
956     {
957     return NULL;
958     }
959     return ((*i).second);
960     }
961    
962    
963    
964     FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(unsigned int num)
965     {
966     if (!(num<lst_fem_solution.size()))
967     {
968     return NULL;
969     }
970     LISTE_FEM_SOLUTION::iterator i=lst_fem_solution.begin();
971     for (unsigned long j=0;j<num;j++) i++;
972     return ((*i).second);
973     }
974    
975    
976 francois 326 FEM_SOLUTION* MG_GESTIONNAIRE::get_fem_solution(FEM_MAILLAGE* fem,int nb_champs,char *nomfichier,char *nomsolution)
977     {
978     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
979     while (j!=lst_fem_solution.end())
980     {
981    
982     FEM_SOLUTION* mgsol=(*j).second;
983     if (mgsol->get_maillage()==fem)
984     if (mgsol->get_nb_champ()==nb_champs)
985     if (strcmp(mgsol->get_nom().c_str(),nomsolution)==0)
986     if (strcmp(mgsol->get_nom_fichier().c_str(),nomfichier)==0)
987     return mgsol;
988     j++;
989     }
990     return NULL;
991     }
992 francois 283
993 francois 326
994 francois 283 unsigned int MG_GESTIONNAIRE::get_nb_fem_solution(void)
995     {
996     return lst_fem_solution.size();
997     }
998    
999    
1000     int MG_GESTIONNAIRE::supprimer_fem_solutionid(unsigned long num)
1001     {
1002     FEM_SOLUTION* mgsol=get_fem_solutionid(num);
1003     if (mgsol==NULL)
1004     {
1005     return FAIL;
1006     }
1007     MG_IDENTIFICATEUR* id=mgsol;
1008     LISTE_ENTITE::iterator i=lst_entite.find(id);
1009     lst_entite.erase(i);
1010     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(num);
1011     lst_fem_solution.erase(j);
1012     mgsol->efface();
1013     delete mgsol;
1014     return OK;
1015     }
1016    
1017    
1018     int MG_GESTIONNAIRE::supprimer_fem_solution(unsigned int num)
1019     {
1020     FEM_SOLUTION* mgsol=get_fem_solution(num);
1021     if (mgsol==NULL)
1022     {
1023     return FAIL;
1024     }
1025     MG_IDENTIFICATEUR* id=mgsol;
1026     LISTE_ENTITE::iterator i=lst_entite.find(id);
1027     lst_entite.erase(i);
1028     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
1029     lst_fem_solution.erase(j);
1030     mgsol->efface();
1031     delete mgsol;
1032     return OK;
1033     }
1034    
1035     int MG_GESTIONNAIRE::supprimer_fem_solution_du_gestionnaire(unsigned int num)
1036     {
1037     FEM_SOLUTION* mgsol=get_fem_solution(num);
1038     if (mgsol==NULL)
1039     {
1040     return FAIL;
1041     }
1042     MG_IDENTIFICATEUR* id=mgsol;
1043     LISTE_ENTITE::iterator i=lst_entite.find(id);
1044     lst_entite.erase(i);
1045     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.find(id->get_id());
1046     lst_fem_solution.erase(j);
1047     return OK;
1048     }
1049    
1050    
1051     void MG_GESTIONNAIRE::supprimer_tout_fem_solution(void)
1052     {
1053     while (get_nb_fem_solution()!=0)
1054     {
1055     LISTE_FEM_SOLUTION::iterator j=lst_fem_solution.begin();
1056     FEM_SOLUTION* mgsol=(*j).second;
1057     MG_IDENTIFICATEUR* id=mgsol;
1058     LISTE_ENTITE::iterator i=lst_entite.find(id);
1059     lst_entite.erase(i);
1060     lst_fem_solution.erase(j);
1061     delete mgsol;
1062     }
1063    
1064     }
1065    
1066    
1067     FEM_SOLUTION* MG_GESTIONNAIRE::get_premier_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
1068     {
1069     it = lst_fem_solution.begin();
1070     if (it == lst_fem_solution.end())
1071     return NULL;
1072     return it->second ;
1073     }
1074    
1075     FEM_SOLUTION* MG_GESTIONNAIRE::get_suivant_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
1076     {
1077     it++;
1078     if (it==lst_fem_solution.end())
1079     return NULL;
1080     return it->second;
1081     }
1082    
1083    
1084    
1085     // FIN DE GESTION DES ENTITES
1086    
1087    
1088    
1089     void MG_GESTIONNAIRE::enregistrer(char* chemin)
1090     {
1091     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
1092     o.precision(16);
1093     o.setf(std::ios::showpoint);
1094     o <<(*this) << std::endl;
1095     }
1096    
1097     void MG_GESTIONNAIRE::enregistrer(const char* chemin)
1098     {
1099     std::ofstream o(chemin,std::ios::out|std::ios::trunc);
1100     o.precision(16);
1101     o.setf(std::ios::showpoint);
1102     o << (*this) << std::endl;
1103     }
1104    
1105 francois 763 void MG_GESTIONNAIRE::enregistrer(std::ostream& o,double version)
1106 francois 283 {
1107 francois 763 version_fichier=version;
1108 francois 283 LISTE_ENTITE::const_iterator i;
1109     o << "// Fichier MAGIC - UQTR;" << std::endl;
1110     o << "//*i:" << entiteidmax << ";" << std::endl;
1111 francois 763 o << "//*v:" << version_fichier << ";" << std::endl;
1112 francois 283 for (i=lst_entite.begin();i!=lst_entite.end();i++)
1113 francois 763 (*i)->enregistrer(o,version_fichier);
1114 francois 283 o << "FIN;" << std::endl;
1115     }
1116    
1117 francois 910
1118     void MG_GESTIONNAIRE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
1119     {
1120     LISTE_ENTITE::const_iterator i;
1121     for (i=lst_entite.begin();i!=lst_entite.end();i++)
1122     (*i)->get_fichier_dependant(liste_fichier);
1123     }
1124    
1125 francois 763 double MG_GESTIONNAIRE::get_version_fichier(void)
1126     {
1127     return version_fichier;
1128     }
1129 francois 283
1130    
1131     std::ostream& operator << (std::ostream& o,MG_GESTIONNAIRE& gest)
1132     {
1133 francois 763 gest.enregistrer(o,VERSIONFICHIER);
1134 francois 283 return o;
1135     }
1136