Download psdilu.eso

Back to the list

   1 : C PSDILU    SOURCE    CHAT      05/01/13    02:37:23     5004           
   2 :       SUBROUTINE PSDILU(N,NNZ,ROWPTR,COLIND,VAL,
   3 :      $     DINV,
   4 :      $     Z,R)
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Z)
   7 : C***********************************************************************
   8 : C NOM         : PSDILU
   9 : C DESCRIPTION :
  10 : C    PSDILU solves the linear system Mz = r
  11 : C    M is a preconditionning matrix written as :
  12 : C                 M=(D+LA)D-1(D+UA) 
  13 : C    It is the D-ILU incomplete factorization of matrix A 
  14 : C    (computed in medilu.eso)
  15 : C    LA and UA correspond to the strictly lower and strictly
  16 : C    upper part of the matrix A.
  17 : C    Ax=b is a system we wish to solve by an iterative method.
  18 : C
  19 : C    A is stored in Compressed Row Storage (CRS, i.e. Morse)
  20 : C    In DINV, the INVERSE of the diagonal elements D 
  21 : C    of the D-ILU factorisation are stored.
  22 : C    They are calculated in subroutine mdilus (A symmetric)
  23 : C                        or subroutine mdilun (A non-symm.)
  24 : C      
  25 : C    No tests are made
  26 : C
  26 : C    Currently, this subroutine is called by : cgdilu, bcgsdi
  27 : C
  28 : C
  29 : C LANGAGE     : FORTRAN 77 + chouhia ESOPE (pour les E/S)
  30 : C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  31 : C               mél : gounand@semt2.smts.cea.fr
  32 : C REFERENCE (bibtex-like) :
  33 : C  @BOOK{templates,
  34 : C        AUTHOR={R.Barrett, M.Berry, T.F.Chan, J.Demmel, J.Donato,
  35 : C                J.Dongarra, V.Eijkhout, R.Pozo, C.Romine,
  36 : C                H. Van der Vorst},
  37 : C        TITLE={Templates for the Solution of Linear Systems :
  38 : C               Building Blocks for Iterative Methods},
  39 : C        PUBLISHER={SIAM}, YEAR={1994}, ADDRESS={Philadelphia,PA} }
  40 : C  -> URL : http://www.netlib.org/templates/Templates.html
  41 : C***********************************************************************
  42 : C APPELES : -
  43 : C***********************************************************************
  44 : C ENTREES            : N, NNZ, ROWPTR, COLIND, VAL,
  45 : C                      DINV, R
  46 : C ENTREES/SORTIES    : Z
  47 : C SORTIES            : -
  48 : C CODE RETOUR (IRET) : -
  49 : C     N      : nombre de degrés de liberté
  50 : C     NNZ    : nombre de valeurs non nulles de la matrice Morse
  51 : C     ROWPTR, COLIND, VAL : pointeur de ligne, index de colonne
  52 : C                           et valeurs de la matrice Morse A
  53 : C     DINV   : vecteur contenant les inverses des pivots 
  54 : C              de la factorisation D-ILU de A
  55 : C     R      : vecteur second membre du système à résoudre.
  56 : C     Z      : vecteur des inconnues du système à résoudre.
  57 : C              initialisé dans la subroutine appelante.
  58 : C***********************************************************************
  59 : C VERSION    : v1, 01/04/98, version initiale
  60 : C HISTORIQUE : v1, 01/04/98, création
  61 : C HISTORIQUE :
  62 : C HISTORIQUE :
  63 : C***********************************************************************
  64 : C Prière de PRENDRE LE TEMPS de compléter les commentaires
  65 : C en cas de modification de ce sous-programme afin de faciliter
  66 : C la maintenance !
  67 : C***********************************************************************
  68 : *
  69 : *     .. Scalar Arguments ..
  70 :       INTEGER  N,NNZ
  71 : *     ..
  72 : *     .. Array Arguments ..
  73 : *     .. Matrices stockées en Morse
  74 :       INTEGER ROWPTR(N+1)
  75 :       INTEGER COLIND(NNZ)
  76 :       REAL*8  VAL(NNZ)
  77 : *     .. Vecteurs
  78 :       REAL*8  DINV(N)
  79 :       REAL*8  Z(N),R(N)
  80 : *     
  81 : *     
  82 : *     .. Variables locales
  83 : *     .. Parameters
  84 :       REAL*8     ZERO
  85 :       PARAMETER (ZERO=0.0D0)
  86 : *     ..
  87 :       INTEGER IN,JN
  88 :       REAL*8 TMP
  89 : *     .. Executable Statements ..
  90 : *
  91 : *
  92 : C     On effectue une montée-descente classique
  93 : C
  94 : C     Montée :
  95 : C     Zi=(1/Dii)(Ri- Somme(ji) [UijZj])
 119 : C
 120 : C Meme optimisation que ci-dessus
 121 : C
 122 :       DO 200 IN=N-1,1,-1
 123 :          TMP=ZERO
 124 :          IR=ROWPTR(IN+1)-1
 125 :          IRFIN=ROWPTR(IN)
 126 :  201     CONTINUE
 127 :          JN=COLIND(IR)
 128 :          IF (JN.GT.IN) THEN
 129 :             TMP=TMP+(VAL(IR)*Z(JN))
 130 :             IR=IR-1
 131 :             IF (IR.GE.IRFIN) GOTO 201
 132 :          ENDIF
 133 :          Z(IN)=Z(IN)-DINV(IN)*TMP
 134 :  200  CONTINUE
 135 : *     
 136 : *     Normal termination
 137 : *     
 138 :       RETURN
 139 : *     
 140 : *     End of PSDILU.
 141 : *     
 142 :       END
 143 : 
 144 :  
 145 :  

© Cast3M 2003 - All rights reserved.
Disclaimer