MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_triangle6.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 //####// fem_triangle6.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "fem_triangle6.h"
26 #include "fem_noeud.h"
27 #include "mg_element_maillage.h"
28 #include "fem_maillage.h"
29 #include "math.h"
30 #include "ot_quadrature_gauss.h"
31 
32 FEM_TRIANGLE6::FEM_TRIANGLE6(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
33 {
35  tab[0]->get_lien_element2()->ajouter(this);
36  tab[1]->get_lien_element2()->ajouter(this);
37  tab[2]->get_lien_element2()->ajouter(this);
38  tab[3]->get_lien_element2()->ajouter(this);
39  tab[4]->get_lien_element2()->ajouter(this);
40  tab[5]->get_lien_element2()->ajouter(this);
42 }
43 
45 {
47  tab[0]->get_lien_element2()->ajouter(this);
48  tab[1]->get_lien_element2()->ajouter(this);
49  tab[2]->get_lien_element2()->ajouter(this);
50  tab[3]->get_lien_element2()->ajouter(this);
51  tab[4]->get_lien_element2()->ajouter(this);
52  tab[5]->get_lien_element2()->ajouter(this);
54 }
55 
56 FEM_TRIANGLE6::FEM_TRIANGLE6(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,topo),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
57 {
59  tab[0]->get_lien_element2()->ajouter(this);
60  tab[1]->get_lien_element2()->ajouter(this);
61  tab[2]->get_lien_element2()->ajouter(this);
62  tab[3]->get_lien_element2()->ajouter(this);
63  tab[4]->get_lien_element2()->ajouter(this);
64  tab[5]->get_lien_element2()->ajouter(this);
66 }
67 
69 {
71  tab[0]->get_lien_element2()->ajouter(this);
72  tab[1]->get_lien_element2()->ajouter(this);
73  tab[2]->get_lien_element2()->ajouter(this);
74  tab[3]->get_lien_element2()->ajouter(this);
75  tab[4]->get_lien_element2()->ajouter(this);
76  tab[5]->get_lien_element2()->ajouter(this);
78 }
79 FEM_TRIANGLE6::FEM_TRIANGLE6(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,topo,mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
80 {
82  tab[0]->get_lien_element2()->ajouter(this);
83  tab[1]->get_lien_element2()->ajouter(this);
84  tab[2]->get_lien_element2()->ajouter(this);
85  tab[3]->get_lien_element2()->ajouter(this);
86  tab[4]->get_lien_element2()->ajouter(this);
87  tab[5]->get_lien_element2()->ajouter(this);
89 }
90 
92 {
94  tab[0]->get_lien_element2()->ajouter(this);
95  tab[1]->get_lien_element2()->ajouter(this);
96  tab[2]->get_lien_element2()->ajouter(this);
97  tab[3]->get_lien_element2()->ajouter(this);
98  tab[4]->get_lien_element2()->ajouter(this);
99  tab[5]->get_lien_element2()->ajouter(this);
101 }
102 
103 
104 
106 {
108 }
109 
110 
111 
112 
114 {
116  tab[0]->get_lien_element2()->ajouter(this);
117  tab[1]->get_lien_element2()->ajouter(this);
118  tab[2]->get_lien_element2()->ajouter(this);
119  tab[3]->get_lien_element2()->ajouter(this);
120  tab[4]->get_lien_element2()->ajouter(this);
121  tab[5]->get_lien_element2()->ajouter(this);
123 }
125 {
126  if (liaison_topologique!=NULL)
128  tab[0]->get_lien_element2()->supprimer(this);
129  tab[1]->get_lien_element2()->supprimer(this);
130  tab[2]->get_lien_element2()->supprimer(this);
131  tab[3]->get_lien_element2()->supprimer(this);
132  tab[4]->get_lien_element2()->supprimer(this);
133  tab[5]->get_lien_element2()->supprimer(this);
135 }
136 
138 {
139  FEM_NOEUD* tabnoeud[6];
140  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
141  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
142  tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
143  tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
144  tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
145  tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
146  FEM_TRIANGLE6* tri=new FEM_TRIANGLE6(get_id()+decalage,maillage,tabnoeud);
147  femmai->ajouter_fem_element2(tri);
148  return tri;
149 }
150 
151 
153 {
154 voisin.vide();
155 if (no==tab[0])
156  {
157  voisin.ajouter(tab[1]);
158  voisin.ajouter(tab[5]);
159  }
160 if (no==tab[1])
161  {
162  voisin.ajouter(tab[0]);
163  voisin.ajouter(tab[2]);
164  }
165 if (no==tab[2])
166  {
167  voisin.ajouter(tab[1]);
168  voisin.ajouter(tab[3]);
169  }
170 if (no==tab[3])
171  {
172  voisin.ajouter(tab[2]);
173  voisin.ajouter(tab[4]);
174  }
175 if (no==tab[4])
176  {
177  voisin.ajouter(tab[3]);
178  voisin.ajouter(tab[5]);
179  }
180 if (no==tab[5])
181  {
182  voisin.ajouter(tab[4]);
183  voisin.ajouter(tab[0]);
184  }
185 }
187 {
188 if (uvw[0]>=-1e-10)
189  if (uvw[1]>=-1e-10)
190  if (uvw[0]+uvw[1]<=1.+1e-10)
191  return true;
192 return false;
193 }
194 
195 
197 {
199 }
200 
202 {
203  return 2;
204 }
205 
206 
208 {
210 }
211 
213 {
215 }
216 
218 {
220 }
221 
223 {
225 }
226 
227 
228 void FEM_TRIANGLE6::enregistrer(std::ostream& o,double version)
229 {
230  if (maillage!=NULL)
231  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_TRIANGLE6($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id() << ",$" << tab[3]->get_id() << ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ");" << std::endl;
232  else o << "%" << get_id() << "=FEM_TRIANGLE6(NULL,$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id() << ",$" << tab[3]->get_id() << ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ");" << std::endl;
233  else
234  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_TRIANGLE6($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id() << ",$" << tab[3]->get_id() << ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ");" << std::endl;
235  else o << "%" << get_id() << "=FEM_TRIANGLE6(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id() << ",$" << tab[3]->get_id() << ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ");" << std::endl;
236 
237 }
238 
240 {
242 }
243 
244 void FEM_TRIANGLE6::get_pt_gauss(int degre,int num,double &w,double *uv)
245 {
246 return OT_POINTS_GAUSS::get_pt_gauss_tri(degre,num,w,uv);
247 }
248 
250 {
252 }
253 
255 {
256  return 6;
257 }
259 {
260  return 2;
261 }
263 {
264  double val;
265  switch (num)
266  {
267  case 1:
268  val=(-1+uv[0]+uv[1])*(-1+2*uv[0]+2*uv[1]);
269  break;
270  case 2:
271  val=4.*uv[0]*(1-uv[0]-uv[1]);
272  break;
273  case 3:
274  val=-uv[0]*(1.-2.*uv[0]);
275  break;
276  case 4:
277  val=4.*uv[0]*uv[1];
278  break;
279  case 5:
280  val=-uv[1]*(1-2*uv[1]);
281  break;
282  case 6:
283  val=4.*uv[1]*(1-uv[0]-uv[1]);
284  break;
285 
286  }
287  return val;
288 }
289 
290 double FEM_TRIANGLE6::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
291 {
292  double val;
293 
294  switch (num)
295  {
296  case 1:
297  switch (num_variable)
298  {
299  case 1:
300  val=-3.+4*uv[0]+4*uv[1];
301  break;
302  case 2:
303  val=-3.+4*uv[0]+4*uv[1];
304  break;
305  } break;
306  case 2:
307  switch (num_variable)
308  {
309  case 1:
310  val=4.-8*uv[0]-4*uv[1];
311  break;
312  case 2:
313  val=-4.*uv[0];
314  break;
315  }break;
316  case 3:
317  switch (num_variable)
318  {
319  case 1:
320  val=-1.+4*uv[0];
321  break;
322  case 2:
323  val=0.;
324  break;
325  }break;
326  case 4:
327  switch (num_variable)
328  {
329  case 1:
330  val=4*uv[1];
331  break;
332  case 2:
333  val=4*uv[0];
334  break;
335  }break;
336  case 5:
337  switch (num_variable)
338  {
339  case 1:
340  val=0.;
341  break;
342  case 2:
343  val=-1+4.*uv[1];
344  break;
345  }break;
346  case 6:
347  switch (num_variable)
348  {
349  case 1:
350  val=-4*uv[1];
351  break;
352  case 2:
353  val=4-4*uv[0]-8*uv[1];
354  break;
355  }break;
356 
357  }
358  return val;
359 }
360 
361 
FEM_MAILLAGE::ajouter_fem_element2
int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle)
Definition: fem_maillage.cpp:469
gestionversion.h
FEM_TRIANGLE6::dupliquer
FEM_ELEMENT_MAILLAGE * dupliquer(FEM_MAILLAGE *femmai, long decalage)
Definition: fem_triangle6.cpp:137
FEM_TEMPLATE_ELEMENT::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_template_element.cpp:127
FEM_TRIANGLE6::FEM_TRIANGLE6
FEM_TRIANGLE6(unsigned long num, class MG_ELEMENT_MAILLAGE *mai, class FEM_NOEUD **tabnoeud)
Definition: fem_triangle6.cpp:32
FEM_TRIANGLE6::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_triangle6.cpp:249
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
fem_maillage.h
fem_noeud.h
FEM_TRIANGLE6::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_triangle6.cpp:254
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
FEM_TRIANGLE6::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_triangle6.cpp:222
FEM_ELEMENT_MAILLAGE::get_lien_topologie
virtual class MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: fem_element_maillage.cpp:89
FEM_TRIANGLE6::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_triangle6.cpp:207
FEM_TRIANGLE6::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_triangle6.cpp:152
FEM_TRIANGLE6::get_type_entite
virtual int get_type_entite(void)
Definition: fem_triangle6.cpp:196
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
mg_element_maillage.h
FEM_ELEMENT_MAILLAGE::liaison_topologique
class MG_ELEMENT_TOPOLOGIQUE * liaison_topologique
Definition: fem_element_maillage.h:73
FEM_NOEUD::get_lien_petit_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_petit_element2(void)
Definition: fem_noeud.cpp:412
FEM_MAILLAGE::get_fem_noeudid
FEM_NOEUD * get_fem_noeudid(unsigned long num)
Definition: fem_maillage.cpp:150
FEM_TRIANGLE6::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_triangle6.cpp:217
FEM_TEMPLATE_ELEMENT::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_template_element.cpp:100
FEM_ELEMENT2
Definition: fem_element2.h:34
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_NOEUD::get_lien_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
Definition: fem_noeud.cpp:406
FEM_TRIANGLE6::get_dimension
virtual int get_dimension(void)
Definition: fem_triangle6.cpp:201
FEM_ELEMENT_MAILLAGE
Definition: fem_element_maillage.h:35
MAGIC::TYPE_ENTITE::IDFEM_TRIANGLE6
@ IDFEM_TRIANGLE6
Definition: mg_definition.h:70
FEM_TEMPLATE_ELEMENT::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_template_element.cpp:106
FEM_MAILLAGE
Definition: fem_maillage.h:66
FEM_TRIANGLE6::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_triangle6.cpp:186
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
FEM_TEMPLATE_ELEMENT< 6 >::get_fem_noeudpetitid
virtual FEM_NOEUD * get_fem_noeudpetitid(void)
Definition: fem_template_element.cpp:111
FEM_TRIANGLE6::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_triangle6.cpp:262
FEM_NOEUD
Definition: fem_noeud.h:35
TPL_LISTE_ENTITE::vide
virtual void vide(void)
Definition: tpl_liste_entite.h:77
FEM_TRIANGLE6::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_triangle6.cpp:239
FEM_TRIANGLE6::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *uv)
Definition: fem_triangle6.cpp:244
BOITE_3D
Definition: ot_boite_3d.h:27
FEM_TRIANGLE6::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_triangle6.cpp:105
FEM_TEMPLATE_ELEMENT::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_template_element.cpp:94
fem_triangle6.h
FEM_ELEMENT_MAILLAGE::maillage
class MG_ELEMENT_MAILLAGE * maillage
Definition: fem_element_maillage.h:72
FEM_TRIANGLE6::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_triangle6.cpp:228
OT_POINTS_GAUSS::get_nb_point_tri
static int get_nb_point_tri(int degre)
Definition: ot_quadrature_gauss.cpp:92
FEM_TEMPLATE_ELEMENT< 6 >::tab
FEM_NOEUD * tab[N]
Definition: fem_template_element.h:57
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
FEM_TRIANGLE6
Definition: fem_triangle6.h:33
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
OT_POINTS_GAUSS::get_degre_gauss_tri
static int get_degre_gauss_tri(int num)
Definition: ot_quadrature_gauss.cpp:102
FEM_TEMPLATE_ELEMENT::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_template_element.cpp:57
ot_quadrature_gauss.h
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
FEM_TRIANGLE6::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_triangle6.cpp:290
FEM_TRIANGLE6::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_triangle6.cpp:258
FEM_TRIANGLE6::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_triangle6.cpp:212
OT_POINTS_GAUSS::get_pt_gauss_tri
static void get_pt_gauss_tri(int degre, int num, double &w, double *uv)
Definition: ot_quadrature_gauss.cpp:274
FEM_TEMPLATE_ELEMENT
Definition: fem_template_element.h:35
FEM_TRIANGLE6::~FEM_TRIANGLE6
virtual ~FEM_TRIANGLE6()
Definition: fem_triangle6.cpp:124