C PRANGL    SOURCE    GOUNAND   26/09/03    21:15:07     12637          
      SUBROUTINE PRANGL()
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : PRANGL
C DESCRIPTION :
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA)
C               mel : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       :
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C***********************************************************************
C VERSION    : v1, 02/09/2026, version initiale
C HISTORIQUE : v1, 02/09/2026, creation
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
-INC PPARAM
-INC CCOPTIO
-INC SMCOORD
      DIMENSION V0(3),V1(3),V2(3),V3(3)
*
* Executable statements
*
* Si IFLAG=1, on plante si vecteur nul
      IFLAG=1
*
*  Lecture des vecteurs
*
      INTERR(1)=IDIM
      IF (IDIM.LE.0) THEN
         CALL ERREUR(709)
         RETURN
      ENDIF
      CALL LIROBJ('POINT',IV1,1,IRET)
      IF (IERR.NE.0) RETURN
      CALL LIROBJ('POINT',IV2,1,IRET)
      IF (IERR.NE.0) RETURN
      CALL LIROBJ('POINT',IV3,0,IRET3)
      IF (IERR.NE.0) RETURN
      SEGACT MCOORD
      IR1=(IV1-1)*(IDIM+1)
      IR2=(IV2-1)*(IDIM+1)
      IF (IRET3.NE.0) THEN
         IF (IDIM.NE.3) THEN
            CALL ERREUR(709)
            RETURN
         ENDIF
         IR3=(IV3-1)*(IDIM+1)
      ENDIF
      DO J=1,IDIM
         V1(J)=XCOOR(IR1+J)
         V2(J)=XCOOR(IR2+J)
         IF (IRET3.NE.0) THEN
            V0(J)=0.D0
            V3(J)=XCOOR(IR3+J)
         ENDIF
      ENDDO
*
      IF (IRET3.EQ.0) THEN
* Calcul de l'angle (oriente en 2D)
         CALL ANGLE(V1,V2,IDIM,XANG,IFLAG,IFLIG)
      ELSE
* Calcul de l'angle solide
         CALL ANGSOL(V0,V1,V2,V3,XANG,IFLAG,IFLIG)
      ENDIF
      IF (IFLIG.NE.0) THEN
         CALL ERREUR(277)
         RETURN
      ENDIF
*
      CALL ECRREE(XANG)
*
* Normal termination
*
      RETURN
*
* Format handling
*
*
* Error handling
*
*
* End of subroutine PRANGL
*
      END
 
