MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_segment3.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_segment3.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_segment3.h"
26 #include "fem_noeud.h"
27 #include "fem_maillage.h"
28 #include "mg_element_maillage.h"
29 #include "ot_quadrature_gauss.h"
30 
31 
32 FEM_SEGMENT3::FEM_SEGMENT3(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,mai),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
33 {
34  tab[0]->get_lien_element1()->ajouter(this);
35  tab[1]->get_lien_element1()->ajouter(this);
36  tab[2]->get_lien_element1()->ajouter(this);
39 
40 }
41 FEM_SEGMENT3::FEM_SEGMENT3(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,topo),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
42 {
43  tab[0]->get_lien_element1()->ajouter(this);
44  tab[1]->get_lien_element1()->ajouter(this);
45  tab[2]->get_lien_element1()->ajouter(this);
48 }
49 
50 FEM_SEGMENT3::FEM_SEGMENT3(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,topo,mai),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
51 {
52  tab[0]->get_lien_element1()->ajouter(this);
53  tab[1]->get_lien_element1()->ajouter(this);
54  tab[2]->get_lien_element1()->ajouter(this);
57 }
59 {
60  tab[0]->get_lien_element1()->ajouter(this);
61  tab[1]->get_lien_element1()->ajouter(this);
62  tab[2]->get_lien_element1()->ajouter(this);
65 
66 }
67 
69 {
70  tab[0]->get_lien_element1()->ajouter(this);
71  tab[1]->get_lien_element1()->ajouter(this);
72  tab[2]->get_lien_element1()->ajouter(this);
75 }
76 
78 {
79  tab[0]->get_lien_element1()->ajouter(this);
80  tab[1]->get_lien_element1()->ajouter(this);
81  tab[2]->get_lien_element1()->ajouter(this);
84 }
85 
87 {
88 voisin.vide();
89 if (no==tab[0])
90  {
91  voisin.ajouter(tab[1]);
92  }
93 if (no==tab[1])
94  {
95  voisin.ajouter(tab[0]);
96  voisin.ajouter(tab[2]);
97  }
98 if (no==tab[2])
99  {
100  voisin.ajouter(tab[1]);
101  }
102 }
103 
104 
106 {
108 }
109 
110 
112 {
113  tab[0]->get_lien_element1()->ajouter(this);
114  tab[1]->get_lien_element1()->ajouter(this);
115  tab[2]->get_lien_element1()->ajouter(this);
118 
119 }
120 
122 {
123  if (liaison_topologique!=NULL)
125  tab[0]->get_lien_element1()->supprimer(this);
126  tab[1]->get_lien_element1()->supprimer(this);
128 }
129 
131 {
132  FEM_NOEUD* tabnoeud[3];
133  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
134  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
135  tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
136  FEM_SEGMENT3* seg=new FEM_SEGMENT3(get_id()+decalage,maillage,tabnoeud);
137  femmai->ajouter_fem_element1(seg);
138  return seg;
139 }
140 
142 {
143 if (uvw[0]>=-1e-10)
144  if (uvw[0]<=1.+1e-10)
145  return true;
146 return false;
147 }
148 
149 
150 
152 {
154 }
155 
157 {
158  return 1;
159 }
160 
161 
163 {
165 }
166 
168 {
170 }
171 
173 {
175 }
176 
178 {
180 }
181 
182 
183 
184 void FEM_SEGMENT3::enregistrer(std::ostream& o,double version)
185 {
186  if (maillage!=NULL)
187  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_SEGMENT3($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
188  else o << "%" << get_id() << "=FEM_SEGMENT3(NULL,$" << maillage->get_id() <<",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
189  else
190  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_SEGMENT3($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
191  else o << "%" << get_id() << "=FEM_SEGMENT3(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
192 
193 }
194 
195 
196 
198 {
199 return OT_POINTS_GAUSS::get_nb_point_seg(degre);
200 }
201 
202 void FEM_SEGMENT3::get_pt_gauss(int degre,int num,double &w,double *u)
203 {
204 return OT_POINTS_GAUSS::get_pt_gauss_seg(degre,num,w,u);
205 }
206 
208 {
210 }
211 
213 {
214  return 3;
215 }
216 
218 {
219  return 2;
220 }
222 {
223  double val;
224  switch (num)
225  {
226  case 1:
227  val=-0.5*uv[0]*(1.-uv[0]);
228  break;
229  case 2:
230  val=1.-uv[0]*uv[0];
231  break;
232  case 3:
233  val=0.5*uv[0]*(1.+uv[0]);
234  break;
235  }
236  return val;
237 }
238 
239 double FEM_SEGMENT3::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
240 {
241  double val;
242 
243  switch (num)
244  {
245  case 1:
246  switch (num_variable)
247  {
248  case 1:
249  val=-0.5+uv[0];
250  break;
251  case 2:
252  val=-2.*uv[0];
253  break;
254  case 3:
255  val=0.5+uv[0];
256  break;
257  }
258  break;
259 
260  }
261  return val;
262 }
263 
FEM_SEGMENT3::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_segment3.cpp:217
gestionversion.h
FEM_SEGMENT3::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *u)
Definition: fem_segment3.cpp:202
FEM_SEGMENT3::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_segment3.cpp:221
OT_POINTS_GAUSS::get_pt_gauss_seg
static void get_pt_gauss_seg(int degre, int num, double &w, double *u)
Definition: ot_quadrature_gauss.cpp:213
FEM_TEMPLATE_ELEMENT::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_template_element.cpp:127
MAGIC::TYPE_ENTITE::IDFEM_SEGMENT3
@ IDFEM_SEGMENT3
Definition: mg_definition.h:70
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
FEM_SEGMENT3
Definition: fem_segment3.h:32
fem_maillage.h
FEM_SEGMENT3::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_segment3.cpp:105
FEM_SEGMENT3::get_type_entite
virtual int get_type_entite(void)
Definition: fem_segment3.cpp:151
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_NOEUD::get_lien_element1
TPL_LISTE_ENTITE< class FEM_ELEMENT1 * > * get_lien_element1(void)
Definition: fem_noeud.cpp:394
FEM_SEGMENT3::dupliquer
virtual FEM_ELEMENT_MAILLAGE * dupliquer(FEM_MAILLAGE *femmai, long decalage)
Definition: fem_segment3.cpp:130
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_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_segment3.h
FEM_SEGMENT3::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_segment3.cpp:239
OT_POINTS_GAUSS::get_nb_point_seg
static int get_nb_point_seg(int degre)
Definition: ot_quadrature_gauss.cpp:64
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_NOEUD::get_lien_petit_element1
TPL_LISTE_ENTITE< class FEM_ELEMENT1 * > * get_lien_petit_element1(void)
Definition: fem_noeud.cpp:400
FEM_SEGMENT3::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_segment3.cpp:86
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
OT_POINTS_GAUSS::get_degre_gauss_seg
static int get_degre_gauss_seg(int num)
Definition: ot_quadrature_gauss.cpp:78
FEM_SEGMENT3::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_segment3.cpp:207
FEM_SEGMENT3::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_segment3.cpp:162
FEM_MAILLAGE::ajouter_fem_element1
int ajouter_fem_element1(FEM_ELEMENT1 *femsegment)
Definition: fem_maillage.cpp:357
FEM_ELEMENT1
Definition: fem_element1.h:34
TPL_LISTE_ENTITE::ajouter
virtual void ajouter(X x)
Definition: tpl_liste_entite.h:38
FEM_SEGMENT3::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_segment3.cpp:167
FEM_TEMPLATE_ELEMENT< 3 >::get_fem_noeudpetitid
virtual FEM_NOEUD * get_fem_noeudpetitid(void)
Definition: fem_template_element.cpp:111
FEM_SEGMENT3::get_dimension
virtual int get_dimension(void)
Definition: fem_segment3.cpp:156
FEM_NOEUD
Definition: fem_noeud.h:35
FEM_SEGMENT3::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_segment3.cpp:197
FEM_SEGMENT3::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_segment3.cpp:177
TPL_LISTE_ENTITE::vide
virtual void vide(void)
Definition: tpl_liste_entite.h:77
FEM_SEGMENT3::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_segment3.cpp:184
FEM_SEGMENT3::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_segment3.cpp:141
BOITE_3D
Definition: ot_boite_3d.h:27
FEM_SEGMENT3::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_segment3.cpp:172
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< 3 >::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_SEGMENT3::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_segment3.cpp:212
FEM_SEGMENT3::~FEM_SEGMENT3
virtual ~FEM_SEGMENT3()
Definition: fem_segment3.cpp:121
FEM_SEGMENT3::FEM_SEGMENT3
FEM_SEGMENT3(class MG_ELEMENT_MAILLAGE *mai, FEM_NOEUD **tabnoeud)
Definition: fem_segment3.cpp:58
FEM_TEMPLATE_ELEMENT
Definition: fem_template_element.h:35