MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_triangle3.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_triangle3.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_triangle3.h"
26 #include "fem_maillage.h"
27 #include "fem_noeud.h"
28 #include "mg_element_maillage.h"
29 #include "ot_quadrature_gauss.h"
30 
31 
32 FEM_TRIANGLE3::FEM_TRIANGLE3(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<3>(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);
39 }
40 
42 {
44  tab[0]->get_lien_element2()->ajouter(this);
45  tab[1]->get_lien_element2()->ajouter(this);
46  tab[2]->get_lien_element2()->ajouter(this);
48 }
49 FEM_TRIANGLE3::FEM_TRIANGLE3(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,topo),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
50 {
52  tab[0]->get_lien_element2()->ajouter(this);
53  tab[1]->get_lien_element2()->ajouter(this);
54  tab[2]->get_lien_element2()->ajouter(this);
56 }
57 
59 {
61  tab[0]->get_lien_element2()->ajouter(this);
62  tab[1]->get_lien_element2()->ajouter(this);
63  tab[2]->get_lien_element2()->ajouter(this);
65 }
66 FEM_TRIANGLE3::FEM_TRIANGLE3(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<3>(tabnoeud)
67 {
69  tab[0]->get_lien_element2()->ajouter(this);
70  tab[1]->get_lien_element2()->ajouter(this);
71  tab[2]->get_lien_element2()->ajouter(this);
73 }
74 
76 {
78  tab[0]->get_lien_element2()->ajouter(this);
79  tab[1]->get_lien_element2()->ajouter(this);
80  tab[2]->get_lien_element2()->ajouter(this);
82 }
84 {
86  tab[0]->get_lien_element2()->ajouter(this);
87  tab[1]->get_lien_element2()->ajouter(this);
88  tab[2]->get_lien_element2()->ajouter(this);
90 }
92 {
93  if (liaison_topologique!=NULL)
95  tab[0]->get_lien_element2()->supprimer(this);
96  tab[1]->get_lien_element2()->supprimer(this);
97  tab[2]->get_lien_element2()->supprimer(this);
99 }
100 
101 
103 {
104  FEM_NOEUD* tabnoeud[3];
105  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
106  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
107  tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
108  FEM_TRIANGLE3* tri=new FEM_TRIANGLE3(get_id()+decalage,maillage,tabnoeud);
109  femmai->ajouter_fem_element2(tri);
110  return tri;
111 }
112 
114 {
115 voisin.vide();
116 if (no==tab[0])
117  {
118  voisin.ajouter(tab[1]);
119  voisin.ajouter(tab[2]);
120  }
121 if (no==tab[1])
122  {
123  voisin.ajouter(tab[0]);
124  voisin.ajouter(tab[2]);
125  }
126 if (no==tab[2])
127  {
128  voisin.ajouter(tab[0]);
129  voisin.ajouter(tab[1]);
130  }
131 }
132 
134 {
136 }
137 
138 
140 {
142 }
143 
145 {
146  return 2;
147 }
148 
149 
151 {
153 }
154 
156 {
158 }
159 
161 {
163 }
164 
166 {
168 }
169 
170 
171 void FEM_TRIANGLE3::enregistrer(std::ostream& o,double version)
172 {
173  if (maillage!=NULL)
174  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_TRIANGLE3($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
175  else o << "%" << get_id() << "=FEM_TRIANGLE3(NULL,$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
176  else
177  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_TRIANGLE3($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
178  else o << "%" << get_id() << "=FEM_TRIANGLE3(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
179 
180 }
181 
183 {
184 return OT_POINTS_GAUSS::get_nb_point_tri(degre);
185 }
186 
187 void FEM_TRIANGLE3::get_pt_gauss(int degre,int num,double &w,double *uv)
188 {
189 return OT_POINTS_GAUSS::get_pt_gauss_tri(degre,num,w,uv);
190 }
191 
193 {
195 }
196 
198 {
199  return 3;
200 }
202 {
203  return 1;
204 }
206 {
207  double val;
208  switch (num)
209  {
210  case 1:
211  val=1-uv[0]-uv[1];
212  break;
213  case 2:
214  val=uv[0];
215  break;
216  case 3:
217  val=uv[1];
218  break;
219 
220  }
221  return val;
222 }
223 
224 double FEM_TRIANGLE3::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
225 {
226  double val;
227 
228  switch (num)
229  {
230  case 1:
231  switch (num_variable)
232  {
233  case 1:
234  val=-1;
235  break;
236  case 2:
237  val=-1;
238  break;
239  } break;
240  case 2:
241  switch (num_variable)
242  {
243  case 1:
244  val=1;
245  break;
246  case 2:
247  val=0.;
248  break;
249  }break;
250  case 3:
251  switch (num_variable)
252  {
253  case 1:
254  val=0.;
255  break;
256  case 2:
257  val=1.;
258  break;
259  }break;
260 
261  }
262  return val;
263 }
264 
265 bool FEM_TRIANGLE3::get_param_element_fini_2D(double *xyz,double *uv)
266 {
267 double *xyz1=get_fem_noeud(0)->get_coord();
268 double *xyz2=get_fem_noeud(1)->get_coord();
269 double *xyz3=get_fem_noeud(2)->get_coord();
270 OPERATEUR::calculeparamEFdansletriangle(xyz1,xyz2,xyz3,xyz[0],xyz[1],xyz[2],uv[0],uv[1]);
271 return true;
272 }
273 
275 {
276 if (uvw[0]>=-1e-10)
277  if (uvw[1]>=-1e-10)
278  if (uvw[0]+uvw[1]<=1.+1e-10)
279  return true;
280 return false;
281 }
FEM_MAILLAGE::ajouter_fem_element2
int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle)
Definition: fem_maillage.cpp:469
FEM_TRIANGLE3::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_triangle3.cpp:113
gestionversion.h
FEM_TRIANGLE3::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_triangle3.cpp:224
FEM_TEMPLATE_ELEMENT::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_template_element.cpp:127
FEM_TRIANGLE3::get_dimension
virtual int get_dimension(void)
Definition: fem_triangle3.cpp:144
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
FEM_TRIANGLE3
Definition: fem_triangle3.h:34
fem_maillage.h
FEM_TRIANGLE3::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_triangle3.cpp:192
fem_noeud.h
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
FEM_ELEMENT_MAILLAGE::get_lien_topologie
virtual class MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
Definition: fem_element_maillage.cpp:89
OPERATEUR::calculeparamEFdansletriangle
static void calculeparamEFdansletriangle(double *xyz1, double *xyz2, double *xyz3, double x, double y, double z, double &xsi, double &eta)
Definition: ot_mathematique.cpp:1788
FEM_TRIANGLE3::FEM_TRIANGLE3
FEM_TRIANGLE3(unsigned long num, class MG_ELEMENT_MAILLAGE *mai, class FEM_NOEUD **tabnoeud)
Definition: fem_triangle3.cpp:32
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_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
FEM_TRIANGLE3::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_triangle3.cpp:150
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_TRIANGLE3::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_triangle3.cpp:133
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
FEM_NOEUD::get_lien_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
Definition: fem_noeud.cpp:406
FEM_TRIANGLE3::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_triangle3.cpp:205
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_TRIANGLE3::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_triangle3.cpp:160
FEM_MAILLAGE
Definition: fem_maillage.h:66
MAGIC::TYPE_ENTITE::IDFEM_TRIANGLE3
@ IDFEM_TRIANGLE3
Definition: mg_definition.h:70
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
FEM_TRIANGLE3::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_triangle3.cpp:165
FEM_TEMPLATE_ELEMENT< 3 >::get_fem_noeudpetitid
virtual FEM_NOEUD * get_fem_noeudpetitid(void)
Definition: fem_template_element.cpp:111
FEM_TRIANGLE3::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_triangle3.cpp:201
FEM_TRIANGLE3::get_param_element_fini_2D
virtual bool get_param_element_fini_2D(double *xyz, double *uv)
Definition: fem_triangle3.cpp:265
FEM_TRIANGLE3::~FEM_TRIANGLE3
virtual ~FEM_TRIANGLE3()
Definition: fem_triangle3.cpp:91
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_TRIANGLE3::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *uv)
Definition: fem_triangle3.cpp:187
TPL_LISTE_ENTITE::vide
virtual void vide(void)
Definition: tpl_liste_entite.h:77
BOITE_3D
Definition: ot_boite_3d.h:27
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_TRIANGLE3::dupliquer
virtual FEM_ELEMENT_MAILLAGE * dupliquer(FEM_MAILLAGE *femmai, long decalage)
Definition: fem_triangle3.cpp:102
OT_POINTS_GAUSS::get_nb_point_tri
static int get_nb_point_tri(int degre)
Definition: ot_quadrature_gauss.cpp:92
FEM_TEMPLATE_ELEMENT< 3 >::tab
FEM_NOEUD * tab[N]
Definition: fem_template_element.h:57
FEM_TRIANGLE3::get_type_entite
virtual int get_type_entite(void)
Definition: fem_triangle3.cpp:139
fem_triangle3.h
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_TRIANGLE3::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_triangle3.cpp:197
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
FEM_TRIANGLE3::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_triangle3.cpp:182
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_TRIANGLE3::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_triangle3.cpp:274
FEM_TRIANGLE3::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_triangle3.cpp:155
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_TRIANGLE3::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_triangle3.cpp:171