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 |
|
|
|