[updated 6.Jul.2002]

Librairie multmat > Fichier moliv.f

Qui appelle moliv ?

line
      SUBROUTINE MOLIV (KOLPR,KOLDR,PRPLM,DRPLM,LGCUM,IPLAGE
     &                 ,TYPM,MCM,RSTM,CSTM,TYPV,MCV,RSTV,CSTV
     &                 ,COEFF,IADPR,IADDR)
line
  Auteur : D.Martin (Octobre 1990)
  Derniere modification : D.Martin (17 octobre 1990)
  Version 1.0.0
   
      Produit scalaire partiel d'une ligne d'une matrice stockee 'MORSE ligne' 
      par un vecteur : 
      Somme(Kolpr,Koldr) Mij x Vj si i est le numero de ligne (implicite)  
   
 -- Arguments d'entree -- 
  KOLPR  No de 1ere colonne de la ligne pour laquelle a lieu la multiplication 
  KOLDR  numero de derniere colonne de la ligne    "      "      "      "  
  PRPLM  numero de 1ere plage de la ligne ou de la plage de la ligne contenant 
         la colonne KOLPR  
  DRPLM  numero de derniere plage ou de la plage de la ligne contenant 
         la colonne KOLDR  
  LGCUM  longueur cumulee des lignes precedant la ligne en cours
  IPLAGE tableau des numeros de debut de plage et des longueurs cumulees
         du compactage 'MORSE' ligne de la matrice 
  TYPM   type (REEL,COMPLEXE) de la matrice
  MCM    adresse de la matrice dans le tableau reel RSTM ou complexe CSTM  
  RSTM   tableau contenant la matrice (cas reel)
  CSTM   tableau contenant la matrice (cas complexe)
  TYPV   type (REEL,COMPLEXE) du vecteur
  MCV    adresse du vecteur dans le tableau reel RSTV ou complexe CSTV 
  RSTV   tableau contenant le vecteur (cas reel)
  CSTV   tableau contenant le vecteur (cas complexe)
   
 -- Argument de sortie -- 
  COEFF  resultat COMPLEXE du produit quel que soient les types de la matrice  
         et du vecteur 
  IADPR  adresse relative de 1er coeff pour lequel a lieu la multiplication
  IADPR  adresse relative de dernier coeff pour lequel a lieu la multiplication
   
 - Exemples d'utilisation -- 
  MC VC  : produit matrice 'Morse ligne' par un vecteur
           Kolpr=1, Koldr=numero de derniere colonne
  RS MOL : resolution d'un systeme triangulaire inferieur a diagonale unite
           Kolpr=1  , Koldr=i-1
  RS MOU : resolution d'un systeme triangulaire superieur  
           Kolpr=i+1, Koldr=numero de derniere colonne 
line
      CHARACTER*(*) TYPM,TYPV  
      INTEGER       PRPLM,DRPLM,IPLAGE(2,*)
      REAL          RSTM(*),RSTV(*)
      COMPLEX       CSTM(*),CSTV(*),COEFF,DOTPRO
line
      COEFF=0. 
      LGCUMU=LGCUM 
      IADPR=LGCUMU 
      IADDR=LGCUMU 
   
      Recherche de la plage de la ligne contenant la colonne KOLPR 
   
      DO 1 NUPL1=PRPLM,DRPLM
         Adresse du premier coeff. de la plage NUPL1 de la matrice 
         longueur cumulee, numeros de debut et de fin de plage 
         KOLDEB=IPLAGE(1,NUPL1)
         IADLIK=LGCUMU+1
         LGCUMU=IPLAGE(2,NUPL1)
         KOLFIN=KOLDEB+LGCUMU-IADLIK
         IF (KOLFIN.GE.KOLPR) GOTO 2
1     CONTINUE 
      GOTO 99999  
   
      Multiplication pour les coeff. de la plage contenant la colonne KOLPR
   
2     KOL1=MAX (KOLDEB,KOLPR)
      IADPR=IADLIK+KOL1-KOLDEB 
      KOL2=MIN (KOLFIN,KOLDR)
      Inline de Tscalt
      MCT2=MCV-1+KOL1
      IF (TYPV(1:1).EQ.TYPM(1:1)) THEN  
         IF (TYPM(1:1).EQ.'R') THEN 
            DOTPRO=0.
            DO 5 ICOEF=MCM-1+IADPR,MCM-1+IADPR+KOL2-KOL1
               DOTPRO=DOTPRO+RSTM(ICOEF)*RSTV(MCT2)
5              MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=MAX (IADPR,IADLIK+KOL2-KOLDEB)  
            Multiplic. pour les plages ne contenant pas
            les colonnes KOLPR et KOLDR  
            DO 10 NUPLM=NUPL1+1,DRPLM
               KOLDEB=IPLAGE(1,NUPLM)
               IADLIK=LGCUMU+1
               LGCUMU=IPLAGE(2,NUPLM)
               KOLFIN=KOLDEB+LGCUMU-IADLIK
               IF (KOLFIN.GE.KOLDR) GOTO 20  
               MCT2=MCV-1+KOLDEB
               DOTPRO=0.
               DO 9 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLFIN-KOLDEB
                  DOTPRO=DOTPRO+RSTM(ICOEF)*RSTV(MCT2)
9                 MCT2=MCT2+1 
               COEFF=COEFF+DOTPRO
               IADDR=IADLIK+KOLFIN-KOLDEB
10          CONTINUE 
            GOTO 99999  
            Multiplication pour les coeff. de la plage contenant
            le colonne KOLDR
20          IF (KOLDR.GE.KOLDEB) THEN
               MCT2=MCV-1+KOLDEB
               DOTPRO=0.
               DO 11 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLDR-KOLDEB
                  DOTPRO=DOTPRO+RSTM(ICOEF)*RSTV(MCT2)
11                MCT2=MCT2+1 
               COEFF=COEFF+DOTPRO
               IADDR=IADLIK+KOLDR-KOLDEB 
            ENDIF
 
         ELSEIF (TYPM(1:1).EQ.'C') THEN
 
            DOTPRO=0.
            DO 205 ICOEF=MCM-1+IADPR,MCM-1+IADPR+KOL2-KOL1
               DOTPRO=DOTPRO+CSTM(ICOEF)*CSTV(MCT2)
205            MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=MAX(IADPR,IADLIK+KOL2-KOLDEB)  
            DO 210 NUPLM=NUPL1+1,DRPLM
               KOLDEB=IPLAGE(1,NUPLM)
               IADLIK=LGCUMU+1
               LGCUMU=IPLAGE(2,NUPLM)
               KOLFIN=KOLDEB+LGCUMU-IADLIK
               IF (KOLFIN.GE.KOLDR) GOTO 220  
               MCT2=MCV-1+KOLDEB
               DOTPRO=0.
               DO 209 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLFIN-KOLDEB
                  DOTPRO=DOTPRO+CSTM(ICOEF)*CSTV(MCT2)
209               MCT2=MCT2+1 
               COEFF=COEFF+DOTPRO
               IADDR=IADLIK+KOLFIN-KOLDEB
210         CONTINUE 
            GOTO 99999  
220         IF (KOLDR.GE.KOLDEB) THEN
               MCT2=MCV-1+KOLDEB
               DOTPRO=0.
               DO 211 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLDR-KOLDEB
                  DOTPRO=DOTPRO+CSTM(ICOEF)*CSTV(MCT2)
211               MCT2=MCT2+1 
               COEFF=COEFF+DOTPRO
               IADDR=IADLIK+KOLDR-KOLDEB 
            ENDIF
 
         ENDIF
      ELSEIF (TYPM(1:1).EQ.'C') THEN
 
         DOTPRO=0.
         DO 305 ICOEF=MCM-1+IADPR,MCM-1+IADPR+KOL2-KOL1
            DOTPRO=DOTPRO+CSTM(ICOEF)*RSTV(MCT2)
305         MCT2=MCT2+1 
         COEFF=COEFF+DOTPRO
         IADDR=MAX(IADPR,IADLIK+KOL2-KOLDEB)  
         DO 310 NUPLM=NUPL1+1,DRPLM
            KOLDEB=IPLAGE(1,NUPLM)
            IADLIK=LGCUMU+1
            LGCUMU=IPLAGE(2,NUPLM)
            KOLFIN=KOLDEB+LGCUMU-IADLIK
            IF (KOLFIN.GE.KOLDR) GOTO 320  
            MCT2=MCV-1+KOLDEB
            DOTPRO=0.
            DO 309 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLFIN-KOLDEB
               DOTPRO=DOTPRO+CSTM(ICOEF)*RSTV(MCT2)
309            MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=IADLIK+KOLFIN-KOLDEB
310      CONTINUE 
         GOTO 99999  
320      IF (KOLDR.GE.KOLDEB) THEN
            MCT2=MCV-1+KOLDEB
            DOTPRO=0.
            DO 311 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLDR-KOLDEB
               DOTPRO=DOTPRO+CSTM(ICOEF)*RSTV(MCT2)
311            MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=IADLIK+KOLDR-KOLDEB 
         ENDIF
 
      ELSEIF (TYPM(1:1).EQ.'R') THEN
 
         DOTPRO=0.
         DO 405 ICOEF=MCM-1+IADPR,MCM-1+IADPR+KOL2-KOL1
            DOTPRO=DOTPRO+RSTM(ICOEF)*CSTV(MCT2)
405         MCT2=MCT2+1 
         COEFF=COEFF+DOTPRO
         IADDR=MAX(IADPR,IADLIK+KOL2-KOLDEB)  
         DO 410 NUPLM=NUPL1+1,DRPLM
            KOLDEB=IPLAGE(1,NUPLM)
            IADLIK=LGCUMU+1
            LGCUMU=IPLAGE(2,NUPLM)
            KOLFIN=KOLDEB+LGCUMU-IADLIK
            IF (KOLFIN.GE.KOLDR) GOTO 420  
            MCT2=MCV-1+KOLDEB
            DOTPRO=0.
            DO 409 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLFIN-KOLDEB
               DOTPRO=DOTPRO+RSTM(ICOEF)*CSTV(MCT2)
409            MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=IADLIK+KOLFIN-KOLDEB
410      CONTINUE 
         GOTO 99999  
420      IF (KOLDR.GE.KOLDEB) THEN
            MCT2=MCV-1+KOLDEB
            DOTPRO=0.
            DO 411 ICOEF=MCM-1+IADLIK,MCM-1+IADLIK+KOLDR-KOLDEB
               DOTPRO=DOTPRO+RSTM(ICOEF)*CSTV(MCT2)
411            MCT2=MCT2+1 
            COEFF=COEFF+DOTPRO
            IADDR=IADLIK+KOLDR-KOLDEB 
         ENDIF
 
      ENDIF
99999 CONTINUE 
                                                                    END !MoLiV
line
top

moliv est appelé dans (4 procédures)

movc.f (multmat) rsmol.f (syslin) rsmol1.f (syslin)
rsmou.f (syslin)    

top