File: matpak.f

package info (click to toggle)
mopac7 1.15-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, jessie, jessie-kfreebsd, stretch
  • size: 3,748 kB
  • ctags: 5,768
  • sloc: fortran: 35,321; sh: 9,039; ansic: 417; makefile: 80
file content (127 lines) | stat: -rw-r--r-- 3,882 bytes parent folder | download | duplicates (8)
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
CCCCCCCCCCCCCCCCCC     MATHEMATICAL PACKAGE     CCCCCCCCCCCCCCCCCCCCCCC
CCCCCCC    MOST OF THESE ROUTINE ARE FULLY VECTORIZED ON CRAY-1  CCCCCC
CCCCCCC    THEY ARE ROUGHLY RESPONSIBLE OF 70% OF THE CPU TIME   CCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      DOUBLE PRECISION FUNCTION SDOT (N,X,IX,Y,IY)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
      DIMENSION X(*),Y(*)
C     SDOT=DOT PRODUCT OF VECTOR X, STEP IX, BY VECTOR Y, STEP IY,
C     N ELEMENTS.
C     SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE).
      J=1
      SDOT=0.D0
      DO 10 I=1,(N-1)*IX+1,IX
         SDOT=SDOT+X(I)*Y(J)
   10 J=J+IY
      RETURN
      END
      SUBROUTINE SCOPY (N,X,IX,Y,IY)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     COPY VECTOR X, STEP IX ONTO VECTOR Y, STEP IY, N ELEMENTS.
C     SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE).
      DIMENSION X(*),Y(*)
      I=1
      DO 10 J=1,IY*(N-1)+1,IY
         Y(J)=X(I)
   10 I=I+IX
      RETURN
      END
      SUBROUTINE SAXPY(N,A,X,IX,Y,IY)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     VECTOR INCREMENT Y=Y+A*X WITH X & Y VECTORS OF LENGTH N, A SCALAR.
C     IX STEP OF X, IY STEP OF Y.
C     SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE).
      DIMENSION X(*),Y(*)
      I=1
      DO 10 J=1,IY*(N-1)+1,IY
         Y(J)=Y(J)+A*X(I)
   10 I=I+IX
      RETURN
      END
      SUBROUTINE MXM(A,NAR,B,NBR,C,NCC)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     RECTANGULAR MATRIX PRODUCT C=A*B.
C     EACH MATRIX IS ENTIRELY FULLFILLED AND PACKED.
C     SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE).
      DIMENSION A(NAR,NBR),B(NBR,NCC),C(NAR,NCC)
      DO 20 J=1,NCC
         DO 10 I=1,NAR
   10    C(I,J)=0.D0
         DO 20 K=1,NBR
            DO 20 I=1,NAR
   20 C(I,J)=C(I,J)+A(I,K)*B(K,J)
      RETURN
      END
      SUBROUTINE MXMT (A,NAR,B,NBR,C,NCC)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     MATRIX PRODUCT C(NAR,NCC) = A(NAR,NBR) * (B(NCC,NBR))'
C     ALL MATRICES RECTANGULAR , PACKED.
      DIMENSION A(NAR,NBR),B(NCC,NBR),C(NAR,NCC)
      DO 20 J=1,NCC
         DO 10 I=1,NAR
   10    C(I,J)=0.D0
         DO 20 K=1,NBR
            DO 20 I=1,NAR
   20 C(I,J)=C(I,J)+A(I,K)*B(J,K)
      RETURN
      END
      SUBROUTINE MTXM (A,NAR,B,NBR,C,NCC)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     MATRIX PRODUCT C(NAR,NCC) = (A(NBR,NAR))' * B(NBR,NCC)
C     ALL MATRICES RECTANGULAR , PACKED.
      DIMENSION A(NBR,NAR),B(NBR,NCC),C(NAR,NCC)
      DO 20 J=1,NCC
         DO 10 I=1,NAR
   10    C(I,J)=0.D0
         DO 20 K=1,NBR
            DO 20 I=1,NAR
   20 C(I,J)=C(I,J)+A(K,I)*B(K,J)
      RETURN
      END
      SUBROUTINE MTXMC (A,NAR,B,NBR,C)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     MATRIX PRODUCT C(NAR,NAR) = (A(NBR,NAR))' * B(NBR,NAR)
C     A AND B RECTANGULAR , PACKED,
C     C LOWER LEFT TRIANGLE ONLY, PACKED IN CANONICAL ORDER.
      DIMENSION A(NBR,NAR),B(NBR,NAR),C(*)
C  NOTE ... THIS IS THE BEST VERSION ON CRAY 1.
      L=1
      DO 10 I=1,NAR
         CALL MXM (A(1,I),1,B,NBR,C(L),I)
   10 L=L+I
      RETURN
      END
      SUBROUTINE SUPDOT(S,H,G,N,IG)
      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C     (S)=(H)*(G) WITH  H  IN PACKED FORM (CANONICAL ORDER).
C     IG IS THE INCREMENT FOR THE VECTOR G.
      DIMENSION S(*),H(*),G(*)
C     CRAY-1 VERSION
CCC      K=1
CCC      L=1
CCC      DO 10 I=1,N
CCC      S(I)=SDOT(I,H(K),1,G,IG,I)
CCC      IF(I.GT.1) THEN
CCC         L=L+IG
CCC         CALL SAXPY(I-1,G(L),H(K),1,S,1)
CCC      ENDIF
CCC   10 K=K+I
CCC      RETURN
CCC      END
C     SCALAR VERSION OK WITH IG=1 ONLY.
      K=0
      DO 20 I=1,N
         SUM=0.D0
         DO 10 J=1,I
   10    SUM=SUM+G(J)*H(K+J)
         S(I)=SUM
   20 K=K+I
      IF (N.EQ.1) RETURN
      K=1
      DO 40 I=2,N
         GI=G(I)
         DO 30 J=1,I-1
   30    S(J)=S(J)+H(K+J)*GI
   40 K=K+I
      RETURN
      END