      SUBROUTINE TABAXD(I1,I2,A,B,C,AUX,IOPT)
C ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C  BUT : CALCUL DU PRODUIT MATRICIEL TRANSPOSEE [ A ] * [ B ] * [ A ]
C  ---   SI IOPT = 1 : [ C ]  =   0   + [ TA ] * [ B ] * [ A ]
C                         S               I1*I2     S     I2*I1
C        SI IOPT > 1 : [ C ]  = [ C ] + [ TA ] * [ B ] * [ A ]
C                         S        S      I1*I2     S     I2*I1
C       AVEC B ET C SYMETRIQUES , STOCKEES DE HAUT EN BAS ET DE LA
C       GAUCHE VERS LA DROITE. SEULES LES PARTIES TRIANGULAIRES
C       SUPERIEURES SONT STOCKEES.
C  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C  PARAMETRES D'ENTREE :
C  -------------------
C  I1    : NOMBRE DE COLONNES DE A
C  I2    : NOMBRE DE LIGNES DE A
C  A , B : MATRICES [ A ] I2*I1  ET [ B ] S
C  IOPT  : OPTION DE CALCUL
C  PARAMETRES RESULTATS :
C  --------------------
C  C   : MATRICE [ C ] SYMETRIQUE
C  AUX : MATRICE AUXILLAIRE [ AUX ] I1*I2
C  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C  PROGRAMMEUR : A. HASSIM INRIA
C  ...................................................................
      DOUBLE PRECISION A,B,C,AUX
      DIMENSION A(I2,I1),B(*),C(*),AUX(I1,I2)
C
C  CALCUL DE [ AUX ] = TRANSP[ A ] * [ B ]
C                I1*I2         I1*I2     S
      CALL TAB2D(I1,I2,A,B,AUX)
C
      IF (IOPT .EQ. 1) THEN
C
C            CALCUL DE [ C ] = [ AUX ] * [ A ]
C                          S       I1*I2   I2*I1
             CALL AB4D(I1,I2,AUX,A,C)
C
      ELSE
C
C            CALCUL DE [ C ] = [ C ] + [ AUX ] * [ A ]
C                          S       S       I1*I2   I2*I1
             CALL AB5D(I1,I2,AUX,A,C)
C
      END IF
      END
