MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_element_topologique.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 //####// mg_element_topologique.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "mg_element_topologique.h"
26 #include <math.h>
27 
28 
33 
34 
35 
36 
37 MG_ELEMENT_TOPOLOGIQUE::MG_ELEMENT_TOPOLOGIQUE(std::string id):MG_IDENTIFICATEUR(),nouveau_numero(-1),idoriginal(id)
38 {
39 ini_param();
40 }
41 
42 
43 
44 MG_ELEMENT_TOPOLOGIQUE::MG_ELEMENT_TOPOLOGIQUE(unsigned long num,std::string id):MG_IDENTIFICATEUR(num),nouveau_numero(-1),idoriginal(id)
45 {
46 ini_param();
47 }
48 
50 {
51 ini_param();
52 }
53 
54 
56 {
57 }
58 
59 
60 
61 
63 {
64  return &lien_maillage;
65 }
66 
68 {
69  return &lien_fem_maillage;
70 }
71 
73 {
75 int retour=lst_topo_sous_jacente.existe(ele);
76 return retour;
77 }
78 
80 {
81  nouveau_numero=num;
82 }
83 
85 {
86  return nouveau_numero;
87 }
88 
90 {
91 return tabccf[num].formulation;
92 }
93 
94 
95 void MG_ELEMENT_TOPOLOGIQUE::get_type_ccf(int num,char* nom)
96 {
97 strcpy(nom,tabccf[num].type.c_str());
98 }
99 
100 
101 
103 {
104 return tabccf[num].effortsuiv;
105 }
106 
107 void MG_ELEMENT_TOPOLOGIQUE::change_effort_suiv(int num,std::string suiv)
108 {
109 tabccf[num].effortsuiv=suiv;
110 }
111 
113 {
114 tabccf[num].type=nom;
115 }
116 
118 {
119  return tabccf[num].ccfvaleur;
120 }
122 {
123  return tabccf[num].ccfformule;
124 }
126 {
127  return tabccf[num].variables.size();
128 }
129 std::string MG_ELEMENT_TOPOLOGIQUE::get_formule_variable(int num,int num2)
130 {
131  return tabccf[num].variables[num2];
132 }
134 {
135  return (unsigned long)(tabccf[num].ccfvaleur);
136 }
137 
139 {
140  tabccf[num].ccfvaleur=val;
141 }
142 
143 void MG_ELEMENT_TOPOLOGIQUE::change_formule_ccf(int num,std::string val)
144 {
145  tabccf[num].ccfformule=val;
146 }
147 
148 void MG_ELEMENT_TOPOLOGIQUE::change_id_ccf(int num,unsigned long val)
149 {
150  tabccf[num].ccfvaleur=val;
151 }
152 
153 
155 {
156  return tabccf.size();
157 }
158 
159 void MG_ELEMENT_TOPOLOGIQUE::ajouter_ccf(char *nom,double val,std::string suiv)
160 {
161  std::string stnom=nom;
162  for (int i=0;i<get_nb_ccf();i++)
163  {
164  if (tabccf[i].type==stnom)
165  {
166  tabccf[i].formulation='N';
167  tabccf[i].ccfvaleur=val;
168  return;
169  }
170  if ((stnom=="Da") || (stnom=="Dt"))
171  if ((tabccf[i].type=="Dx") || (tabccf[i].type=="Dy")|| (tabccf[i].type=="Dz") || (tabccf[i].type=="Rx")|| (tabccf[i].type=="Ry")|| (tabccf[i].type=="Rz") )
172  return;
173  if ((tabccf[i].type=="Da") || (tabccf[i].type=="Dt"))
174  if ((stnom=="Dx") || (stnom=="Dy")|| (stnom=="Dz") || (stnom=="Rx")|| (stnom=="Ry")|| (stnom=="Rz") )
175  return;
176  }
177  CCF nccf;
178  nccf.formulation='N';
179  nccf.type=nom;
180  nccf.ccfvaleur=val;
181  nccf.effortsuiv=suiv;
182  tabccf.push_back(nccf);
183 }
184 
185 
186 
187 void MG_ELEMENT_TOPOLOGIQUE::ajouter_ccf(char *nom,std::string formule,std::vector<std::string> &listvariable,std::string suiv)
188 {
189  std::string stnom=nom;
190  for (int i=0;i<get_nb_ccf();i++)
191  {
192  if (tabccf[i].type==stnom)
193  {
194  tabccf[i].formulation='F';
195  tabccf[i].ccfformule=formule;
196  tabccf[i].variables=listvariable;
197  return;
198  }
199  if ((stnom=="Da") || (stnom=="Dt"))
200  if ((tabccf[i].type=="Dx") || (tabccf[i].type=="Dy")|| (tabccf[i].type=="Dz") || (tabccf[i].type=="Rx")|| (tabccf[i].type=="Ry")|| (tabccf[i].type=="Rz") )
201  return;
202  if ((tabccf[i].type=="Da") || (tabccf[i].type=="Dt"))
203  if ((stnom=="Dx") || (stnom=="Dy")|| (stnom=="Dz") || (stnom=="Rx")|| (stnom=="Ry")|| (stnom=="Rz") )
204  return;
205  }
206  CCF nccf;
207  nccf.formulation='F';
208  nccf.type=nom;
209  nccf.ccfformule=formule;
210  nccf.variables=listvariable;
211  nccf.effortsuiv=suiv;
212  tabccf.push_back(nccf);
213 }
214 
215 void MG_ELEMENT_TOPOLOGIQUE::ajouter_ccf(char *nom,unsigned long id,std::string suiv)
216 {
217  std::string stnom=nom;
218  for (int i=0;i<get_nb_ccf();i++)
219  {
220  if (tabccf[i].type==stnom)
221  {
222  tabccf[i].formulation='I';
223  tabccf[i].ccfvaleur=id;
224  return;
225  }
226  if ((stnom=="Da") || (stnom=="Dt"))
227  if ((tabccf[i].type=="Dx") || (tabccf[i].type=="Dy")|| (tabccf[i].type=="Dz") || (tabccf[i].type=="Rx")|| (tabccf[i].type=="Ry")|| (tabccf[i].type=="Rz") )
228  return;
229  if ((tabccf[i].type=="Da") || (tabccf[i].type=="Dt"))
230  if ((stnom=="Dx") || (stnom=="Dy")|| (stnom=="Dz") || (stnom=="Rx")|| (stnom=="Ry")|| (stnom=="Rz") )
231  return;
232  }
233  CCF nccf;
234  nccf.formulation='I';
235  nccf.type=nom;
236  nccf.ccfvaleur=id;
237  nccf.effortsuiv=suiv;
238  tabccf.push_back(nccf);
239 }
240 
242 {
243  std::vector<CCF>::iterator it=tabccf.begin();
244  for (int j=0;j<num;j++)
245  it++;
246  tabccf.erase(it);
247 
248 }
249 
251 {
252  int n1 = a1.get_nb_ccf();
253 
254  while (get_nb_ccf())
255  {
256  supprimer_ccf(0);
257  }
258 
259  for (int i=0; i<n1; i++)
260  {
261  CCF nccf=a1.tabccf[i];
262  tabccf.push_back(nccf);
263 
264  }
265 }
266 
268 {
269  int nbccf=a1.get_nb_ccf();
270  for (int i=0;i<nbccf;i++)
271  {
272  char type[3];
273  std::string formulation;
274  a1.get_type_ccf(i,type);
275  formulation = a1.get_formulation_ccf(i);
276  std::string suiv = a1.get_effort_suiv(i);
277  if(formulation == "N")
278  {
279  double val=a1.get_valeur_ccf(i);
280  ajouter_ccf(type,val,suiv);
281  }
282  if(formulation == "I")
283  {
284  unsigned long id=a1.get_id_ccf(i);
285  ajouter_ccf(type,id,suiv);
286  }
287  if(formulation == "F")
288  {
289  std::vector<std::string> listvariable;
290  std::string formule;
291  formule =a1.get_formule_ccf(i);
292  for(int l=0;a1.get_formule_nb_variable(i);l++)
293  listvariable.push_back(a1.get_formule_variable(i,l));
294  ajouter_ccf(type,formule,listvariable,suiv);
295  }
296  }
297 }
298 
300 {
301  return idoriginal;
302 }
303 
305 {
306  idoriginal=id;
307 }
308 
309 
310 bool MG_ELEMENT_TOPOLOGIQUE::get_valeur_ccf(char* nom,double &val)
311 {
312 int nb=get_nb_ccf();
313 for (int i=0;i<nb;i++)
314  {
315  char type[3];
316  get_type_ccf(i,type);
317  std::string stnom=nom;
318  std::string sttype=type;
319  if (nom==sttype)
320  {
321  val=get_valeur_ccf(i);
322  return true;
323  }
324  }
325 return false;
326 }
327 
329 {
330  int nb=get_nb_ccf();
331  for (int i=0;i<nb;i++)
332  {
333  char type[3];
334  get_type_ccf(i,type);
335  std::string stnom=nom;
336  std::string sttype=type;
337  if (nom==sttype)
338  {
339  return i;
340  }
341  }
342 return 0.;
343 }
344 
345 
347 {
348 int nb=get_nb_ccf();
349 for (int i=0;i<nb;i++)
350  {
351  char type[3];
352  get_type_ccf(i,type);
353  std::string stnom=nom;
354  std::string sttype=type;
355  if (nom==sttype)
356  {
357  c=get_formulation_ccf(i);
358  return true;
359  }
360  }
361 return false;
362 }
363 
364 void MG_ELEMENT_TOPOLOGIQUE::enregistrer_ccf(std::ostream& o,double version)
365 {
366 int nb=get_nb_ccf();
367 o << get_nb_ccf();
368 if (nb!=0) o<<",(";
369 for (int i=0;i<nb;i++)
370  {
371  char formulation=get_formulation_ccf(i);
372  char type[10];
373  get_type_ccf(i,type);
374  o << "(" << formulation << "," << type << "," << get_effort_suiv(i) << ",";
375  if (formulation=='F')
376  {
377  o << get_formule_ccf(i) << "," << get_formule_nb_variable(i);
378  if (get_formule_nb_variable(i)>0)
379  {
380  o << ",(";
381  for (int j=0;j<get_formule_nb_variable(i);j++)
382  {
383  o << get_formule_variable(i,j);
384  if (j!=get_formule_nb_variable(i)-1) o << ",";
385 
386  }
387  o << ")";
388  }
389 
390  }
391 
392  else if (formulation=='I') o << (unsigned long)get_valeur_ccf(i) ;
393  else o << get_valeur_ccf(i) ;
394  o <<")";
395  if (i!=nb-1) o << ",";
396  }
397  if (nb!=0) o << ")";
398 
399 
400 }
401 
402 
403 void MG_ELEMENT_TOPOLOGIQUE::enregistrer_contraintes(std::ostream& o,double version)
404 {
405 int nb=get_nb_contrainte();
406 o << "(";
407 for (int i=0;i<nb;i++)
408  {
409  o << get_contrainte(i);
410  if (i!=nb-1) o << ",";
411  }
412  o << ")";
413 
414 }
415 
416 
418 {
419 double E;
420 bool test=get_valeur_ccf((char*)"E1",E);
421 return test;
422 }
423 
424 
426 {
427 static int passe=0;
428 if (passe==0)
429  {
430  passe=1;
431 
432  OT_PARAMETRES param;
433  char fichier[500];
434  sprintf(fichier,"%s/.magic",getenv("HOME"));
435  param.lire(fichier);
436  int val=(int)param.get_valeur("Echantillon_face");
437  if (val!=0) pas_echantillon=val;
438  double val2=(double)param.get_valeur("Epsilon_face");
439  if (fabs(val2)>1e-10) epsilon_echantillon=val2;
440  double val3=(double)param.get_valeur("Angle_dev_face");
441  if (fabs(val3)>1e-10) angle_dev_echantillon=val3;
442  }
443 
444 }
445 
446 
448 {
449 if (!est_une_topo_element()) return;
450 contraintes.push_back(val);
451 }
452 
453 
455 {
456 return contraintes[i];
457 }
458 
459 
461 {
462 if (!est_une_topo_element()) return 0;
463 return contraintes.size();
464 }
MG_ELEMENT_TOPOLOGIQUE::supprimer_ccf
virtual void supprimer_ccf(int num)
Definition: mg_element_topologique.cpp:241
MG_ELEMENT_TOPOLOGIQUE::ajouter_ccf
virtual void ajouter_ccf(char *nom, double val, std::string suiv="NS")
Definition: mg_element_topologique.cpp:159
gestionversion.h
MG_ELEMENT_TOPOLOGIQUE::get_id_ccf
virtual unsigned long get_id_ccf(int num)
Definition: mg_element_topologique.cpp:133
OT_PARAMETRES::get_valeur
double get_valeur(std::string chaine, int num=0)
Definition: ot_parametres.cpp:191
MG_ELEMENT_TOPOLOGIQUE::get_formule_nb_variable
virtual int get_formule_nb_variable(int num)
Definition: mg_element_topologique.cpp:125
MG_ELEMENT_TOPOLOGIQUE::get_nouveau_numero
virtual int get_nouveau_numero(void)
Definition: mg_element_topologique.cpp:84
MG_ELEMENT_TOPOLOGIQUE::change_valeur_ccf
virtual void change_valeur_ccf(int num, double val)
Definition: mg_element_topologique.cpp:138
MG_ELEMENT_TOPOLOGIQUE::est_orthotrope_mecanique
virtual bool est_orthotrope_mecanique(void)
Definition: mg_element_topologique.cpp:417
TPL_SET< MG_ELEMENT_MAILLAGE * >
CCF::formulation
char formulation
Definition: mg_element_topologique.h:41
MG_ELEMENT_TOPOLOGIQUE::oldval_pas_echantillon
static int oldval_pas_echantillon
Definition: mg_element_topologique.h:128
MG_ELEMENT_TOPOLOGIQUE::ini_param
virtual void ini_param(void)
Definition: mg_element_topologique.cpp:425
CCF
Definition: mg_element_topologique.h:38
TPL_MAP_ENTITE::existe
virtual int existe(X x)
Definition: tpl_map_entite.h:61
MG_ELEMENT_TOPOLOGIQUE::get_nb_contrainte
virtual int get_nb_contrainte(void)
Definition: mg_element_topologique.cpp:460
MG_ELEMENT_TOPOLOGIQUE::change_type_ccf
virtual void change_type_ccf(int num, char *nom)
Definition: mg_element_topologique.cpp:112
MG_ELEMENT_TOPOLOGIQUE::get_contrainte
virtual double get_contrainte(int i)
Definition: mg_element_topologique.cpp:454
MG_ELEMENT_TOPOLOGIQUE::get_lien_maillage
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
Definition: mg_element_topologique.cpp:62
MG_ELEMENT_TOPOLOGIQUE::get_type_ccf
virtual void get_type_ccf(int num, char *nom)
Definition: mg_element_topologique.cpp:95
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
MG_ELEMENT_TOPOLOGIQUE::epsilon_echantillon
static double epsilon_echantillon
Definition: mg_element_topologique.h:126
CCF::ccfvaleur
double ccfvaleur
Definition: mg_element_topologique.h:46
MG_ELEMENT_TOPOLOGIQUE::copie_ccf
virtual void copie_ccf(MG_ELEMENT_TOPOLOGIQUE &a1)
Definition: mg_element_topologique.cpp:267
MG_ELEMENT_TOPOLOGIQUE::est_une_topo_element
virtual bool est_une_topo_element(void)=0
MG_ELEMENT_TOPOLOGIQUE::pas_echantillon
static int pas_echantillon
Definition: mg_element_topologique.h:125
MG_ELEMENT_TOPOLOGIQUE::change_id_ccf
virtual void change_id_ccf(int num, unsigned long val)
Definition: mg_element_topologique.cpp:148
MG_ELEMENT_TOPOLOGIQUE::lien_maillage
TPL_SET< MG_ELEMENT_MAILLAGE * > lien_maillage
Definition: mg_element_topologique.h:119
MG_ELEMENT_TOPOLOGIQUE::est_topologie_sousjacente
virtual int est_topologie_sousjacente(MG_ELEMENT_TOPOLOGIQUE *ele)
Definition: mg_element_topologique.cpp:72
MG_ELEMENT_TOPOLOGIQUE::angle_dev_echantillon
static double angle_dev_echantillon
Definition: mg_element_topologique.h:127
MG_ELEMENT_TOPOLOGIQUE::nouveau_numero
int nouveau_numero
Definition: mg_element_topologique.h:121
TPL_MAP_ENTITE::get_nb
virtual int get_nb(void)
Definition: tpl_map_entite.h:83
MG_ELEMENT_TOPOLOGIQUE::get_nb_ccf
virtual int get_nb_ccf(void)
Definition: mg_element_topologique.cpp:154
MG_ELEMENT_TOPOLOGIQUE::change_effort_suiv
virtual void change_effort_suiv(int num, std::string suiv)
Definition: mg_element_topologique.cpp:107
CCF::variables
std::vector< std::string > variables
Definition: mg_element_topologique.h:44
MG_ELEMENT_TOPOLOGIQUE::ajouter_contrainte
virtual void ajouter_contrainte(double val)
Definition: mg_element_topologique.cpp:447
MG_ELEMENT_TOPOLOGIQUE::get_formule_ccf
virtual std::string get_formule_ccf(int num)
Definition: mg_element_topologique.cpp:121
OT_PARAMETRES
Definition: ot_parametres.h:31
MG_ELEMENT_TOPOLOGIQUE::get_formule_variable
virtual std::string get_formule_variable(int num, int num2)
Definition: mg_element_topologique.cpp:129
MG_ELEMENT_TOPOLOGIQUE::change_formule_ccf
virtual void change_formule_ccf(int num, std::string val)
Definition: mg_element_topologique.cpp:143
MG_ELEMENT_TOPOLOGIQUE::get_formulation_ccf
virtual char get_formulation_ccf(int num)
Definition: mg_element_topologique.cpp:89
MG_IDENTIFICATEUR::id
unsigned long id
Definition: mg_identificateur.h:49
MG_ELEMENT_TOPOLOGIQUE::~MG_ELEMENT_TOPOLOGIQUE
virtual ~MG_ELEMENT_TOPOLOGIQUE()
Definition: mg_element_topologique.cpp:55
MG_ELEMENT_TOPOLOGIQUE::change_idoriginal
virtual void change_idoriginal(std::string id)
Definition: mg_element_topologique.cpp:304
MG_ELEMENT_TOPOLOGIQUE::tabccf
std::vector< CCF > tabccf
Definition: mg_element_topologique.h:124
MG_ELEMENT_TOPOLOGIQUE::change_nouveau_numero
virtual void change_nouveau_numero(int num)
Definition: mg_element_topologique.cpp:79
MG_ELEMENT_TOPOLOGIQUE::contraintes
std::vector< double > contraintes
Definition: mg_element_topologique.h:130
CCF::ccfformule
std::string ccfformule
Definition: mg_element_topologique.h:43
mg_element_topologique.h
MG_ELEMENT_TOPOLOGIQUE::enregistrer_ccf
virtual void enregistrer_ccf(std::ostream &o, double version)
Definition: mg_element_topologique.cpp:364
MG_ELEMENT_TOPOLOGIQUE::get_lien_fem_maillage
virtual TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > * get_lien_fem_maillage(void)
Definition: mg_element_topologique.cpp:67
OT_PARAMETRES::lire
int lire(char *nom)
Definition: ot_parametres.cpp:144
TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * >
MG_ELEMENT_TOPOLOGIQUE::get_effort_suiv
virtual std::string get_effort_suiv(int num)
Definition: mg_element_topologique.cpp:102
CCF::type
std::string type
Definition: mg_element_topologique.h:42
MG_ELEMENT_TOPOLOGIQUE::transfert_ccf
virtual void transfert_ccf(MG_ELEMENT_TOPOLOGIQUE &a1)
Definition: mg_element_topologique.cpp:250
CCF::effortsuiv
std::string effortsuiv
Definition: mg_element_topologique.h:45
MG_ELEMENT_TOPOLOGIQUE::idoriginal
std::string idoriginal
Definition: mg_element_topologique.h:122
MG_ELEMENT_TOPOLOGIQUE::lst_topo_sous_jacente
TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > lst_topo_sous_jacente
Definition: mg_element_topologique.h:123
MG_ELEMENT_TOPOLOGIQUE::get_valeur_ccf
virtual bool get_valeur_ccf(char *nom, double &val)
Definition: mg_element_topologique.cpp:310
MG_ELEMENT_TOPOLOGIQUE::get_idoriginal
virtual std::string get_idoriginal(void)
Definition: mg_element_topologique.cpp:299
MG_ELEMENT_TOPOLOGIQUE::MG_ELEMENT_TOPOLOGIQUE
MG_ELEMENT_TOPOLOGIQUE(std::string id)
Definition: mg_element_topologique.cpp:37
MG_IDENTIFICATEUR
Definition: mg_identificateur.h:34
MG_ELEMENT_TOPOLOGIQUE::enregistrer_contraintes
virtual void enregistrer_contraintes(std::ostream &o, double version)
Definition: mg_element_topologique.cpp:403
MG_ELEMENT_TOPOLOGIQUE::get_num_ccf
virtual int get_num_ccf(char *nom)
Definition: mg_element_topologique.cpp:328
MG_ELEMENT_TOPOLOGIQUE::get_topologie_sousjacente
virtual void get_topologie_sousjacente(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lst)=0
MG_ELEMENT_TOPOLOGIQUE::lien_fem_maillage
TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > lien_fem_maillage
Definition: mg_element_topologique.h:120