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