File: dppfa.f

package info (click to toggle)
x13as 1.1-B39-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bullseye
  • size: 8,700 kB
  • sloc: fortran: 110,641; makefile: 14
file content (97 lines) | stat: -rw-r--r-- 2,446 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
**==dppfa.f    processed by SPAG 4.03F  at 09:48 on  1 Mar 1994
      SUBROUTINE dppfa(Ap,N,Info)
      IMPLICIT NONE
      INTEGER N,Info
      DOUBLE PRECISION dpmpar,mprec,Ap(*)
      EXTERNAL dpmpar
C
C     DPPFA FACTORS A DOUBLE PRECISION SYMMETRIC POSITIVE DEFINITE
C     MATRIX STORED IN PACKED FORM.
C
C     DPPFA IS USUALLY CALLED BY DPPCO, BUT IT CAN BE CALLED
C     DIRECTLY WITH A SAVING IN TIME IF  RCOND  IS NOT NEEDED.
C     (TIME FOR DPPCO) = (1 + 18/N)*(TIME FOR DPPFA) .
C
C     ON ENTRY
C
C        AP      DOUBLE PRECISION (N*(N+1)/2)
C                THE PACKED FORM OF A SYMMETRIC MATRIX  A .  THE
C                COLUMNS OF THE UPPER TRIANGLE ARE STORED SEQUENTIALLY
C                IN A ONE-DIMENSIONAL ARRAY OF LENGTH  N*(N+1)/2 .
C                SEE COMMENTS BELOW FOR DETAILS.
C
C        N       INTEGER
C                THE ORDER OF THE MATRIX  A .
C
C     ON RETURN
C
C        AP      AN UPPER TRIANGULAR MATRIX  R , STORED IN PACKED
C                FORM, SO THAT  A = TRANS(R)*R .
C
C        INFO    INTEGER
C                = 0  FOR NORMAL RETURN.
C                = K  IF THE LEADING MINOR OF ORDER  K  IS NOT
C                     POSITIVE DEFINITE.
C
C
C     PACKED STORAGE
C
C          THE FOLLOWING PROGRAM SEGMENT WILL PACK THE UPPER
C          TRIANGLE OF A SYMMETRIC MATRIX.
C
C                K = 0
C                DO 20 J = 1, N
C                   DO 10 I = 1, J
C                      K = K + 1
C                      AP(K) = A(I,J)
C             10    CONTINUE
C             20 CONTINUE
C
C     LINPACK.  THIS VERSION DATED 08/14/78 .
C     CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
C
C     SUBROUTINES AND FUNCTIONS
C
C     BLAS DDOT
C     FORTRAN DSQRT
C
C     INTERNAL VARIABLES
C
      DOUBLE PRECISION ddot,t
      DOUBLE PRECISION s
      INTEGER j,jj,jm1,k,kj,kk
C     BEGIN BLOCK WITH ...EXITS TO 40
C
C
      mprec=dpmpar(1)
      jj=0
      DO j=1,N
       Info=j
       s=0.0D0
       jm1=j-1
       kj=jj
       kk=0
       IF(jm1.ge.1)THEN
        DO k=1,jm1
         kj=kj+1
         t=Ap(kj)-ddot(k-1,Ap(kk+1),1,Ap(jj+1),1)
         kk=kk+k
         t=t/Ap(kk)
         Ap(kj)=t
         s=s+t*t
        END DO
       END IF
       jj=jj+j
       s=Ap(jj)-s
C     ......EXIT
       IF(s.gt.0.0D0)THEN
        Ap(jj)=dsqrt(s)
       ELSE
        IF(s.ge.-mprec)Ap(jj)=0D0
c       ELSE
        GO TO 10
       END IF
      END DO
      Info=0
   10 RETURN
      END