MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mc_gestionnaire.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 //####// mc_gestionnaire.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 17:15:00 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 
26 
27 
28 #include "mc_gestionnaire.h"
29 #include "mc_materiau.h"
30 #include "parse.h"
31 #include "pars_argument.h"
32 #include <string.h>
34 {
35  chemin=path;
36  lire();
37 }
38 
39 
41 {
42 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 std::pair<std::string,std::string> tmp3("Dz","Déplacement en Z");
47 mecaliste.insert(tmp3);
48 std::pair<std::string,std::string> tmp4("Da","Tous les déplacements et toutes les rotations");
49 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 /*std::pair<std::string,std::string> tmp12("Tp","Temperature de reference");
65 mecaliste.insert(tmp12);*/
66 std::pair<std::string,std::string> tmp13("Cc","Couleur pour algorithme de comparaison");
67 mecaliste.insert(tmp13);
68 std::pair<std::string,std::string> tmp14("Em","Module d'Young isotrope");
69 mecaliste.insert(tmp14);
70 std::pair<std::string,std::string> tmp15("nu","Coefficient de Poisson isotrope");
71 mecaliste.insert(tmp15);
72 std::pair<std::string,std::string> tmp16("Ro","Densité du matériau");
73 mecaliste.insert(tmp16);
74 std::pair<std::string,std::string> tmp17("ep","Epaisseur d'une coque");
75 mecaliste.insert(tmp17);
76 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 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 std::pair<std::string,std::string> tmp23("Cx","Abcisse d'orientation du point d'orientation d'une coque/poutre");
87 mecaliste.insert(tmp23);
88 std::pair<std::string,std::string> tmp24("Cy","Ordonnee d'orientation du point d'orientation d'une coque/poutre");
89 mecaliste.insert(tmp24);
90 std::pair<std::string,std::string> tmp25("Cz","Cote d'orientation du point d'orientation d'une coque/poutre");
91 mecaliste.insert(tmp25);
92 std::pair<std::string,std::string> tmp26("Nd","Topologie à ne pas optimiser");
93 mecaliste.insert(tmp26);
94 std::pair<std::string,std::string> tmp27("Tn","Temperature à un noeud pour le problème thermique");
95 mecaliste.insert(tmp27);
96 /*std::pair<std::string,std::string> tmp28("fx","Flux en x pour le problème thermique");
97 mecaliste.insert(tmp28);
98 std::pair<std::string,std::string> tmp29("fy","Flux en y pour le problème thermique");
99 mecaliste.insert(tmp29);
100 std::pair<std::string,std::string> tmp30("fz","Flux en z pour le problème thermique");
101 mecaliste.insert(tmp30);*/
102 std::pair<std::string,std::string> tmp31("fn","Flux normal pour le problème thermique");
103 mecaliste.insert(tmp31);
104 std::pair<std::string,std::string> tmp32("Kx","Conductivité thermique selon x ou isotrope");
105 mecaliste.insert(tmp32);
106 /*std::pair<std::string,std::string> tmp33("Ky","Conductivité thermique selon y");
107 mecaliste.insert(tmp33);
108 std::pair<std::string,std::string> tmp34("Kz","Conductivité thermique selon z");
109 mecaliste.insert(tmp34);*/
110 std::pair<std::string,std::string> tmp35("Cp","Chaleur specifique");
111 mecaliste.insert(tmp35);
112 /*
113 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 std::pair<std::string,std::string> tmp39("PE","Paramètre de la méthode d'EULER");
120 mecaliste.insert(tmp39);*/
121 std::pair<std::string,std::string> tmp40("CM","Id d'une courbe de traction d'un matériau");
122 mecaliste.insert(tmp40);
123 std::pair<std::string,std::string> tmp40b("cm","numero d'une courbe de traction d'un matériau");
124 mecaliste.insert(tmp40b);
125 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 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 std::pair<std::string,std::string> tmp50("DR","Déplacement radial");
144 mecaliste.insert(tmp50);
145 std::pair<std::string,std::string> tmp51("DA","Déplacement axial");
146 mecaliste.insert(tmp51);
147 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 }
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 
208 {
209  int nb=lst_mat.get_nb();
210  while (nb!=0)
211  {
214  delete mat;
215  nb=lst_mat.get_nb();
216  }
217 }
218 
219 class MC_MATERIAU* MC_GESTIONNAIRE::ajouter_materiau(std::string nom,std::string descrip)
220 {
221  MC_MATERIAU* mat=new MC_MATERIAU((char*)nom.c_str(),(char*)descrip.c_str());
223  return mat;
224 }
225 
227 {
228  return lst_mat.get_nb();
229 }
230 
232 {
233  return lst_mat.get(num);
234 }
235 
237 {
238  return (char*)chemin.c_str();
239 }
240 
241 
243 {
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  MC_MATERIAU* mate=ajouter_materiau(param[1].argument[0],param[3].argument[0].c_str());
264  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 
MC_MATERIAU
Definition: mc_materiau.h:31
gestionversion.h
MC_GESTIONNAIRE::lst_mat
TPL_LISTE_ENTITE< class MC_MATERIAU * > lst_mat
Definition: mc_gestionnaire.h:49
MC_GESTIONNAIRE::lire
void lire(void)
Definition: mc_gestionnaire.cpp:242
MC_MATERIAU::ajouter_propriete
class MC_PROPRIETE * ajouter_propriete(char *nom, double val1, char *unite1, double val2, char *unite2, double val3, char *unite3)
Definition: mc_materiau.cpp:53
mc_materiau.h
MC_GESTIONNAIRE::mecaliste
std::map< std::string, std::string, std::less< std::string > > mecaliste
Definition: mc_gestionnaire.h:51
mc_gestionnaire.h
parse.h
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
PARSE::decode
void decode(char *code, std::string masque, class PARS_ARGUMENT *arg)
Definition: parse.cpp:71
MC_GESTIONNAIRE::existe
int existe(std::string code)
Definition: mc_gestionnaire.cpp:174
MC_GESTIONNAIRE::chemin
std::string chemin
Definition: mc_gestionnaire.h:50
PARSE
Definition: parse.h:32
TPL_LISTE_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_liste_entite.h:67
MC_MATERIAU::MC_MATERIAU
MC_MATERIAU(char *valnom, char *valdes)
Definition: mc_materiau.cpp:34
TPL_LISTE_ENTITE::get
virtual X get(int num)
Definition: tpl_liste_entite.h:72
MC_GESTIONNAIRE::MC_GESTIONNAIRE
MC_GESTIONNAIRE()
Definition: mc_gestionnaire.cpp:40
PARS_ARGUMENT
Definition: pars_argument.h:37
MC_GESTIONNAIRE::get_chemin
char * get_chemin()
Definition: mc_gestionnaire.cpp:236
MC_GESTIONNAIRE::get_nb_materiau
int get_nb_materiau()
Definition: mc_gestionnaire.cpp:226
MC_GESTIONNAIRE::~MC_GESTIONNAIRE
~MC_GESTIONNAIRE()
Definition: mc_gestionnaire.cpp:207
res
#define res(i, j)
pars_argument.h
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
MC_MATERIAU::nom
std::string nom
Definition: mc_materiau.h:47
MC_GESTIONNAIRE::get_materiau
class MC_MATERIAU * get_materiau(int num)
Definition: mc_gestionnaire.cpp:231
MC_GESTIONNAIRE::get_description
std::string get_description(std::string code)
Definition: mc_gestionnaire.cpp:182
mat
#define mat(i, j)
MC_GESTIONNAIRE::ajouter_materiau
class MC_MATERIAU * ajouter_materiau(std::string nom, std::string descrip)
Definition: mc_gestionnaire.cpp:219