ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mecanique/src/mc_gestionnaire.cpp
Revision: 764
Committed: Mon Dec 7 19:08:59 2015 UTC (9 years, 5 months ago) by francois
File size: 10163 byte(s)
Log Message:
ajout de methode et constante pour le traitement des poutres

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     // mt_gestionnaire.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H23
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26    
27     #pragma hdrstop
28    
29 francois 296 #include "mc_gestionnaire.h"
30     #include "mc_materiau.h"
31 francois 283 #include "parse.h"
32     #include "pars_argument.h"
33     #include <string.h>
34     //---------------------------------------------------------------------------
35 francois 296 MC_GESTIONNAIRE::MC_GESTIONNAIRE(char* path)
36 francois 283 {
37     chemin=path;
38     lire();
39     }
40    
41 francois 296
42     MC_GESTIONNAIRE::MC_GESTIONNAIRE()
43 francois 283 {
44 francois 296 std::pair<std::string,std::string> tmp("Dx","Déplacement en X");
45     mecaliste.insert(tmp);
46     std::pair<std::string,std::string> tmp2("Dy","Déplacement en Y");
47     mecaliste.insert(tmp2);
48     std::pair<std::string,std::string> tmp3("Dz","Déplacement en z");
49     mecaliste.insert(tmp3);
50 gervaislavoie 302 std::pair<std::string,std::string> tmp4("Da","Tous les déplacements et toutes les rotations");
51 francois 296 mecaliste.insert(tmp4);
52     std::pair<std::string,std::string> tmp5("Fx","Force concentrée en X");
53     mecaliste.insert(tmp5);
54     std::pair<std::string,std::string> tmp6("Fy","Force concentrée en Y");
55     mecaliste.insert(tmp6);
56     std::pair<std::string,std::string> tmp7("Fz","Force concentrée en Z");
57     mecaliste.insert(tmp7);
58     std::pair<std::string,std::string> tmp8("Px","Pression en x");
59     mecaliste.insert(tmp8);
60     std::pair<std::string,std::string> tmp9("Py","Pression en y");
61     mecaliste.insert(tmp9);
62     std::pair<std::string,std::string> tmp10("Pz","Pression en z");
63     mecaliste.insert(tmp10);
64     std::pair<std::string,std::string> tmp11("Pn","Pression normale");
65     mecaliste.insert(tmp11);
66 francois 706 /*std::pair<std::string,std::string> tmp12("Tp","Temperature de reference");
67     mecaliste.insert(tmp12);*/
68 francois 296 std::pair<std::string,std::string> tmp13("Cc","Couleur pour algorithme de comparaison");
69     mecaliste.insert(tmp13);
70 gervaislavoie 304 std::pair<std::string,std::string> tmp14("Em","Module d'Young isotrope");
71 francois 296 mecaliste.insert(tmp14);
72 gervaislavoie 304 std::pair<std::string,std::string> tmp15("nu","Coefficient de Poisson isotrope");
73 francois 296 mecaliste.insert(tmp15);
74     std::pair<std::string,std::string> tmp16("Ro","Densité du matériau");
75     mecaliste.insert(tmp16);
76 francois 300 std::pair<std::string,std::string> tmp17("ep","Epaisseur d'une coque");
77     mecaliste.insert(tmp17);
78 gervaislavoie 301 std::pair<std::string,std::string> tmp18("Rx","Rotation en x");
79     mecaliste.insert(tmp18);
80     std::pair<std::string,std::string> tmp19("Ry","Rotation en y");
81     mecaliste.insert(tmp19);
82     std::pair<std::string,std::string> tmp20("Rz","Rotation en z");
83     mecaliste.insert(tmp20);
84 gervaislavoie 302 std::pair<std::string,std::string> tmp21("Rt","Toutes les rotations");
85     mecaliste.insert(tmp21);
86     std::pair<std::string,std::string> tmp22("Dt","Tous les déplacements");
87     mecaliste.insert(tmp22);
88 francois 764 std::pair<std::string,std::string> tmp23("Cx","Abcisse d'orientation du point d'orientation d'une coque/poutre");
89 francois 316 mecaliste.insert(tmp23);
90 francois 764 std::pair<std::string,std::string> tmp24("Cy","Ordonnee d'orientation du point d'orientation d'une coque/poutre");
91 francois 316 mecaliste.insert(tmp24);
92 francois 764 std::pair<std::string,std::string> tmp25("Cz","Cote d'orientation du point d'orientation d'une coque/poutre");
93 francois 316 mecaliste.insert(tmp25);
94 gervaislavoie 332 std::pair<std::string,std::string> tmp26("Nd","Topologie à ne pas optimiser");
95     mecaliste.insert(tmp26);
96 francois 762 std::pair<std::string,std::string> tmp27("Tn","Temperature à un noeud pour le problème thermique");
97 francois 576 mecaliste.insert(tmp27);
98 francois 706 /*std::pair<std::string,std::string> tmp28("fx","Flux en x pour le problème thermique");
99 francois 576 mecaliste.insert(tmp28);
100 francois 592 std::pair<std::string,std::string> tmp29("fy","Flux en y pour le problème thermique");
101 francois 576 mecaliste.insert(tmp29);
102 francois 592 std::pair<std::string,std::string> tmp30("fz","Flux en z pour le problème thermique");
103 francois 706 mecaliste.insert(tmp30);*/
104 francois 592 std::pair<std::string,std::string> tmp31("fn","Flux normal pour le problème thermique");
105 francois 576 mecaliste.insert(tmp31);
106 francois 706 std::pair<std::string,std::string> tmp32("Kx","Conductivité thermique selon x ou isotrope");
107 francois 586 mecaliste.insert(tmp32);
108 francois 706 /*std::pair<std::string,std::string> tmp33("Ky","Conductivité thermique selon y");
109 francois 586 mecaliste.insert(tmp33);
110     std::pair<std::string,std::string> tmp34("Kz","Conductivité thermique selon z");
111 francois 706 mecaliste.insert(tmp34);*/
112 francois 586 std::pair<std::string,std::string> tmp35("Cp","Chaleur specifique");
113     mecaliste.insert(tmp35);
114 francois 706 /*
115 mejrim 597 std::pair<std::string,std::string> tmp36("ti","Temps initial");
116     mecaliste.insert(tmp36);
117     std::pair<std::string,std::string> tmp37("tf","Temps final");
118     mecaliste.insert(tmp37);
119     std::pair<std::string,std::string> tmp38("pa","pas de temps");
120     mecaliste.insert(tmp38);
121 mejrim 606 std::pair<std::string,std::string> tmp39("PE","Paramètre de la méthode d'EULER");
122 francois 706 mecaliste.insert(tmp39);*/
123 francois 711 std::pair<std::string,std::string> tmp40("CM","Id d'une courbe de traction d'un matériau");
124     mecaliste.insert(tmp40);
125 couturad 719 std::pair<std::string,std::string> tmp41("Et","Module d'Young plastique");
126     mecaliste.insert(tmp41);
127     std::pair<std::string,std::string> tmp42("Re","Limite elastique");
128     mecaliste.insert(tmp42);
129 francois 764 std::pair<std::string,std::string> tmp43("Iy","Moment d'inertie d'une section d'une poutre d'axe x");
130     mecaliste.insert(tmp43);
131     std::pair<std::string,std::string> tmp44("Iz","Moment d'inertie d'une section d'une poutre d'axe x");
132     mecaliste.insert(tmp44);
133     std::pair<std::string,std::string> tmp45("Aa","Aire d'une section d'une poutre");
134     mecaliste.insert(tmp45);
135     std::pair<std::string,std::string> tmp46("Hy","Largeur d'une section d'une poutre carrée");
136     mecaliste.insert(tmp46);
137     std::pair<std::string,std::string> tmp47("Hz","Hauteur d'une section d'une poutre carrée");
138     mecaliste.insert(tmp47);
139     std::pair<std::string,std::string> tmp48("Rr","Rayon d'une section d'une poutre circulaire");
140     mecaliste.insert(tmp48);
141     std::pair<std::string,std::string> tmp49("Jx","Constante de torsion d'une poutre");
142     mecaliste.insert(tmp49);
143 francois 296 }
144    
145    
146     int MC_GESTIONNAIRE::existe(std::string code)
147     {
148     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
149     if (it==mecaliste.end()) return 0;
150     return 1;
151     }
152    
153    
154     std::string MC_GESTIONNAIRE::get_description(std::string code)
155     {
156     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
157     if (it==mecaliste.end()) return "";
158     return (*it).second;
159     }
160    
161     int MC_GESTIONNAIRE::get_description(std::string &code,std::string &description,int init)
162     {
163     static std::map<std::string,std::string,std::less<std::string> >::iterator it;
164     static int passe=0;
165     if (passe==0) {init=1;passe=1;}
166     if (it==mecaliste.end()) init=1;
167     if (init==1) it=mecaliste.begin();
168     if (init==0) it++;
169     if (it!=mecaliste.end())
170     {
171     code=(*it).first;
172     description=(*it).second;
173     return 1;
174     }
175     return 0;
176     }
177    
178    
179     MC_GESTIONNAIRE::~MC_GESTIONNAIRE()
180     {
181 francois 283 int nb=lst_mat.get_nb();
182     while (nb!=0)
183     {
184 francois 296 MC_MATERIAU* mat=lst_mat.get(0);
185 francois 283 lst_mat.supprimer(mat);
186     delete mat;
187     nb=lst_mat.get_nb();
188     }
189     }
190    
191 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::ajouter_materiau(std::string nom,std::string descrip)
192 francois 283 {
193 francois 296 MC_MATERIAU* mat=new MC_MATERIAU((char*)nom.c_str(),(char*)descrip.c_str());
194 francois 283 lst_mat.ajouter(mat);
195     return mat;
196     }
197    
198 francois 296 int MC_GESTIONNAIRE::get_nb_materiau()
199 francois 283 {
200     return lst_mat.get_nb();
201     }
202    
203 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::get_materiau(int num)
204 francois 283 {
205     return lst_mat.get(num);
206     }
207    
208 francois 296 char* MC_GESTIONNAIRE::get_chemin()
209 francois 283 {
210     return (char*)chemin.c_str();
211     }
212    
213    
214 francois 296 void MC_GESTIONNAIRE::lire(void)
215 francois 283 {
216     FILE *in=fopen(chemin.c_str(),"rt");
217     if (in==NULL) return ;
218     PARS_ARGUMENT param[20];
219     PARSE parse;
220     char motcle[255];
221     do
222     {
223     char mess[255];
224     char* res=fgets(mess,255,in);
225     std::string ligne=mess;
226     parse.decode(ligne.c_str(),(char*)"@\n",param);
227     sscanf(param[0].argument[0].c_str(),"%s",motcle);
228     if (strcmp(motcle,"END")!=0)
229     {
230     parse.decode(ligne.c_str(),(char*)"@:@\n",param);
231     sscanf(param[0].argument[0].c_str(),"%s",motcle);
232     if (strcmp(motcle,"MATL")==0)
233     {
234     parse.decode(ligne.c_str(),(char*)"@:@:@:@\n",param);
235 francois 296 MC_MATERIAU* mate=ajouter_materiau(param[1].argument[0],param[3].argument[0].c_str());
236 francois 283 do
237     {
238     char mess[255];
239     char *res=fgets(mess,255,in);
240     std::string ligne=mess;
241     parse.decode(ligne.c_str(),(char*)"@\n",param);
242     sscanf(param[0].argument[0].c_str(),"%s",motcle);
243     if (strcmp(motcle,"ENDMATL")!=0)
244     {
245     char nom[20],uni1[50],uni2[50],uni3[50];
246     double val1,val2,val3;
247     int nb=sscanf(ligne.c_str(),"%s %lf %s %lf %s %lf %s",nom,&val1,uni1,&val2,uni2,&val3,uni3);
248     if (nb==7)
249     mate->ajouter_propriete(nom,val1,uni1,val2,uni2,val3,uni3);
250     else
251     {
252     sscanf(ligne.c_str(),"%s %lf %lf %lf",nom,&val1,&val2,&val3);
253     mate->ajouter_propriete(nom,val1,(char*)"",val2,(char*)"",val3,(char*)"");
254     }
255    
256     }
257     sscanf(param[0].argument[0].c_str(),"%s",motcle);
258     }
259     while (strcmp(motcle,"ENDMATL")!=0);
260     }
261     }
262     sscanf(param[0].argument[0].c_str(),"%s",motcle);
263     }
264     while (strcmp(motcle,"END")!=0);
265     fclose(in);
266     }
267    
268