ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mecanique/src/mc_gestionnaire.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (14 months, 2 weeks ago) by francois
File size: 11913 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
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     //####// mc_gestionnaire.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 17:15:00 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 283
23    
24     #include "gestionversion.h"
25    
26    
27 francois 1158
28 francois 296 #include "mc_gestionnaire.h"
29     #include "mc_materiau.h"
30 francois 283 #include "parse.h"
31     #include "pars_argument.h"
32     #include <string.h>
33 francois 296 MC_GESTIONNAIRE::MC_GESTIONNAIRE(char* path)
34 francois 283 {
35     chemin=path;
36     lire();
37     }
38    
39 francois 296
40     MC_GESTIONNAIRE::MC_GESTIONNAIRE()
41 francois 283 {
42 francois 296 std::pair<std::string,std::string> tmp("Dx","Déplacement en X");
43     mecaliste.insert(tmp);
44     std::pair<std::string,std::string> tmp2("Dy","Déplacement en Y");
45     mecaliste.insert(tmp2);
46 francois 891 std::pair<std::string,std::string> tmp3("Dz","Déplacement en Z");
47 francois 296 mecaliste.insert(tmp3);
48 gervaislavoie 302 std::pair<std::string,std::string> tmp4("Da","Tous les déplacements et toutes les rotations");
49 francois 296 mecaliste.insert(tmp4);
50     std::pair<std::string,std::string> tmp5("Fx","Force concentrée en X");
51     mecaliste.insert(tmp5);
52     std::pair<std::string,std::string> tmp6("Fy","Force concentrée en Y");
53     mecaliste.insert(tmp6);
54     std::pair<std::string,std::string> tmp7("Fz","Force concentrée en Z");
55     mecaliste.insert(tmp7);
56     std::pair<std::string,std::string> tmp8("Px","Pression en x");
57     mecaliste.insert(tmp8);
58     std::pair<std::string,std::string> tmp9("Py","Pression en y");
59     mecaliste.insert(tmp9);
60     std::pair<std::string,std::string> tmp10("Pz","Pression en z");
61     mecaliste.insert(tmp10);
62     std::pair<std::string,std::string> tmp11("Pn","Pression normale");
63     mecaliste.insert(tmp11);
64 francois 706 /*std::pair<std::string,std::string> tmp12("Tp","Temperature de reference");
65     mecaliste.insert(tmp12);*/
66 francois 296 std::pair<std::string,std::string> tmp13("Cc","Couleur pour algorithme de comparaison");
67     mecaliste.insert(tmp13);
68 gervaislavoie 304 std::pair<std::string,std::string> tmp14("Em","Module d'Young isotrope");
69 francois 296 mecaliste.insert(tmp14);
70 gervaislavoie 304 std::pair<std::string,std::string> tmp15("nu","Coefficient de Poisson isotrope");
71 francois 296 mecaliste.insert(tmp15);
72     std::pair<std::string,std::string> tmp16("Ro","Densité du matériau");
73     mecaliste.insert(tmp16);
74 francois 300 std::pair<std::string,std::string> tmp17("ep","Epaisseur d'une coque");
75     mecaliste.insert(tmp17);
76 gervaislavoie 301 std::pair<std::string,std::string> tmp18("Rx","Rotation en x");
77     mecaliste.insert(tmp18);
78     std::pair<std::string,std::string> tmp19("Ry","Rotation en y");
79     mecaliste.insert(tmp19);
80     std::pair<std::string,std::string> tmp20("Rz","Rotation en z");
81     mecaliste.insert(tmp20);
82 gervaislavoie 302 std::pair<std::string,std::string> tmp21("Rt","Toutes les rotations");
83     mecaliste.insert(tmp21);
84     std::pair<std::string,std::string> tmp22("Dt","Tous les déplacements");
85     mecaliste.insert(tmp22);
86 francois 764 std::pair<std::string,std::string> tmp23("Cx","Abcisse d'orientation du point d'orientation d'une coque/poutre");
87 francois 316 mecaliste.insert(tmp23);
88 francois 764 std::pair<std::string,std::string> tmp24("Cy","Ordonnee d'orientation du point d'orientation d'une coque/poutre");
89 francois 316 mecaliste.insert(tmp24);
90 francois 764 std::pair<std::string,std::string> tmp25("Cz","Cote d'orientation du point d'orientation d'une coque/poutre");
91 francois 316 mecaliste.insert(tmp25);
92 gervaislavoie 332 std::pair<std::string,std::string> tmp26("Nd","Topologie à ne pas optimiser");
93     mecaliste.insert(tmp26);
94 francois 762 std::pair<std::string,std::string> tmp27("Tn","Temperature à un noeud pour le problème thermique");
95 francois 576 mecaliste.insert(tmp27);
96 francois 706 /*std::pair<std::string,std::string> tmp28("fx","Flux en x pour le problème thermique");
97 francois 576 mecaliste.insert(tmp28);
98 francois 592 std::pair<std::string,std::string> tmp29("fy","Flux en y pour le problème thermique");
99 francois 576 mecaliste.insert(tmp29);
100 francois 592 std::pair<std::string,std::string> tmp30("fz","Flux en z pour le problème thermique");
101 francois 706 mecaliste.insert(tmp30);*/
102 francois 592 std::pair<std::string,std::string> tmp31("fn","Flux normal pour le problème thermique");
103 francois 576 mecaliste.insert(tmp31);
104 francois 706 std::pair<std::string,std::string> tmp32("Kx","Conductivité thermique selon x ou isotrope");
105 francois 586 mecaliste.insert(tmp32);
106 francois 706 /*std::pair<std::string,std::string> tmp33("Ky","Conductivité thermique selon y");
107 francois 586 mecaliste.insert(tmp33);
108     std::pair<std::string,std::string> tmp34("Kz","Conductivité thermique selon z");
109 francois 706 mecaliste.insert(tmp34);*/
110 francois 586 std::pair<std::string,std::string> tmp35("Cp","Chaleur specifique");
111     mecaliste.insert(tmp35);
112 francois 706 /*
113 mejrim 597 std::pair<std::string,std::string> tmp36("ti","Temps initial");
114     mecaliste.insert(tmp36);
115     std::pair<std::string,std::string> tmp37("tf","Temps final");
116     mecaliste.insert(tmp37);
117     std::pair<std::string,std::string> tmp38("pa","pas de temps");
118     mecaliste.insert(tmp38);
119 mejrim 606 std::pair<std::string,std::string> tmp39("PE","Paramètre de la méthode d'EULER");
120 francois 706 mecaliste.insert(tmp39);*/
121 francois 711 std::pair<std::string,std::string> tmp40("CM","Id d'une courbe de traction d'un matériau");
122     mecaliste.insert(tmp40);
123 francois 891 std::pair<std::string,std::string> tmp40b("cm","numero d'une courbe de traction d'un matériau");
124     mecaliste.insert(tmp40b);
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 amroune 887 std::pair<std::string,std::string> tmp50("DR","Déplacement radial");
144 amroune 884 mecaliste.insert(tmp50);
145 amroune 887 std::pair<std::string,std::string> tmp51("DA","Déplacement axial");
146     mecaliste.insert(tmp51);
147 francois 984 std::pair<std::string,std::string> tmp52("E1","Module d'Young orthotrope dans la direction L");
148     mecaliste.insert(tmp52);
149     std::pair<std::string,std::string> tmp53("E2","Module d'Young orthotrope dans la direction T");
150     mecaliste.insert(tmp53);
151     std::pair<std::string,std::string> tmp54("E3","Module d'Young orthotrope dans la direction N");
152     mecaliste.insert(tmp54);
153     std::pair<std::string,std::string> tmp55("G1","Module dde cisaillement orthotrope dans le plan LT");
154     mecaliste.insert(tmp55);
155     std::pair<std::string,std::string> tmp56("G2","Module de cisaillement orthotrope dans le plan TN");
156     mecaliste.insert(tmp56);
157     std::pair<std::string,std::string> tmp57("G3","Module de cisaillement orthotrope dans le plan LN");
158     mecaliste.insert(tmp57);
159     std::pair<std::string,std::string> tmp58("n1","coefficient de poisson orthotrope dans le plan LT");
160     mecaliste.insert(tmp58);
161     std::pair<std::string,std::string> tmp59("n2","coefficient de poisson orthotrope dans le plan TN");
162     mecaliste.insert(tmp59);
163     std::pair<std::string,std::string> tmp60("n3","coefficient de poisson orthotrope dans le plan LN");
164     mecaliste.insert(tmp60);
165     std::pair<std::string,std::string> tmp61("a1","premier angle d'euler pour le repere local");
166     mecaliste.insert(tmp61);
167     std::pair<std::string,std::string> tmp62("a2","deuxieme angle d'euler pour le repere local");
168     mecaliste.insert(tmp62);
169     std::pair<std::string,std::string> tmp63("a3","troisieme angle d'euler pour le repere local");
170     mecaliste.insert(tmp63);
171 francois 296 }
172    
173    
174     int MC_GESTIONNAIRE::existe(std::string code)
175     {
176     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
177     if (it==mecaliste.end()) return 0;
178     return 1;
179     }
180    
181    
182     std::string MC_GESTIONNAIRE::get_description(std::string code)
183     {
184     std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
185     if (it==mecaliste.end()) return "";
186     return (*it).second;
187     }
188    
189     int MC_GESTIONNAIRE::get_description(std::string &code,std::string &description,int init)
190     {
191     static std::map<std::string,std::string,std::less<std::string> >::iterator it;
192     static int passe=0;
193     if (passe==0) {init=1;passe=1;}
194     if (it==mecaliste.end()) init=1;
195     if (init==1) it=mecaliste.begin();
196     if (init==0) it++;
197     if (it!=mecaliste.end())
198     {
199     code=(*it).first;
200     description=(*it).second;
201     return 1;
202     }
203     return 0;
204     }
205    
206    
207     MC_GESTIONNAIRE::~MC_GESTIONNAIRE()
208     {
209 francois 283 int nb=lst_mat.get_nb();
210     while (nb!=0)
211     {
212 francois 296 MC_MATERIAU* mat=lst_mat.get(0);
213 francois 283 lst_mat.supprimer(mat);
214     delete mat;
215     nb=lst_mat.get_nb();
216     }
217     }
218    
219 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::ajouter_materiau(std::string nom,std::string descrip)
220 francois 283 {
221 francois 296 MC_MATERIAU* mat=new MC_MATERIAU((char*)nom.c_str(),(char*)descrip.c_str());
222 francois 283 lst_mat.ajouter(mat);
223     return mat;
224     }
225    
226 francois 296 int MC_GESTIONNAIRE::get_nb_materiau()
227 francois 283 {
228     return lst_mat.get_nb();
229     }
230    
231 francois 296 class MC_MATERIAU* MC_GESTIONNAIRE::get_materiau(int num)
232 francois 283 {
233     return lst_mat.get(num);
234     }
235    
236 francois 296 char* MC_GESTIONNAIRE::get_chemin()
237 francois 283 {
238     return (char*)chemin.c_str();
239     }
240    
241    
242 francois 296 void MC_GESTIONNAIRE::lire(void)
243 francois 283 {
244     FILE *in=fopen(chemin.c_str(),"rt");
245     if (in==NULL) return ;
246     PARS_ARGUMENT param[20];
247     PARSE parse;
248     char motcle[255];
249     do
250     {
251     char mess[255];
252     char* res=fgets(mess,255,in);
253     std::string ligne=mess;
254     parse.decode(ligne.c_str(),(char*)"@\n",param);
255     sscanf(param[0].argument[0].c_str(),"%s",motcle);
256     if (strcmp(motcle,"END")!=0)
257     {
258     parse.decode(ligne.c_str(),(char*)"@:@\n",param);
259     sscanf(param[0].argument[0].c_str(),"%s",motcle);
260     if (strcmp(motcle,"MATL")==0)
261     {
262     parse.decode(ligne.c_str(),(char*)"@:@:@:@\n",param);
263 francois 296 MC_MATERIAU* mate=ajouter_materiau(param[1].argument[0],param[3].argument[0].c_str());
264 francois 283 do
265     {
266     char mess[255];
267     char *res=fgets(mess,255,in);
268     std::string ligne=mess;
269     parse.decode(ligne.c_str(),(char*)"@\n",param);
270     sscanf(param[0].argument[0].c_str(),"%s",motcle);
271     if (strcmp(motcle,"ENDMATL")!=0)
272     {
273     char nom[20],uni1[50],uni2[50],uni3[50];
274     double val1,val2,val3;
275     int nb=sscanf(ligne.c_str(),"%s %lf %s %lf %s %lf %s",nom,&val1,uni1,&val2,uni2,&val3,uni3);
276     if (nb==7)
277     mate->ajouter_propriete(nom,val1,uni1,val2,uni2,val3,uni3);
278     else
279     {
280     sscanf(ligne.c_str(),"%s %lf %lf %lf",nom,&val1,&val2,&val3);
281     mate->ajouter_propriete(nom,val1,(char*)"",val2,(char*)"",val3,(char*)"");
282     }
283    
284     }
285     sscanf(param[0].argument[0].c_str(),"%s",motcle);
286     }
287     while (strcmp(motcle,"ENDMATL")!=0);
288     }
289     }
290     sscanf(param[0].argument[0].c_str(),"%s",motcle);
291     }
292     while (strcmp(motcle,"END")!=0);
293     fclose(in);
294     }
295    
296