C TRMORS    SOURCE    GOUNAND   13/01/09    21:15:00     7661
      SUBROUTINE TRMORS(N,NLIS,ALIS,LIS,XLIS,
     $     ATRA,TRA,XTRA)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C***********************************************************************
C NOM         : TRMORS
C PROJET      : Noyau linéaire NLIN
C DESCRIPTION :  C =>  Ct en format Morse
C
C               Construit la transposée d'une matrice Morse
C               "carrée" (i.e. il faut que : $ max_i LIS(i) \leq n $)
C
C LANGAGE     : Fortran 77 (sauf E/S)
C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C VERSION    : v1, 13/12/99, version initiale
C HISTORIQUE : v1, 13/12/99, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
*
      INTEGER N,NLIS
      INTEGER XLIS(N+1),LIS(NLIS),XTRA(N+1),TRA(NLIS)
      REAL*8 ALIS(NLIS),ATRA(NLIS)
      INTEGER IMPR,IRET
*
      INTEGER I,ILIS,L,J,JSTRT,JSTOP,ICOL,JCOL
*
* Executable statements
*
*      WRITE(IOIMP,*) 'Entrée dans trmors'
*
* Initialisation des sorties (supposée faite)
*
*      DO 1 I=1,N
*         XTRA(I)=0
* 1    CONTINUE
*
* On utilise XTRA(1...N) tel que XTRA(i) = le nombre d'occurence de i
* dans LIS
*
      DO 3 ILIS=1,NLIS
         ICOL=LIS(ILIS)
         XTRA(ICOL)=XTRA(ICOL)+1
 3    CONTINUE
*
* D'où l'on déduit XTRA, liste de repérage sur TRA
*
      L=1
      DO 5 I=1,N
         L=L+XTRA(I)
         XTRA(I)=L-XTRA(I)
 5    CONTINUE
      XTRA(N+1)=L
*
* XTRA nous sert maintenant de liste de pointeurs courant
* dans le tableau TRA que l'on remplit
*
      DO 7 I=1,N
         JSTRT=XLIS(I)
         JSTOP=XLIS(I+1)-1
         DO 72 J=JSTRT,JSTOP
            JCOL=LIS(J)
            ATRA(XTRA(JCOL))=ALIS(J)
            TRA(XTRA(JCOL))=I
            XTRA(JCOL)=XTRA(JCOL)+1
 72      CONTINUE
 7    CONTINUE
*
* On reconstitue XTRA, liste de repérage sur TRA
*
      DO 9 I=N,2,-1
         XTRA(I)=XTRA(I-1)
 9    CONTINUE
      XTRA(1)=1
      RETURN
*
* End of subroutine TRMORS
*
      END






