[updated 5.Jul.2005]
Librairie ef3d > Fichier he202b.f |
SUBROUTINE HE202B (KELFCT,X1,X2,X3,P,DP,DDP)
Auteur : D.Martin (Fevrier 1988)
Derniere modification : D.Martin (04 juillet 2005)
Version 2
Fonctions de base et derivees - hexaedre de Lagrange Serendip a 20 noeuds
-- Arguments d'entree --
-- Arguments d'entree --
KELFCT variable CHARACTER indiquant
si KELFCT(1:1).NE.'N' Calcul des fonctions de base
si KELFCT(2:2).NE.'N' Calcul des derivees 1eres des fonctions de base
si KELFCT(3:3).NE.'N' Calcul des derivees 2ndes des fonctions de base
X1,X2,X3 coordonnees du point ou on demande le calcul
-- Arguments de sortie --
P tableau contenant les valeurs des fonctions au point X1,X2
DP - - - - derivees premieres
DDP - - - - derivees secondes
CHARACTER*(*) KELFCT
REAL X1,X2,X3,P(*),DP(3,*),DDP(6,*)
INTEGER I
REAL X4,X5,X6,DX1,DX2,DX3,DX4,DX5,DX6,QX1,QX2,QX3,QX5,QX6
& ,X1X2,X1X3,X1X5,X1X6,X2X3,X2X4,X2X6,X3X4,X3X5,X4X5,X4X6,X5X6
& ,QX1M1,QX2M1,QX3M1,QX1M3,QX2M3,QX3M3
X4=1.-X1
X5=1.-X2
X6=1.-X3
X1X2=X1*X2
X1X3=X1*X3
X1X5=X1-X1X2
X1X6=X1-X1X3
X2X3=X2*X3
X2X4=X2-X1X2
X2X6=X2-X2X3
X3X4=X3-X1X3
X3X5=X3-X2X3
X4X5=X4-X2X4
X4X6=X4-X3X4
X5X6=X6-X2X6
DX1=X1+X1
DX2=X2+X2
DX3=X3+X3
DX4=X4+X4
DX5=X5+X5
DX6=X6+X6
QX1=DX1+DX1
QX2=DX2+DX2
QX3=DX3+DX3
QX5=DX5+DX5
QX6=DX6+DX6
Fonctions de base
IF (KELFCT(1:1).NE.'N') THEN
P(1) =X1X5*X6
P(5) =X1X5-P(1)
P(6) =X1X3-P(5)
P(7) =X2X3-P(6)
P(8) =X3-X1X3-P(7)
P(2) =X1X2-P(6)
P(3) =X2-X2X3-P(2)
P(4) =X4+X1X3-X3-P(3)
P(20)=DX2*P(1)
P(16)=DX4*P(2)
P(14)=DX5*P(3)
P(13)=DX1*P(4)
P(11)=DX5*P(6)
P(10)=DX4*P(6)
P(17)=DX5*P(7)
P(19)=DX1*P(8)
P(15)=DX6*P(5)
P(9) =DX6*P(6)
P(18)=DX6*P(7)
P(12)=DX6*P(8)
P(1) =P(1)-(P(20)+P(15)+P(13))
P(2) =P(2)-(P(16)+P(9)+P(20))
P(3) =P(3)-(P(16)+P(18)+P(14))
P(4) =P(4)-(P(13)+P(14)+P(12))
P(5) =P(5)-(P(11)+P(19)+P(15))
P(6) =P(6)-(P(10)+P(11)+P(9))
P(7) =P(7)-(P(10)+P(17)+P(18))
P(8) =P(8)-(P(19)+P(17)+P(12))
DO 47 I=9,20
47 P(I)=P(I)+P(I)
ENDIF
Derivees premieres
IF (KELFCT(2:2).NE.'N') THEN
QX1M1=X1+X1+X1-X4
QX1M3=QX1M1-2.
QX2M1=X2+X2+X2-X5
QX2M3=QX2M1-2.
QX3M1=X3+X3+X3-X6
QX3M3=QX3M1-2.
DP(1,4) =DX2+DX3
DP(1,3) =DX3+DX5
DP(1,8) =DX2+DX6
DP(1,7) =DX5+DX6
DP(1,1) =X5X6*(QX1M1-DP(1,4))
DP(1,2) =X2X6*(QX1M1-DP(1,3))
DP(1,3) =X2X6*(DP(1,3)+QX1M3)
DP(1,4) =X5X6*(DP(1,4)+QX1M3)
DP(1,5) =X3X5*(QX1M1-DP(1,8))
DP(1,6) =X2X3*(QX1M1-DP(1,7))
DP(1,7) =X2X3*(DP(1,7)+QX1M3)
DP(1,8) =X3X5*(DP(1,8)+QX1M3)
DP(1,16)=-(DP(1,2)+DP(1,3))
DP(1,13)=-(DP(1,1)+DP(1,4))
DP(1,10)=-(DP(1,6)+DP(1,7))
DP(1,19)=-(DP(1,5)+DP(1,8))
DP(1,20)=QX2*X5X6
DP(1,11)=-DP(1,20)
DP(1,11)=QX2*X3X5
DP(1,17)=-DP(1,11)
DP(1,15)=QX6*X3X5
DP(1,12)=-DP(1,15)
DP(1,9) =QX3*X2X6
DP(1,18)=-DP(1,9)
DP(2,1)=DX3+DX4
DP(2,4)=DX1+DX3
DP(2,5)=DX4+DX6
DP(2,8)=DX1+DX6
DP(2,2)=X1X6*(QX2M1-DP(2,1))
DP(2,1)=X1X6*(DP(2,1)+QX2M3)
DP(2,3)=X4X6*(QX2M1-DP(2,4))
DP(2,4)=X4X6*(DP(2,4)+QX2M3)
DP(2,6)=X1X3*(QX2M1-DP(2,5))
DP(2,5)=X1X3*(DP(2,5)+QX2M3)
DP(2,7)=X3X4*(QX2M1-DP(2,8))
DP(2,8)=X3X4*(DP(2,8)+QX2M3)
DP(2,20)=-(DP(2,1)+DP(2,2))
DP(2,11)=-(DP(2,3)+DP(2,4))
DP(2,11)=-(DP(2,5)+DP(2,6))
DP(2,17)=-(DP(2,7)+DP(2,8))
DP(2,16)=QX1*X4X6
DP(2,13)=-DP(2,16)
DP(2,10)=QX1*X3X4
DP(2,19)=-DP(2,10)
DP(2,9) =QX6*X1X3
DP(2,15)=-DP(2,9)
DP(2,18)=QX3*X4X6
DP(2,12)=-DP(2,18)
DP(3,1) =DX2+DX4
DP(3,2) =DX4+DX5
DP(3,3) =DX5+DX1
DP(3,4) =DX1+DX2
DP(3,11)=QX5*X1X2
DP(3,10)=QX1*X2X4
DP(3,17)=QX5*X2X4
DP(3,19)=QX1*X4X5
DO 34 I=1,4
DP(3,I+4)=QX3M1-DP(3,I)
DP(3,I)=QX3M3+DP(3,I)
34 CONTINUE
DP(3,20)=-DP(3,11)
DP(3,16)=-DP(3,10)
DP(3,14)=-DP(3,17)
DP(3,13)=-DP(3,19)
DP(3,1) =X1X5*DP(3,1)
DP(3,5) =X1X5*DP(3,5)
DP(3,2) =X1X2*DP(3,2)
DP(3,6) =X1X2*DP(3,6)
DP(3,3) =X2X4*DP(3,3)
DP(3,7) =X2X4*DP(3,7)
DP(3,4) =X4X5*DP(3,4)
DP(3,8) =X4X5*DP(3,8)
DP(3,9) =-(DP(3,2)+DP(3,6))
DP(3,12)=-(DP(3,4)+DP(3,8))
DP(3,15)=-(DP(3,1)+DP(3,5))
DP(3,19)=-(DP(3,3)+DP(3,7))
ENDIF
Derivees secondes
DX6M1=X6-X3
IF (KELFCT(3:3).NE.'N') THEN
DX6M5=DX6M1-4.
DX6P3=DX6M1+4.
DX5M1=X5-X2
DX5M5=DX5M1-4.
DX5P3=DX5M1+4.
DX4M1=X4-X1
DX4M5=DX4M1-4.
DX4P3=DX4M1+4.
DO 37 I=9,18,3
DDP(1,I) =0.
DDP(1,I+2)=0.
37 CONTINUE
DDP(1,1) =4.*X5X6
DDP(1,2) =4.*X2X6
DDP(1,3) =DDP(1,2)
DDP(1,4) =DDP(1,1)
DDP(1,5) =4.*X3X5
DDP(1,6) =4.*X2X3
DDP(1,7) =DDP(1,6)
DDP(1,8) =DDP(1,5)
DDP(1,16)=-(DDP(1,2)+DDP(1,2))
DDP(1,13)=-(DDP(1,1)+DDP(1,1))
DDP(1,10)=-(DDP(1,6)+DDP(1,6))
DDP(1,19)=-(DDP(1,5)+DDP(1,5))
DO 38 I=9,18,3
DDP(2,I) =0.
DDP(2,I+1) =0.
38 CONTINUE
DDP(2,1) =4.*X1X6
DDP(2,2) =DDP(2,1)
DDP(2,3) =4.*X4X6
DDP(2,4) =DDP(2,3)
DDP(2,5) =4.*X1X3
DDP(2,6) =DDP(2,5)
DDP(2,7) =4.*X3X4
DDP(2,8) =DDP(2,7)
DDP(2,20)=-(DDP(2,1)+DDP(2,1))
DDP(2,11)=-(DDP(2,3)+DDP(2,3))
DDP(2,11)=-(DDP(2,5)+DDP(2,5))
DDP(2,17)=-(DDP(2,7)+DDP(2,7))
DO 46 I=10,19,3
DDP(3,I)=0.
DDP(3,I+1)=0.
46 CONTINUE
DDP(3,1) =4.*X1X5
DDP(3,2) =4.*X1X2
DDP(3,3) =4.*X2X4
DDP(3,4) =4.*X4X5
DDP(3,5) =DDP(3,1)
DDP(3,6) =DDP(3,2)
DDP(3,7) =DDP(3,3)
DDP(3,8) =DDP(3,4)
DDP(3,15)=-(DDP(3,1)+DDP(3,1))
DDP(3,9) =-(DDP(3,2)+DDP(3,2))
DDP(3,18)=-(DDP(3,3)+DDP(3,3))
DDP(3,12)=-(DDP(3,4)+DDP(3,4))
DDP(4,5) =QX2-QX3
DDP(4,6) =QX2+QX3
DDP(4,7) =DDP(4,6)+DX4M5
DDP(4,8) =DDP(4,5)-DX4M1
DDP(4,6) =DDP(4,6)-DX4P3
DDP(4,5) =DDP(4,5)+DX4M1
DDP(4,1) =-X1*DDP(4,7)
DDP(4,2) =-X1*DDP(4,8)
DDP(4,3) =-X4*DDP(4,5)
DDP(4,4) =-X4*DDP(4,6)
DDP(4,5) =DDP(4,5)+DDP(4,3)
DDP(4,6) =DDP(4,6)+DDP(4,4)
DDP(4,7) =DDP(4,7)+DDP(4,1)
DDP(4,8) =DDP(4,8)+DDP(4,2)
DDP(4,11)=QX1*DX5M1
DDP(4,17)=DX5M1+DX5M1
DDP(4,17)=DDP(4,17)+DDP(4,17)-DDP(4,11)
DDP(4,9) =QX1*DX6M1
DDP(4,8) =DX6M1+DX6M1
DDP(4,8) =DDP(4,8)+DDP(4,8)-DDP(4,9)
DDP(4,20)=-DDP(4,11)
DDP(4,14)=-DDP(4,17)
DDP(4,15)=-DDP(4,9)
DDP(4,12)=-DDP(4,8)
DDP(4,13)=QX1*X4
DDP(4,10)=DDP(4,13)
DDP(4,16)=-DDP(4,13)
DDP(4,19)=DDP(4,16)
DDP(5,5)=QX1+QX3
DDP(5,7)=QX1-QX3
DDP(5,6)=DDP(5,5)-DX5P3
DDP(5,8)=DDP(5,7)-DX5M1
DDP(5,5)=DDP(5,5)+DX5M5
DDP(5,7)=DDP(5,7)+DX5M1
DDP(5,1)=-X5*DDP(5,7)
DDP(5,2)=-X2*DDP(5,8)
DDP(5,3)=-X2*DDP(5,5)
DDP(5,4)=-X5*DDP(5,6)
DDP(5,5)=DDP(5,5)+DDP(5,3)
DDP(5,6)=DDP(5,6)+DDP(5,4)
DDP(5,7)=DDP(5,7)+DDP(5,1)
DDP(5,8)=DDP(5,8)+DDP(5,2)
DDP(5,11)=QX2*X5
DDP(5,11)=DDP(5,14)
DDP(2,20)=-DDP(5,14)
DDP(5,17)=DDP(2,20)
DDP(5,10)=QX2*DX4M1
DDP(5,19)=DX4M1+DX4M1
DDP(5,19)=DDP(5,19)+DDP(5,19)-DDP(5,10)
DDP(5,15)=QX5*DX6M1
DDP(5,9)=DX6M1+DX6M1
DDP(5,9)=DDP(5,9)+DDP(5,9)-DDP(5,15)
DDP(5,16)=-DDP(5,10)
DDP(5,13)=-DDP(5,19)
DDP(5,18)=-DDP(5,9)
DDP(5,12)=-DDP(5,15)
DDP(6,1)=QX2-QX1
DDP(6,2)=QX2+QX1
DDP(6,3)=-(DDP(6,1)+DX6M1)
DDP(6,4)=-DDP(6,2)+DX6P3
DDP(6,1)=DDP(6,1)-DX6M1
DDP(6,2)=DDP(6,2)+DX6M5
DDP(6,5)=-X3*DDP(6,3)
DDP(6,6)=-X3*DDP(6,4)
DDP(6,7)=-X3*DDP(6,1)
DDP(6,8)=-X3*DDP(6,2)
DDP(6,1)=DDP(6,1)+DDP(6,7)
DDP(6,2)=DDP(6,2)+DDP(6,8)
DDP(6,3)=DDP(6,3)+DDP(6,5)
DDP(6,4)=DDP(6,4)+DDP(6,6)
DDP(6,20)=QX6*DX5M1
DDP(6,16)=QX6*DX4M1
DDP(6,14)=-DDP(6,20)
DDP(6,13)=-DDP(6,16)
DDP(6,11)=DX5M1+DX5M1
DDP(6,11)=DDP(6,11)+DDP(6,11)-DDP(6,20)
DDP(6,10)=DX4M1+DX4M1
DDP(6,10)=DDP(6,10)+DDP(6,10)-DDP(6,16)
DDP(6,17)=-DDP(6,11)
DDP(6,19)=-DDP(6,10)
DDP(6,9)=QX6*X3
DDP(6,15)=-DDP(6,9)
DDP(6,18)=DDP(6,15)
DDP(6,12)=DDP(6,9)
ENDIF
END !He22fb
he202b est appelé dans