C MAMAMA    SOURCE    GOUNAND   05/12/21    21:34:05     5281
      SUBROUTINE MAMAMA(MA1,NI1,NJ1,MA2,NI2,NJ2,
     $     COPER,
     $     MA3,NI3,NJ3,
     $     IMPR,IRET)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : MAMAMA
C DESCRIPTION : Implémentation d'opérations matrice matrice  -> matrice
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : 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 CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 27/09/2005, version initiale
C HISTORIQUE : v1, 27/09/2005, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
*
      REAL*8 MA1(NI1,NJ1)
      REAL*8 MA2(NI2,NJ2)
      REAL*8 MA3(NI3,NJ3)
      CHARACTER*8 COPER
*
      INTEGER IMPR,IRET
*
* Executable statements
*
      IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans mamama.eso'
      IF (COPER.EQ.'PLUS    ') THEN
         IF ((NI1.NE.NI2).OR.(NJ1.NE.NJ2)) THEN
            WRITE(IOIMP,*) NI1,'.NE.',NI2,'.OR.',NJ1,'.NE.',NJ2
            GOTO 9999
         ENDIF
         IF ((NI1.NE.NI3).OR.(NJ1.NE.NJ3)) THEN
            WRITE(IOIMP,*) NI1,'.NE.',NI3,'.OR.',NJ1,'.NE.',NJ3
            GOTO 9999
         ENDIF
         DO IJ=1,NJ1
            DO II=1,NI1
               MA3(II,IJ)=MA1(II,IJ)+MA2(II,IJ)
            ENDDO
         ENDDO
      ELSEIF (COPER.EQ.'FOIS    ') THEN
         IF ((NJ1.NE.NI2).OR.(NI1.NE.NI3).OR.(NJ2.NE.NJ3)) THEN
            WRITE(IOIMP,*) NJ1,'.NE.',NI2,'.OR.',NI1,'.NE.',NI3
            WRITE(IOIMP,*) '.OR.',NJ2,'.NE.',NJ3
            GOTO 9999
         ENDIF
         DO IJ=1,NJ2
            DO II=1,NI1
               XTMP=0.D0
               DO IK=1,NJ1
                  XTMP=XTMP+(MA1(II,IK)*(MA2(IK,IJ)))
               ENDDO
               MA3(II,IJ)=XTMP
            ENDDO
         ENDDO
      ELSE
         WRITE(IOIMP,*) 'Operation ',COPER,' unknown'
         GOTO 9999
      ENDIF
*
* Normal termination
*
      IRET=0
      RETURN
*
* Format handling
*
*
* Error handling
*
*
 9999 CONTINUE
      IRET=1
      WRITE(IOIMP,*) 'An error was detected in subroutine mamama'
      RETURN
*
* End of subroutine MAMAMA
*
      END


