Subversion Repositories OpenSees

Rev

Rev 969 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
969 mhscott 1
      SUBROUTINE RSSI (NN,IA,JA,A,RHS,U,IWKSP,NW,WKSP,IPARM,RPARM,IERR)
2
C       
3
C     ITPACK 2C MAIN SUBROUTINE  RSSI  (REDUCED SYSTEM SEMI-ITERATIVE)
4
C     EACH OF THE MAIN SUBROUTINES:   
5
C           JCG, JSI, SOR, SSORCG, SSORSI, RSCG, RSSI     
6
C     CAN BE USED INDEPENDENTLY OF THE OTHERS   
7
C       
8
C ... FUNCTION:   
9
C       
10
C          THIS SUBROUTINE, RSSI, DRIVES THE  REDUCED SYSTEM SI     
11
C          ALGORITHM.       
12
C       
13
C ... PARAMETER LIST:       
14
C       
15
C          N     INPUT INTEGER.  DIMENSION OF THE MATRIX. (= NN)    
16
C          IA,JA  INPUT INTEGER VECTORS.  THE TWO INTEGER ARRAYS OF 
17
C                 THE SPARSE MATRIX REPRESENTATION.       
18
C          A      INPUT D.P. VECTOR.  THE D.P. ARRAY OF THE SPARSE  
19
C                 MATRIX REPRESENTATION.
20
C          RHS    INPUT D.P. VECTOR.  CONTAINS THE RIGHT HAND SIDE  
21
C                 OF THE MATRIX PROBLEM.
22
C          U      INPUT/OUTPUT D.P. VECTOR.  ON INPUT, U CONTAINS THE 
23
C                 INITIAL GUESS TO THE SOLUTION. ON OUTPUT, IT CONTAINS 
24
C                 THE LATEST ESTIMATE TO THE SOLUTION.    
25
C          IWKSP  INTEGER VECTOR WORKSPACE OF LENGTH 3*N  
26
C          NW     INPUT INTEGER.  LENGTH OF AVAILABLE WKSP.  ON OUTPUT, 
27
C                 IPARM(8) IS AMOUNT USED.      
28
C          WKSP   D.P. VECTOR USED FOR WORKING SPACE.  RSSI 
29
C                 NEEDS THIS TO BE IN LENGTH AT LEAST  N + NB       
30
C                 HERE NB IS THE ORDER OF THE BLACK SUBSYSTEM       
31
C          IPARM  INTEGER VECTOR OF LENGTH 12.  ALLOWS USER TO SPECIFY
32
C                 SOME INTEGER PARAMETERS WHICH AFFECT THE METHOD.  IF
33
C          RPARM  D.P. VECTOR OF LENGTH 12. ALLOWS USER TO SPECIFY SOME 
34
C                 D.P. PARAMETERS WHICH AFFECT THE METHOD.
35
C          IER     OUTPUT INTEGER.  ERROR FLAG. (= IERR)  
36
C       
37
C ... RSSI SUBPROGRAM REFERENCES:     
38
C       
39
C          FROM ITPACK    BISRCH, CHEBY, CHGSI, DFAULT, ECHALL,     
40
C                         ECHOUT, ITERM, TIMER, ITRSSI, IVFILL,     
41
C                         PARSI, PERMAT, PERR, PERVEC, PMULT,     
42
C                         PRBNDX, PRSBLK, PRSRED, PSTOP, QSORT,     
43
C                         DAXPY, SBELM, SCAL, DCOPY, DDOT, SUM3,    
44
C                         TSTCHG, UNSCAL, VEVMW, VFILL, VOUT,       
45
C                         WEVMW       
46
C          SYSTEM         DABS, DLOG10, DBLE(AMAX0), DMAX1, DBLE(FLOAT),
47
C                         DSQRT       
48
C       
49
C     VERSION:  ITPACK 2C (MARCH 1982)
50
C       
51
C     CODE WRITTEN BY:  DAVID KINCAID, ROGER GRIMES, JOHN RESPESS   
52
C                       CENTER FOR NUMERICAL ANALYSIS     
53
C                       UNIVERSITY OF TEXAS     
54
C                       AUSTIN, TX  78712       
55
C                       (512) 471-1242
56
C       
57
C     FOR ADDITIONAL DETAILS ON THE   
58
C          (A) SUBROUTINE SEE TOMS ARTICLE 1982 
59
C          (B) ALGORITHM  SEE CNA REPORT 150    
60
C       
61
C     BASED ON THEORY BY:  DAVID YOUNG, DAVID KINCAID, LOU HAGEMAN  
62
C       
63
C     REFERENCE THE BOOK:  APPLIED ITERATIVE METHODS      
64
C                          L. HAGEMAN, D. YOUNG 
65
C                          ACADEMIC PRESS, 1981 
66
C       
67
C     **************************************************  
68
C     *               IMPORTANT NOTE                   *  
69
C     *                                                *  
70
C     *      WHEN INSTALLING ITPACK ROUTINES ON A      *  
71
C     *  DIFFERENT COMPUTER, RESET SOME OF THE VALUES  *  
72
C     *  IN  SUBROUTNE DFAULT.   MOST IMPORTANT ARE    *  
73
C     *                                                *  
74
C     *   DRELPR      MACHINE RELATIVE PRECISION       *  
75
C     *   RPARM(1)    STOPPING CRITERION               *  
76
C     *                                                *  
77
C     *   ALSO CHANGE SYSTEM-DEPENDENT ROUTINE         *  
78
C     *   SECOND USED IN TIMER                         *  
79
C     *                                                *  
80
C     **************************************************  
81
C       
82
C     SPECIFICATIONS FOR ARGUMENTS    
83
C       
84
      INTEGER IA(1),JA(1),IWKSP(1),IPARM(12),NN,NW,IERR  
85
      DOUBLE PRECISION A(1),RHS(NN),U(NN),WKSP(NW),RPARM(12)
86
C       
87
C     SPECIFICATIONS FOR LOCAL VARIABLES
88
C       
89
      INTEGER IB1,IB2,IDGTS,IER,IERPER,ITMAX1,JB3,LOOP,N,NB,NR,NRP1,N3
90
      DOUBLE PRECISION DIGIT1,DIGIT2,TEMP,TIME1,TIME2,TOL
91
C       
92
C *** BEGIN: ITPACK COMMON  
93
C       
94
      INTEGER IN,IS,ISYM,ITMAX,LEVEL,NOUT      
95
      COMMON /ITCOM1/ IN,IS,ISYM,ITMAX,LEVEL,NOUT
96
C       
97
      LOGICAL ADAPT,BETADT,CASEII,HALT,PARTAD  
98
      COMMON /ITCOM2/ ADAPT,BETADT,CASEII,HALT,PARTAD    
99
C       
100
      DOUBLE PRECISION BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA,
101
     *   QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA      
102
      COMMON /ITCOM3/ BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA,
103
     *   QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA      
104
C       
105
C *** END  : ITPACK COMMON  
106
C       
107
C ... VARIABLES IN COMMON BLOCK - ITCOM1
108
C       
109
C     IN     - ITERATION NUMBER       
110
C     IS     - ITERATION NUMBER WHEN PARAMETERS LAST CHANGED
111
C     ISYM   - SYMMETRIC/NONSYMMETRIC STORAGE FORMAT SWITCH 
112
C     ITMAX  - MAXIMUM NUMBER OF ITERATIONS ALLOWED       
113
C     LEVEL  - LEVEL OF OUTPUT CONTROL SWITCH   
114
C     NOUT   - OUTPUT UNIT NUMBER     
115
C       
116
C ... VARIABLES IN COMMON BLOCK - ITCOM2
117
C       
118
C     ADAPT  - FULLY ADAPTIVE PROCEDURE SWITCH  
119
C     BETADT - SWITCH FOR ADAPTIVE DETERMINATION OF BETA  
120
C     CASEII - ADAPTIVE PROCEDURE CASE SWITCH   
121
C     HALT   - STOPPING TEST SWITCH   
122
C     PARTAD - PARTIALLY ADAPTIVE PROCEDURE SWITCH
123
C       
124
C ... VARIABLES IN COMMON BLOCK - ITCOM3
125
C       
126
C     BDELNM - TWO NORM OF B TIMES DELTA-SUPER-N
127
C     BETAB  - ESTIMATE FOR THE SPECTRAL RADIUS OF LU MATRIX
128
C     CME    - ESTIMATE OF LARGEST EIGENVALUE   
129
C     DELNNM - INNER PRODUCT OF PSEUDO-RESIDUAL AT ITERATION N      
130
C     DELSNM - INNER PRODUCT OF PSEUDO-RESIDUAL AT ITERATION S      
131
C     FF     - ADAPTIVE PROCEDURE DAMPING FACTOR
132
C     GAMMA  - ACCELERATION PARAMETER 
133
C     OMEGA  - OVERRELAXATION PARAMETER FOR SOR AND SSOR  
134
C     QA     - PSEUDO-RESIDUAL RATIO  
135
C     QT     - VIRTUAL SPECTRAL RADIUS
136
C     RHO    - ACCELERATION PARAMETER 
137
C     RRR    - ADAPTIVE PARAMETER     
138
C     SIGE   - PARAMETER SIGMA-SUB-E  
139
C     SME    - ESTIMATE OF SMALLEST EIGENVALUE  
140
C     SPECR  - SPECTRAL RADIUS ESTIMATE FOR SSOR
141
C     DRELPR - MACHINE RELATIVE PRECISION       
142
C     STPTST - STOPPING PARAMETER     
143
C     UDNM   - TWO NORM OF U
144
C     ZETA   - STOPPING CRITERION     
145
C       
146
C ... INITIALIZE COMMON BLOCKS
147
C       
148
      LEVEL = IPARM(2)      
149
      NOUT = IPARM(4)      
150
      IF (LEVEL.GE.1) WRITE (NOUT,10)
151
   10 FORMAT ('0'///1X,'BEGINNING OF ITPACK SOLUTION MODULE  RSSI')
152
      IER = 0    
153
      IF (IPARM(1).LE.0) RETURN      
154
      N = NN      
155
      IF (IPARM(11).EQ.0) TIMJ1 = TIMER(DUMMY)  
156
      IF (LEVEL.GE.3) GO TO 20
157
      CALL ECHOUT (IPARM,RPARM,7)    
158
      GO TO 30    
159
   20 CALL ECHALL (N,IA,JA,A,RHS,IPARM,RPARM,1)
160
   30 TEMP = 5.0D2*DRELPR  
161
      IF (ZETA.GE.TEMP) GO TO 50      
162
      IF (LEVEL.GE.1) WRITE (NOUT,40) ZETA,DRELPR,TEMP    
163
   40 FORMAT ('0','*** W A R N I N G ************'/'0',  
164
     *   '    IN ITPACK ROUTINE RSSI'/' ','    RPARM(1) =',D10.3,  
165
     *   ' (ZETA)'/' ','    A VALUE THIS SMALL MAY HINDER CONVERGENCE '/
166
     *   ' ','    SINCE MACHINE PRECISION DRELPR =',D10.3/' ',      
167
     *   '    ZETA RESET TO ',D10.3)  
168
      ZETA = TEMP
169
   50 CONTINUE    
170
      TIME1 = RPARM(9)      
171
      TIME2 = RPARM(10)    
172
      DIGIT1 = RPARM(11)    
173
      DIGIT2 = RPARM(12)    
174
C       
175
C ... VERIFY N    
176
C       
177
      IF (N.GT.0) GO TO 70  
178
      IER = 71    
179
      IF (LEVEL.GE.0) WRITE (NOUT,60) N
180
   60 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
181
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
182
     *   '    INVALID MATRIX DIMENSION, N =',I8)
183
      GO TO 420  
184
   70 CONTINUE    
185
C       
186
C ... REMOVE ROWS AND COLUMNS IF REQUESTED      
187
C       
188
      IF (IPARM(10).EQ.0) GO TO 90    
189
      TOL = RPARM(8)
190
      CALL IVFILL (N,IWKSP,0)
191
      CALL VFILL (N,WKSP,0.0D0)      
192
      CALL SBELM (N,IA,JA,A,RHS,IWKSP,WKSP,TOL,ISYM,LEVEL,NOUT,IER)
193
      IF (IER.EQ.0) GO TO 90
194
      IF (LEVEL.GE.0) WRITE (NOUT,80) IER,TOL  
195
   80 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
196
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
197
     *   '    ERROR DETECTED IN SUBROUTINE  SBELM '/' ',  
198
     *   '    WHICH REMOVES ROWS AND COLUMNS OF SYSTEM '/' ',      
199
     *   '    WHEN DIAGONAL ENTRY TOO LARGE  '/' ','    IER = ',I5,5X,
200
     *   ' RPARM(8) = ',D10.3,' (TOL)')
201
C       
202
C ... INITIALIZE WKSP BASE ADDRESSES. 
203
C       
204
   90 IB1 = 1    
205
      IB2 = IB1+N
206
      JB3 = IB2+N
207
C       
208
C ... PERMUTE TO  RED-BLACK SYSTEM IF POSSIBLE  
209
C       
210
      NB = IPARM(9)
211
      IF (NB.GE.0) GO TO 110
212
      N3 = 3*N    
213
      CALL IVFILL (N3,IWKSP,0)
214
      CALL PRBNDX (N,NB,IA,JA,IWKSP,IWKSP(IB2),LEVEL,NOUT,IER)      
215
      IF (IER.EQ.0) GO TO 110
216
      IF (LEVEL.GE.0) WRITE (NOUT,100) IER,NB  
217
  100 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
218
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
219
     *   '    ERROR DETECTED IN SUBROUTINE  PRBNDX'/' ',  
220
     *   '    WHICH COMPUTES THE RED-BLACK INDEXING'/' ','    IER = ',I5
221
     *   ,' IPARM(9) = ',I5,' (NB)')  
222
      GO TO 420  
223
  110 IF (NB.GE.0.AND.NB.LE.N) GO TO 130
224
      IER = 74    
225
      IF (LEVEL.GE.1) WRITE (NOUT,120) IER,NB  
226
  120 FORMAT (/10X,'ERROR DETECTED IN RED-BLACK SUBSYSTEM INDEX'/10X,
227
     *   'IER =',I5,' IPARM(9) =',I5,' (NB)')  
228
      GO TO 420  
229
  130 IF (NB.NE.0.AND.NB.NE.N) GO TO 150
230
      NB = N/2    
231
      IF (LEVEL.GE.2.AND.IPARM(9).GE.0) WRITE (NOUT,140) IPARM(9),NB
232
  140 FORMAT (/10X,' IPARM(9) = ',I5,' IMPLIES MATRIX IS DIAGONAL'/10X,
233
     *   ' NB RESET TO ',I5)
234
C       
235
C ... PERMUTE MATRIX AND RHS
236
C       
237
  150 IF (IPARM(9).GE.0) GO TO 190    
238
      IF (LEVEL.GE.2) WRITE (NOUT,160) NB      
239
  160 FORMAT (/10X,'ORDER OF BLACK SUBSYSTEM = ',I5,' (NB)')
240
      CALL PERMAT (N,IA,JA,A,IWKSP,IWKSP(JB3),ISYM,LEVEL,NOUT,IER)  
241
      IF (IER.EQ.0) GO TO 180
242
      IF (LEVEL.GE.0) WRITE (NOUT,170) IER      
243
  170 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
244
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
245
     *   '    ERROR DETECTED IN SUBROUTINE  PERMAT'/' ',  
246
     *   '    WHICH DOES THE RED-BLACK PERMUTATION'/' ','    IER = ',I5)
247
      GO TO 420  
248
  180 CALL PERVEC (N,RHS,IWKSP)      
249
      CALL PERVEC (N,U,IWKSP)
250
C       
251
C ... INITIALIZE WKSP BASE ADDRESSES  
252
C       
253
  190 NR = N-NB  
254
C       
255
      NRP1 = NR+1
256
      IPARM(8) = N+NB      
257
      IF (NW.GE.IPARM(8)) GO TO 210  
258
      IER = 72    
259
      IF (LEVEL.GE.0) WRITE (NOUT,200) NW,IPARM(8)
260
  200 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
261
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
262
     *   '    NOT ENOUGH WORKSPACE AT ',I10/' ','    SET IPARM(8) =',I10
263
     *   ,' (NW)')
264
      GO TO 420  
265
C       
266
C ... SCALE LINEAR SYSTEM, U, AND RHS BY THE SQUARE ROOT OF THE     
267
C ... DIAGONAL ELEMENTS.    
268
C       
269
  210 CONTINUE    
270
      CALL VFILL (IPARM(8),WKSP,0.0D0)
271
      CALL SCAL (N,IA,JA,A,RHS,U,WKSP,LEVEL,NOUT,IER)    
272
      IF (IER.EQ.0) GO TO 230
273
      IF (LEVEL.GE.0) WRITE (NOUT,220) IER      
274
  220 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
275
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
276
     *   '    ERROR DETECTED IN SUBROUTINE  SCAL  '/' ',  
277
     *   '    WHICH SCALES THE SYSTEM   '/' ','    IER = ',I5)      
278
      GO TO 420  
279
  230 IF (LEVEL.LE.2) GO TO 250      
280
      WRITE (NOUT,240)      
281
  240 FORMAT (///1X,'IN THE FOLLOWING, RHO AND GAMMA ARE',
282
     *   ' ACCELERATION PARAMETERS')  
283
  250 IF (IPARM(11).NE.0) GO TO 260  
284
      TIMI1 = TIMER(DUMMY)  
285
C       
286
C ... ITERATION SEQUENCE    
287
C       
288
  260 IF (N.GT.1) GO TO 270
289
      U(1) = RHS(1)
290
      GO TO 320  
291
  270 ITMAX1 = ITMAX+1      
292
      DO 290 LOOP = 1,ITMAX1
293
         IN = LOOP-1
294
         IF (MOD(IN,2).EQ.1) GO TO 280
295
C       
296
C ... CODE FOR THE EVEN ITERATIONS.   
297
C       
298
C     U           = U(IN)   
299
C     WKSP(IB1)   = U(IN-1) 
300
C       
301
         CALL ITRSSI (N,NB,IA,JA,A,RHS,U,WKSP(IB1),WKSP(IB2))      
302
C       
303
         IF (HALT) GO TO 320
304
         GO TO 290
305
C       
306
C ... CODE FOR THE ODD ITERATIONS.    
307
C       
308
C     U           = U(IN-1) 
309
C     WKSP(IB1)   = U(IN)   
310
C       
311
  280    CALL ITRSSI (N,NB,IA,JA,A,RHS,WKSP(IB1),U,WKSP(IB2))      
312
C       
313
         IF (HALT) GO TO 320
314
  290 CONTINUE    
315
C       
316
C ... ITMAX HAS BEEN REACHED
317
C       
318
      IF (IPARM(11).NE.0) GO TO 300  
319
      TIMI2 = TIMER(DUMMY)  
320
      TIME1 = DBLE(TIMI2-TIMI1)      
321
  300 IF (LEVEL.GE.1) WRITE (NOUT,310) ITMAX    
322
  310 FORMAT ('0','*** W A R N I N G ************'/'0',  
323
     *   '    IN ITPACK ROUTINE RSSI'/' ','    FAILURE TO CONVERGE IN',
324
     *   I5,' ITERATIONS')  
325
      IER = 73    
326
      IF (IPARM(3).EQ.0) RPARM(1) = STPTST      
327
      GO TO 350  
328
C       
329
C ... METHOD HAS CONVERGED  
330
C       
331
  320 IF (IPARM(11).NE.0) GO TO 330  
332
      TIMI2 = TIMER(DUMMY)  
333
      TIME1 = DBLE(TIMI2-TIMI1)      
334
  330 IF (LEVEL.GE.1) WRITE (NOUT,340) IN      
335
  340 FORMAT (/1X,'RSSI  HAS CONVERGED IN ',I5,' ITERATIONS')      
336
C       
337
C ... PUT SOLUTION INTO U IF NOT ALREADY THERE. 
338
C       
339
  350 CONTINUE    
340
      IF (N.EQ.1) GO TO 360
341
      IF (MOD(IN,2).EQ.1) CALL DCOPY (N,WKSP(IB1),1,U,1)  
342
      CALL DCOPY (NR,RHS,1,U,1)      
343
      CALL PRSRED (NB,NR,IA,JA,A,U(NRP1),U)    
344
C       
345
C ... UNSCALE THE MATRIX, SOLUTION, AND RHS VECTORS.      
346
C       
347
  360 CALL UNSCAL (N,IA,JA,A,RHS,U,WKSP)
348
C       
349
C ... UN-PERMUTE MATRIX,RHS, AND SOLUTION       
350
C       
351
      IF (IPARM(9).GE.0) GO TO 390    
352
      CALL PERMAT (N,IA,JA,A,IWKSP(IB2),IWKSP(JB3),ISYM,LEVEL,NOUT,
353
     *   IERPER)  
354
      IF (IERPER.EQ.0) GO TO 380      
355
      IF (LEVEL.GE.0) WRITE (NOUT,370) IERPER  
356
  370 FORMAT ('0','*** F A T A L     E R R O R ************'/'0',  
357
     *   '    CALLED FROM ITPACK ROUTINE RSSI '/' ',      
358
     *   '    ERROR DETECTED IN SUBROUTINE  PERMAT'/' ',  
359
     *   '    WHICH UNDOES THE RED-BLACK PERMUTATION   '/' ',      
360
     *   '    IER = ',I5)  
361
      IF (IER.EQ.0) IER = IERPER      
362
      GO TO 420  
363
  380 CALL PERVEC (N,RHS,IWKSP(IB2))  
364
      CALL PERVEC (N,U,IWKSP(IB2))    
365
C       
366
C ... OPTIONAL ERROR ANALYSIS 
367
C       
368
  390 IDGTS = IPARM(12)    
369
      IF (IDGTS.LT.0) GO TO 400      
370
      IF (IPARM(2).LE.0) IDGTS = 0    
371
      CALL PERR (N,IA,JA,A,RHS,U,WKSP,DIGIT1,DIGIT2,IDGTS)
372
C       
373
C ... SET RETURN PARAMETERS IN IPARM AND RPARM  
374
C       
375
  400 IF (IPARM(11).NE.0) GO TO 410  
376
      TIMJ2 = TIMER(DUMMY)  
377
      TIME2 = DBLE(TIMJ2-TIMJ1)      
378
  410 IF (IPARM(3).NE.0) GO TO 420    
379
      IPARM(1) = IN
380
      IPARM(9) = NB
381
      RPARM(2) = CME
382
      RPARM(3) = SME
383
      RPARM(9) = TIME1      
384
      RPARM(10) = TIME2    
385
      RPARM(11) = DIGIT1    
386
      RPARM(12) = DIGIT2    
387
C       
388
  420 CONTINUE    
389
      IERR = IER  
390
      IF (LEVEL.GE.3) CALL ECHALL (N,IA,JA,A,RHS,IPARM,RPARM,2)    
391
C       
392
      RETURN      
393
      END
394
 
395
      SUBROUTINE ITRSSI (N,NNB,IA,JA,A,RHS,UB,UB1,DB)    
396
C       
397
C ... FUNCTION:   
398
C       
399
C          THIS SUBROUTINE, ITRSSI, PERFORMS ONE ITERATION OF THE   
400
C          REDUCED SYSTEM SEMI-ITERATION ALGORITHM.  IT IS
401
C          CALLED BY RSSI.  
402
C       
403
C ... PARAMETER LIST:       
404
C       
405
C          N      INPUT INTEGER.  DIMENSION OF THE MATRIX.
406
C          NB     INPUT INTEGER.  CONTAINS THE NUMBER OF BLACK POINTS 
407
C                 IN THE RED-BLACK MATRIX. (= NNB)
408
C          IA,JA  INPUT INTEGER VECTORS.  THE TWO INTEGER ARRAYS OF 
409
C                 THE SPARSE MATRIX REPRESENTATION.       
410
C          A      INPUT D.P. VECTOR.  THE D.P. ARRAY OF THE SPARSE  
411
C                 MATRIX REPRESENTATION.
412
C          RHS    INPUT D.P. VECTOR.  CONTAINS THE RIGHT HAND SIDE  
413
C                 OF THE MATRIX PROBLEM.
414
C          UB     INPUT D.P. VECTOR.  CONTAINS THE ESTIMATE FOR THE 
415
C                 SOLUTION ON THE BLACK POINTS AFTER IN ITERATIONS. 
416
C          UB1    INPUT/OUTPUT D.P. VECTOR.  ON INPUT, UB1 CONTAINS THE 
417
C                 SOLUTION VECTOR AFTER IN-1 ITERATIONS.  ON OUTPUT,
418
C                 IT WILL CONTAIN THE NEWEST ESTIMATE FOR THE SOLUTION
419
C                 VECTOR.  THIS IS ONLY FOR THE BLACK POINTS.       
420
C          DB     INPUT D.P. ARRAY.  DB CONTAINS THE VALUE OF THE   
421
C                 CURRENT PSEUDO-RESIDUAL ON THE BLACK POINTS.      
422
C       
423
C ... SPECIFICATIONS FOR ARGUMENTS    
424
C       
425
      INTEGER IA(1),JA(1),N,NNB      
426
      DOUBLE PRECISION A(1),RHS(N),UB(N),UB1(N),DB(NNB)  
427
C       
428
C ... SPECIFICATIONS FOR LOCAL VARIABLES
429
C       
430
      INTEGER NB,NR,NRP1    
431
      DOUBLE PRECISION CONST,C1,C2,C3,DNRM      
432
      LOGICAL Q1  
433
C       
434
C ... SPECIFICATIONS FOR FUNCTION SUBPROGRAMS   
435
C       
436
      DOUBLE PRECISION DDOT
437
      LOGICAL TSTCHG
438
C       
439
C *** BEGIN: ITPACK COMMON  
440
C       
441
      INTEGER IN,IS,ISYM,ITMAX,LEVEL,NOUT      
442
      COMMON /ITCOM1/ IN,IS,ISYM,ITMAX,LEVEL,NOUT
443
C       
444
      LOGICAL ADAPT,BETADT,CASEII,HALT,PARTAD  
445
      COMMON /ITCOM2/ ADAPT,BETADT,CASEII,HALT,PARTAD    
446
C       
447
      DOUBLE PRECISION BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA,
448
     *   QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA      
449
      COMMON /ITCOM3/ BDELNM,BETAB,CME,DELNNM,DELSNM,FF,GAMMA,OMEGA,QA,
450
     *   QT,RHO,RRR,SIGE,SME,SPECR,SPR,DRELPR,STPTST,UDNM,ZETA      
451
C       
452
C *** END  : ITPACK COMMON  
453
C       
454
C     DESCRIPTION OF VARIABLES IN COMMON BLOCKS IN SUBROUTINE RSSI  
455
C       
456
C ... COMPUTE UR(IN) INTO UB
457
C       
458
      NB = NNB    
459
      NR = N-NB  
460
      NRP1 = NR+1
461
      CALL DCOPY (NR,RHS,1,UB,1)      
462
      CALL PRSRED (NB,NR,IA,JA,A,UB(NRP1),UB)  
463
C       
464
C ... COMPUTE PSEUDO-RESIDUAL, DB(IN) 
465
C       
466
      CALL DCOPY (NB,RHS(NRP1),1,DB,1)
467
      CALL PRSBLK (NB,NR,IA,JA,A,UB,DB)
468
      CALL VEVMW (NB,DB,UB(NRP1))    
469
C       
470
C ... TEST FOR STOPPING     
471
C       
472
      DELNNM = DDOT(NB,DB,1,DB,1)    
473
      DNRM = DELNNM
474
      CONST = CME
475
      CALL PSTOP (NB,UB(NRP1),DNRM,CONST,2,Q1)  
476
      IF (HALT) GO TO 20    
477
      IF (.NOT.ADAPT) GO TO 10
478
C       
479
C ... TEST TO CHANGE PARAMETERS       
480
C       
481
      IF (.NOT.TSTCHG(2)) GO TO 10    
482
C       
483
C ... CHANGE PARAMETERS     
484
C       
485
      CALL VFILL (NR,UB1,0.D0)
486
      CALL PRSRED (NB,NR,IA,JA,A,DB,UB1)
487
      DNRM = DDOT(NR,UB1,1,UB1,1)    
488
      CALL CHGSI (DNRM,2)  
489
      IF (.NOT.ADAPT) GO TO 10
490
C       
491
C ... COMPUTE UB(N+1) AFTER CHANGING PARAMETERS 
492
C       
4883 fmk 493
      CALL ItDCOPY (NB,UB(NRP1),1,UB1(NRP1),1)    
494
      CALL ItDAXPY (NB,GAMMA,DB,1,UB1(NRP1),1)    
969 mhscott 495
      GO TO 20    
496
C       
497
C ... COMPUTE UB(N+1) WITHOUT CHANGE OF PARAMETERS
498
C       
499
   10 CALL PARSI (C1,C2,C3,2)
500
      CALL SUM3 (NB,C1,DB,C2,UB(NRP1),C3,UB1(NRP1))      
501
C       
502
C ... OUTPUT INTERMEDIATE INFORMATION 
503
C       
504
   20 CALL ITERM (NB,A(NRP1),UB(NRP1),DB,7)    
505
C       
506
      RETURN      
507
      END