ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/fem_segment2.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 7266 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
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 francois 283
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 francois 754 #include "ot_quadrature_gauss.h"
30 francois 283
31 francois 309 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 francois 283 {
33 francois 378 tab[0]->get_lien_element1()->ajouter(this);
34     tab[1]->get_lien_element1()->ajouter(this);
35     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
36 francois 283 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
37 francois 378
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 francois 309 tab[0]->get_lien_element1()->ajouter(this);
42     tab[1]->get_lien_element1()->ajouter(this);
43     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
44 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
45    
46 francois 283 }
47    
48 francois 378 FEM_SEGMENT2::FEM_SEGMENT2(class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT1(topo),FEM_TEMPLATE_ELEMENT<2>(tabnoeud)
49     {
50     tab[0]->get_lien_element1()->ajouter(this);
51     tab[1]->get_lien_element1()->ajouter(this);
52     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
53     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
54    
55     }
56 francois 309 FEM_SEGMENT2::FEM_SEGMENT2(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(mai),FEM_TEMPLATE_ELEMENT<2>(tabnoeud)
57 francois 283 {
58 francois 309 tab[0]->get_lien_element1()->ajouter(this);
59     tab[1]->get_lien_element1()->ajouter(this);
60     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
61 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
62    
63 francois 283 }
64    
65 francois 309 FEM_SEGMENT2::FEM_SEGMENT2(FEM_SEGMENT2& mdd):FEM_ELEMENT1(mdd),FEM_TEMPLATE_ELEMENT<2>(mdd)
66 francois 283 {
67 francois 309 tab[0]->get_lien_element1()->ajouter(this);
68     tab[1]->get_lien_element1()->ajouter(this);
69     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
70 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
71    
72 francois 283 }
73    
74     FEM_SEGMENT2::~FEM_SEGMENT2()
75     {
76 francois 663 if (liaison_topologique!=NULL)
77     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
78 francois 309 tab[0]->get_lien_element1()->supprimer(this);
79     tab[1]->get_lien_element1()->supprimer(this);
80     get_fem_noeudpetitid()->get_lien_petit_element1()->supprimer(this);
81 francois 283 }
82    
83     FEM_ELEMENT_MAILLAGE* FEM_SEGMENT2::dupliquer(FEM_MAILLAGE *femmai,long decalage)
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 francois 309 femmai->ajouter_fem_element1(seg);
90 francois 283 return seg;
91     }
92    
93 francois 786 void FEM_SEGMENT2::get_voisin_noeud(class FEM_NOEUD* no,TPL_LISTE_ENTITE<FEM_NOEUD*> &voisin)
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    
106 francois 635 bool FEM_SEGMENT2::valide_parametre_EF(double* uvw)
107     {
108     if (uvw[0]>=-1e-10)
109     if (uvw[0]<=1.+1e-10)
110     return true;
111     return false;
112     }
113 francois 283
114 francois 684 void FEM_SEGMENT2::reinit_boite_3D(void)
115     {
116     FEM_TEMPLATE_ELEMENT<2>::reinit_boite_3D();
117     }
118 francois 283
119     int FEM_SEGMENT2::get_type_entite(void)
120     {
121 francois 1150 return MAGIC::TYPE_ENTITE::IDFEM_SEGMENT2;
122 francois 283 }
123    
124     int FEM_SEGMENT2::get_dimension(void)
125     {
126     return 1;
127     }
128    
129    
130    
131     int FEM_SEGMENT2::get_nb_fem_noeud(void)
132     {
133     return FEM_TEMPLATE_ELEMENT<2>::get_nb_fem_noeud();
134     }
135    
136     FEM_NOEUD* FEM_SEGMENT2::get_fem_noeud(int num)
137     {
138     return FEM_TEMPLATE_ELEMENT<2>::get_fem_noeud(num);
139     }
140    
141     void FEM_SEGMENT2::change_noeud(int num,FEM_NOEUD* noeud)
142     {
143     FEM_TEMPLATE_ELEMENT<2>::change_noeud(num,noeud);
144     }
145    
146     BOITE_3D& FEM_SEGMENT2::get_boite_3D(void)
147     {
148     return FEM_TEMPLATE_ELEMENT<2>::get_boite_3D();
149     }
150    
151    
152 francois 763 void FEM_SEGMENT2::enregistrer(std::ostream& o,double version)
153 francois 283 {
154 francois 378 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 francois 283 else o << "%" << get_id() << "=FEM_SEGMENT2(NULL,$" << maillage->get_id() <<",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ");" << std::endl;
157 francois 378 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 francois 283 }
161 francois 310
162    
163 francois 637 int FEM_SEGMENT2::get_nb_pt_gauss(int degre)
164     {
165 francois 754 return OT_POINTS_GAUSS::get_nb_point_seg(degre);
166 francois 637 }
167    
168     void FEM_SEGMENT2::get_pt_gauss(int degre,int num,double &w,double *u)
169     {
170 francois 754 return OT_POINTS_GAUSS::get_pt_gauss_seg(degre,num,w,u);
171 francois 637 }
172    
173 francois 757 int FEM_SEGMENT2::get_degre_gauss(int num)
174     {
175     return OT_POINTS_GAUSS::get_degre_gauss_seg(num);
176     }
177    
178 francois 638 int FEM_SEGMENT2::get_nb_fonction_interpolation(void)
179 francois 310 {
180     return 2;
181     }
182 francois 638 int FEM_SEGMENT2::get_degremax_fonction_interpolation(void)
183     {
184     return 1;
185     }
186 francois 310 double FEM_SEGMENT2::get_fonction_interpolation(int num,double *uv)
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