[updated 8.Sep.2008]

Librairie assembl > Fichier isvecp.f

Qui appelle isvecp ?

line
      SUBROUTINE ISVECP (NMMATR,NVMATR,NMVECT,NVVECT,NIVIMP,IMPFCH)
line
  Auteur : D.Martin (24 Aout 2000)
  Derniere modification : D.Martin (24 Aout 2000)
  Version 1.0.0
 
  Pour tester si un ou des vecteurs sont vecteurs propres d'un matrice ou non
 
 -- Arguments d'entree --
  NMMATR nom du terme contenant la matrice
  NVMATR niveau du terme contenant la matrice
  NMVECT nom du terme contenant les vecteurs
  NVVECT niveau du terme contenant les vecteurs
  NIVIMP niveau d'impression
  IMPFCH unite logique d'impression du resultat
line
      CHARACTER*(*) NMMATR,NMVECT
      INTEGER       NVMATR,NVVECT,NIVIMP,IMPFCH
 
      INCLUDE 'CONTEX'
      INCLUDE 'ALLOC'
 
      CHARACTER PRFXAS*8
      REAL      VALPRO,ECART,ECARTM,SEUIL
      INTEGER   KLTERM
      INTEGER   MCMTRM,MCDTRM,LGETRM,NBTERM,INCTRM,NCHTRM,NUTERM
     &         ,NVINUT,ITVECT,KTYCAL,KUKALE,KUDONN,KTYSYM,NVDSMV,KUINCV
     &         ,KVDUMV,NBVECT,KVNUMV,NUINCV,NVDUMV,NBNELV,NVNUMV,KNSTOK
     &         ,KVSTOK,NVCOOR,KATRDO,NIVIVC,ADTRVE
     &         ,LGVECT,MCVECT,MCVEC1,MCVEC2,LGRESU,MCRESU,MCRES1,MCRES2
     &         ,NBLIGN,NUVECT,NULIGN
      CHARACTER     ERCODE*120,VECRES*6
      COMMON/FORMAH/ERCODE
line
      CALL PRFXMJ (1,'*IsVecP*')
      SEUIL=1.E-6
 
      VECRES='VecZzZ'
      CALL TBAR2  (ERCODE,'#OMTRM',1,MCMTRM,'$SDTRM',1,MCDTRM)
      CALL SDEXDB (IST(MCDTRM),LGETRM,NBTERM,INCTRM,NCHTRM)             !utilite
 
 --   Caracteristiques du vecteur
 
      NUTERM=KLTERM (NMVECT,NVVECT,AST(MCMTRM),IST(MCDTRM))             !sdexplo
      IF (NUTERM.LE.0) CALL ERTERM (1,NMVECT,NVVECT)                    !utilite
      ADTRVE=LGETRM+(NUTERM-1)*INCTRM
      CALL GETTRM (IST(MCDTRM+ADTRVE)  ,NVINUT,ITVECT,KTYCAL,KUKALE
     &            ,KUDONN,KTYSYM,NVDSMV,KUINCV,KVDUMV,NBVECT,KVNUMV
     &            ,NUINCV,NVDUMV,NBNELV,NVNUMV,KNSTOK,KVSTOK,NVCOOR
     &            ,KATRDO,NIVIVC)                                       !sdexplo
      Il s'agit a priori d'un vecteur colonne
      IF (KUINCV.NE.NDFINC) THEN
         NBVECT=NBNELV
      ENDIF
 
      CALL MATVEC (NMMATR,NVMATR,NMVECT,NVVECT,VECRES,0,-1)             !assembl
 
      CALL TBRR2  (ERCODE,NMVECT,NVVECT,LGVECT,VECRES,0,LGRESU)
      NBLIGN=LGRESU/NBVECT
      CALL TBAR2  (ERCODE,NMVECT,NVVECT,MCVECT,VECRES,0,MCRESU)
 
      MCVEC1=MCVECT
      MCRES1=MCRESU
      DO 20 NUVECT=1,NBVECT
         MCVEC2=MCVEC1
         MCRES2=MCRES1
         DO 11 NULIGN=1,NBLIGN
            IF (ABS(RST(MCVEC2)).GT.SEUIL.AND.
     &          ABS(RST(MCRES2)).GT.SEUIL) THEN
                Candidat a la valeur propurete
                VALPRO=RST(MCRES2)/RST(MCVEC2)
                GOTO 13
            ENDIF
11       CONTINUE
 
         L'un des vecteurs est nul, donc pas vecteur propre
         WRITE (IMPFCH,10000) PRFXAS(0),NUVECT
         GOTO 19
 
13       MCVEC2=MCVEC1
         MCRES2=MCRES1
         ECARTM=0.
         DO 15 NULIGN=1,NBLIGN
            ECART=ABS(RST(MCRES2)-VALPRO*RST(MCVEC2))
            IF (ECART.GT.SEUIL) THEN
               Le candidat a la valeur propurete ne convient pas
               WRITE (IMPFCH,10001) PRFXAS(0),NUVECT
               GOTO 19
            ENDIF
            IF (ECART.GT.ECARTM) ECARTM=ECART
15       CONTINUE
 
         Le vecteur est vecteur propre
         WRITE (IMPFCH,10002) PRFXAS(0),NUVECT,VALPRO,ECARTM
 
         Passage au vecteur sivant
19       MCVEC1=MCVEC1+NBLIGN
         MCRES1=MCRES1+NBLIGN
20    CONTINUE
 
      CALL TBSAVE (NMVECT,NVVECT)
      CALL TBTUER (VECRES,0)                                        

99999 CALL PRFXMJ (-1,'*IsVecP*')
      RETURN
line
10000 FORMAT (T2,A,' Le ',I3,'eme vecteur est nul!')
10001 FORMAT (T2,A,' Le ',I3,'eme vecteur n''est pas vecteur propre.')
10002 FORMAT (T2,A,' Le ',I3,'eme vecteur est vecteur propre avec'
     &,' Lambda=',E10.4,' (a ',E10.4,' pres).')

                                                                    END !IsSyme
line
top

isvecp est appelé dans

top