C NORCOS    SOURCE    CHAT      05/01/13    01:59:43     5004
C NORCOS      SOURCE
      SUBROUTINE NORCOS(VAL,NPTEL,NEL,XCOOR,NDIM,NUM,XE,INU)
C=======================================================================
C     SUBROUTINE DE CALCUL DU COSINUS DE L'ANGLE ENTRE LES DEUX
C     DIAGONALES D'UN QUA4
C          PHILIPPE BEAUMIER  90
C     FAIT UNE BOUCLE SUR LES ELEMENTS
C
C=======================================================================
C
C  INPUT
C
C     NPTEL          : NOMBRE DE POINTS PAR ELEMENT
C     NEL            : NOMBRE D'ELEMENTS
C     XCOOR()        : VECTEUR DES COORDONNEES DES NOEUDS
C     NDIM           : DIMENSION (2 OU 3)
C     NUM(NPTEL,NEL) : TABLEAU DES NUMEROS DES ELEMENTS
C     XE(3,NPTEL)    : TABLEAU DES COORDONNEES DES NOEUDS
C     INU            : NUMERO DE L'ELEMENT GEOMETRIQUE
C
C   OUTPUT
C
C     VAL(NPTEL,NEL) :ION DES MOTS CLES LUS
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
C    Include contenant quelques constantes dont XPI :
-INC CCREEL
C
      DIMENSION VAL(1,*),XCOOR(*),NUM(NPTEL,*),XE(3,*)
      DIMENSION V1(3),V2(3),V3(3),V4(3)
C
C     BOUCLE SUR LES ELEMENTS
C
      IF((NDIM.EQ.3).AND.(INU.EQ.8)) THEN
         DO 1 IB=1,NEL
            CALL DOXE(XCOOR,NDIM,NPTEL,NUM,IB,XE)
C
C     CALCUL DES NORMALES @ L'ELEMENT
C
            DO 10 IA=1,3
               V1(IA) = XE(IA,2) - XE(IA,1)
               V2(IA) = XE(IA,4) - XE(IA,1)
 10         CONTINUE
            V3(1) = V1(2) * V2(3) - V2(2)* V1(3)
            V3(2) = V1(3) * V2(1) - V2(3)* V1(1)
            V3(3) = V1(1) * V2(2) - V2(1)* V1(2)
            Z3 = SQRT(V3(1)**2 + V3(2)**2 + V3(3)**2)
            DO 11 IA=1,3
               V1(IA) = XE(IA,4) - XE(IA,3)
               V2(IA) = XE(IA,2) - XE(IA,3)
 11         CONTINUE
            V4(1) = V1(2) * V2(3) - V2(2)* V1(3)
            V4(2) = V1(3) * V2(1) - V2(3)* V1(1)
            V4(3) = V1(1) * V2(2) - V2(1)* V1(2)
            Z4 = SQRT(V4(1)**2 + V4(2)**2 + V4(3)**2)
            PS = 0.D0
            DO 12 IA=1,3
               PS = PS + V3(IA) * V4(IA)
 12         CONTINUE
            PS = PS / (Z3 * Z4)
            ZOZO = MIN(1.D0,ABS(PS))
C     ON PREND LE MIN SUITE A ERREUR SUR CRAY
            VAL(1,IB) = 100.D0-200.D0/XPI*ACOS(ZOZO)
 1       CONTINUE
      ELSE
         DO 2 IB=1,NEL
            VAL(1,IB) = 100.D0
 2       CONTINUE
      ENDIF
C
      RETURN
      END





