ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mecanique/src/mc_gestionnaire.cpp
Revision: 719
Committed: Tue Sep 8 15:34:38 2015 UTC (9 years, 11 months ago) by couturad
File size: 9316 byte(s)
Log Message:
ajout des études non lineaires dans MAGiC via code ASTER

File Contents

# Content
1 //------------------------------------------------------------
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 #include "mc_gestionnaire.h"
30 #include "mc_materiau.h"
31 #include "parse.h"
32 #include "pars_argument.h"
33 #include <string.h>
34 //---------------------------------------------------------------------------
35 MC_GESTIONNAIRE::MC_GESTIONNAIRE(char* path)
36 {
37 chemin=path;
38 lire();
39 }
40
41
42 MC_GESTIONNAIRE::MC_GESTIONNAIRE()
43 {
44 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 std::pair<std::string,std::string> tmp4("Da","Tous les déplacements et toutes les rotations");
51 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 /*std::pair<std::string,std::string> tmp12("Tp","Temperature de reference");
67 mecaliste.insert(tmp12);*/
68 std::pair<std::string,std::string> tmp13("Cc","Couleur pour algorithme de comparaison");
69 mecaliste.insert(tmp13);
70 std::pair<std::string,std::string> tmp14("Em","Module d'Young isotrope");
71 mecaliste.insert(tmp14);
72 std::pair<std::string,std::string> tmp15("nu","Coefficient de Poisson isotrope");
73 mecaliste.insert(tmp15);
74 std::pair<std::string,std::string> tmp16("Ro","Densité du matériau");
75 mecaliste.insert(tmp16);
76 std::pair<std::string,std::string> tmp17("ep","Epaisseur d'une coque");
77 mecaliste.insert(tmp17);
78 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 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 std::pair<std::string,std::string> tmp23("Cx","Abcisse d'orientation du point d'orientation d'une coque");
89 mecaliste.insert(tmp23);
90 std::pair<std::string,std::string> tmp24("Cy","Ordonnee d'orientation du point d'orientation d'une coque");
91 mecaliste.insert(tmp24);
92 std::pair<std::string,std::string> tmp25("Cz","Cote d'orientation du point d'orientation d'une coque");
93 mecaliste.insert(tmp25);
94 std::pair<std::string,std::string> tmp26("Nd","Topologie à ne pas optimiser");
95 mecaliste.insert(tmp26);
96 std::pair<std::string,std::string> tmp27("Tn","Temparature à un noeud pour le problème thermique");
97 mecaliste.insert(tmp27);
98 /*std::pair<std::string,std::string> tmp28("fx","Flux en x pour le problème thermique");
99 mecaliste.insert(tmp28);
100 std::pair<std::string,std::string> tmp29("fy","Flux en y pour le problème thermique");
101 mecaliste.insert(tmp29);
102 std::pair<std::string,std::string> tmp30("fz","Flux en z pour le problème thermique");
103 mecaliste.insert(tmp30);*/
104 std::pair<std::string,std::string> tmp31("fn","Flux normal pour le problème thermique");
105 mecaliste.insert(tmp31);
106 std::pair<std::string,std::string> tmp32("Kx","Conductivité thermique selon x ou isotrope");
107 mecaliste.insert(tmp32);
108 /*std::pair<std::string,std::string> tmp33("Ky","Conductivité thermique selon y");
109 mecaliste.insert(tmp33);
110 std::pair<std::string,std::string> tmp34("Kz","Conductivité thermique selon z");
111 mecaliste.insert(tmp34);*/
112 std::pair<std::string,std::string> tmp35("Cp","Chaleur specifique");
113 mecaliste.insert(tmp35);
114 /*
115 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 std::pair<std::string,std::string> tmp39("PE","Paramètre de la méthode d'EULER");
122 mecaliste.insert(tmp39);*/
123 std::pair<std::string,std::string> tmp40("CM","Id d'une courbe de traction d'un matériau");
124 mecaliste.insert(tmp40);
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 }
130
131
132 int MC_GESTIONNAIRE::existe(std::string code)
133 {
134 std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
135 if (it==mecaliste.end()) return 0;
136 return 1;
137 }
138
139
140 std::string MC_GESTIONNAIRE::get_description(std::string code)
141 {
142 std::map<std::string,std::string,std::less<std::string> >::iterator it=mecaliste.find(code);
143 if (it==mecaliste.end()) return "";
144 return (*it).second;
145 }
146
147 int MC_GESTIONNAIRE::get_description(std::string &code,std::string &description,int init)
148 {
149 static std::map<std::string,std::string,std::less<std::string> >::iterator it;
150 static int passe=0;
151 if (passe==0) {init=1;passe=1;}
152 if (it==mecaliste.end()) init=1;
153 if (init==1) it=mecaliste.begin();
154 if (init==0) it++;
155 if (it!=mecaliste.end())
156 {
157 code=(*it).first;
158 description=(*it).second;
159 return 1;
160 }
161 return 0;
162 }
163
164
165 MC_GESTIONNAIRE::~MC_GESTIONNAIRE()
166 {
167 int nb=lst_mat.get_nb();
168 while (nb!=0)
169 {
170 MC_MATERIAU* mat=lst_mat.get(0);
171 lst_mat.supprimer(mat);
172 delete mat;
173 nb=lst_mat.get_nb();
174 }
175 }
176
177 class MC_MATERIAU* MC_GESTIONNAIRE::ajouter_materiau(std::string nom,std::string descrip)
178 {
179 MC_MATERIAU* mat=new MC_MATERIAU((char*)nom.c_str(),(char*)descrip.c_str());
180 lst_mat.ajouter(mat);
181 return mat;
182 }
183
184 int MC_GESTIONNAIRE::get_nb_materiau()
185 {
186 return lst_mat.get_nb();
187 }
188
189 class MC_MATERIAU* MC_GESTIONNAIRE::get_materiau(int num)
190 {
191 return lst_mat.get(num);
192 }
193
194 char* MC_GESTIONNAIRE::get_chemin()
195 {
196 return (char*)chemin.c_str();
197 }
198
199
200 void MC_GESTIONNAIRE::lire(void)
201 {
202 FILE *in=fopen(chemin.c_str(),"rt");
203 if (in==NULL) return ;
204 PARS_ARGUMENT param[20];
205 PARSE parse;
206 char motcle[255];
207 do
208 {
209 char mess[255];
210 char* res=fgets(mess,255,in);
211 std::string ligne=mess;
212 parse.decode(ligne.c_str(),(char*)"@\n",param);
213 sscanf(param[0].argument[0].c_str(),"%s",motcle);
214 if (strcmp(motcle,"END")!=0)
215 {
216 parse.decode(ligne.c_str(),(char*)"@:@\n",param);
217 sscanf(param[0].argument[0].c_str(),"%s",motcle);
218 if (strcmp(motcle,"MATL")==0)
219 {
220 parse.decode(ligne.c_str(),(char*)"@:@:@:@\n",param);
221 MC_MATERIAU* mate=ajouter_materiau(param[1].argument[0],param[3].argument[0].c_str());
222 do
223 {
224 char mess[255];
225 char *res=fgets(mess,255,in);
226 std::string ligne=mess;
227 parse.decode(ligne.c_str(),(char*)"@\n",param);
228 sscanf(param[0].argument[0].c_str(),"%s",motcle);
229 if (strcmp(motcle,"ENDMATL")!=0)
230 {
231 char nom[20],uni1[50],uni2[50],uni3[50];
232 double val1,val2,val3;
233 int nb=sscanf(ligne.c_str(),"%s %lf %s %lf %s %lf %s",nom,&val1,uni1,&val2,uni2,&val3,uni3);
234 if (nb==7)
235 mate->ajouter_propriete(nom,val1,uni1,val2,uni2,val3,uni3);
236 else
237 {
238 sscanf(ligne.c_str(),"%s %lf %lf %lf",nom,&val1,&val2,&val3);
239 mate->ajouter_propriete(nom,val1,(char*)"",val2,(char*)"",val3,(char*)"");
240 }
241
242 }
243 sscanf(param[0].argument[0].c_str(),"%s",motcle);
244 }
245 while (strcmp(motcle,"ENDMATL")!=0);
246 }
247 }
248 sscanf(param[0].argument[0].c_str(),"%s",motcle);
249 }
250 while (strcmp(motcle,"END")!=0);
251 fclose(in);
252 }
253
254