Download rezolu.eso

Back to the list

   1 : C REZOLU    SOURCE    GOUNAND   12/11/12    21:15:07     7563           
   2 :       SUBROUTINE REZOLU(IDMAT,
   3 :      $     KS2B,
   4 :      $     IMPR,IRET)
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Z)
   7 : C************************************************************************
   8 : C     
   9 : C    RESOLUTION (MONTEE DESCENTE) D'UNE MATRICE SYMETRIQUE OU NON
  10 : C    PRECEDEMMENT TRIANGULEE PAR TRIAKS
  11 : C     
  12 : C    POINTEUR : EN ENTREE MATRIK CONTIENT LA MATRICE TRIANGULEE
  13 : C      B  CONTIENT LE SECOND MEMBRE
  14 : C      EN SORTIE B  CONTIENT LA SOLUTION
  15 : C     
  16 : C    VERSION OPTIMISEE EN GESTION MEMOIRE POUR LES TRES GROSSES
  17 : C    MATRICES. ON UTILISE L'ALGORITHME MRU (AVEC LA MODIFICATION
  18 : C    DANS OOOMWD) POUR LES BLOCS DE LA MATRICE. CECI EVITE DE TRANSFERER
  19 : C    SUR DISQUE LE RESTE DU CONTENU DE LA MEMOIRE, I.E. LES TABLEAUX
  20 : C    VITESSE, TEMPERATURE, ETC... QUI AURAIENT A ETRE RAPPELES DES
  21 : C    LA RESOLUTION TERMINEE.
  22 : C     
  23 : C************************************************************************
  24 : -INC CCOPTIO
  25 : -INC SMMATRIK
  26 :       POINTEUR KS2B.IZA
  27 :       POINTEUR ISAL.IZA
  28 :       POINTEUR ISAU.IZA
  29 : *STAT-INC SMSTAT
  30 :       SEGMENT IZD
  31 :       REAL*8 D(1)
  32 :       ENDSEGMENT
  33 : *
  34 :       INTEGER IMPR,IRET
  35 : * Fonctions
  36 :       REAL*8 DDOT
  37 : *     
  38 : * Executable statements
  39 : *
  40 :       IF (IMPR.GT.5) WRITE(IOIMP,*) 'Entrée dans rezolu'
  40 : *STAT      CALL INMSTA(MSTAT,1)
  41 :       SEGACT IDMAT
  42 :       SEGACT KS2B*MOD
  43 :       NBLK=IDESCL(/1)
  44 : C Descente
  45 :       IZD=IDIAG
  46 :       SEGACT IZD
  47 :       NTT=KS2B.A(/1)
  47 :       CALL OOOMRU(1)
  48 :       DO 305 IBLK=1,NBLK
  49 :          KJD=NLDBLK(IBLK)
  50 :          IF(IBLK.EQ.1)KJD=2
  51 :          KJF=NLDBLK(IBLK+1)-1
  52 :          ISAL=IDESCL(IBLK)
  53 :          SEGACT ISAL
  54 :          DO 300 N=KJD,KJF
  55 :             KDEB=N-KZA(N)+1
  56 :             LA=KZA(N)-1
  57 :             IDECI=NUIA(N,2)
  58 :             IF (LA.NE.0) THEN
  59 :                 US=DDOT(LA,ISAL.A(IDECI+1),1,KS2B.A(KDEB),1)
  60 :             ELSE
  61 :                 US=0.D0
  62 :             ENDIF
  63 :             KS2B.A(N)=(KS2B.A(N)-US)
  64 :  300     CONTINUE
  65 :          SEGDES ISAL*MRU
  66 :  305  CONTINUE
  67 : C      segact KS2B
  68 : C      WRITE(IOIMP,*) 'Descente'
  69 : C      WRITE(IOIMP,*) 'KS2B'
  70 : C      WRITE (IOIMP,2022) (KS2B.A(II),II=1,KS2B.A(/1))
  71 : C 2022 FORMAT(10(1X,1PG12.5))
  72 : 
  72 : *STAT      CALL PRMSTA('Descente',MSTAT,1)
  72 :       CALL DIVISE(NTT,KS2B.A,KS2B.A,D)
  73 :       SEGDES IZD*MRU
  73 : *STAT      CALL PRMSTA('Division',MSTAT,1)
  74 : C Remontee
  75 :       DO 304 KBLK=1,NBLK
  76 :          IBLK=NBLK-KBLK+1
  77 :          KJD=NLDBLK(IBLK)
  78 :          KJF=NLDBLK(IBLK+1)-1
  79 :          ISAU=IDESCU(IBLK)
  80 :          SEGACT ISAU
  81 :          DO 302 N=KJF,KJD,-1
  82 :             KDEB=N-KZA(N)
  83 :             SA=-KS2B.A(N)
  84 :             I0=NUIA(N,2)
  85 :             LGL=KZA(N)-1
  86 :             IF (LGL.NE.0)
  86 :      >      CALL DAXPY(LGL,SA,ISAU.A(I0+1),1,KS2B.A(KDEB+1),1)
  87 :  302     CONTINUE
  88 :          SEGDES ISAU*MRU
  89 :  304  CONTINUE
  89 :       CALL OOOMRU(0)
  90 :       SEGDES KS2B
  91 :       SEGDES IDMAT
  91 : *STAT      CALL PRMSTA('Remontée',MSTAT,1)
  92 : *
  93 : * Normal termination
  94 : *
  95 :       IRET=0
  96 :       RETURN
  97 : *
  98 : * Format handling
  99 : *
 100 : *
 101 : * Error handling
 102 : *
 103 :  9999 CONTINUE
 104 :       IRET=1
 105 :       WRITE(IOIMP,*) 'An error was detected in subroutine rezolu'
 106 :       RETURN
 107 : *
 108 : * End of subroutine REZOLU
 109 : *
 110 :       END
 111 :  
 112 :  
 113 :  
 114 :  
 115 :  
 116 :  
 117 :  
 118 :  
 119 :  

© Cast3M 2003 - All rights reserved.
Disclaimer