C G2ORQ4    SOURCE    CHAT      06/03/29    21:22:09     5360
C
C
      SUBROUTINE G2ORQ4(ITRNOE,NBNMAX,ITRTRI,NBCMAX,NBE,
     >                  COORD,IDIMC,N1,VK,
     >                  ITVL,NTIMAX,
     >                  IGR,NBCOL,NBLIG,NGRMAX,ICOIN,iarr )
C     **********************************************************************
C     OBJET G2ORQ4 : CREATION D'UNE GRILLE ORIENTE A PARTIR D'UN MAILLAGE
C
C     EN ENTREE   :
C       ITRNOE,NBNMAX,ITRTRI,NBCMAX,NBE : LE MAILLAGE
C       COORD,IDIMC : TABLEAU DES POINTS ET DIMENSION
C
C       N1 : NUMERO DU NOEUD QUE L'ON SOUHAITE POUR L'ORIGINE DE LA GRILLE
C            SI N1=0 ON N'IMPOSE PAS L'ORIGINE
C       VK : ORIENTATION DE LA GRILLE, DIRECTION SOUHAITE EN N1
C            SI IDIMC = 0, ON N'IMPOSE PAS D'ORIENTATION.
C
C       ITVL(ITVMAX) : TABLEAU DE TRAVAIL (ENTIERS)
C       NTIMAX: TAILLE DU TABLEAU ITVL
C               ON A BESOIN DU TABLEAU DE TRAVAIL SEULEMENT SI ON CHANGE
C               SIMULTANEMENT L'ORIGINE ET L'ORIENTATION DU MAILLAGE.
C               LA PLACE NECESSAIRE EST ALORS DE : NBCOL*NBLIG = NBN
C               QUI EST TOUJOURS INFERIEUR A : 3 + 2*NBE
C
C       IGR1   : TABLEAU DE LA GRILLE (A REMPLIR)
C       NGRMAX : TAILLE MAXIMUM DE IGR1
C
C     EN SORTIE   :
C       IGR(NBCOL,NBLIG) : TABLEAU D'INDICES DES NOEUDS (LA GRILLE)
C       ICOIN()          : TABLEAU DONNANT LES INDICES DES COINS.
C
C     **********************************************************************
      IMPLICIT INTEGER(I-N)
      INTEGER ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX,NBE
      INTEGER IGR(*),NBCOL,NBLIG,NGRMAX
      REAL*8    COORD(*),VK(*)
      INTEGER IDIMC,N1,ITVL(*),NTIMAX,ICOIN(*),iarr
C
      INTEGER I
C        ----------------------
C     --- CALCUL DE LA GRILLE  ---
C        ----------------------
C
      CALL G2NOQ4( ITRNOE,NBNMAX,ITRTRI,NBCMAX,NBE,
     >             IGR,NBCOL,NBLIG,NGRMAX,iarr)
      IF(iarr.NE.0)THEN
        CALL DSERRE(1,iarr,'G2ORQ4',' APPEL G2NOQ4')
        GOTO 9999
      ENDIF
C
C      CALL G2COIN(NBCOL,NBLIG,ICOIN)
      ICOIN(1) = 1
      ICOIN(2) = NBCOL
      ICOIN(3) = NBCOL*NBLIG
      ICOIN(4) = NBCOL*NBLIG - NBCOL + 1
      DO 10 I=1,4
        ICOIN(I) = IGR(ICOIN(I))
   10 CONTINUE
      IF( iarr.NE. 0 )THEN
        CALL DSERRE(1,iarr,'G2ORQ4',' APPEL G2COIN')
        GOTO 9999
      ENDIF
C
C     --- ORIENTATION ---
C
      CALL G2ORAC(IGR,NBCOL,NBLIG,COORD,IDIMC,N1,VK,
     >                  ITVL,NTIMAX,iarr )
      IF( iarr.NE. 0 )THEN
        CALL DSERRE(1,iarr,'G2ORQ4',' APPEL G2ORAC')
        GOTO 9999
      ENDIF
C
 9999 END



