ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_quadrangle8.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 13731 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 310 //------------------------------------------------------------
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_triangle3.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_quadrangle8.h"
27     #include "fem_maillage.h"
28     #include "fem_noeud.h"
29     #include "mg_element_maillage.h"
30 francois 754 #include "ot_quadrature_gauss.h"
31 francois 310
32    
33     FEM_QUADRANGLE8::FEM_QUADRANGLE8(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,mai),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
34     {
35     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
36     tab[0]->get_lien_element2()->ajouter(this);
37     tab[1]->get_lien_element2()->ajouter(this);
38     tab[2]->get_lien_element2()->ajouter(this);
39     tab[3]->get_lien_element2()->ajouter(this);
40     tab[4]->get_lien_element2()->ajouter(this);
41     tab[5]->get_lien_element2()->ajouter(this);
42     tab[6]->get_lien_element2()->ajouter(this);
43     tab[7]->get_lien_element2()->ajouter(this);
44     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
45     }
46    
47     FEM_QUADRANGLE8::FEM_QUADRANGLE8(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT2(mai),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
48     {
49     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
50     tab[0]->get_lien_element2()->ajouter(this);
51     tab[1]->get_lien_element2()->ajouter(this);
52     tab[2]->get_lien_element2()->ajouter(this);
53     tab[3]->get_lien_element2()->ajouter(this);
54     tab[4]->get_lien_element2()->ajouter(this);
55     tab[5]->get_lien_element2()->ajouter(this);
56     tab[6]->get_lien_element2()->ajouter(this);
57     tab[7]->get_lien_element2()->ajouter(this);
58     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
59     }
60 francois 378 FEM_QUADRANGLE8::FEM_QUADRANGLE8(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT2(num,topo),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
61     {
62     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
63     tab[0]->get_lien_element2()->ajouter(this);
64     tab[1]->get_lien_element2()->ajouter(this);
65     tab[2]->get_lien_element2()->ajouter(this);
66     tab[3]->get_lien_element2()->ajouter(this);
67     tab[4]->get_lien_element2()->ajouter(this);
68     tab[5]->get_lien_element2()->ajouter(this);
69     tab[6]->get_lien_element2()->ajouter(this);
70     tab[7]->get_lien_element2()->ajouter(this);
71     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
72     }
73 francois 310
74 francois 378 FEM_QUADRANGLE8::FEM_QUADRANGLE8(class MG_ELEMENT_TOPOLOGIQUE* topo,FEM_NOEUD** tabnoeud):FEM_ELEMENT2(topo),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
75     {
76     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
77     tab[0]->get_lien_element2()->ajouter(this);
78     tab[1]->get_lien_element2()->ajouter(this);
79     tab[2]->get_lien_element2()->ajouter(this);
80     tab[3]->get_lien_element2()->ajouter(this);
81     tab[4]->get_lien_element2()->ajouter(this);
82     tab[5]->get_lien_element2()->ajouter(this);
83     tab[6]->get_lien_element2()->ajouter(this);
84     tab[7]->get_lien_element2()->ajouter(this);
85     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
86     }
87     FEM_QUADRANGLE8::FEM_QUADRANGLE8(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<8>(tabnoeud)
88     {
89     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
90     tab[0]->get_lien_element2()->ajouter(this);
91     tab[1]->get_lien_element2()->ajouter(this);
92     tab[2]->get_lien_element2()->ajouter(this);
93     tab[3]->get_lien_element2()->ajouter(this);
94     tab[4]->get_lien_element2()->ajouter(this);
95     tab[5]->get_lien_element2()->ajouter(this);
96     tab[6]->get_lien_element2()->ajouter(this);
97     tab[7]->get_lien_element2()->ajouter(this);
98     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
99     }
100    
101     FEM_QUADRANGLE8::FEM_QUADRANGLE8(class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT2(topo,mai),FEM_TEMPLATE_ELEMENT<8>(tabnoeud)
102     {
103     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
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);
108     tab[4]->get_lien_element2()->ajouter(this);
109     tab[5]->get_lien_element2()->ajouter(this);
110     tab[6]->get_lien_element2()->ajouter(this);
111     tab[7]->get_lien_element2()->ajouter(this);
112     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
113     }
114    
115    
116    
117    
118    
119    
120    
121    
122    
123 francois 310 FEM_QUADRANGLE8::FEM_QUADRANGLE8(FEM_QUADRANGLE8& mdd):FEM_ELEMENT2(mdd),FEM_TEMPLATE_ELEMENT<8>(mdd)
124     {
125     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==2) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
126     tab[0]->get_lien_element2()->ajouter(this);
127     tab[1]->get_lien_element2()->ajouter(this);
128     tab[2]->get_lien_element2()->ajouter(this);
129     tab[3]->get_lien_element2()->ajouter(this);
130     tab[4]->get_lien_element2()->ajouter(this);
131     tab[5]->get_lien_element2()->ajouter(this);
132     tab[6]->get_lien_element2()->ajouter(this);
133     tab[7]->get_lien_element2()->ajouter(this);
134     get_fem_noeudpetitid()->get_lien_petit_element2()->ajouter(this);
135     }
136     FEM_QUADRANGLE8::~FEM_QUADRANGLE8()
137     {
138 francois 663 if (liaison_topologique!=NULL)
139     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
140 francois 310 tab[0]->get_lien_element2()->supprimer(this);
141     tab[1]->get_lien_element2()->supprimer(this);
142     tab[2]->get_lien_element2()->supprimer(this);
143     tab[3]->get_lien_element2()->supprimer(this);
144     tab[4]->get_lien_element2()->supprimer(this);
145     tab[5]->get_lien_element2()->supprimer(this);
146     tab[6]->get_lien_element2()->supprimer(this);
147     tab[7]->get_lien_element2()->supprimer(this);
148     get_fem_noeudpetitid()->get_lien_petit_element2()->supprimer(this);
149     }
150    
151    
152     FEM_ELEMENT_MAILLAGE* FEM_QUADRANGLE8::dupliquer(FEM_MAILLAGE *femmai,long decalage)
153     {
154     FEM_NOEUD* tabnoeud[8];
155     tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
156     tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
157     tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
158     tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
159     tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
160     tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
161     tabnoeud[6]=femmai->get_fem_noeudid(tab[6]->get_id()+decalage);
162     tabnoeud[7]=femmai->get_fem_noeudid(tab[7]->get_id()+decalage);
163     FEM_QUADRANGLE8* quad=new FEM_QUADRANGLE8(get_id()+decalage,maillage,tabnoeud);
164     femmai->ajouter_fem_element2(quad);
165     return quad;
166     }
167    
168 francois 635 bool FEM_QUADRANGLE8::valide_parametre_EF(double* uvw)
169     {
170 francois 674 if (uvw[0]>=-1.-1e-10)
171     if (uvw[1]>=-1.-1e-10)
172 francois 635 if (uvw[0]<=1.+1e-10)
173     if (uvw[1]<=1.+1e-10)
174     return true;
175     return false;
176     }
177 francois 310
178    
179    
180     int FEM_QUADRANGLE8::get_type_entite(void)
181     {
182     return IDFEM_QUADRANGLE8;
183     }
184    
185     int FEM_QUADRANGLE8::get_dimension(void)
186     {
187     return 2;
188     }
189    
190 francois 684 void FEM_QUADRANGLE8::reinit_boite_3D(void)
191     {
192     FEM_TEMPLATE_ELEMENT<8>::reinit_boite_3D();
193     }
194 francois 310
195     int FEM_QUADRANGLE8::get_nb_fem_noeud(void)
196     {
197     return FEM_TEMPLATE_ELEMENT<8>::get_nb_fem_noeud();
198     }
199    
200     FEM_NOEUD* FEM_QUADRANGLE8::get_fem_noeud(int num)
201     {
202     return FEM_TEMPLATE_ELEMENT<8>::get_fem_noeud(num);
203     }
204    
205     void FEM_QUADRANGLE8::change_noeud(int num,FEM_NOEUD* noeud)
206     {
207     FEM_TEMPLATE_ELEMENT<8>::change_noeud(num,noeud);
208     }
209    
210     BOITE_3D& FEM_QUADRANGLE8::get_boite_3D(void)
211     {
212     return FEM_TEMPLATE_ELEMENT<8>::get_boite_3D();
213     }
214    
215    
216 francois 763 void FEM_QUADRANGLE8::enregistrer(std::ostream& o,double version)
217 francois 310 {
218 francois 378 if (maillage!=NULL)
219     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_QUADRANGLE8($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<< ");" << std::endl;
220     else o << "%" << get_id() << "=FEM_QUADRANGLE8(NULL,$" << maillage->get_id() << ",$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<<");" << std::endl;
221     else
222     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_QUADRANGLE8($"<< get_lien_topologie()->get_id() << ",NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<< ");" << std::endl;
223     else o << "%" << get_id() << "=FEM_QUADRANGLE8(NULL,NULL,$" << tab[0]->get_id() << ",$" << tab[1]->get_id() << ",$" << tab[2]->get_id()<< ",$" << tab[3]->get_id()<< ",$" << tab[4]->get_id() << ",$" << tab[5]->get_id() << ",$" << tab[6]->get_id()<< ",$" << tab[7]->get_id()<<");" << std::endl;
224    
225 francois 310 }
226 francois 637
227     int FEM_QUADRANGLE8::get_nb_pt_gauss(int degre)
228     {
229 francois 755 return OT_POINTS_GAUSS::get_nb_point_quad_prod(degre);
230 francois 637 }
231    
232     void FEM_QUADRANGLE8::get_pt_gauss(int degre,int num,double &w,double *uv)
233     {
234 francois 755 return OT_POINTS_GAUSS::get_pt_gauss_qua_prod(degre,num,w,uv);
235 francois 637 }
236 francois 757
237     int FEM_QUADRANGLE8::get_degre_gauss(int num)
238     {
239     return OT_POINTS_GAUSS::get_degre_gauss_quad_prod(num);
240     }
241    
242    
243 francois 638 int FEM_QUADRANGLE8::get_nb_fonction_interpolation(void)
244 francois 310 {
245     return 8;
246     }
247    
248 francois 638 int FEM_QUADRANGLE8::get_degremax_fonction_interpolation(void)
249     {
250     return 3;
251     }
252 francois 310 double FEM_QUADRANGLE8::get_fonction_interpolation(int num,double *uv)
253     {
254     double val;
255     switch (num)
256     {
257     case 1:
258     val=-0.25*(1-uv[0])*(1-uv[1])*(1.+uv[0]+uv[1]);
259     break;
260     case 2:
261     val=0.5*(1-uv[0]*uv[0])*(1-uv[1]);
262     break;
263     case 3:
264     val=-0.25*(1+uv[0])*(1-uv[1])*(1.-uv[0]+uv[1]);
265     break;
266     case 4:
267     val=0.5*(1+uv[0])*(1-uv[1]*uv[1]);
268     break;
269     case 5:
270     val=-0.25*(1+uv[0])*(1+uv[1])*(1.-uv[0]-uv[1]);
271     break;
272     case 6:
273     val=0.5*(1-uv[0]*uv[0])*(1+uv[1]);
274     break;
275     case 7:
276     val=-0.25*(1-uv[0])*(1+uv[1])*(1.+uv[0]-uv[1]);
277     break;
278     case 8:
279     val=0.5*(1-uv[0])*(1-uv[1]*uv[1]);
280     break;
281     }
282     return val;
283     }
284    
285     double FEM_QUADRANGLE8::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
286     {
287     double val;
288    
289     switch (num)
290     {
291     case 1:
292     switch (num_variable)
293     {
294     case 1:
295     val=0.25*(1-uv[1])*(2*uv[0]+uv[1]);
296     break;
297     case 2:
298     val=0.25*(1-uv[0])*(uv[0]+2.*uv[1]);
299     break;
300     } break;
301     case 2:
302     switch (num_variable)
303     {
304     case 1:
305     val=-uv[0]*(1.-uv[1]);
306     break;
307     case 2:
308     val=-0.5*(1-uv[0]*uv[0]);
309     break;
310     }break;
311     case 3:
312     switch (num_variable)
313     {
314     case 1:
315     val=0.25*(1.-uv[1])*(2*uv[0]-uv[1]);
316     break;
317     case 2:
318     val=-0.25*(1.+uv[0])*(uv[0]-2.*uv[1]);
319     break;
320     }break;
321     case 4:
322     switch (num_variable)
323     {
324     case 1:
325     val=0.5*(1.-uv[1]*uv[1]);
326     break;
327     case 2:
328     val=-uv[1]*(1+uv[0]);
329     break;
330     }break;
331     case 5:
332     switch (num_variable)
333     {
334     case 1:
335     val=0.25*(1+uv[1])*(2*uv[0]+uv[1]);
336     break;
337     case 2:
338     val=0.25*(1+uv[0])*(uv[0]+2.*uv[1]);
339     break;
340     } break;
341     case 6:
342     switch (num_variable)
343     {
344     case 1:
345     val=-uv[0]*(1.+uv[1]);
346     break;
347     case 2:
348     val=-0.5*(1-uv[0]*uv[0]);
349     break;
350     }break;
351     case 7:
352     switch (num_variable)
353     {
354     case 1:
355     val=0.25*(1.+uv[1])*(2*uv[0]-uv[1]);
356     break;
357     case 2:
358     val=-0.25*(1.-uv[0])*(uv[0]-2.*uv[1]);
359     break;
360     }break;
361     case 8:
362     switch (num_variable)
363     {
364     case 1:
365     val=-0.5*(1.-uv[1]*uv[1]);
366     break;
367     case 2:
368     val=-uv[1]*(1+uv[0]);
369     break;
370     }break;
371    
372     }
373     return val;
374     }
375    
376     double FEM_QUADRANGLE8::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
377     {
378    
379     }
380    
381     void FEM_QUADRANGLE8::get_inverse_jacob(double* j,double *uv,double unite)
382     {
383    
384     }