Eléments finis tétraédriques de classe (C^1) et de degré deux

Marcel Délèze
Octobre 2008

Variante II
Les 28 fonctions de base de l'élément générique élargi

Elément de pseudo - référence

Fonctions réciproques de (Subscript[α, i]),  i=1,2,3,4, notées invα[i]
Thèse p. 50

invα[1][{x_,y_,z_}]:={x,y,z}

invα[2][{x_,y_,z_}]:={y,z,1-x-y-z}

invα[3][{x_,y_,z_}]:={z,1-x-y-z,x}

invα[4][{x_,y_,z_}]:={1-x-y-z,x,y}

Fonctions réciproques de (Subscript[ϕ, i]),  i=1,2,3,4, notées invϕ[i]
Thèse p. 50

invϕ[1][{νx_,νy_,νz_}]:={νx,νy,νz}

invϕ[2][{νx_,νy_,νz_}]:={νy,νz,-νx-νy-νz}

invϕ[3][{νx_,νy_,νz_}]:={νz,-νx-νy-νz,νx}

invϕ[4][{νx_,νy_,νz_}]:={-νx-νy-νz,νx,νy}

Polynômes de référence
Thèse p. 56, fonctions de base pt(i,j)
Thèse p. 105, FUNCTION PT1; Thèse p. 106, SUBROUTINE UT28, fonctions 1 à 16

pt[1,0][{x_,y_,z_}]:=(1-x-y-z)(1+x+y+z-2((x^2)+(y^2)+(z^2)+x y+y z+z x))

pt[1,1][{x_,y_,z_}]:=x(1-x-y-z)(1-x-(1/2)(y+z))

pt[1,2][{x_,y_,z_}]:=pt[1,1][{y,z,x}]

pt[1,3][{x_,y_,z_}]:=pt[1,1][{z,x,y}]

pt[i_,j_][{x_,y_,z_}]:=pt[1,j][invα[i][{x,y,z}]]

Do[Do[ut[4 i+j-3]=pt[i,j],{j,0,3}],{i,1,4}]

Fonctions rationnelles de pseudo-référence, dépendants des paramètres μ=((Subscript[μ, x]), (Subscript[μ, y]), (Subscript[μ, z]))
Thèse, p. 61-64, fonctions wt(i,j)
Thèse p. 106, SUBROUTINE UT28, fonctions 17 à 28

(Subscript[μ, i])=  = paramètres dénommés "directions normales déplacées"

r0[{x_,y_,z_}]:=((2 x (y^2) (z^2))/((x+y) (x+z)))

r[{x_,y_,z_}]:=((2 (x^2) (y^2) (z^2)(1-x-y-z))/((1-x-y) (1-x-z)(1-y-z)(1-y)(1-z)))

r1[{x_,y_,z_}]:=r[{x,y,z}](-1-((y z (1+x))/((1-y)(1-z))))

r2[{x_,y_,z_}]:=r[{x,y,z}](( z (2 x+y))/((1-z)))

r3[{x_,y_,z_}]:=r[{x,y,z}]((y (2 x+z))/((1-y)))

wt[1,1][{μx_,μy_,μz_},{x_,y_,z_}]:=r0[{x,y,z}]+(μx r1[{x,y,z}]+μy r2[{x,y,z}]+μz r3[{x,y,z}])/(μx+μy+μz)

wt[1,2][{μx_,μy_,μz_},{x_,y_,z_}]:=wt[1,1][{μy,μz,μx},{y,z,x}]

wt[1,3][{μx_,μy_,μz_},{x_,y_,z_}]:=wt[1,1][{μz,μx,μy},{z,x,y}]

wt[i_/; i≥2,j_][{μx_,μy_,μz_},{x_,y_,z_}]:=wt[1,j][{μx,μy,μz},invα[i][{x,y,z}]]

Do[Do[ut[3 i+j+13]=wt[i,j],{j,1,3}],{i,1,4}]

Dérivée directionnelle des polynômes de référence
Thèse p. 56, dérivée des fonctions de base pt(i,j)
Thèse p. 107-109, SUBROUTINE DUT28, fonctions 1 à 16

Direction  t=((Subscript[t, 1]), (Subscript[t, 2]), (Subscript[t, 3]))

dut[k_/; k≤16][{t1_,t2_,t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.D[ut[k][{x,y,z}],{{x,y,z}}]/.{x->xv,y->yv,z->zv}

Dérivée directionnelle des fonctions rationnelles de pseudo-référence, dépendants des paramètres μ=((Subscript[μ, x]), (Subscript[μ, y]), (Subscript[μ, z]))
Thèse, p. 61-64, fonctions wt(i,j)
Thèse p. 107-109, SUBROUTINE DUT28, fonctions 17 à 28

Direction  t=((Subscript[t, 1]), (Subscript[t, 2]), (Subscript[t, 3]))

dut[k_/; k≥17][{t1_,t2_,t3_},{μx_,μy_,μz_},{xv_,yv_,zv_}]:={t1,t2,t3}.D[ut[k][{μx,μy,μz},{x,y,z}],{{x,y,z}}]/.{x->xv,y->yv,z->zv}

Elément générique élargi

Fonction  L, thèse p. 53.
ℓ = partie linéaire de L; invL = fonction réciproque de L

ℓ=(({{x2-x1, x3-x1, x4-x1}, {y2-y1, y3-y1, y4-y1}, {z2-z1, z3-z1, z4-z1}}));

L[{x_,y_,z_}]:=ℓ.{x,y,z}+{x1,y1,z1}

invL[{x_,y_,z_}]:=Inverse[ℓ].{x-x1,y-y1,z-z1}

Directions normales déplacées μ=((Subscript[μ, x]), (Subscript[μ, y]), (Subscript[μ, z]))
Thèse p. 58

(Subscript[v, i])=(ℓ^(-1))((Subscript[m, i])) = direction normale déplacée = vecteur normal (Subscript[m, i]) à la i-ème face transporté sur la i-ème face du tétraèdre de référence.

(Subscript[μ, i])=((Subscript[ϕ, i])^(-1))((Subscript[ν, i])) = direction normale déplacée = vecteur normal (Subscript[m, i])  à la i-ème face transporté sur la 1-ère face du tétraèdre de référence.

a[1]={x1,y1,z1};
a[2]={x2,y2,z2};
a[3]={x3,y3,z3};
a[4]={x4,y4,z4};

m[1]=(a[3]-a[2])\[Cross](a[4]-a[2]);
ν[1]=Inverse[ℓ].m[1];
μ[1]=invϕ[1][ν[1]];
μ[1]=N[μ[1]/(μ[1][[1]]+μ[1][[2]]+μ[1][[3]])];

m[2]=(a[4]-a[3])\[Cross](a[1]-a[3]);
ν[2]=Inverse[ℓ].m[2];
μ[2]=invϕ[2][ν[2]];
μ[2]=N[μ[2]/(μ[2][[1]]+μ[2][[2]]+μ[2][[3]])];

m[3]=(a[1]-a[4])\[Cross](a[2]-a[4]);
ν[3]=Inverse[ℓ].m[3];
μ[3]=invϕ[3][ν[3]];
μ[3]=N[μ[3]/(μ[3][[1]]+μ[3][[2]]+μ[3][[3]])];

m[4]=(a[2]-a[1])\[Cross](a[3]-a[1]);
ν[4]=Inverse[ℓ].m[4];
μ[4]=invϕ[4][ν[4]];
μ[4]=N[μ[4]/(μ[4][[1]]+μ[4][[2]]+μ[4][[3]])];

Base d'interpolation, thèse p. 65
Thèse p. 111, SUBROUTINE U28, fonctions 1 à 28

u[k_/; k≤16][{x_,y_,z_}]:=ut[k][invL[{x,y,z}]]

u[k_/; k≥17][{νx_,νy_,νz_},{x_,y_,z_}]:=ut[k][{νx,νy,νz},invL[{x,y,z}]]

Dérivée directionnelle de la base d'interpolation, thèse p. 65
Thèse p. 112, SUBROUTINE DU28, fonctions 1 à 28

Direction  t=((Subscript[t, 1]), (Subscript[t, 2]), (Subscript[t, 3]))

du[k_/;k≤16][{t1_,t2_,t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.D[u[k][{x,y,z}],{{x,y,z}}]/.{x->xv,y->yv,z->zv}

du[k_/;k≥17][{t1_,t2_,t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.D[u[k][μ[Quotient[k-14,3]],{x,y,z}],{{x,y,z}}]/.{x->xv,y->yv,z->zv}

Tests numériques

Les valeurs numériques calculées ci - dessous ont été comparées avec succès aux valeurs numériques correspondantes calculées avec le programme FORTRAN de la thèse.

Données numériques

nuage={{0.1,0.2,0.3},{0.3,0.1,0.2},{0.2,0.3,0.1}}

Valeurs des fonctions de pseudo-référence

Flatten[Table[Table[Table[ut[4 i+j-3][nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[ut[3 i+j+13][{1/2,1/3,1/6},nuage[[k]]],{j,1,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Dérivée directionnelle des fonctions de pseudo-référence

Flatten[Table[Table[Table[dut[4 i+j-3][{1,1,1},nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[dut[4 i+j-3][{1,-1,1},nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[dut[4 i+j-3][{1,1,-1},nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[dut[3 i+j+13][{0.25,0.35,0.4},{1/2,1/3,1/6},nuage[[k]]],{j,1,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Tétraèdre générique, données numériques

x1=0;y1=0;z1=0;
x2=5;y2=2;z2=0;
x3=0;y3=4;z3=1;
x4=1;y4=0;z4=3;

nuage={{0.1 x1+0.2 x2+0.3 x3+0.4 x4,0.1 y1+0.2 y2+0.3 y3+0.4 y4 ,0.1 z1+0.2 z2+0.3 z3+0.4 z4}}

t={0.25, 0.35,0.4};

Valeurs des fonctions

Flatten[Table[Table[Table[u[4 i+j-3][nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[u[3 i+j+13][μ[i],nuage[[k]]],{j,1,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[du[4 i+j-3][t,nuage[[k]]],{j,0,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm

Flatten[Table[Table[Table[du[3 i+j+13][t,nuage[[k]]],{j,1,3}],{i,1,4}],{k,1,Length[nuage]}],1]//TableForm