pb443
C PB443 SOURCE CHAT 05/01/13 02:10:40 5004 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C************************************************************************ C C CALCULE LES FONCTIONS DE FORME D'UN : Iso-Q2 (iso P1/P0 nc) TE10 C C C C ^ zeta C | C |10 C | C | C | 9 C | /\ /^ eta C | / \ / C |/____\ / C |7 8 / C | / C | 5 C | / \ C | / \ C | 6_____\4 C | / \ /\ C | / \ / \ C |/_____\/____\ ____________________>ksi C 1 2 3 C C C************************************************************************ CHARACTER*4 NOM2 REAL*8 AL,BE PARAMETER (AL=.5854101966249684D0) PARAMETER (BE=.1381966011250105D0) REAL*8 X(NPG),Y(NPG),Z(NPG) REAL*8 FN(NP,NPG),GR(ND,NP,NPG),PG(NPG) REAL*8 FM(MP,NPG),GM(ND,MP,NPG) INTEGER CONEK(4,8),L,K,I,N,N1,N2,N3,N4,IGAU,IFN INTEGER ND,MP,NGG,NP,NPG REAL*8 KXYZ(3,10),AA(4) REAL*8 T3X,T3Y,T3Z,C3,P3C REAL*8 T4X,T4Y,T4Z,C4,P4C C C Donnees de la numerotation locale des 4 noeuds de chaque tetraedre C DATA CONEK/1,2,6,7, & 2,8,6,7, & 2,3,4,8, & 2,4,6,8, & 4,5,6,9, & 8,9,4,6, & 6,7,8,9, & 7,8,9,10/ C C Donnees des coordonnees des points du tetraedre TE10 C X Y Z DATA KXYZ/0.0, 0.0, 0.0, & 0.5, 0.0, 0.0, & 1.0, 0.0, 0.0, & 0.5, 0.5, 0.0, & 0.0, 1.0, 0.0, & 0.0, 0.5, 0.0, & 0.0, 0.0, 0.5, & 0.5, 0.0, 0.5, & 0.0, 0.5, 0.5, & 0.0, 0.0, 1.0/ C C On initialise les fonctions tests et les gradients a 0 C DO 10 L=1,NPG C Poids de Gauss PG(L) = 0.1875D0 DO 22 K=1,MP FM(K,L)=0.0D0 DO 22 I=1,ND GM(I,K,L)=0.0D0 22 CONTINUE DO 20 K=1,NP FN(K,L)=0.0D0 DO 20 I=1,ND GR(I,K,L)=0.0D0 20 CONTINUE 10 CONTINUE C C On traite chaque tetraedre elementaire C DO 40 K=1,8 C C On travaille sur chacun des tetraedres composant le macro C N1=CONEK(1,K) N2=CONEK(2,K) N3=CONEK(3,K) N4=CONEK(4,K) C Calcul des equations de plans oppose a chaque point C C Plan 1 T1X=(KXYZ(2,N3)-KXYZ(2,N2))*(KXYZ(3,N4)-KXYZ(3,N2)) & -(KXYZ(3,N3)-KXYZ(3,N2))*(KXYZ(2,N4)-KXYZ(2,N2)) T1Y=(KXYZ(3,N3)-KXYZ(3,N2))*(KXYZ(1,N4)-KXYZ(1,N2)) & -(KXYZ(1,N3)-KXYZ(1,N2))*(KXYZ(3,N4)-KXYZ(3,N2)) T1Z=(KXYZ(1,N3)-KXYZ(1,N2))*(KXYZ(2,N4)-KXYZ(2,N2)) & -(KXYZ(2,N3)-KXYZ(2,N2))*(KXYZ(1,N4)-KXYZ(1,N2)) T1X=T1X/P1C T1Y=T1Y/P1C T1Z=T1Z/P1C C Plan 2 T2X=(KXYZ(2,N4)-KXYZ(2,N3))*(KXYZ(3,N1)-KXYZ(3,N3)) & -(KXYZ(3,N4)-KXYZ(3,N3))*(KXYZ(2,N1)-KXYZ(2,N3)) T2Y=(KXYZ(3,N4)-KXYZ(3,N3))*(KXYZ(1,N1)-KXYZ(1,N3)) & -(KXYZ(1,N4)-KXYZ(1,N3))*(KXYZ(3,N1)-KXYZ(3,N3)) T2Z=(KXYZ(1,N4)-KXYZ(1,N3))*(KXYZ(2,N1)-KXYZ(2,N3)) & -(KXYZ(2,N4)-KXYZ(2,N3))*(KXYZ(1,N1)-KXYZ(1,N3)) T2X=T2X/P2C T2Y=T2Y/P2C T2Z=T2Z/P2C C Plan 3 T3X=(KXYZ(2,N1)-KXYZ(2,N4))*(KXYZ(3,N2)-KXYZ(3,N4)) & -(KXYZ(3,N1)-KXYZ(3,N4))*(KXYZ(2,N2)-KXYZ(2,N4)) T3Y=(KXYZ(3,N1)-KXYZ(3,N4))*(KXYZ(1,N2)-KXYZ(1,N4)) & -(KXYZ(1,N1)-KXYZ(1,N4))*(KXYZ(3,N2)-KXYZ(3,N4)) T3Z=(KXYZ(1,N1)-KXYZ(1,N4))*(KXYZ(2,N2)-KXYZ(2,N4)) & -(KXYZ(2,N1)-KXYZ(2,N4))*(KXYZ(1,N2)-KXYZ(1,N4)) C3=-(T3X*KXYZ(1,N4)+T3Y*KXYZ(2,N4)+T3Z*KXYZ(3,N4)) P3C=T3X*KXYZ(1,N3)+T3Y*KXYZ(2,N3)+T3Z*KXYZ(3,N3)+C3 T3X=T3X/P3C T3Y=T3Y/P3C T3Z=T3Z/P3C C3=C3/P3C C Plan 4 T4X=(KXYZ(2,N2)-KXYZ(2,N1))*(KXYZ(3,N3)-KXYZ(3,N1)) & -(KXYZ(3,N2)-KXYZ(3,N1))*(KXYZ(2,N3)-KXYZ(2,N1)) T4Y=(KXYZ(3,N2)-KXYZ(3,N1))*(KXYZ(1,N3)-KXYZ(1,N1)) & -(KXYZ(1,N2)-KXYZ(1,N1))*(KXYZ(3,N3)-KXYZ(3,N1)) T4Z=(KXYZ(1,N2)-KXYZ(1,N1))*(KXYZ(2,N3)-KXYZ(2,N1)) & -(KXYZ(2,N2)-KXYZ(2,N1))*(KXYZ(1,N3)-KXYZ(1,N1)) C4=-(T4X*KXYZ(1,N1)+T4Y*KXYZ(2,N1)+T4Z*KXYZ(3,N1)) P4C=T4X*KXYZ(1,N4)+T4Y*KXYZ(2,N4)+T4Z*KXYZ(3,N4)+C4 T4X=T4X/P4C T4Y=T4Y/P4C T4Z=T4Z/P4C C4=C4/P4C C C Boucle sur les points de Gauss C DO 50 N=1,(NPG/8) IF (NPG.EQ.32) THEN DO 60 L=1,4 AA(L)=BE 60 CONTINUE AA(N)=AL ELSE DO 70 L=1,4 AA(L)=0.5D1 70 CONTINUE ENDIF C C Indice globale du point de Gauss C IGAU=(K-1)*(NPG/8)+N C C Coordonnees du point de Gauss (barycentre des 4 points du tetraedre) C X(IGAU)=AA(1)*KXYZ(1,N1)+AA(2)*KXYZ(1,N2) & +AA(3)*KXYZ(1,N3)+AA(4)*KXYZ(1,N4) Y(IGAU)=AA(1)*KXYZ(2,N1)+AA(2)*KXYZ(2,N2) & +AA(3)*KXYZ(2,N3)+AA(4)*KXYZ(2,N4) Z(IGAU)=AA(1)*KXYZ(3,N1)+AA(2)*KXYZ(3,N2) & +AA(3)*KXYZ(3,N3)+AA(4)*KXYZ(3,N4) C C Boucle sur les fonctions tests C C C Numerotation globale de la fonction test C IFN=(K-1)*4 C C Calcul des fonctions tests et du gradient au point IGAU C FN((IFN+1),IGAU)=T1X*X(IGAU)+T1Y*Y(IGAU) GR(1,(IFN+1),IGAU)=T1X GR(2,(IFN+1),IGAU)=T1Y GR(3,(IFN+1),IGAU)=T1Z FN((IFN+2),IGAU)=T2X*X(IGAU)+T2Y*Y(IGAU) GR(1,(IFN+2),IGAU)=T2X GR(2,(IFN+2),IGAU)=T2Y GR(3,(IFN+2),IGAU)=T2Z FN((IFN+3),IGAU)=T3X*X(IGAU)+T3Y*Y(IGAU) & +T3Z*Z(IGAU)+C3 GR(1,(IFN+3),IGAU)=T3X GR(2,(IFN+3),IGAU)=T3Y GR(3,(IFN+3),IGAU)=T3Z FN((IFN+4),IGAU)=T4X*X(IGAU)+T4Y*Y(IGAU) & +T4Z*Z(IGAU)+C4 GR(1,(IFN+4),IGAU)=T4X GR(2,(IFN+4),IGAU)=T4Y GR(3,(IFN+4),IGAU)=T4Z C C Calcul des fonctions tests pour la pression C FM(((K+1)/2),IGAU)=1.0D0 50 CONTINUE 40 CONTINUE IF(NOM2.EQ.'MCF1')THEN CO=6.D0 ** (1.D0/3.D0) UNSCO=1.D0/CO XXXX=-1.D0*UNSCO DO 51 L=1,NPG FM(1,L)=1.D0-(X(L)+Y(L)+Z(L))*UNSCO FM(2,L)=X(L)*UNSCO FM(3,L)=Y(L)*UNSCO FM(4,L)=Z(L)*UNSCO C GM(1,1,L)=XXXX GM(2,1,L)=XXXX GM(3,1,L)=XXXX C GM(1,2,L)=UNSCO GM(2,2,L)=0.D0 GM(3,2,L)=0.D0 C GM(1,3,L)=0.D0 GM(2,3,L)=UNSCO GM(3,3,L)=0.D0 C GM(1,4,L)=0.D0 GM(2,4,L)=0.D0 GM(3,4,L)=UNSCO C 51 CONTINUE ENDIF C write(6,*)'X ' C write(6,1008)X 1008 FORMAT(8(1X,1PE11.4)) RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales