MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_segment2.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_segment2.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_segment2.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 FEM_SEGMENT2::FEM_SEGMENT2(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,mai),FEM_TEMPLATE_ELEMENT<2>(tabnoeud)
32 {
33  tab[0]->get_lien_element1()->ajouter(this);
34  tab[1]->get_lien_element1()->ajouter(this);
37 
38 }
39 FEM_SEGMENT2::FEM_SEGMENT2(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,topo,mai),FEM_TEMPLATE_ELEMENT<2>(tabnoeud)
40 {
41  tab[0]->get_lien_element1()->ajouter(this);
42  tab[1]->get_lien_element1()->ajouter(this);
45 
46 }
47 
49 {
50  tab[0]->get_lien_element1()->ajouter(this);
51  tab[1]->get_lien_element1()->ajouter(this);
54 
55 }
57 {
58  tab[0]->get_lien_element1()->ajouter(this);
59  tab[1]->get_lien_element1()->ajouter(this);
62 
63 }
64 
66 {
67  tab[0]->get_lien_element1()->ajouter(this);
68  tab[1]->get_lien_element1()->ajouter(this);
71 
72 }
73 
75 {
76  if (liaison_topologique!=NULL)
78  tab[0]->get_lien_element1()->supprimer(this);
79  tab[1]->get_lien_element1()->supprimer(this);
81 }
82 
84 {
85  FEM_NOEUD* tabnoeud[2];
86  tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
87  tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
88  FEM_SEGMENT2* seg=new FEM_SEGMENT2(get_id()+decalage,maillage,tabnoeud);
89  femmai->ajouter_fem_element1(seg);
90  return seg;
91 }
92 
94 {
95 voisin.vide();
96 if (no==tab[0])
97  {
98  voisin.ajouter(tab[1]);
99  }
100 if (no==tab[1])
101  {
102  voisin.ajouter(tab[0]);
103  }
104 }
105 
107 {
108 if (uvw[0]>=-1e-10)
109  if (uvw[0]<=1.+1e-10)
110  return true;
111 return false;
112 }
113 
115 {
117 }
118 
120 {
122 }
123 
125 {
126  return 1;
127 }
128 
129 
130 
132 {
134 }
135 
137 {
139 }
140 
142 {
144 }
145 
147 {
149 }
150 
151 
152 void FEM_SEGMENT2::enregistrer(std::ostream& o,double version)
153 {
154  if (maillage!=NULL)
155  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_SEGMENT2($"<< get_lien_topologie()->get_id() << ",$"<< maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ");" << std::endl;
156  else o << "%" << get_id() << "=FEM_SEGMENT2(NULL,$" << maillage->get_id() <<",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ");" << std::endl;
157  if (maillage==NULL)
158  if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_SEGMENT2($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ");" << std::endl;
159  else o << "%" << get_id() << "=FEM_SEGMENT2(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ");" << std::endl;
160 }
161 
162 
164 {
165 return OT_POINTS_GAUSS::get_nb_point_seg(degre);
166 }
167 
168 void FEM_SEGMENT2::get_pt_gauss(int degre,int num,double &w,double *u)
169 {
170 return OT_POINTS_GAUSS::get_pt_gauss_seg(degre,num,w,u);
171 }
172 
174 {
176 }
177 
179 {
180  return 2;
181 }
183 {
184  return 1;
185 }
187 {
188  double val;
189  switch (num)
190  {
191  case 1:
192  val=0.5*(1.-uv[0]);
193  break;
194  case 2:
195  val=0.5*(1.+uv[0]);
196  break;
197  }
198  return val;
199 }
200 
201 double FEM_SEGMENT2::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
202 {
203  double val;
204 
205  switch (num)
206  {
207  case 1:
208  switch (num_variable)
209  {
210  case 1:
211  val=-0.5;
212  break;
213  case 2:
214  val=-0.5;
215  break;
216  }
217  break;
218 
219  }
220  return val;
221 }
222 
FEM_SEGMENT2::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)
Definition: fem_segment2.cpp:201
gestionversion.h
FEM_SEGMENT2::get_nb_fonction_interpolation
virtual int get_nb_fonction_interpolation(void)
Definition: fem_segment2.cpp:178
FEM_SEGMENT2::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_segment2.cpp:131
FEM_SEGMENT2::get_degre_gauss
virtual int get_degre_gauss(int num)
Definition: fem_segment2.cpp:173
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
FEM_SEGMENT2::valide_parametre_EF
virtual bool valide_parametre_EF(double *uvw)
Definition: fem_segment2.cpp:106
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
FEM_SEGMENT2::FEM_SEGMENT2
FEM_SEGMENT2(unsigned long num, class MG_ELEMENT_MAILLAGE *mai, class FEM_NOEUD **tabnoeud)
Definition: fem_segment2.cpp:31
fem_maillage.h
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
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_SEGMENT2::get_pt_gauss
virtual void get_pt_gauss(int degre, int num, double &w, double *u)
Definition: fem_segment2.cpp:168
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
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_SEGMENT2::dupliquer
FEM_ELEMENT_MAILLAGE * dupliquer(FEM_MAILLAGE *femmai, long decalage)
Definition: fem_segment2.cpp:83
FEM_SEGMENT2::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_segment2.cpp:114
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
MAGIC::TYPE_ENTITE::IDFEM_SEGMENT2
@ IDFEM_SEGMENT2
Definition: mg_definition.h:70
FEM_SEGMENT2::get_nb_pt_gauss
virtual int get_nb_pt_gauss(int degre)
Definition: fem_segment2.cpp:163
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_TEMPLATE_ELEMENT< 2 >::get_fem_noeudpetitid
virtual FEM_NOEUD * get_fem_noeudpetitid(void)
Definition: fem_template_element.cpp:111
FEM_SEGMENT2::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: fem_segment2.cpp:152
FEM_SEGMENT2::get_voisin_noeud
virtual void get_voisin_noeud(class FEM_NOEUD *no, TPL_LISTE_ENTITE< FEM_NOEUD * > &voisin)
Definition: fem_segment2.cpp:93
FEM_NOEUD
Definition: fem_noeud.h:35
TPL_LISTE_ENTITE::vide
virtual void vide(void)
Definition: tpl_liste_entite.h:77
BOITE_3D
Definition: ot_boite_3d.h:27
FEM_SEGMENT2::~FEM_SEGMENT2
virtual ~FEM_SEGMENT2()
Definition: fem_segment2.cpp:74
FEM_SEGMENT2::change_noeud
virtual void change_noeud(int num, FEM_NOEUD *noeud)
Definition: fem_segment2.cpp:141
FEM_TEMPLATE_ELEMENT::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)
Definition: fem_template_element.cpp:94
FEM_SEGMENT2::get_fem_noeud
virtual FEM_NOEUD * get_fem_noeud(int num)
Definition: fem_segment2.cpp:136
FEM_SEGMENT2::get_degremax_fonction_interpolation
virtual int get_degremax_fonction_interpolation(void)
Definition: fem_segment2.cpp:182
FEM_ELEMENT_MAILLAGE::maillage
class MG_ELEMENT_MAILLAGE * maillage
Definition: fem_element_maillage.h:72
FEM_TEMPLATE_ELEMENT< 2 >::tab
FEM_NOEUD * tab[N]
Definition: fem_template_element.h:57
fem_segment2.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_SEGMENT2
Definition: fem_segment2.h:33
TPL_LISTE_ENTITE
Definition: tpl_liste_entite.h:32
FEM_SEGMENT2::get_boite_3D
virtual BOITE_3D & get_boite_3D(void)
Definition: fem_segment2.cpp:146
FEM_TEMPLATE_ELEMENT::reinit_boite_3D
virtual void reinit_boite_3D(void)
Definition: fem_template_element.cpp:57
FEM_SEGMENT2::get_dimension
virtual int get_dimension(void)
Definition: fem_segment2.cpp:124
ot_quadrature_gauss.h
TPL_LISTE_ENTITE::supprimer
virtual void supprimer(X x)
Definition: tpl_liste_entite.h:42
FEM_SEGMENT2::get_type_entite
virtual int get_type_entite(void)
Definition: fem_segment2.cpp:119
FEM_SEGMENT2::get_fonction_interpolation
virtual double get_fonction_interpolation(int num, double *uv)
Definition: fem_segment2.cpp:186
FEM_TEMPLATE_ELEMENT
Definition: fem_template_element.h:35