MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_maillage_quadratique_outils.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_maillage_quadratique_outils.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:55 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "gestionversion.h"
24 #include "tpl_map_entite.h"
25 #include "ot_mathematique.h"
26 #include "ot_parametres.h"
27 #include "mg_gestionnaire.h"
28 #include "fem_triangle6.h"
29 #include "fem_maillage.h"
30 #include "fem_element2.h"
31 #include "ot_quadrature_gauss.h"
32 #include <math.h>
33 
34 
36 {
37 }
39 {
40 }
41 
43 {
44 }
45 
46 double FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distance_curviligne(double a,double b,double *xyz1,double *xyz,double *xyz2)
47 {
48  double x[7],x1[7],w[10];
49  double L=0;
51 
52  for (int i=1;i<6;i++)
53  {
54  x[i]=0.5*(b-a)*x1[i]+(a+b)/2;
55  double dx=(-3+(4*x[i]))*xyz1[0]+(4-(8*x[i]))*xyz[0]+(-1+(4*x[i]))*xyz2[0];
56  double dy=(-3+(4*x[i]))*xyz1[1]+(4-(8*x[i]))*xyz[1]+(-1+(4*x[i]))*xyz2[1];
57  double dz=(-3+(4*x[i]))*xyz1[2]+(4-(8*x[i]))*xyz[2]+(-1+(4*x[i]))*xyz2[2];
58 
59  double dx2=dx*dx;
60  double dy2=dy*dy;
61  double dz2=dz*dz;
62  double S=sqrt(dx2+dy2+dz2);
63  L += (b-a)*0.5*w[i]*S;
64  }
65  return L;
66 }
67 
68 
70 {
71  double xyz1[3],xyz2[3],xyz3[3];
72  for (int i=0;i<(fem->get_nb_fem_element2());i++)
73  {
74  FEM_ELEMENT2* tri=fem->get_fem_element2(i);
75  FEM_NOEUD* n1=tri->get_fem_noeud(0);
76  FEM_NOEUD* n2=tri->get_fem_noeud(1);
77  FEM_NOEUD* n3=tri->get_fem_noeud(2);
78  FEM_NOEUD* n4=tri->get_fem_noeud(3);
79  FEM_NOEUD* n5=tri->get_fem_noeud(4);
80  FEM_NOEUD* n6=tri->get_fem_noeud(5);
81 
82  double* xyzn1=n1->get_coord();
83  double* xyzn2=n2->get_coord();
84  double* xyzn3=n3->get_coord();
85  double* xyzn4=n4->get_coord();
86  double* xyzn5=n5->get_coord();
87  double* xyzn6=n6->get_coord();
89  double L01= ou.get_distance_curviligne(0,0.5,xyzn1,xyzn2,xyzn3);
90  double L0= ou.get_distance_curviligne(0,1,xyzn1,xyzn2,xyzn3);
91  double L02= ou.get_distance_curviligne(0.5,1,xyzn1,xyzn2,xyzn3);
92 
93  if (fabs((L01-L02)>0.001))
94  {
95  double P=0.5;
96  for (int i=0;i<1000;i++)
97  {
98  double L10= ou.get_distance_curviligne(0,P,xyzn1,xyzn2,xyzn3);
99  double func=L10-(L0*0.5);
100 
101  if (fabs(func)<0.001)
102  {
103  break ;
104  }
105  double dx=(-3+4*P)*xyzn1[0]+(4-8*P)*xyzn2[0]+(-1+4*P)*xyzn3[0];
106  double dy=(-3+4*P)*xyzn1[1]+(4-8*P)*xyzn2[1]+(-1+4*P)*xyzn3[1];
107  double dz=(-3+4*P)*xyzn1[2]+(4-8*P)*xyzn2[2]+(-1+4*P)*xyzn3[2];
108 
109  double dx2=dx*dx;
110  double dy2=dy*dy;
111  double dz2=dz*dz;
112  double S=sqrt(dx2+dy2+dz2);
113  P-=func/S;
114  }
115  xyz1[0]=(1-(3*P)+(2*(P*P)))*xyzn1[0]+4*(P-(P*P))*xyzn2[0]+(-P+2*(P*P))*xyzn3[0];
116  xyz1[1]=(1-(3*P)+(2*(P*P)))*xyzn1[1]+4*(P-(P*P))*xyzn2[1]+(-P+2*(P*P))*xyzn3[1];
117  xyz1[2]=(1-(3*P)+(2*(P*P)))*xyzn1[2]+4*(P-(P*P))*xyzn2[2]+(-P+2*(P*P))*xyzn3[2];
118 
119  n2->change_x(xyz1[0]);
120  n2->change_y(xyz1[1]);
121  n2->change_z(xyz1[2]);
122  }
123 
124  double L00= ou.get_distance_curviligne(0,1,xyzn3,xyzn4,xyzn5);
125  double L11= ou.get_distance_curviligne(0,0.5,xyzn3,xyzn4,xyzn5);
126  double L12= ou.get_distance_curviligne(0.5,1,xyzn3,xyzn4,xyzn5);
127 
128  if (fabs((L11-L12)>0.001))
129  {
130  double P=0.5;
131  for (int i=0;i<1000;i++)
132  {
133  double L110= ou.get_distance_curviligne(0,P,xyzn3,xyzn4,xyzn5);
134  double func=L110-(L00*0.5);
135 
136  if (fabs(func)<0.001)
137  {
138  break ;
139  }
140  double dx=(-3+4*P)*xyzn3[0]+(4-8*P)*xyzn4[0]+(-1+4*P)*xyzn5[0];
141  double dy=(-3+4*P)*xyzn3[1]+(4-8*P)*xyzn4[1]+(-1+4*P)*xyzn5[1];
142  double dz=(-3+4*P)*xyzn3[2]+(4-8*P)*xyzn4[2]+(-1+4*P)*xyzn5[2];
143 
144  double dx2=dx*dx;
145  double dy2=dy*dy;
146  double dz2=dz*dz;
147  double S=sqrt(dx2+dy2+dz2);
148 
149  P-=func/S;
150  }
151  xyz2[0]=(1-(3*P)+(2*(P*P)))*xyzn3[0]+4*(P-(P*P))*xyzn4[0]+(-P+2*(P*P))*xyzn5[0];
152  xyz2[1]=(1-(3*P)+(2*(P*P)))*xyzn3[1]+4*(P-(P*P))*xyzn4[1]+(-P+2*(P*P))*xyzn5[1];
153  xyz2[2]=(1-(3*P)+(2*(P*P)))*xyzn3[2]+4*(P-(P*P))*xyzn4[2]+(-P+2*(P*P))*xyzn5[2];
154 
155  n4->change_x(xyz2[0]);
156  n4->change_y(xyz2[1]);
157  n4->change_z(xyz2[2]);
158  }
159 
160  double L000= ou.get_distance_curviligne(0,1,xyzn5,xyzn6,xyzn1);
161  double L21= ou.get_distance_curviligne(0,0.5,xyzn5,xyzn6,xyzn1);
162  double L22= ou.get_distance_curviligne(0.5,1,xyzn5,xyzn6,xyzn1);
163 
164  if (fabs((L21-L22)>0.001))
165  {
166  double P=0.5;
167  for (int i=0;i<1000;i++)
168  {
169  double L220= ou.get_distance_curviligne(0,P,xyzn5,xyzn6,xyzn1);
170  double func=L220-(L000*0.5);
171 
172  if (fabs(func)<0.001)
173  {
174  break ;
175  }
176  double dx=(-3+4*P)*xyzn5[0]+(4-8*P)*xyzn6[0]+(-1+4*P)*xyzn1[0];
177  double dy=(-3+4*P)*xyzn5[1]+(4-8*P)*xyzn6[1]+(-1+4*P)*xyzn1[1];
178  double dz=(-3+4*P)*xyzn5[2]+(4-8*P)*xyzn6[2]+(-1+4*P)*xyzn1[2];
179 
180  double dx2=dx*dx;
181  double dy2=dy*dy;
182  double dz2=dz*dz;
183 
184  double S=sqrt(dx2+dy2+dz2);
185 
186  P-=func/S;
187  }
188 
189  xyz3[0]=(1-(3*P)+(2*(P*P)))*xyzn5[0]+4*(P-(P*P))*xyzn6[0]+(-P+2*(P*P))*xyzn1[0];
190  xyz3[1]=(1-(3*P)+(2*(P*P)))*xyzn5[1]+4*(P-(P*P))*xyzn6[1]+(-P+2*(P*P))*xyzn1[1];
191  xyz3[2]=(1-(3*P)+(2*(P*P)))*xyzn5[2]+4*(P-(P*P))*xyzn6[2]+(-P+2*(P*P))*xyzn1[2];
192 
193  n6->change_x(xyz3[0]);
194  n6->change_y(xyz3[1]);
195  n6->change_z(xyz3[2]);
196 
197  }
198  }
199 }
200 
202 {
203 
204  double v[12], uv[2];
205  v[0]=v[1]=v[3]=v[5]=v[8]=v[10]=0;
206  v[2]=v[6]=v[7]=v[11]=0.5;
207  v[4]=v[9]=1;
208 
209  for(int j=0;j<12;j=j+2)
210  {
211  uv[0]= v[j];
212  uv[1]= v[j+1];
213 
214  double matrice[9];
215  jac[j/2]=tri->get_jacobien(matrice,uv);
216  }
217 
218 }
220 {
221  double uv[3];
222  for(int j=0;j<20;j=j+1)
223  {
224  if (j==0) {uv[0]=0.;uv[1]=0.;uv[2]=0.;}
225  if (j==1) {uv[0]=1.;uv[1]=0.;uv[2]=0.;}
226  if (j==2) {uv[0]=0.;uv[1]=1.;uv[2]=0.;}
227  if (j==3) {uv[0]=0.;uv[1]=0.;uv[2]=1.;}
228  if (j==4) {uv[0]=1./3.;uv[1]=0.;uv[2]=0.;}
229  if (j==5) {uv[0]=2./3.;uv[1]=0.;uv[2]=0.;}
230  if (j==6) {uv[0]=2./3.;uv[1]=1./3.;uv[2]=0.;}
231  if (j==7) {uv[0]=1./3.;uv[1]=2./3.;uv[2]=0.;}
232  if (j==8) {uv[0]=0.;uv[1]=2./3.;uv[2]=0.;}
233  if (j==9) {uv[0]=0.;uv[1]=1./3.;uv[2]=0.;}
234  if (j==10) {uv[0]=0.;uv[1]=0.;uv[2]=1./3.;}
235  if (j==11) {uv[0]=0.;uv[1]=0.;uv[2]=2./3.;}
236  if (j==12) {uv[0]=2./3.;uv[1]=0.;uv[2]=1./3.;}
237  if (j==13) {uv[0]=1./3.;uv[1]=0.;uv[2]=2./3.;}
238  if (j==14) {uv[0]=0.;uv[1]=2./3.;uv[2]=1./3.;}
239  if (j==15) {uv[0]=0.;uv[1]=1./3.;uv[2]=2./3.;}
240  if (j==16) {uv[0]=1./3;uv[1]=1./3.;uv[2]=0.;}
241  if (j==17) {uv[0]=1./3.;uv[1]=0.;uv[2]=1./3.;}
242  if (j==18) {uv[0]=0.;uv[1]=1./3.;uv[2]=1./3.;}
243  if (j==19) {uv[0]=1./3.;uv[1]=1./3.;uv[2]=1./3.;}
244  double matrice[9];
245  jac[j]=tri->get_jacobien(matrice,uv);
246  }
247 
248 }
250 {
251  double jac[6];
253  ou.get_jacobien_noeud(tri,jac);
254 
255  bez[0]=jac[0];
256  bez[1]=-0.5*jac[0]-0.5*jac[2]+2*jac[1];
257  bez[2]=jac[2];
258  bez[3]=-0.5*jac[2]-0.5*jac[4]+2*jac[3];
259  bez[4]=jac[4];
260  bez[5]=-0.5*jac[4]-0.5*jac[0]+2*jac[5];
261 
262 }
263 
265 {
266  double jac[20];
268  ou.get_jacobien_noeud(tri,jac);
269 
270  bez[0]=jac[0];
271  bez[1]=jac[1];
272  bez[2]=jac[2];
273  bez[3]=jac[3];
274  bez[4]=(-5*jac[0]+18*jac[4]-9*jac[5]+2*jac[1])/6.;
275  bez[5]=(2*jac[0]-9*jac[4]+18*jac[5]-5*jac[1])/6.;
276  bez[6]=(-5*jac[1]+18*jac[6]-9*jac[7]+2*jac[2])/6.;
277  bez[7]=(2*jac[1]-9*jac[6]+18*jac[7]-5*jac[2])/6.;
278  bez[8]=(-5*jac[2]+18*jac[8]-9*jac[9]+2*jac[0])/6.;
279  bez[9]=(2*jac[2]-9*jac[8]+18*jac[9]-5*jac[0])/6.;
280  bez[10]=(-5*jac[0]+18*jac[10]-9*jac[11]+2*jac[3])/6.;
281  bez[11]=(2*jac[0]-9*jac[10]+18*jac[11]-5*jac[3])/6.;
282  bez[12]=(-5*jac[1]+18*jac[12]-9*jac[13]+2*jac[3])/6.;
283  bez[13]=(2*jac[1]-9*jac[12]+18*jac[13]-5*jac[3])/6.;
284  bez[14]=(-5*jac[2]+18*jac[14]-9*jac[15]+2*jac[3])/6.;
285  bez[15]=(2*jac[2]-9*jac[14]+18*jac[15]-5*jac[3])/6.;
286  bez[16]=9./2.*(jac[16]+2./27.*(jac[0]+jac[1]+jac[2])-1./6.*(jac[4]+jac[5]+jac[6]+jac[7]+jac[8]+jac[9]));
287  bez[17]=9./2.*(jac[17]+2./27.*(jac[0]+jac[1]+jac[3])-1./6.*(jac[4]+jac[5]+jac[10]+jac[11]+jac[12]+jac[13]));
288  bez[18]=9./2.*(jac[18]+2./27.*(jac[0]+jac[2]+jac[3])-1./6.*(jac[8]+jac[9]+jac[10]+jac[11]+jac[14]+jac[15]));
289  bez[19]=9./2.*(jac[19]+2./27.*(jac[1]+jac[2]+jac[3])-1./6.*(jac[6]+jac[7]+jac[12]+jac[13]+jac[14]+jac[15]));
290 }
291 
293 {
294  double bez[6];
296  ou.get_Bezier_coeff(tri,bez);
297 
298 
299  bez1[0]=bez[0];
300  bez1[1]=0.5*bez[0]+0.5*bez[1];
301  bez1[2]=0.25*bez[0]+0.25*bez[2]+0.5*bez[1];
302  bez1[3]=0.25*bez[0]+0.25*bez[1]+0.25*bez[3]+0.25*bez[5];
303  bez1[4]=0.25*bez[0]+0.25*bez[4]+0.5*bez[5];
304  bez1[5]=0.5*bez[0]+0.5*bez[5];
305 
306 
307  bez1[6]=0.25*bez[0]+0.25*bez[2]+0.5*bez[1];
308  bez1[7]=0.5*bez[1]+0.5*bez[2];
309  bez1[8]=bez[2];
310  bez1[9]=0.5*bez[2]+0.5*bez[3];
311  bez1[10]=0.25*bez[2]+0.25*bez[4]+0.5*bez[3];
312  bez1[11]=0.25*bez[1]+0.25*bez[2]+0.25*bez[3]+0.25*bez[5];
313 
314 
315  bez1[12]=0.25*bez[0]+0.25*bez[4]+0.5*bez[5];
316  bez1[13]=0.25*bez[1]+0.25*bez[3]+0.25*bez[4]+0.25*bez[5];
317  bez1[14]=0.25*bez[2]+0.25*bez[4]+0.5*bez[3];
318  bez1[15]=0.5*bez[3]+0.5*bez[4];
319  bez1[16]=bez[4];
320  bez1[17]=0.5*bez[4]+0.5*bez[5];
321 
322  bez1[18]=0.25*bez[2]+0.25*bez[4]+0.5*bez[3];
323  bez1[19]=0.25*bez[1]+0.25*bez[3]+0.25*bez[4]+0.25*bez[5];
324  bez1[20]=0.25*bez[0]+0.25*bez[4]+0.5*bez[5];
325  bez1[21]=0.25*bez[0]+0.25*bez[1]+0.25*bez[3]+0.25*bez[5];
326  bez1[22]=0.25*bez[0]+0.25*bez[2]+0.5*bez[1];
327  bez1[23]=0.25*bez[1]+0.25*bez[2]+0.25*bez[3]+0.25*bez[5];
328 
329 }
330 
332 {
333  double distorsion=1.0;
334  if (tri->get_nb_fem_noeud()==6)
335  {
336  double bez[24];
338  ou.get_Bezier_coeff_decoup(tri,bez);
339  double jmin=bez[0];
340  for (int i=1;i<24;i++)
341  {
342  if (bez[i]<jmin)
343  jmin=bez[i];
344  }
345  double jmax=bez[0];
346  for (int i=1;i<24;i++)
347  {
348  if (bez[i]>jmax)
349  jmax=bez[i];
350  }
351  distorsion=jmin/jmax ;
352  }
353  return distorsion;
354 }
355 
356 /*double FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distortion_moy(FEM_MAILLAGE* fem)
357 {
358  double sdist=0;
359  for (int i=0;i<(fem->get_nb_fem_element2());i++)
360  {
361  FEM_ELEMENT2* tri=fem->get_fem_element2(i);
362  FEM_MAILLAGE_QUADRATIQUE_OUTILS ou;
363  double disto=ou.get_distorsion(tri);
364  sdist+=disto;
365  }
366  double dist_moy=sdist/(fem->get_nb_fem_element2());
367  return dist_moy;
368 }
369 double FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distortion_min(FEM_MAILLAGE* fem)
370 {
371  std::vector<double> dist;
372  for (int i=0;i<(fem->get_nb_fem_element2());i++)
373  {
374  FEM_ELEMENT2* tri=fem->get_fem_element2(i);
375  FEM_MAILLAGE_QUADRATIQUE_OUTILS ou;
376  double disto=ou.get_distorsion(tri);
377  dist.push_back(disto);
378  }
379  double dist_min=dist[0];
380  for (int i=1;i<dist.size();i++)
381  {
382  if (dist[i]<dist_min) dist_min=dist[i];
383  }
384  return dist_min;
385 }
386 
387 int FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_nombre_elements_invalides(FEM_MAILLAGE* fem)
388 {
389  int num=0;
390  for (int i=0;i<(fem->get_nb_fem_element2());i++)
391  {
392  FEM_ELEMENT2* tri=fem->get_fem_element2(i);
393  double bez1[24];
394  FEM_MAILLAGE_QUADRATIQUE_OUTILS ou;
395  ou.get_Bezier_coeff_decoup(tri,bez1);
396  for (int i=0;i<24;i++)
397  {
398  if (bez1[i]<0)
399  {
400  num=num+1;
401  break;
402  }
403  }
404  }
405  return num;
406 }
407 */
409 {
410  double distorsion=1.0;
411  if (tri->get_nb_fem_noeud()==6)
412  {
413  double bez1[6];
414  get_Bezier_coeff(tri,bez1);
415 
416  double jmin=bez1[0];
417  for (int i=1;i<6;i++)
418  {
419  if (bez1[i]<jmin)
420  jmin=bez1[i];
421  }
422  double jmax=bez1[0];
423  for (int i=1;i<6;i++)
424  {
425  if (bez1[i]>jmax)
426  jmax=bez1[i];
427  }
428  distorsion=jmin/jmax ;
429  }
430  return distorsion;
431 }
432 
434 {
435  double distorsion=1.0;
436  if (tri->get_nb_fem_noeud()==10)
437  {
438  double bez1[20];
439 
440  get_Bezier_coeff(tri,bez1);
441 
442  double jmin=bez1[0];
443  for (int i=1;i<20;i++)
444  {
445  if (bez1[i]<jmin)
446  jmin=bez1[i];
447  }
448  double jmax=bez1[0];
449  for (int i=1;i<20;i++)
450  {
451  if (bez1[i]>jmax)
452  jmax=bez1[i];
453  }
454  distorsion=jmin/jmax ;
455  }
456  return distorsion;
457 }
458 
460 {
461  double jmin=1.0;
462  if (tri->get_nb_fem_noeud()==6)
463  {
464  double bez[6];
466  ou.get_Bezier_coeff(tri,bez);
467  jmin=bez[0];
468  for (int i=1;i<6;i++)
469  {
470  if (bez[i]<jmin)
471  jmin=bez[i];
472  }
473  }
474  return jmin ;
475 }
477 {
478  double jmin=1.0;
479  if (tri->get_nb_fem_noeud()==10)
480  {
481  double bez[20];
483  ou.get_Bezier_coeff(tri,bez);
484  jmin=bez[0];
485  for (int i=1;i<20;i++)
486  {
487  if (bez[i]<jmin)
488  jmin=bez[i];
489  }
490  }
491  return jmin ;
492 }
493 
495 {
496  double jmax=1.0;
497  if (tri->get_nb_fem_noeud()==6)
498  {
499  double bez[6];
501  ou.get_Bezier_coeff(tri,bez);
502 
503  jmax=bez[0];
504  for (int i=1;i<6;i++)
505  {
506  if (bez[i]>jmax)
507  jmax=bez[i];
508  }
509  }
510  return jmax ;
511 }
513 {
514  double jmax=1.0;
515  if (tri->get_nb_fem_noeud()==10)
516  {
517  double bez[20];
519  ou.get_Bezier_coeff(tri,bez);
520 
521  jmax=bez[0];
522  for (int i=1;i<20;i++)
523  {
524  if (bez[i]>jmax)
525  jmax=bez[i];
526  }
527  }
528  return jmax ;
529 }
530 void FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_normale(class FEM_ELEMENT2* tri2,double u,double v,double* n)
531 {
532  double xyzn1[3],xyzn2[3],xyzn3[3],xyzn4[3],xyzn5[3],xyzn6[3];
533 
534  FEM_NOEUD* n1=tri2->get_fem_noeud(0);
535  FEM_NOEUD* n2=tri2->get_fem_noeud(1);
536  FEM_NOEUD* n3=tri2->get_fem_noeud(2);
537  FEM_NOEUD* n4=tri2->get_fem_noeud(3);
538  FEM_NOEUD* n5=tri2->get_fem_noeud(4);
539  FEM_NOEUD* n6=tri2->get_fem_noeud(5);
540 
541  xyzn1[0]=n1->get_x();
542  xyzn1[1]=n1->get_y();
543  xyzn1[2]=n1->get_z();
544 
545  xyzn2[0]=n2->get_x();
546  xyzn2[1]=n2->get_y();
547  xyzn2[2]=n2->get_z();
548 
549  xyzn3[0]=n3->get_x();
550  xyzn3[1]=n3->get_y();
551  xyzn3[2]=n3->get_z();
552 
553  xyzn4[0]=n4->get_x();
554  xyzn4[1]=n4->get_y();
555  xyzn4[2]=n4->get_z();
556 
557  xyzn5[0]=n5->get_x();
558  xyzn5[1]=n5->get_y();
559  xyzn5[2]=n5->get_z();
560 
561  xyzn6[0]=n6->get_x();
562  xyzn6[1]=n6->get_y();
563  xyzn6[2]=n6->get_z();
564 
565  double du[3],dv[3];
566 
567  du[0]=(-3+(4*v)+(4*u))*xyzn1[0]+(4-(8*u)-(4*v))*xyzn2[0]+(-1+(4*u))*xyzn3[0]+4*v*xyzn4[0]-4*v*xyzn6[0];
568  du[1]=(-3+(4*v)+(4*u))*xyzn1[1]+(4-(8*u)-(4*v))*xyzn2[1]+(-1+(4*u))*xyzn3[1]+4*v*xyzn4[1]-4*v*xyzn6[1];
569  du[2]=(-3+(4*v)+(4*u))*xyzn1[2]+(4-(8*u)-(4*v))*xyzn2[2]+(-1+(4*u))*xyzn3[2]+4*v*xyzn4[2]-4*v*xyzn6[2];
570 
571  dv[0]=(-3+(4*v)+(4*u))*xyzn1[0]+(4-(8*v)-(4*u))*xyzn6[0]+(-1+(4*v))*xyzn5[0]+4*u*xyzn4[0]-4*u*xyzn2[0];
572  dv[1]=(-3+(4*v)+(4*u))*xyzn1[1]+(4-(8*v)-(4*u))*xyzn6[1]+(-1+(4*v))*xyzn5[1]+4*u*xyzn4[1]-4*u*xyzn2[1];
573  dv[2]=(-3+(4*v)+(4*u))*xyzn1[2]+(4-(8*v)-(4*u))*xyzn6[2]+(-1+(4*v))*xyzn5[2]+4*u*xyzn4[2]-4*u*xyzn2[2];
574 
575  OT_VECTEUR_3D N1(dv);
576  OT_VECTEUR_3D N2(du);
577  OT_VECTEUR_3D N=N1&N2;
578  N.norme();
579  n[0]=N[0];
580  n[1]=N[1];
581  n[2]=N[2];
582 }
583 
585 {
586  std::vector<double> vec;
587  double xyzn1[3],xyzn3[3],xyzn5[3];
588 
589  FEM_NOEUD* n1=tri->get_fem_noeud(0);
590  FEM_NOEUD* n3=tri->get_fem_noeud(2);
591  FEM_NOEUD* n5=tri->get_fem_noeud(4);
592 
593  xyzn1[0]=n1->get_x();
594  xyzn1[1]=n1->get_y();
595  xyzn1[2]=n1->get_z();
596 
597  xyzn3[0]=n3->get_x();
598  xyzn3[1]=n3->get_y();
599  xyzn3[2]=n3->get_z();
600 
601  xyzn5[0]=n5->get_x();
602  xyzn5[1]=n5->get_y();
603  xyzn5[2]=n5->get_z();
604 
605  OT_VECTEUR_3D vec1(xyzn1,xyzn3);
606  OT_VECTEUR_3D vec2(xyzn1,xyzn5);
607  OT_VECTEUR_3D vec3(xyzn3,xyzn5);
608 
609  double l1=vec1.get_longueur();
610  vec.push_back(l1);
611  double l2=vec2.get_longueur();
612  vec.push_back(l2);
613  double l3=vec3.get_longueur();
614  vec.push_back(l3);
615  double min=vec[0];
616  for (int i=1;i<3;i++)
617  {
618  if (vec[i]<min)
619  min=vec[i];
620  }
621 
622  double max=vec[0];
623  for (int i=1;i<3;i++)
624  {
625  if (vec[i]>max)
626  max=vec[i];
627  }
628  double ratio=min/max ;
629  return ratio;
630 }
631 
633 {
634  FEM_NOEUD* n1=tri->get_fem_noeud(0);
635  FEM_NOEUD* n2=tri->get_fem_noeud(1);
636  FEM_NOEUD* n3=tri->get_fem_noeud(2);
637 
638  std::vector<double> dist;
639 
640  double xyzn1[3],xyzn2[3],xyzn3[3],xyzn13[3];
641 
642  xyzn1[0]=n1->get_x();
643  xyzn1[1]=n1->get_y();
644  xyzn1[2]=n1->get_z();
645 
646  xyzn2[0]=n2->get_x();
647  xyzn2[1]=n2->get_y();
648  xyzn2[2]=n2->get_z();
649 
650  xyzn3[0]=n3->get_x();
651  xyzn3[1]=n3->get_y();
652  xyzn3[2]=n3->get_z();
653 
654  xyzn13[0]=(xyzn1[0]+xyzn3[0])*0.5;
655  xyzn13[1]=(xyzn1[1]+xyzn3[1])*0.5;
656  xyzn13[2]=(xyzn1[2]+xyzn3[2])*0.5;
657 
658  OT_VECTEUR_3D vec1(xyzn13,xyzn2);
659  double l1=vec1.get_longueur();
660  return l1;
661 }
663 {
664  FEM_NOEUD* n3=tri->get_fem_noeud(2);
665  FEM_NOEUD* n4=tri->get_fem_noeud(3);
666  FEM_NOEUD* n5=tri->get_fem_noeud(4);
667 
668  double xyzn3[3],xyzn4[3],xyzn5[3],xyzn35[3];
669 
670  xyzn3[0]=n3->get_x();
671  xyzn3[1]=n3->get_y();
672  xyzn3[2]=n3->get_z();
673 
674  xyzn4[0]=n4->get_x();
675  xyzn4[1]=n4->get_y();
676  xyzn4[2]=n4->get_z();
677 
678  xyzn5[0]=n5->get_x();
679  xyzn5[1]=n5->get_y();
680  xyzn5[2]=n5->get_z();
681 
682  xyzn35[0]=(xyzn5[0]+xyzn3[0])*0.5;
683  xyzn35[1]=(xyzn5[1]+xyzn3[1])*0.5;
684  xyzn35[2]=(xyzn5[2]+xyzn3[2])*0.5;
685 
686  OT_VECTEUR_3D vec2(xyzn35,xyzn4);
687  double l2=vec2.get_longueur();
688  return l2;
689 }
690 
692 {
693  FEM_NOEUD* n1=tri->get_fem_noeud(0);
694  FEM_NOEUD* n5=tri->get_fem_noeud(4);
695  FEM_NOEUD* n6=tri->get_fem_noeud(5);
696 
697  double xyzn1[3],xyzn5[3],xyzn6[3],xyzn51[3];
698 
699  xyzn1[0]=n1->get_x();
700  xyzn1[1]=n1->get_y();
701  xyzn1[2]=n1->get_z();
702 
703  xyzn5[0]=n5->get_x();
704  xyzn5[1]=n5->get_y();
705  xyzn5[2]=n5->get_z();
706 
707  xyzn6[0]=n6->get_x();
708  xyzn6[1]=n6->get_y();
709  xyzn6[2]=n6->get_z();
710 
711  xyzn51[0]=(xyzn5[0]+xyzn1[0])*0.5;
712  xyzn51[1]=(xyzn5[1]+xyzn1[1])*0.5;
713  xyzn51[2]=(xyzn5[2]+xyzn1[2])*0.5;
714 
715  OT_VECTEUR_3D vec3(xyzn51,xyzn6);
716  double l3=vec3.get_longueur();
717  return l3;
718 }
719 
720 
FEM_NOEUD::change_y
virtual void change_y(double yy)
Definition: fem_noeud.cpp:272
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distance_curviligne
double get_distance_curviligne(double a, double b, double *xyz1, double *xyz, double *xyz2)
Definition: fem_maillage_quadratique_outils.cpp:46
gestionversion.h
fem_maillage_quadratique_outils.h
mg_gestionnaire.h
FEM_MAILLAGE::get_fem_element2
FEM_ELEMENT2 * get_fem_element2(unsigned int num)
Definition: fem_maillage.cpp:501
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_dist_n6
double get_dist_n6(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:691
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_jacobien_noeud
void get_jacobien_noeud(class FEM_ELEMENT2 *tri, double *jac)
Definition: fem_maillage_quadratique_outils.cpp:201
fem_maillage.h
a
#define a(i, j)
FEM_NOEUD::change_x
virtual void change_x(double xx)
Definition: fem_noeud.cpp:265
FEM_ELEMENT3
Definition: fem_element3.h:34
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_Bezier_coeff_decoup
void get_Bezier_coeff_decoup(class FEM_ELEMENT2 *tri, double *bez1)
Definition: fem_maillage_quadratique_outils.cpp:292
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_jmax
double get_jmax(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:494
FEM_NOEUD::change_z
virtual void change_z(double zz)
Definition: fem_noeud.cpp:278
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_normale
void get_normale(class FEM_ELEMENT2 *tri2, double u, double v, double *n)
Definition: fem_maillage_quadratique_outils.cpp:530
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_jmin
double get_jmin(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:459
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
FEM_ELEMENT2::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_ratio
double get_ratio(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:584
FEM_MAILLAGE
Definition: fem_maillage.h:66
ot_parametres.h
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_dist_n2
double get_dist_n2(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:632
FEM_MAILLAGE::get_nb_fem_element2
unsigned int get_nb_fem_element2(void)
Definition: fem_maillage.cpp:494
tpl_map_entite.h
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distorsion
double get_distorsion(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:331
FEM_ELEMENT3::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
FEM_ELEMENT3::get_jacobien
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
Definition: fem_element3.cpp:144
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
FEM_MAILLAGE_QUADRATIQUE_OUTILS
Definition: fem_maillage_quadratique_outils.h:36
FEM_MAILLAGE_QUADRATIQUE_OUTILS::FEM_MAILLAGE_QUADRATIQUE_OUTILS
FEM_MAILLAGE_QUADRATIQUE_OUTILS()
Definition: fem_maillage_quadratique_outils.cpp:35
ot_mathematique.h
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
FEM_NOEUD
Definition: fem_noeud.h:35
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
FEM_MAILLAGE_QUADRATIQUE_OUTILS::recentrage
void recentrage(class FEM_MAILLAGE *fem)
Definition: fem_maillage_quadratique_outils.cpp:69
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_Bezier_coeff
void get_Bezier_coeff(class FEM_ELEMENT2 *tri, double *bez)
Definition: fem_maillage_quadratique_outils.cpp:249
fem_triangle6.h
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
sqrt
double2 sqrt(double2 &val)
Definition: ot_doubleprecision.cpp:345
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_distorsion2
double get_distorsion2(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:408
fem_element2.h
FEM_ELEMENT2::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
OT_VECTEUR_3D::get_longueur
virtual double get_longueur(void) const
Definition: ot_mathematique.cpp:483
FEM_MAILLAGE_QUADRATIQUE_OUTILS::get_dist_n4
double get_dist_n4(class FEM_ELEMENT2 *tri)
Definition: fem_maillage_quadratique_outils.cpp:662
FEM_ELEMENT2::get_jacobien
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
Definition: fem_element2.cpp:141
ot_quadrature_gauss.h
OT_QUADRATURE_GAUSS::gauss_legendre_points
static void gauss_legendre_points(double x1, double x2, double x[], double w[], int n)
Definition: ot_quadrature_gauss.cpp:32
P
#define P(i, j)
FEM_MAILLAGE_QUADRATIQUE_OUTILS::~FEM_MAILLAGE_QUADRATIQUE_OUTILS
~FEM_MAILLAGE_QUADRATIQUE_OUTILS()
Definition: fem_maillage_quadratique_outils.cpp:42