MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_quadrangle4.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_quadrangle4.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 "fem_quadrangle4.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_QUADRANGLE4::FEM_QUADRANGLE4(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<4>(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);
40 }
41 
43 {
45  tab[0]->get_lien_element2()->ajouter(this);
46  tab[1]->get_lien_element2()->ajouter(this);
47  tab[2]->get_lien_element2()->ajouter(this);
48  tab[3]->get_lien_element2()->ajouter(this);
50 }
51 
52 FEM_QUADRANGLE4::FEM_QUADRANGLE4(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,topo),FEM_TEMPLATE_ELEMENT<4>(tabnoeud)
53 {
55  tab[0]->get_lien_element2()->ajouter(this);
56  tab[1]->get_lien_element2()->ajouter(this);
57  tab[2]->get_lien_element2()->ajouter(this);
58  tab[3]->get_lien_element2()->ajouter(this);
60 }
61 
63 {
65  tab[0]->get_lien_element2()->ajouter(this);
66  tab[1]->get_lien_element2()->ajouter(this);
67  tab[2]->get_lien_element2()->ajouter(this);
68  tab[3]->get_lien_element2()->ajouter(this);
70 }
71 FEM_QUADRANGLE4::FEM_QUADRANGLE4(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<4>(tabnoeud)
72 {
74  tab[0]->get_lien_element2()->ajouter(this);
75  tab[1]->get_lien_element2()->ajouter(this);
76  tab[2]->get_lien_element2()->ajouter(this);
77  tab[3]->get_lien_element2()->ajouter(this);
79 }
80 
82 {
84  tab[0]->get_lien_element2()->ajouter(this);
85  tab[1]->get_lien_element2()->ajouter(this);
86  tab[2]->get_lien_element2()->ajouter(this);
87  tab[3]->get_lien_element2()->ajouter(this);
89 }
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
102 {
104  tab[0]->get_lien_element2()->ajouter(this);
105  tab[1]->get_lien_element2()->ajouter(this);
106  tab[2]->get_lien_element2()->ajouter(this);
107  tab[3]->get_lien_element2()->ajouter(this);
109 }
111 {
112  if (liaison_topologique!=NULL)
114  tab[0]->get_lien_element2()->supprimer(this);
115  tab[1]->get_lien_element2()->supprimer(this);
116  tab[2]->get_lien_element2()->supprimer(this);
117  tab[3]->get_lien_element2()->supprimer(this);
119 }
120 
121 
123 {
124  FEM_NOEUD* tabnoeud[4];
125  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
126  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
127  tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
128  tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
129  FEM_QUADRANGLE4* quad=new FEM_QUADRANGLE4(get_id()+decalage,maillage,tabnoeud);
130  femmai->ajouter_fem_element2(quad);
131  return quad;
132 }
133 
135 {
136 voisin.vide();
137 if (no==tab[0])
138  {
139  voisin.ajouter(tab[1]);
140  voisin.ajouter(tab[3]);
141  }
142 if (no==tab[1])
143  {
144  voisin.ajouter(tab[0]);
145  voisin.ajouter(tab[2]);
146  }
147 if (no==tab[2])
148  {
149  voisin.ajouter(tab[1]);
150  voisin.ajouter(tab[3]);
151  }
152 if (no==tab[3])
153  {
154  voisin.ajouter(tab[0]);
155  voisin.ajouter(tab[2]);
156  }
157 }
158 
159 
160 
161 
163 {
165 }
166 
168 {
169  return 2;
170 }
171 
172 
173 
175 {
177 }
178 
180 {
182 }
183 
185 {
187 }
188 
190 {
192 }
193 
194 
195 void FEM_QUADRANGLE4::enregistrer(std::ostream& o,double version)
196 {
197  if (maillage!=NULL)
198  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_QUADRANGLE4($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ");" << std::endl;
199  else o << "%" << get_id() << "=FEM_QUADRANGLE4(NULL,$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ");" << std::endl;
200  else
201  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_QUADRANGLE4($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ");" << std::endl;
202  else o << "%" << get_id() << "=FEM_QUADRANGLE4(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ");" << std::endl;
203 
204 }
205 
206 
208 {
210 }
211 
212 void FEM_QUADRANGLE4::get_pt_gauss(int degre,int num,double &w,double *uv)
213 {
214 return OT_POINTS_GAUSS::get_pt_gauss_qua_prod(degre,num,w,uv);
215 }
216 
217 
219 {
221 }
222 
223 
225 {
226  return 4;
227 }
229 {
230  return 2;
231 }
232 
234 {
235  double val;
236  switch (num)
237  {
238  case 1:
239  val=0.25*(1-uv[0])*(1-uv[1]);
240  break;
241  case 2:
242  val=0.25*(1+uv[0])*(1-uv[1]);
243  break;
244  case 3:
245  val=0.25*(1+uv[0])*(1+uv[1]);
246  break;
247  case 4:
248  val=0.25*(1-uv[0])*(1+uv[1]);
249  break;
250  }
251  return val;
252 }
253 
254 double FEM_QUADRANGLE4::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
255 {
256  double val;
257 
258  switch (num)
259  {
260  case 1:
261  switch (num_variable)
262  {
263  case 1:
264  val=0.25*(-1+uv[1]);
265  break;
266  case 2:
267  val=0.25*(-1+uv[0]);
268  break;
269  } break;
270  case 2:
271  switch (num_variable)
272  {
273  case 1:
274  val=0.25*(1-uv[1]);
275  break;
276  case 2:
277  val=0.25*(-1-uv[0]);
278  break;
279  }break;
280  case 3:
281  switch (num_variable)
282  {
283  case 1:
284  val=0.25*(1+uv[1]);
285  break;
286  case 2:
287  val=0.25*(1+uv[0]);
288  break;
289  }break;
290  case 4:
291  switch (num_variable)
292  {
293  case 1:
294  val=0.25*(-1-uv[1]);
295  break;
296  case 2:
297  val=0.25*(1-uv[0]);
298  break;
299  }break;
300 
301  }
302  return val;
303 }
304 
306 {
307 if (uvw[0]>=-1.-1e-10)
308  if (uvw[1]>=-1.-1e-10)
309  if (uvw[0]<=1.+1e-10)
310  if (uvw[1]<=1.+1e-10)
311  return true;
312 return false;
313 }
314 
315 
317 {
319 }
FEM_MAILLAGE::ajouter_fem_element2
int ajouter_fem_element2(FEM_ELEMENT2 *femtriangle)
Definition: fem_maillage.cpp:469
gestionversion.h
FEM_QUADRANGLE4::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_quadrangle4.cpp:189
FEM_QUADRANGLE4::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_quadrangle4.cpp:184
FEM_QUADRANGLE4::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *uv)
Definition: fem_quadrangle4.cpp:212
FEM_TEMPLATE_ELEMENT::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_template_element.cpp:127
FEM_QUADRANGLE4::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_quadrangle4.cpp:228
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
FEM_QUADRANGLE4
Definition: fem_quadrangle4.h:34
MAGIC::TYPE_ENTITE::IDFEM_QUADRANGLE4
@ IDFEM_QUADRANGLE4
Definition: mg_definition.h:70
FEM_QUADRANGLE4::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_quadrangle4.cpp:179
fem_maillage.h
OT_POINTS_GAUSS::get_pt_gauss_qua_prod
static void get_pt_gauss_qua_prod(int degre, int num, double &w, double *uv)
Definition: ot_quadrature_gauss.cpp:409
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
FEM_QUADRANGLE4::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_quadrangle4.cpp:195
FEM_QUADRANGLE4::FEM_QUADRANGLE4
FEM_QUADRANGLE4(unsigned long num, class MG_ELEMENT_MAILLAGE *mai, class FEM_NOEUD **tabnoeud)
Definition: fem_quadrangle4.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_QUADRANGLE4::get_dimension
virtual int get_dimension(void)
Definition: fem_quadrangle4.cpp:167
FEM_QUADRANGLE4::get_type_entite
virtual int get_type_entite(void)
Definition: fem_quadrangle4.cpp:162
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
OT_POINTS_GAUSS::get_degre_gauss_quad_prod
static int get_degre_gauss_quad_prod(int num)
Definition: ot_quadrature_gauss.cpp:137
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
fem_quadrangle4.h
FEM_QUADRANGLE4::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_quadrangle4.cpp:316
FEM_NOEUD::get_lien_element2
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
Definition: fem_noeud.cpp:406
FEM_QUADRANGLE4::dupliquer
virtual FEM_ELEMENT_MAILLAGE * dupliquer(class FEM_MAILLAGE *femmai, long decalage)
Definition: fem_quadrangle4.cpp:122
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_MAILLAGE
Definition: fem_maillage.h:66
FEM_QUADRANGLE4::~FEM_QUADRANGLE4
virtual ~FEM_QUADRANGLE4()
Definition: fem_quadrangle4.cpp:110
FEM_QUADRANGLE4::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_quadrangle4.cpp:207
FEM_QUADRANGLE4::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_quadrangle4.cpp:134
FEM_QUADRANGLE4::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_quadrangle4.cpp:174
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
FEM_QUADRANGLE4::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_quadrangle4.cpp:224
FEM_TEMPLATE_ELEMENT< 4 >::get_fem_noeudpetitid
virtual FEM_NOEUD * get_fem_noeudpetitid(void)
Definition: fem_template_element.cpp:111
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_QUADRANGLE4::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_quadrangle4.cpp:254
FEM_QUADRANGLE4::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_quadrangle4.cpp:218
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_TEMPLATE_ELEMENT< 4 >::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
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
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_QUADRANGLE4::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_quadrangle4.cpp:233
OT_POINTS_GAUSS::get_nb_point_quad_prod
static int get_nb_point_quad_prod(int degre)
Definition: ot_quadrature_gauss.cpp:129
FEM_QUADRANGLE4::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_quadrangle4.cpp:305
FEM_TEMPLATE_ELEMENT
Definition: fem_template_element.h:35