MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_penta6.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_penta6.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include "fem_penta6.h"
26 #include "fem_maillage.h"
27 #include "fem_noeud.h"
28 #include "mg_element_maillage.h"
29 #include "ot_tenseur.h"
30 #include "ot_quadrature_gauss.h"
31 
32 
33 FEM_PENTA6::FEM_PENTA6(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
34 {
36  tab[0]->get_lien_element3()->ajouter(this);
37  tab[1]->get_lien_element3()->ajouter(this);
38  tab[2]->get_lien_element3()->ajouter(this);
39  tab[3]->get_lien_element3()->ajouter(this);
40  tab[4]->get_lien_element3()->ajouter(this);
41  tab[5]->get_lien_element3()->ajouter(this);
43 }
44 
46 {
48  tab[0]->get_lien_element3()->ajouter(this);
49  tab[1]->get_lien_element3()->ajouter(this);
50  tab[2]->get_lien_element3()->ajouter(this);
51  tab[3]->get_lien_element3()->ajouter(this);
52  tab[4]->get_lien_element3()->ajouter(this);
53  tab[5]->get_lien_element3()->ajouter(this);
55 }
56 
57 FEM_PENTA6::FEM_PENTA6(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,topo),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
58 {
60  tab[0]->get_lien_element3()->ajouter(this);
61  tab[1]->get_lien_element3()->ajouter(this);
62  tab[2]->get_lien_element3()->ajouter(this);
63  tab[3]->get_lien_element3()->ajouter(this);
64  tab[4]->get_lien_element3()->ajouter(this);
65  tab[5]->get_lien_element3()->ajouter(this);
67 }
68 
70 {
72  tab[0]->get_lien_element3()->ajouter(this);
73  tab[1]->get_lien_element3()->ajouter(this);
74  tab[2]->get_lien_element3()->ajouter(this);
75  tab[3]->get_lien_element3()->ajouter(this);
76  tab[4]->get_lien_element3()->ajouter(this);
77  tab[5]->get_lien_element3()->ajouter(this);
79 }
80 
81 FEM_PENTA6::FEM_PENTA6(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,topo,mai),FEM_TEMPLATE_ELEMENT<6>(tabnoeud)
82 {
84  tab[0]->get_lien_element3()->ajouter(this);
85  tab[1]->get_lien_element3()->ajouter(this);
86  tab[2]->get_lien_element3()->ajouter(this);
87  tab[3]->get_lien_element3()->ajouter(this);
88  tab[4]->get_lien_element3()->ajouter(this);
89  tab[5]->get_lien_element3()->ajouter(this);
91 }
92 
94 {
96  tab[0]->get_lien_element3()->ajouter(this);
97  tab[1]->get_lien_element3()->ajouter(this);
98  tab[2]->get_lien_element3()->ajouter(this);
99  tab[3]->get_lien_element3()->ajouter(this);
100  tab[4]->get_lien_element3()->ajouter(this);
101  tab[5]->get_lien_element3()->ajouter(this);
103 }
104 
105 
106 
107 
109 {
111  tab[0]->get_lien_element3()->ajouter(this);
112  tab[1]->get_lien_element3()->ajouter(this);
113  tab[2]->get_lien_element3()->ajouter(this);
114  tab[3]->get_lien_element3()->ajouter(this);
115  tab[4]->get_lien_element3()->ajouter(this);
116  tab[5]->get_lien_element3()->ajouter(this);
118 }
120 {
121  if (liaison_topologique!=NULL)
123  tab[0]->get_lien_element3()->supprimer(this);
124  tab[1]->get_lien_element3()->supprimer(this);
125  tab[2]->get_lien_element3()->supprimer(this);
126  tab[3]->get_lien_element3()->supprimer(this);
127  tab[4]->get_lien_element3()->supprimer(this);
128  tab[5]->get_lien_element3()->supprimer(this);
130 }
131 
132 
134 {
135  FEM_NOEUD* tabnoeud[8];
136  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
137  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
138  tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
139  tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
140  tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
141  tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
142  FEM_PENTA6* pen=new FEM_PENTA6(get_id()+decalage,maillage,tabnoeud);
143  femmai->ajouter_fem_element3(pen);
144  return pen;
145 }
146 
148 {
149 voisin.vide();
150 if (no==tab[0])
151  {
152  voisin.ajouter(tab[1]);
153  voisin.ajouter(tab[2]);
154  voisin.ajouter(tab[3]);
155  }
156 if (no==tab[1])
157  {
158  voisin.ajouter(tab[0]);
159  voisin.ajouter(tab[2]);
160  voisin.ajouter(tab[4]);
161  }
162 if (no==tab[2])
163  {
164  voisin.ajouter(tab[0]);
165  voisin.ajouter(tab[1]);
166  voisin.ajouter(tab[5]);
167  }
168 if (no==tab[3])
169  {
170  voisin.ajouter(tab[0]);
171  voisin.ajouter(tab[4]);
172  voisin.ajouter(tab[5]);
173  }
174 if (no==tab[4])
175  {
176  voisin.ajouter(tab[1]);
177  voisin.ajouter(tab[3]);
178  voisin.ajouter(tab[5]);
179  }
180 if (no==tab[5])
181  {
182  voisin.ajouter(tab[2]);
183  voisin.ajouter(tab[3]);
184  voisin.ajouter(tab[4]);
185  }
186 }
187 
189 {
190 if (uvw[0]>=-1e-10)
191  if (uvw[1]>=-1e-10)
192  if (uvw[2]>=-1.-1e-10)
193  if (1.-uvw[0]-uvw[1]<=1.+1e-10)
194  if (uvw[2]<=1.+1e-10)
195  return true;
196 return false;
197 }
198 
200 {
202 }
203 
205 {
207 }
208 
210 {
211  return 3;
212 }
213 
214 
215 
217 {
219 }
220 
222 {
224 }
225 
227 {
229 }
230 
232 {
234 }
235 
236 
237 void FEM_PENTA6::enregistrer(std::ostream& o,double version)
238 {
239  if (maillage!=NULL)
240  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_PENTA6($"<< 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;
241  else o << "%" << get_id() << "=FEM_PENTA6(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;
242  else
243  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_PENTA6($"<< 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;
244  else o << "%" << get_id() << "=FEM_PENTA6(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;
245 
246 }
247 
248 
250 {
252 }
253 
254 void FEM_PENTA6::get_pt_gauss(int degre,int num,double &w,double *uvw)
255 {
256 return OT_POINTS_GAUSS::get_pt_gauss_penta(degre,num,w,uvw);
257 }
258 
260 {
262 }
263 
265 {
266  return 6;
267 }
268 
270 {
271  return 2;
272 }
273 double FEM_PENTA6::get_fonction_interpolation(int num,double *uv)
274 {
275  double val;
276  switch (num)
277  {
278  case 1:
279  val=0.5*uv[1]*(1.-uv[0]);
280  break;
281  case 2:
282  val=0.5*uv[2]*(1.-uv[0]);
283  break;
284  case 3:
285  val=0.5*(1.-uv[1]-uv[2])*(1.-uv[0]);
286  break;
287  case 4:
288  val=0.5*uv[1]*(uv[0]+1.);
289  break;
290  case 5:
291  val=0.5*uv[2]*(uv[0]+1.);
292  break;
293  case 6:
294  val=0.5*(1.-uv[1]-uv[2])*(uv[0]+1);
295  break;
296  }
297  return val;
298 }
299 
300 double FEM_PENTA6::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
301 {
302  double val;
303  switch (num)
304  {
305  case 1:
306  switch (num_variable)
307  {
308  case 1:
309  val=-0.5*uv[1];
310  break;
311  case 2:
312  val=0.5*(1.-uv[0]);
313  break;
314  case 3:
315  val=0.;
316  break;
317  } break;
318  case 2:
319  switch (num_variable)
320  {
321  case 1:
322  val=-0.5*uv[2];
323  break;
324  case 2:
325  val=0.;
326  break;
327  case 3:
328  val=0.5*(1.-uv[0]);
329  break;
330  } break;
331  case 3:
332  switch (num_variable)
333  {
334  case 1:
335  val=-0.5*(1.-uv[1]-uv[2]);
336  break;
337  case 2:
338  val=-0.5*(1.-uv[0]);
339  break;
340  case 3:
341  val=-0.5*(1.-uv[0]);
342  break;
343  } break;
344  case 4:
345  switch (num_variable)
346  {
347  case 1:
348  val=0.5*uv[1];
349  break;
350  case 2:
351  val=0.5*(uv[0]+1.);
352  break;
353  case 3:
354  val=0.;
355  break;
356  } break;
357  case 5:
358  switch (num_variable)
359  {
360  case 1:
361  val=0.5*uv[2];
362  break;
363  case 2:
364  val=0;
365  break;
366  case 3:
367  val=0.5*(uv[1]+1.);
368  break;
369  } break;
370  case 6:
371  switch (num_variable)
372  {
373  case 1:
374  val=0.5*(1.-uv[1]-uv[2]);
375  break;
376  case 2:
377  val=-0.5*(uv[0]+1.);
378  break;
379  case 3:
380  val=-0.5*(uv[0]+1.);
381  break;
382  } break;
383  }
384  return val;
385 }
386 
387 
388 
389 
390 
392 {
393 return 0.;
394 }
FEM_PENTA6
Definition: fem_penta6.h:34
FEM_PENTA6::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_penta6.cpp:231
gestionversion.h
FEM_PENTA6::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_penta6.cpp:199
FEM_PENTA6::get_dimension
virtual int get_dimension(void)
Definition: fem_penta6.cpp:209
FEM_NOEUD::get_lien_petit_element3
TPL_LISTE_ENTITE< class FEM_ELEMENT3 * > * get_lien_petit_element3(void)
Definition: fem_noeud.cpp:423
FEM_PENTA6::~FEM_PENTA6
virtual ~FEM_PENTA6()
Definition: fem_penta6.cpp:119
FEM_TEMPLATE_ELEMENT::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_template_element.cpp:127
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
fem_maillage.h
fem_noeud.h
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
MAGIC::TYPE_ENTITE::IDFEM_PENTA6
@ IDFEM_PENTA6
Definition: mg_definition.h:70
FEM_ELEMENT_MAILLAGE::get_lien_topologie
virtual class MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: fem_element_maillage.cpp:89
FEM_PENTA6::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_penta6.cpp:188
FEM_ELEMENT3
Definition: fem_element3.h:34
MG_ELEMENT_TOPOLOGIQUE::get_dimension
virtual int get_dimension(void)=0
mg_element_maillage.h
FEM_PENTA6::get_type_entite
virtual int get_type_entite(void)
Definition: fem_penta6.cpp:204
FEM_ELEMENT_MAILLAGE::liaison_topologique
class MG_ELEMENT_TOPOLOGIQUE * liaison_topologique
Definition: fem_element_maillage.h:73
FEM_MAILLAGE::get_fem_noeudid
FEM_NOEUD * get_fem_noeudid(unsigned long num)
Definition: fem_maillage.cpp:150
FEM_TEMPLATE_ELEMENT::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_template_element.cpp:100
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_PENTA6::verifie_validite_decoupage_xfem
virtual int verifie_validite_decoupage_xfem(double *vol=NULL)
Definition: fem_penta6.cpp:391
FEM_PENTA6::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_penta6.cpp:216
FEM_PENTA6::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_penta6.cpp:269
FEM_ELEMENT_MAILLAGE
Definition: fem_element_maillage.h:35
FEM_TEMPLATE_ELEMENT::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_template_element.cpp:106
FEM_PENTA6::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *uvw)
Definition: fem_penta6.cpp:254
FEM_MAILLAGE
Definition: fem_maillage.h:66
FEM_NOEUD::get_lien_element3
TPL_LISTE_ENTITE< class FEM_ELEMENT3 * > * get_lien_element3(void)
Definition: fem_noeud.cpp:417
FEM_PENTA6::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_penta6.cpp:237
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_PENTA6::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_penta6.cpp:264
FEM_PENTA6::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_penta6.cpp:259
FEM_PENTA6::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_penta6.cpp:249
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_PENTA6::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_penta6.cpp:300
TPL_LISTE_ENTITE::vide
virtual void vide(void)
Definition: tpl_liste_entite.h:77
fem_penta6.h
FEM_PENTA6::FEM_PENTA6
FEM_PENTA6(unsigned long num, class MG_ELEMENT_MAILLAGE *mai, class FEM_NOEUD **tabnoeud)
Definition: fem_penta6.cpp:33
ot_tenseur.h
BOITE_3D
Definition: ot_boite_3d.h:27
FEM_PENTA6::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_penta6.cpp:273
FEM_TEMPLATE_ELEMENT::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_template_element.cpp:94
FEM_ELEMENT_MAILLAGE::maillage
class MG_ELEMENT_MAILLAGE * maillage
Definition: fem_element_maillage.h:72
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_PENTA6::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_penta6.cpp:147
OT_POINTS_GAUSS::get_degre_gauss_penta
static int get_degre_gauss_penta(int num)
Definition: ot_quadrature_gauss.cpp:203
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
FEM_PENTA6::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_penta6.cpp:226
FEM_TEMPLATE_ELEMENT::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_template_element.cpp:57
FEM_PENTA6::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_penta6.cpp:221
ot_quadrature_gauss.h
OT_POINTS_GAUSS::get_pt_gauss_penta
static void get_pt_gauss_penta(int degre, int num, double &w, double *uvw)
Definition: ot_quadrature_gauss.cpp:544
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
FEM_PENTA6::dupliquer
virtual FEM_ELEMENT_MAILLAGE * dupliquer(class FEM_MAILLAGE *femmai, long decalage)
Definition: fem_penta6.cpp:133
OT_POINTS_GAUSS::get_nb_point_penta
static int get_nb_point_penta(int degre)
Definition: ot_quadrature_gauss.cpp:195
FEM_MAILLAGE::ajouter_fem_element3
int ajouter_fem_element3(FEM_ELEMENT3 *femelement3)
Definition: fem_maillage.cpp:580
FEM_TEMPLATE_ELEMENT
Definition: fem_template_element.h:35