C ARPINI    SOURCE    BP208322  20/02/06    21:15:06     10512          
      SUBROUTINE ARPINI (NVAL,NK,SYM,CHOLE,INVER,
     &                                 PIRE,SIGMA,CHOIX,IPMAUP,MAXITE)

***********************************************************************
*
*                          A R P I N I
*
* FONCTION:
* ---------
*
*     SPECIFICATION DES PARAMETRES D'ENTREE + CREATION DES VARIABLES DE
*     TRAVAIL D'ARPACK EN FONCTION DU TYPE DE PROBLEME ETUDIE
*
*
* PARAMETRES:  (E)=ENTREE   (S)=SORTIE
* -----------
*
*     NVAL  ENTIER     (E)    NOMBRE DE MODES PROPRES CALCULES
*
*     NK    ENTIER     (E)    DIMENSION DU PROBLEME
*
*     SYM     LOGIQUE    (E)    PROBLEME SYMETRIQUE OU NON
*
*     CHOLE   LOGIQUE    (E)    CHOLESKY NON ALTERNATIVE POSSIBLE
*
*     INVER   LOGIQUE    (E)   .TRUE. -> PRODUIT SCALAIRE X'KX
*                              .FALSE. -> PRODUIT SCALAIRE X'MX
*
*     SIGMA   COMPLEX DP (E)    VALEUR PROPRE DE SHIFT
*
*     CHOIX   CHAINE*2     (E)    VALEURS PROPRES VOULUES
*                                      LM - VP DE MODULE MAX
*                                      SM - VP DE MODULE MIN
*                                      LR - VP DE PARTIE R MAX
*                                      SR - VP DE PARTIE R MIN
*                                      LI - VP DE PARTIE I MAX
*                                      SI - VP DE PARTIE I MIN
*                                      LA - VP MAX
*                                      SA - VP MAX
*                                      BE - VP DE CHAQUE COTE
*
*     IPMAUP  ENTIER     (E/S)  POINTEUR OBJETS ARPACK
*
*     MAXITE  ENTIER    (E)     NOMBRE MAXIMAL D'ITERATIONS AUTORISE
*
*
* SOUS-PROGRAMMES APPELES:
* ------------------------
*
*     NEANT
*
* AUTEUR, DATE DE CREATION:
* -------------------------
*
*     PASCAL BOUDA     29 JUIN 2015
*
* LANGAGE:
* --------

*
*     FORTRAN 77 & 90
*
***********************************************************************


-INC PPARAM
-INC CCOPTIO
-INC TARWORK

      INTEGER NVAL
      INTEGER NK
      LOGICAL SYM
      LOGICAL CHOLE
      LOGICAL INVER
      LOGICAL PIRE
      COMPLEX*16 SIGMA
      CHARACTER*2 CHOIX
      INTEGER IPMAUP
      INTEGER MAXITE


      COMPLEX*16 ZERO

      ZERO =CMPLX(0.D0,0.D0)
      ndim=NK

*Attention: ncv ne doit pas dépasser le nombre d'inconnues vraies
      ncv=min(2*NVAL+8,NK)

      lnev=NVAL+1

*taille de l'espace de travail qui differe du type de probleme
      IF (SYM) THEN
        lworkl=ncv**2+8*ncv
        lipntr=11
      ELSE
        lworkl=3*ncv**2+6*ncv
        lipntr=14
      ENDIF

      SEGINI MAUP

      ido=0
      info=1
      which=CHOIX

      iparam(1)=1
      iparam(3)=MAXITE
      iparam(4)=1
      iparam(7)=3

* Si Chole ou inver le problème n'est pas genéralise (matrice identite
*dans le second membre) + differentiation du probleme avec shift ou non
      IF (.NOT. INVER) THEN

        IF (SIGMA .EQ. ZERO) THEN
          IF (PIRE) THEN
            bmat='I'
          ELSE
            bmat='G'
          ENDIF
        ELSE
          IF (CHOLE) THEN
            bmat='I'
          ELSE
            bmat='G'
          ENDIF
        ENDIF

*      -petit message informatif
        IF (IIMPI.GE.1) THEN

          IF (bmat .EQ. 'G') then

          WRITE(IOIMP,*)'----------- Shift-and-Invert mode -----------'
          WRITE(IOIMP,*)'Resolution de :  K*x = lambda*M*x'
          IF (INVER) THEN
          WRITE(IOIMP,*)'Avec modes K-orthgonaux (K semi-def pos)'
          ELSE
          WRITE(IOIMP,*)'Avec modes M-orthgonaux (M semi-def pos)'
          ENDIF
          WRITE(IOIMP,*)'OP = (inv[K - sigma*M])*M  and  B = M'

          ELSE

          WRITE(IOIMP,*)'----------- Shift-and-Invert mode -----------'
          WRITE(IOIMP,*)'Resolution de :  K*x = lambda*M*x'
          WRITE(IOIMP,*)'OP = inv[K]*M  and  B = I'

          ENDIF

        ENDIF

      ELSE

c *      -petit message informatif
c         IF (IIMPI.GE.1) THEN
c         WRITE(IOIMP,*)'--------------- Buckling mode ---------------'
c         WRITE(IOIMP,*)'Resolution de :  K*x = lambda*KG*x'
c         WRITE(IOIMP,*)'K symetrique semi-defini positif, KGsymetrique'
c         WRITE(IOIMP,*)'OP = (inv[K - sigma*KG])*K  and  B = K'
c         ENDIF
c         iparam(7)=4
        bmat='G'

      ENDIF

      eigvec=.TRUE.
      nev=NVAL
      howmny='A'
      ldv=NK

      IPMAUP=MAUP
c       SEGDES MAUP


      END
 
