C GTAILL SOURCE CHAT 06/03/29 21:22:43 5360 SUBROUTINE GTAILL(IT, N, C, IDIMC, TAILLE, iarr ) C ***************************************************************** C OBJET : CALCULE LA TAILLE D'UN SIMPLEX C EN ENTREE : C IT : NUMERO DES NOEUDS DE L'ELEMENT C N : NOMBRE DE NOEUDS DE L'ELEMENT C C : COORDONNEES DES NOEUDS C IDIMC : DIMENSION DE L'ESPACE C EN SORTIE : C TAILLE : LONGUEUR D'UN SEGMENT EN 1D,2D ET 3D C SURFACE D'UN TRIANGLE EN 2D ET 3D C VOLUME D'UN TETRAEDRE (3D) C iarr : 0 SI OK, -1 SI LES DONNEES SONT ERRONEES C ***************************************************************** IMPLICIT INTEGER(I-N) INTEGER IT(*),N,IDIMC,iarr REAL*8 C(*),TAILLE C DIMENSION X(12) INTEGER I,J REAL*8 X,VX,VY,VZ C iarr = 0 TAILLE = 0.0D0 DO 10 I=1,(N-1) DO 20 J=1,IDIMC X((I-1)*IDIMC+J) = C(((IT(I+1)-1)*IDIMC)+J) > - C(((IT(I)-1)*IDIMC)+J) 20 CONTINUE 10 CONTINUE IF( IDIMC .EQ. 3 )THEN VX = (X(2) * X(6)) - (X(5) * X(3)) VY = (X(3) * X(4)) - (X(6) * X(1)) VZ = (X(1) * X(5)) - (X(4) * X(2)) ENDIF C C CAS DU SEGMENT (1D, 2D, 3D) C IF( N. EQ. 2 )THEN IF( IDIMC .EQ. 1 )THEN TAILLE = X(1) ELSE IF( IDIMC .EQ. 2 )THEN TAILLE = SQRT( (X(1) * X(1)) + (X(2) * X(2)) ) ELSE IF( IDIMC .EQ. 3 )THEN TAILLE = SQRT((X(1)*X(1)) + (X(2)*X(2)) + (X(3)*X(3))) ELSE iarr = -1 ENDIF C C CAS DU TRIANGLE (2D, 3D) C ELSE IF( N.EQ.3 ) THEN IF( IDIMC .EQ. 2 )THEN TAILLE = ((X(1) * X(4)) - (X(2) * X(3))) / 2.D0 ELSE IF( IDIMC .EQ. 3 )THEN TAILLE = SQRT((VX * VX) + ( VY * VY )) / 2.D0 ELSE iarr = -1 ENDIF C C CAS DU TETRAEDRE (3D) C ELSE IF( N. EQ. 4 )THEN TAILLE = ((VX * X(7)) + (VY * X(8)) + (VZ * X(9))) / 6.D0 IF( IDIMC .NE. 3 )iarr = -1 ENDIF END