C OPENMM    SOURCE    JC220346  16/03/24    21:15:12     8866
C SORMAT    SOURCE    JC220346  12/06/18    21:15:25     7403
************************************************************************
* NOM         : openmm.eso
* DESCRIPTION : Ouverture d'un fichier au format MATRIX MARKET (.mm)
* REFERENCES  : - The Matrix Market Exchange Formats: Initial Design,
*                 Boisvert R. F., Pozo R., Remington K. A. (Dec 1996)
*               - The Rutherford-Boeing Sparse Matrix Collection,
*                 Duff I. S., Grimes R. G., Lewis G. L. (Sep 1997)
************************************************************************
* HISTORIQUE :  4/12/2012 : JCARDO : création de la subroutine
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS DE COMPLÉTER LES COMMENTAIRES
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
* APPELÉ PAR : sormat.eso
************************************************************************

      SUBROUTINE OPENMM(CHNOMF,CHTYPE,CHTITR,
     &                  IVA1,IVA2,IVA3,
     &                  CVA1)

      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)

      EXTERNAL LONG


-INC PPARAM
-INC CCOPTIO

      CHARACTER*(*) CHNOMF,CHTYPE,CHTITR,CVA1
      CHARACTER*8   CHA8


*     ====================
*     OUVERTURE DU FICHIER
*     ====================

      OPEN(UNIT   = IOPER                 ,
     &     STATUS = 'UNKNOWN'             ,
     &     FILE   = CHNOMF(1:LONG(CHNOMF))//'.'//
     &              CHTYPE(1:LONG(CHTYPE))//'.mm',
     &     IOSTAT = IOS                   ,
     &     FORM   = 'FORMATTED'           )


*     ====================
*     ÉCRITURE DE L'ENTETE
*     ====================

*     Ligne d'entête (OBLIGATOIRE)
      WRITE(UNIT=IOPER,FMT='(A,A)')
     .'%%MatrixMarket ',CVA1

*     Nom du programme (commentaire facultatif)
      WRITE(UNIT=IOPER,FMT='("%",/,A,/,A)')
     .'% PROGRAMME',
     .'% CASTEM/SORMAT'

*     Utilisateur (commentaire facultatif)
      CALL GIBNAM(CHA8)
      CALL NETCHA(CHA8)
      WRITE(UNIT=IOPER,FMT='("%",/,A,/,A)')
     .'% UTILISATEUR',
     .'% '//CHA8(1:LONG(CHA8))

*     Date (commentaire facultatif)
      CALL GIBDAT(IJOUR,IMOIS,IANNEE)
      IANNEE=MOD(IANNEE,100)+2000
      WRITE(UNIT=IOPER,FMT='("%",/,A,/,A,I2.2,A1,I2.2,A1,I4)')
     .'% DATE',
     .'% ',IJOUR,'/',IMOIS,'/',IANNEE

*     Type de contenu
      WRITE(UNIT=IOPER,FMT='("%",/,A)')
     .'% CONTENU'
      WRITE(UNIT=IOPER,FMT='(A,A)')
     .'% ',CHTYPE(1:LONG(CHTYPE))

*     Titre (commentaire facultatif)
      WRITE(UNIT=IOPER,FMT='("%",/,A)')
     .'% TITRE'
      LC=LONG(CHTITR)
      IF (LC.GT.0) THEN
          WRITE(UNIT=IOPER,FMT='(A,A)')
     .    '% ',CHTITR(1:LC)
      ELSE
          WRITE(UNIT=IOPER,FMT='(A,A)')
     .    '% ',CHNOMF(1:LONG(CHNOMF))
      ENDIF

*     Nb de lignes et de colonnes + nb de valeurs non nulles si besoin
      IF (IVA3.EQ.0) THEN
          WRITE(IOPER,FMT='(I12,1X,I12)') IVA1,IVA2
      ELSE
          WRITE(IOPER,FMT='(I12,2(1X,I12))') IVA1,IVA2,IVA3
      ENDIF



      RETURN

      END


