ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/fem_penta15.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 22517 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_penta15.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:55 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 francois 876
23    
24     #include "gestionversion.h"
25     #include "fem_penta15.h"
26     #include "fem_maillage.h"
27     #include "fem_noeud.h"
28     #include "mg_element_maillage.h"
29     #include "ot_tenseur.h"
30     #include "ot_quadrature_gauss.h"
31    
32    
33     FEM_PENTA15::FEM_PENTA15(unsigned long num,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,mai),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
34     {
35     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
36     tab[0]->get_lien_element3()->ajouter(this);
37     tab[1]->get_lien_element3()->ajouter(this);
38     tab[2]->get_lien_element3()->ajouter(this);
39     tab[3]->get_lien_element3()->ajouter(this);
40     tab[4]->get_lien_element3()->ajouter(this);
41     tab[5]->get_lien_element3()->ajouter(this);
42     tab[6]->get_lien_element3()->ajouter(this);
43     tab[7]->get_lien_element3()->ajouter(this);
44     tab[8]->get_lien_element3()->ajouter(this);
45     tab[9]->get_lien_element3()->ajouter(this);
46     tab[10]->get_lien_element3()->ajouter(this);
47     tab[11]->get_lien_element3()->ajouter(this);
48     tab[12]->get_lien_element3()->ajouter(this);
49     tab[13]->get_lien_element3()->ajouter(this);
50     tab[14]->get_lien_element3()->ajouter(this);
51     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
52     }
53    
54     FEM_PENTA15::FEM_PENTA15(class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT3(mai),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
55     {
56     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
57     tab[0]->get_lien_element3()->ajouter(this);
58     tab[1]->get_lien_element3()->ajouter(this);
59     tab[2]->get_lien_element3()->ajouter(this);
60     tab[3]->get_lien_element3()->ajouter(this);
61     tab[4]->get_lien_element3()->ajouter(this);
62     tab[5]->get_lien_element3()->ajouter(this);
63     tab[6]->get_lien_element3()->ajouter(this);
64     tab[7]->get_lien_element3()->ajouter(this);
65     tab[8]->get_lien_element3()->ajouter(this);
66     tab[9]->get_lien_element3()->ajouter(this);
67     tab[10]->get_lien_element3()->ajouter(this);
68     tab[11]->get_lien_element3()->ajouter(this);
69     tab[12]->get_lien_element3()->ajouter(this);
70     tab[13]->get_lien_element3()->ajouter(this);
71     tab[14]->get_lien_element3()->ajouter(this);
72     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
73     }
74    
75     FEM_PENTA15::FEM_PENTA15(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,topo),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
76     {
77     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
78     tab[0]->get_lien_element3()->ajouter(this);
79     tab[1]->get_lien_element3()->ajouter(this);
80     tab[2]->get_lien_element3()->ajouter(this);
81     tab[3]->get_lien_element3()->ajouter(this);
82     tab[4]->get_lien_element3()->ajouter(this);
83     tab[5]->get_lien_element3()->ajouter(this);
84     tab[6]->get_lien_element3()->ajouter(this);
85     tab[7]->get_lien_element3()->ajouter(this);
86     tab[8]->get_lien_element3()->ajouter(this);
87     tab[9]->get_lien_element3()->ajouter(this);
88     tab[10]->get_lien_element3()->ajouter(this);
89     tab[11]->get_lien_element3()->ajouter(this);
90     tab[12]->get_lien_element3()->ajouter(this);
91     tab[13]->get_lien_element3()->ajouter(this);
92     tab[14]->get_lien_element3()->ajouter(this);
93     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
94     }
95    
96     FEM_PENTA15::FEM_PENTA15(class MG_ELEMENT_TOPOLOGIQUE* topo,FEM_NOEUD** tabnoeud):FEM_ELEMENT3(topo),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
97     {
98     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
99     tab[0]->get_lien_element3()->ajouter(this);
100     tab[1]->get_lien_element3()->ajouter(this);
101     tab[2]->get_lien_element3()->ajouter(this);
102     tab[3]->get_lien_element3()->ajouter(this);
103     tab[4]->get_lien_element3()->ajouter(this);
104     tab[5]->get_lien_element3()->ajouter(this);
105     tab[6]->get_lien_element3()->ajouter(this);
106     tab[7]->get_lien_element3()->ajouter(this);
107     tab[8]->get_lien_element3()->ajouter(this);
108     tab[9]->get_lien_element3()->ajouter(this);
109     tab[10]->get_lien_element3()->ajouter(this);
110     tab[11]->get_lien_element3()->ajouter(this);
111     tab[12]->get_lien_element3()->ajouter(this);
112     tab[13]->get_lien_element3()->ajouter(this);
113     tab[14]->get_lien_element3()->ajouter(this);
114     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
115     }
116    
117     FEM_PENTA15::FEM_PENTA15(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,class FEM_NOEUD** tabnoeud):FEM_ELEMENT3(num,topo,mai),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
118     {
119     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
120     tab[0]->get_lien_element3()->ajouter(this);
121     tab[1]->get_lien_element3()->ajouter(this);
122     tab[2]->get_lien_element3()->ajouter(this);
123     tab[3]->get_lien_element3()->ajouter(this);
124     tab[4]->get_lien_element3()->ajouter(this);
125     tab[5]->get_lien_element3()->ajouter(this);
126     tab[6]->get_lien_element3()->ajouter(this);
127     tab[7]->get_lien_element3()->ajouter(this);
128     tab[8]->get_lien_element3()->ajouter(this);
129     tab[9]->get_lien_element3()->ajouter(this);
130     tab[10]->get_lien_element3()->ajouter(this);
131     tab[11]->get_lien_element3()->ajouter(this);
132     tab[12]->get_lien_element3()->ajouter(this);
133     tab[13]->get_lien_element3()->ajouter(this);
134     tab[14]->get_lien_element3()->ajouter(this);
135     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
136     }
137    
138     FEM_PENTA15::FEM_PENTA15(class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai,FEM_NOEUD** tabnoeud):FEM_ELEMENT3(topo,mai),FEM_TEMPLATE_ELEMENT<15>(tabnoeud)
139     {
140     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
141     tab[0]->get_lien_element3()->ajouter(this);
142     tab[1]->get_lien_element3()->ajouter(this);
143     tab[2]->get_lien_element3()->ajouter(this);
144     tab[3]->get_lien_element3()->ajouter(this);
145     tab[4]->get_lien_element3()->ajouter(this);
146     tab[5]->get_lien_element3()->ajouter(this);
147     tab[6]->get_lien_element3()->ajouter(this);
148     tab[7]->get_lien_element3()->ajouter(this);
149     tab[8]->get_lien_element3()->ajouter(this);
150     tab[9]->get_lien_element3()->ajouter(this);
151     tab[10]->get_lien_element3()->ajouter(this);
152     tab[11]->get_lien_element3()->ajouter(this);
153     tab[12]->get_lien_element3()->ajouter(this);
154     tab[13]->get_lien_element3()->ajouter(this);
155     tab[14]->get_lien_element3()->ajouter(this);
156     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
157     }
158    
159    
160    
161    
162     FEM_PENTA15::FEM_PENTA15(FEM_PENTA15& mdd):FEM_ELEMENT3(mdd),FEM_TEMPLATE_ELEMENT<15>(mdd)
163     {
164     if (liaison_topologique!=NULL) if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
165     tab[0]->get_lien_element3()->ajouter(this);
166     tab[1]->get_lien_element3()->ajouter(this);
167     tab[2]->get_lien_element3()->ajouter(this);
168     tab[3]->get_lien_element3()->ajouter(this);
169     tab[4]->get_lien_element3()->ajouter(this);
170     tab[5]->get_lien_element3()->ajouter(this);
171     tab[6]->get_lien_element3()->ajouter(this);
172     tab[7]->get_lien_element3()->ajouter(this);
173     tab[8]->get_lien_element3()->ajouter(this);
174     tab[9]->get_lien_element3()->ajouter(this);
175     tab[10]->get_lien_element3()->ajouter(this);
176     tab[11]->get_lien_element3()->ajouter(this);
177     tab[12]->get_lien_element3()->ajouter(this);
178     tab[13]->get_lien_element3()->ajouter(this);
179     tab[14]->get_lien_element3()->ajouter(this);
180     get_fem_noeudpetitid()->get_lien_petit_element3()->ajouter(this);
181     }
182     FEM_PENTA15::~FEM_PENTA15()
183     {
184     if (liaison_topologique!=NULL)
185     if (liaison_topologique->get_dimension()==3) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
186     tab[0]->get_lien_element3()->supprimer(this);
187     tab[1]->get_lien_element3()->supprimer(this);
188     tab[2]->get_lien_element3()->supprimer(this);
189     tab[3]->get_lien_element3()->supprimer(this);
190     tab[4]->get_lien_element3()->supprimer(this);
191     tab[5]->get_lien_element3()->supprimer(this);
192     tab[6]->get_lien_element3()->supprimer(this);
193     tab[7]->get_lien_element3()->supprimer(this);
194     tab[8]->get_lien_element3()->supprimer(this);
195     tab[9]->get_lien_element3()->supprimer(this);
196     tab[10]->get_lien_element3()->supprimer(this);
197     tab[11]->get_lien_element3()->supprimer(this);
198     tab[12]->get_lien_element3()->supprimer(this);
199     tab[13]->get_lien_element3()->supprimer(this);
200     tab[14]->get_lien_element3()->supprimer(this);
201     get_fem_noeudpetitid()->get_lien_petit_element3()->supprimer(this);
202     }
203    
204    
205     FEM_ELEMENT_MAILLAGE* FEM_PENTA15::dupliquer(FEM_MAILLAGE *femmai,long decalage)
206     {
207 couturad 944 FEM_NOEUD* tabnoeud[15];
208 francois 876 tabnoeud[0]=femmai->get_fem_noeudid(tab[0]->get_id()+decalage);
209     tabnoeud[1]=femmai->get_fem_noeudid(tab[1]->get_id()+decalage);
210     tabnoeud[2]=femmai->get_fem_noeudid(tab[2]->get_id()+decalage);
211     tabnoeud[3]=femmai->get_fem_noeudid(tab[3]->get_id()+decalage);
212     tabnoeud[4]=femmai->get_fem_noeudid(tab[4]->get_id()+decalage);
213     tabnoeud[5]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
214     tabnoeud[6]=femmai->get_fem_noeudid(tab[5]->get_id()+decalage);
215     tabnoeud[7]=femmai->get_fem_noeudid(tab[6]->get_id()+decalage);
216     tabnoeud[8]=femmai->get_fem_noeudid(tab[8]->get_id()+decalage);
217     tabnoeud[9]=femmai->get_fem_noeudid(tab[9]->get_id()+decalage);
218     tabnoeud[10]=femmai->get_fem_noeudid(tab[10]->get_id()+decalage);
219     tabnoeud[11]=femmai->get_fem_noeudid(tab[11]->get_id()+decalage);
220     tabnoeud[12]=femmai->get_fem_noeudid(tab[12]->get_id()+decalage);
221     tabnoeud[13]=femmai->get_fem_noeudid(tab[13]->get_id()+decalage);
222     tabnoeud[14]=femmai->get_fem_noeudid(tab[14]->get_id()+decalage);
223     FEM_PENTA15* pen=new FEM_PENTA15(get_id()+decalage,maillage,tabnoeud);
224     femmai->ajouter_fem_element3(pen);
225     return pen;
226     }
227    
228     void FEM_PENTA15::get_voisin_noeud(class FEM_NOEUD* no,TPL_LISTE_ENTITE<FEM_NOEUD*> &voisin)
229     {
230     voisin.vide();
231     if (no==tab[0])
232     {
233     voisin.ajouter(tab[1]);
234     voisin.ajouter(tab[5]);
235     voisin.ajouter(tab[6]);
236     }
237     if (no==tab[1])
238     {
239     voisin.ajouter(tab[0]);
240     voisin.ajouter(tab[2]);
241     }
242     if (no==tab[2])
243     {
244     voisin.ajouter(tab[1]);
245     voisin.ajouter(tab[3]);
246     voisin.ajouter(tab[7]);
247     }
248     if (no==tab[3])
249     {
250     voisin.ajouter(tab[2]);
251     voisin.ajouter(tab[4]);
252     }
253     if (no==tab[4])
254     {
255     voisin.ajouter(tab[3]);
256     voisin.ajouter(tab[5]);
257     voisin.ajouter(tab[8]);
258     }
259     if (no==tab[5])
260     {
261     voisin.ajouter(tab[0]);
262     voisin.ajouter(tab[4]);
263     }
264     if (no==tab[6])
265     {
266     voisin.ajouter(tab[0]);
267     voisin.ajouter(tab[9]);
268     }
269     if (no==tab[7])
270     {
271     voisin.ajouter(tab[2]);
272     voisin.ajouter(tab[11]);
273     }
274     if (no==tab[8])
275     {
276     voisin.ajouter(tab[4]);
277     voisin.ajouter(tab[13]);
278     }
279     if (no==tab[9])
280     {
281     voisin.ajouter(tab[6]);
282     voisin.ajouter(tab[10]);
283     voisin.ajouter(tab[14]);
284     }
285     if (no==tab[10])
286     {
287     voisin.ajouter(tab[9]);
288     voisin.ajouter(tab[11]);
289     }
290     if (no==tab[11])
291     {
292     voisin.ajouter(tab[7]);
293     voisin.ajouter(tab[10]);
294     voisin.ajouter(tab[12]);
295     }
296     if (no==tab[12])
297     {
298     voisin.ajouter(tab[11]);
299     voisin.ajouter(tab[13]);
300     }
301     if (no==tab[13])
302     {
303     voisin.ajouter(tab[8]);
304     voisin.ajouter(tab[12]);
305     voisin.ajouter(tab[14]);
306     }
307     if (no==tab[14])
308     {
309     voisin.ajouter(tab[9]);
310     voisin.ajouter(tab[13]);
311     }
312    
313    
314    
315     }
316    
317     bool FEM_PENTA15::valide_parametre_EF(double* uvw)
318     {
319     if (uvw[0]>=-1e-10)
320     if (uvw[1]>=-1e-10)
321     if (uvw[2]>=-1.-1e-10)
322     if (1.-uvw[0]-uvw[1]<=1.+1e-10)
323     if (uvw[2]<=1.+1e-10)
324     return true;
325     return false;
326     }
327    
328     void FEM_PENTA15::reinit_boite_3D(void)
329     {
330     FEM_TEMPLATE_ELEMENT<15>::reinit_boite_3D();
331     }
332    
333     int FEM_PENTA15::get_type_entite(void)
334     {
335 francois 1150 return MAGIC::TYPE_ENTITE::IDFEM_PENTA15;
336 francois 876 }
337    
338     int FEM_PENTA15::get_dimension(void)
339     {
340     return 3;
341     }
342    
343    
344    
345     int FEM_PENTA15::get_nb_fem_noeud(void)
346     {
347     return FEM_TEMPLATE_ELEMENT<15>::get_nb_fem_noeud();
348     }
349    
350     FEM_NOEUD* FEM_PENTA15::get_fem_noeud(int num)
351     {
352     return FEM_TEMPLATE_ELEMENT<15>::get_fem_noeud(num);
353     }
354    
355     void FEM_PENTA15::change_noeud(int num,FEM_NOEUD* noeud)
356     {
357     FEM_TEMPLATE_ELEMENT<15>::change_noeud(num,noeud);
358     }
359    
360     BOITE_3D& FEM_PENTA15::get_boite_3D(void)
361     {
362     return FEM_TEMPLATE_ELEMENT<15>::get_boite_3D();
363     }
364    
365    
366     void FEM_PENTA15::enregistrer(std::ostream& o,double version)
367     {
368     if (maillage!=NULL)
369     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_PENTA15($"<< 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() << ",$" << tab[8]->get_id() << ",$" << tab[9]->get_id() << ",$" << tab[10]->get_id() << ",$" << tab[11]->get_id() << ",$" << tab[12]->get_id() << ",$" << tab[13]->get_id() << ",$" << tab[14]->get_id() << ");" << std::endl;
370     else o << "%" << get_id() << "=FEM_PENTA15(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() << ",$" << tab[8]->get_id() << ",$" << tab[9]->get_id() << ",$" << tab[10]->get_id() << ",$" << tab[11]->get_id() << ",$" << tab[12]->get_id() << ",$" << tab[13]->get_id() << ",$" << tab[14]->get_id() << ");" << std::endl;
371     else
372     if (get_lien_topologie()!=NULL) o << "%" << get_id() << "=FEM_PENTA15($"<< 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() << ",$" << tab[8]->get_id() << ",$" << tab[9]->get_id() << ",$" << tab[10]->get_id() << ",$" << tab[11]->get_id() << ",$" << tab[12]->get_id() << ",$" << tab[13]->get_id() << ",$" << tab[14]->get_id() << ");" << std::endl;
373     else o << "%" << get_id() << "=FEM_PENTA15(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() << ",$" << tab[8]->get_id() << ",$" << tab[9]->get_id() << ",$" << tab[10]->get_id() << ",$" << tab[11]->get_id() << ",$" << tab[12]->get_id() << ",$" << tab[13]->get_id() << ",$" << tab[14]->get_id() << ");" << std::endl;
374    
375     }
376    
377    
378     int FEM_PENTA15::get_nb_pt_gauss(int degre)
379     {
380     return OT_POINTS_GAUSS::get_nb_point_penta(degre);
381     }
382    
383     void FEM_PENTA15::get_pt_gauss(int degre,int num,double &w,double *uvw)
384     {
385     return OT_POINTS_GAUSS::get_pt_gauss_penta(degre,num,w,uvw);
386     }
387    
388     int FEM_PENTA15::get_degre_gauss(int num)
389     {
390     return OT_POINTS_GAUSS::get_degre_gauss_penta(num);
391     }
392    
393     int FEM_PENTA15::get_nb_fonction_interpolation(void)
394     {
395     return 15;
396     }
397    
398     int FEM_PENTA15::get_degremax_fonction_interpolation(void)
399     {
400     return 3;
401     }
402     double FEM_PENTA15::get_fonction_interpolation(int num,double *uv)
403     {
404     double val;
405     switch (num)
406     {
407     case 1:
408     val=uv[1]*(1.-uv[0])*(2.*uv[1]-2.-uv[0])/2.;
409     break;
410     case 3:
411     val=uv[2]*(1.-uv[0])*(2.*uv[2]-2.-uv[0])/2.;
412     break;
413     case 5:
414     val=(uv[0]-1.)*(1.-uv[1]-uv[2])*(uv[0]+2*uv[1]+2*uv[2])/2.;
415     break;
416     case 10:
417     val=uv[1]*(1.+uv[0])*(2*uv[1]-2.+uv[0])/2.;
418     break;
419     case 12:
420     val=uv[2]*(1.+uv[0])*(2*uv[2]-2.+uv[0])/2.;
421     break;
422     case 14:
423     val=(-uv[0]-1.)*(1.-uv[1]-uv[2])*(-uv[0]+2*uv[1]+2*uv[2])/2.;
424     break;
425     case 2:
426     val=2.*uv[1]*uv[2]*(1.-uv[0]);
427     break;
428     case 4:
429     val=2.*uv[2]*(1.-uv[0])*(1.-uv[1]-uv[2]);
430     break;
431     case 6:
432     val=2.*uv[1]*(1.-uv[0])*(1.-uv[1]-uv[2]);
433     break;
434     case 7:
435     val=uv[1]*(1.-uv[0]*uv[0]);
436     break;
437     case 8:
438     val=uv[2]*(1.-uv[0]*uv[0]);
439     break;
440     case 9:
441     val=(1.-uv[0]*uv[0])*(1.-uv[1]-uv[2]);
442     break;
443     case 11:
444     val=2*uv[1]*uv[2]*(1+uv[0]);
445     break;
446     case 13:
447     val=2*uv[2]*(1-uv[1]-uv[2])*(1.+uv[0]);
448     break;
449     case 15:
450     val=2*uv[1]*(1-uv[1]-uv[2])*(1.+uv[0]);
451     break;
452     }
453     return val;
454     }
455    
456     double FEM_PENTA15::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
457     {
458     double val;
459     switch (num)
460     {
461     case 1:
462     switch (num_variable)
463     {
464     case 1:
465     val=uv[1]*(2.*uv[0]-2.*uv[1]+1.)/2.;
466     break;
467     case 2:
468     val=(uv[0]-1.)*(uv[0]-4.*uv[1]+2.)/2.;
469     break;
470     case 3:
471     val=0.;
472     break;
473     } break;
474     case 3:
475     switch (num_variable)
476     {
477     case 1:
478     val=uv[2]*(2.*uv[0]-2.*uv[2]+1.)/2.;
479     break;
480     case 2:
481     val=0.;
482     break;
483     case 3:
484     val=(uv[0]-1.)*(uv[0]-4.*uv[2]+2.)/2.;
485     break;
486     } break;
487     case 5:
488     switch (num_variable)
489     {
490     case 1:
491     val=(1.-uv[1]-uv[2])*(2.*uv[0]+2.*uv[1]+2.*uv[2]-1.)/2.;
492     break;
493     case 2:
494     val=(1.-uv[0])*(uv[0]+4.*uv[1]+4.*uv[2]-2.)/2.;
495     break;
496     case 3:
497     val=(1.-uv[0])*(uv[0]+4.*uv[1]+4.*uv[2]-2.)/2.;
498     break;
499     } break;
500     case 10:
501     switch (num_variable)
502     {
503     case 1:
504     val=uv[1]*(2.*uv[0]+2.*uv[1]-1.)/2.;
505     break;
506     case 2:
507     val=(uv[0]+1.)*(uv[0]+4.*uv[1]-2.)/2.;
508     break;
509     case 3:
510     val=0.;
511     break;
512     } break;
513     case 12:
514     switch (num_variable)
515     {
516     case 1:
517     val=uv[2]*(2.*uv[0]+2*uv[2]-1.)/2.;
518     break;
519     case 2:
520     val=0;
521     break;
522     case 3:
523     val=(uv[0]+1.)*(uv[0]+4.*uv[2]-2.)/2.;
524     break;
525     } break;
526     case 14:
527     switch (num_variable)
528     {
529     case 1:
530     val=(1.-uv[1]-uv[2])*(2.*uv[0]-2.*uv[1]-2.*uv[2]+1.)/2.;
531     break;
532     case 2:
533     val=-(uv[0]+1.)*(uv[0]-4.*uv[1]-4.*uv[2]+2.)/2.;
534     break;
535     case 3:
536     val=-(uv[0]+1.)*(uv[0]-4.*uv[1]-4.*uv[2]+2.)/2.;
537     break;
538     } break;
539     case 2:
540     switch (num_variable)
541     {
542     case 1:
543     val=-2.*uv[1]*uv[2];
544     break;
545     case 2:
546     val=-2.*uv[2]*(uv[0]-1.);
547     break;
548     case 3:
549     val=-2.*uv[1]*(uv[0]-1.);
550     break;
551     } break;
552     case 4:
553     switch (num_variable)
554     {
555     case 1:
556     val=2.*uv[2]*(uv[1]+uv[2]-1.);
557     break;
558     case 2:
559     val=-2.*uv[2]*(uv[0]-1.);
560     break;
561     case 3:
562     val=-2.*(uv[0]-1.)*(uv[1]+2.*uv[2]+1.);
563     break;
564     } break;
565     case 6:
566     switch (num_variable)
567     {
568     case 1:
569     val=2.*uv[1]*(uv[1]+uv[2]-1.);
570     break;
571     case 2:
572     val=2.*(uv[0]-1.)*(2.*uv[1]+uv[2]-1.);
573     break;
574     case 3:
575     val=2.*uv[1]*(uv[0]-1.);
576     break;
577     } break;
578     case 7:
579     switch (num_variable)
580     {
581     case 1:
582     val=-2.*uv[0]*uv[1];
583     break;
584     case 2:
585     val=1-uv[0]*uv[0];
586     break;
587     case 3:
588     val=0.;
589     break;
590     } break;
591     case 8:
592     switch (num_variable)
593     {
594     case 1:
595     val=-2.*uv[0]*uv[2];
596     break;
597     case 2:
598     val=0.;
599     break;
600     case 3:
601     val=1.-uv[0]*uv[0];
602     break;
603     } break;
604     case 9:
605     switch (num_variable)
606     {
607     case 1:
608     val=-2.*uv[0]*(uv[1]+uv[2]-1.);
609     break;
610     case 2:
611     val=uv[0]*uv[0]-1.;
612     break;
613     case 3:
614     val=uv[0]*uv[0]-1.;
615     break;
616     } break;
617     case 11:
618     switch (num_variable)
619     {
620     case 1:
621     val=-2.*uv[1]*uv[2];
622     break;
623     case 2:
624     val=2.*uv[2]*(1.+uv[0]);
625     break;
626     case 3:
627     val=2.*uv[1]*(1.+uv[0]);
628     break;
629     } break;
630     case 13:
631     switch (num_variable)
632     {
633     case 1:
634     val=-2.*uv[2]*(uv[1]+uv[2]-1.);
635     break;
636     case 2:
637     val=-2.*uv[2]*(uv[0]+1.);
638     break;
639     case 3:
640     val=-2.*(uv[0]+1.)*(uv[1]+2.*uv[2]-1.);
641     break;
642     } break;
643     case 15:
644     switch (num_variable)
645     {
646     case 1:
647     val=-2.*uv[1]*(uv[1]+uv[2]-1.);
648     break;
649     case 2:
650     val=-2*(uv[0]+1.)*(2*uv[1]+uv[2]-1.);
651     break;
652     case 3:
653     val=-2.*uv[1]*(uv[0]+1.);
654     break;
655     } break;
656     }
657     return val;
658     }
659    
660    
661    
662    
663    
664     int FEM_PENTA15::verifie_validite_decoupage_xfem(double *vol)
665     {
666 francois 1075 return 0.;
667 couturad 944 }