31
32
33
34#include "implicit_f.inc"
35
36
37
38 INTEGER N, IADH(*),JCIH(*),IROW(*),JCOL(*)
40
41
42
43 INTEGER I, J, K, ISK, IEK, ISJ, IEJ, IC, IPTR
45
46 DO j = 1, n
47 irow(j) = 0
48 jcol(j) = 0
49 ENDDO
50
51 DO k = 1,n
52 isk = iadh(k)
53 iek = iadh(k+1)-1
54 DO j = isk, iek
55 ic = jcih(j)
56 wcol(ic) = h(j)
57 irow(ic) = 1
58 ENDDO
59
60 IF (diag(k)<=0.) GOTO 999
61 diag(k) = sqrt(diag(k))
62
63 j = jcol(k)
64100 CONTINUE
65 IF (j==0) GOTO 200
66 isj = irow(j)
67 iej = iadh(j+1)-1
68 lval = h(isj)
69 isj = isj + 1
70 IF (isj<iej) THEN
71 irow(j) = isj
72 iptr = j
73 j = jcol(j)
74 jcol(iptr) = jcol(jcih(isj))
75 jcol(jcih(isj)) = iptr
76 ELSE
77 j = jcol(j)
78 ENDIF
79 DO i = isj, iej
80 ic = jcih(i)
81 IF (irow(ic)/=0) THEN
82 wcol(ic) = wcol(ic) - lval*h(i)
83 ENDIF
84 ENDDO
85 GOTO 100
86200 CONTINUE
87
88 IF (isk<iek) THEN
89 iptr = jcih(isk)
90 jcol(k) = jcol(iptr)
91 jcol(iptr) = k
92 irow(k) = isk
93 ENDIF
94
95 DO j = isk, iek
96 ic = jcih(j)
97 t = wcol(ic)/diag(k)
98 diag(ic) = diag(ic) - t*t
99 h(j) = t
100 irow(ic) = 0
101 ENDDO
102 ENDDO
103
105 RETURN
106999 CONTINUE
108
109 RETURN
integer function cholfact(n, diag, h, iadh, jcih, wcol, irow, jcol)