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

Marcel Délèze
Novembre 2008

Variante I-C
Les 44 fonctions de base de l'élément générique élargi

Elément de 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-57, fonctions pt(i,j)
Thèse, p. 131- 134, subroutine UT44(16,...), 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}]

Polynômes par morceaux, de référence
Thèse p. 75-76, fonctions w(i,j)
Thèse, p. 131- 134, subroutine UT44(28,...), fonctions 17 à 28

wt[1,1][{x_,y_,z_}/; x≥y&&z≥y]:=(y^2)(z-(1/3)y)

wt[1,1][{x_,y_,z_}/; x≥z&&y≥z]:=(z^2)(y-(1/3)z)

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

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

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

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

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

Thèse p. 77 à  79, fonctions de référence numéros 29 à 32
Thèse, p. 131- 134, subroutine UT44(32,...), fonctions 29 à 32

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

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

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

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

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

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

st10[{x_,y_,z_}]:=a3[{x,y,z}]+b3[{x,y,z}]+c1[{x,y,z}]+c2[{x,y,z}]

rt[1,0][{x_,y_,z_}/; y≥x&&z≥x]:=st10[{x,y,z}]

rt[1,0][{x_,y_,z_}/; x≥y&&z≥y]:=st10[{y,x,z}]

rt[1,0][{x_,y_,z_}/; x≥z&&y≥z]:=st10[{z,y,x}]

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

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

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

ut[29]=rt[1,0];
ut[30]=rt[2,0];
ut[31]=rt[3,0];
ut[32]=rt[4,0];

Thèse p. 80-81,  fonctions de référence 33 à 44
Thèse, p. 131- 134, subroutine UT44(44,...), fonctions 33 à 44

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

β[{x_,y_,z_}]:=(1/((1-x-z)(1-3x)))(4x-2z+x(z-x)((1/(1-x-z))-(1/(1-3x))))

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

st13[{x_,y_,z_}/;x==y==z]:=0

st13[{x_,y_,z_}]:=a4[{x,y,z}]+b4[{x,y,z}]

rt[1,3][{x_,y_,z_}/; y≥x&&z≥x]:=st13[{x,y,z}]

rt[1,3][{x_,y_,z_}/; x≥y&&z≥y]:=st13[{y,x,z}]

rt[1,3][{x_,y_,z_}/; x≥z&&y≥z]:=0

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

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

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

Do[Do[ut[3 i+j+29]=rt[i,j],{j,1,3}],{i,1,4}]

Dérivées des fonctions de référence, bloc 1, fonctions 1 à 16, dans la direction t=((Subscript[t, 1]), (Subscript[t, 2]), (Subscript[t, 3]))

dut[m_/;m≤16][{t1_,t2_,t3_},{x_,y_,z_}]:={t1,t2,t3}.(D[ut[m][{xv,yv,zv}],{{xv,yv,zv}}]/.{xv->x,yv->y,zv->z})

Dérivées des fonctions de référence, bloc 2, fonctions 17 à 28

dwt[1,1][{t1_,t2_,t3_},{xv_,yv_,zv_}/; xv≥yv&&zv≥yv]:={t1,t2,t3}.(D[(y^2)(z-(1/3)y),{{x,y,z}}]/.{x->xv,y->yv,z->zv})

dwt[1,1][{t1_,t2_,t3_},{xv_,yv_,zv_}/; xv≥zv&&yv≥zv]:={t1,t2,t3}.(D[(z^2)(y-(1/3)z),{{x,y,z}}]/.{x->xv,y->yv,z->zv})

dwt[1,1][{t1_,t2_,t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.(D[x((2/3)(x^2)-x y-x z+2 y z),{{x,y,z}}]/.{x->xv,y->yv,z->zv})

dwt[1,2][{t1_,t2_,t3_},{x_,y_,z_}]:=dwt[1,1][{t2,t3,t1},{y,z,x}]

dwt[1,3][{t1_,t2_,t3_},{x_,y_,z_}]:=dwt[1,1][{t3,t1,t2},{z,x,y}]

dwt[i_/; i≥2,j_][{t1_,t2_,t3_},{x_,y_,z_}]:=dwt[1,j][invϕ[i][{t1,t2,t3}],invα[i][{x,y,z}]]

Do[Do[dut[3 i+j+13]=dwt[i,j],{j,1,3}],{i,1,4}]

Dérivées des fonctions de référence, bloc 3, fonctions 29 à 32

dst10[{t1_,t2_,t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.(D[a3[{x,y,z}]+b3[{x,y,z}]+c1[{x,y,z}]+c2[{x,y,z}],{{x,y,z}}]/.{x->xv,y->yv,z->zv});

Limit[Limit[dst10[{t1,t2,t3},{x,y,z}],y->x], z->x]

dst10[{t1_,t2_,t3_},{x_,y_,z_}/;x==y==z]:=(t1+t2+t3)x (3(1-x-y-z)-1)

drt[1,0][{t1_,t2_,t3_},{x_,y_,z_}/; y≥x&&z≥x]:=dst10[{t1,t2,t3},{x,y,z}]

drt[1,0][{t1_,t2_, t3_},{x_,y_,z_}/; x≥y&&z≥y]:=dst10[{t2,t1,t3},{y,x,z}]

drt[1,0][{t1_,t2_,t3_},{x_,y_,z_}/; x≥z&&y≥z]:=dst10[{t3,t2,t1},{z,y,x}]

drt[2,0][{t1_,t2_,t3_},{x_,y_,z_}]:=drt[1,0][invϕ[2][{t1,t2,t3}],invα[2][{x,y,z}]]

drt[3,0][{t1_,t2_,t3_},{x_,y_,z_}]:=drt[1,0][invϕ[3][{t1,t2,t3}],invα[3][{x,y,z}]]

drt[4,0][{t1_,t2_,t3_},{x_,y_,z_}]:=drt[1,0][invϕ[4][{t1,t2,t3}],invα[4][{x,y,z}]]

dut[29]=drt[1,0];
dut[30]=drt[2,0];
dut[31]=drt[3,0];
dut[32]=drt[4,0];

Dérivées des fonctions de référence, bloc 4, fonctions 33 à 44

dst13[{t1_, t2_, t3_},{xv_,yv_,zv_}]:={t1,t2,t3}.D[a4[{x,y,z}]+b4[{x,y,z}],{{x,y,z}}]/.{x->xv, y->yv, z->zv}

Limit[Limit[dst13[{t1,t2,t3},{x,y,z}],y->x],z->x]

dst13[{t1_, t2_, t3_},{x_,y_,z_}/;x==y==z]:=0

drt[1,3][{t1_, t2_, t3_},{x_,y_,z_}/; y≥x&&z≥x]:=dst13[{t1,t2,t3},{x,y,z}]

drt[1,3][{t1_, t2_, t3_},{x_,y_,z_}/; x≥y&&z≥y]:=dst13[{t2,t1,t3},{y,x,z}]

drt[1,3][{t1_, t2_, t3_},{x_,y_,z_}/; x≥z&&y≥z]:=0

drt[1,1][{t1_, t2_, t3_},{x_,y_,z_}]:=drt[1,3][{t2,t3,t1},{y,z,x}]

drt[1,2][{t1_, t2_, t3_},{x_,y_,z_}]:=drt[1,3][{t3,t1,t2},{z,x,y}]

drt[i_/;i≥2,j_][{t1_, t2_, t3_},{x_,y_,z_}]:=drt[1,j][invϕ[i][{t1,t2,t3}],invα[i][{x,y,z}]]

Do[Do[dut[3 i+j+29]=drt[i,j],{j,1,3}],{i,1,4}]

Elément générique élargi, à 44 paramètres

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]])];

Thèse p. 86, fonctions de base
Thèse p. 141-142, subroutine U44

u[n_][{x_,y_,z_}]:=ut[n][invL[{x,y,z}]]

Thèse p. 86, dérivées des fonctions de bas
Thèse p. 141-142, subroutine U44

TEST 6
base d'interpolation, p. 65, comparer à
DU28(28,...), FONCTIONS 1 A 28, p. 112

du[k_Integer][{t1_,t2_,t3_},{x_,y_,z_}]:=dut[k][Inverse[ℓ].{t1, t2, t3}, invL[{x,y,z}]]

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.

Elément de référence, valeurs

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

Bloc 1

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

Bloc 2

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

Bloc 3, fonctions numéros 29 à 32

Table[Table[ut[28+i][nuage[[k]]],{i,1,4}],{k,1,Length[nuage]}]//TableForm

Bloc 4, fonctions 33 à 44

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

Elément de référence, dérivée directionnelle

Bloc 1, fonctions 1 à 16

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

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

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

Bloc 2, fonctions 17 à 28

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

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

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

Bloc 3, fonctions 29 à 32

Table[Table[dut[28+i][{1,0,0},nuage[[k]]],{i,1,4}],{k,1,Length[nuage]}]//TableForm

Table[Table[dut[28+i][{0,1,0},nuage[[k]]],{i,1,4}],{k,1,Length[nuage]}]//TableForm

Table[Table[dut[28+i][{0,0,1},nuage[[k]]],{i,1,4}],{k,1,Length[nuage]}]//TableForm

Bloc 4, fonctions 33 à 44

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

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

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

Elément générique, valeurs

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}}

Valeurs des 44 fonctions de l' élément générique élargi

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

Elément générique, dérivée directionnelle

Dérivée directionnelle des 44 fonctions de l' élément générique élargi

t={0.25, 0.35,0.4};

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