ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_segment3.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 8712 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // fem_segment3.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include "fem_segment3.h"
27     #include "fem_noeud.h"
28     #include "fem_maillage.h"
29     #include "mg_element_maillage.h"
30 francois 754 #include "ot_quadrature_gauss.h"
31 francois 283
32    
33 francois 309 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)
34 francois 283 {
35 francois 378 tab[0]->get_lien_element1()->ajouter(this);
36     tab[1]->get_lien_element1()->ajouter(this);
37     tab[2]->get_lien_element1()->ajouter(this);
38     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
39 francois 283 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
40 francois 378
41     }
42     FEM_SEGMENT3::FEM_SEGMENT3(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(num,topo),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
43     {
44 francois 309 tab[0]->get_lien_element1()->ajouter(this);
45     tab[1]->get_lien_element1()->ajouter(this);
46     tab[2]->get_lien_element1()->ajouter(this);
47     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
48 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
49 francois 283 }
50    
51 francois 378 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)
52     {
53     tab[0]->get_lien_element1()->ajouter(this);
54     tab[1]->get_lien_element1()->ajouter(this);
55     tab[2]->get_lien_element1()->ajouter(this);
56     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
57     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
58     }
59 francois 309 FEM_SEGMENT3::FEM_SEGMENT3(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(mai),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
60 francois 283 {
61 francois 378 tab[0]->get_lien_element1()->ajouter(this);
62     tab[1]->get_lien_element1()->ajouter(this);
63     tab[2]->get_lien_element1()->ajouter(this);
64     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
65 francois 283 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
66 francois 378
67     }
68    
69     FEM_SEGMENT3::FEM_SEGMENT3(class MG_ELEMENT_TOPOLOGIQUE* topo,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(topo),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
70     {
71 francois 309 tab[0]->get_lien_element1()->ajouter(this);
72     tab[1]->get_lien_element1()->ajouter(this);
73     tab[2]->get_lien_element1()->ajouter(this);
74     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
75 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
76 francois 283 }
77    
78 francois 378 FEM_SEGMENT3::FEM_SEGMENT3(class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT1(topo,mai),FEM_TEMPLATE_ELEMENT<3>(tabnoeud)
79     {
80     tab[0]->get_lien_element1()->ajouter(this);
81     tab[1]->get_lien_element1()->ajouter(this);
82     tab[2]->get_lien_element1()->ajouter(this);
83     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
84     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
85     }
86    
87    
88    
89 francois 684 void FEM_SEGMENT3::reinit_boite_3D(void)
90     {
91     FEM_TEMPLATE_ELEMENT<3>::reinit_boite_3D();
92     }
93 francois 378
94    
95 francois 309 FEM_SEGMENT3::FEM_SEGMENT3(FEM_SEGMENT3& mdd):FEM_ELEMENT1(mdd),FEM_TEMPLATE_ELEMENT<3>(mdd)
96 francois 283 {
97 francois 309 tab[0]->get_lien_element1()->ajouter(this);
98     tab[1]->get_lien_element1()->ajouter(this);
99     tab[2]->get_lien_element1()->ajouter(this);
100     get_fem_noeudpetitid()->get_lien_petit_element1()->ajouter(this);
101 francois 378 if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==1) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
102    
103 francois 283 }
104    
105     FEM_SEGMENT3::~FEM_SEGMENT3()
106     {
107 francois 663 if (liaison_topologique!=NULL)
108     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
109 francois 309 tab[0]->get_lien_element1()->supprimer(this);
110     tab[1]->get_lien_element1()->supprimer(this);
111     get_fem_noeudpetitid()->get_lien_petit_element1()->supprimer(this);
112 francois 283 }
113    
114     FEM_ELEMENT_MAILLAGE* FEM_SEGMENT3::dupliquer(FEM_MAILLAGE *femmai,long decalage)
115     {
116     FEM_NOEUD* tabnoeud[3];
117     tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
118     tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
119     tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
120     FEM_SEGMENT3* seg=new FEM_SEGMENT3(get_id()+decalage,maillage,tabnoeud);
121 francois 309 femmai->ajouter_fem_element1(seg);
122 francois 283 return seg;
123     }
124    
125 francois 635 bool FEM_SEGMENT3::valide_parametre_EF(double* uvw)
126     {
127     if (uvw[0]>=-1e-10)
128     if (uvw[0]<=1.+1e-10)
129     return true;
130     return false;
131     }
132 francois 283
133    
134 francois 635
135 francois 283 int FEM_SEGMENT3::get_type_entite(void)
136     {
137     return IDFEM_SEGMENT3;
138     }
139    
140     int FEM_SEGMENT3::get_dimension(void)
141     {
142     return 1;
143     }
144    
145    
146     int FEM_SEGMENT3::get_nb_fem_noeud(void)
147     {
148     return FEM_TEMPLATE_ELEMENT<3>::get_nb_fem_noeud();
149     }
150    
151     FEM_NOEUD* FEM_SEGMENT3::get_fem_noeud(int num)
152     {
153     return FEM_TEMPLATE_ELEMENT<3>::get_fem_noeud(num);
154     }
155    
156     void FEM_SEGMENT3::change_noeud(int num,FEM_NOEUD* noeud)
157     {
158     FEM_TEMPLATE_ELEMENT<3>::change_noeud(num,noeud);
159     }
160    
161     BOITE_3D& FEM_SEGMENT3::get_boite_3D(void)
162     {
163     return FEM_TEMPLATE_ELEMENT<3>::get_boite_3D();
164     }
165    
166    
167    
168 francois 763 void FEM_SEGMENT3::enregistrer(std::ostream& o,double version)
169 francois 283 {
170 francois 378 if (maillage!=NULL)
171     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;
172     else o << "%" << get_id() << "=FEM_SEGMENT3(NULL,$" << maillage->get_id() <<",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
173     else
174     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;
175     else o << "%" << get_id() << "=FEM_SEGMENT3(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ");" << std::endl;
176    
177 francois 283 }
178 francois 637
179    
180    
181     int FEM_SEGMENT3::get_nb_pt_gauss(int degre)
182     {
183 francois 754 return OT_POINTS_GAUSS::get_nb_point_seg(degre);
184 francois 637 }
185    
186     void FEM_SEGMENT3::get_pt_gauss(int degre,int num,double &w,double *u)
187     {
188 francois 754 return OT_POINTS_GAUSS::get_pt_gauss_seg(degre,num,w,u);
189 francois 637 }
190 francois 757
191     int FEM_SEGMENT3::get_degre_gauss(int num)
192     {
193     return OT_POINTS_GAUSS::get_degre_gauss_seg(num);
194     }
195    
196 francois 638 int FEM_SEGMENT3::get_nb_fonction_interpolation(void)
197 francois 310 {
198     return 3;
199     }
200    
201 francois 638 int FEM_SEGMENT3::get_degremax_fonction_interpolation(void)
202     {
203     return 2;
204     }
205 francois 310 double FEM_SEGMENT3::get_fonction_interpolation(int num,double *uv)
206     {
207     double val;
208     switch (num)
209     {
210     case 1:
211     val=-0.5*uv[0]*(1.-uv[0]);
212     break;
213     case 2:
214     val=1.-uv[0]*uv[0];
215     break;
216     case 3:
217     val=0.5*uv[0]*(1.+uv[0]);
218     break;
219     }
220     return val;
221     }
222    
223     double FEM_SEGMENT3::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
224     {
225     double val;
226    
227     switch (num)
228     {
229     case 1:
230     switch (num_variable)
231     {
232     case 1:
233     val=-0.5+uv[0];
234     break;
235     case 2:
236     val=-2.*uv[0];
237     break;
238     case 3:
239     val=0.5+uv[0];
240     break;
241     }
242     break;
243    
244     }
245     return val;
246     }
247    
248     double FEM_SEGMENT3::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
249     {
250    
251     }
252    
253     void FEM_SEGMENT3::get_inverse_jacob(double* j,double *uv,double unite)
254     {
255    
256     }