aboutsummaryrefslogtreecommitdiff
path: root/src/lapack.F90
blob: 2a47923e5ddd958e395aa6f714a2edc664562ab2 (plain)
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
module lapack
  implicit none
  
  integer, parameter :: izero = 0
  integer, parameter :: lapack_integer_kind = kind(izero)
  
  interface geev
     SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, &
          LDVR, WORK, LWORK, INFO )
       IMPLICIT NONE
       CHARACTER          JOBVL, JOBVR
       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N
       REAL               A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), &
            WI( * ), WORK( * ), WR( * )
     END SUBROUTINE SGEEV
     
     SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, &
          LDVR, WORK, LWORK, INFO )
       IMPLICIT NONE
       CHARACTER          JOBVL, JOBVR
       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N
       DOUBLE PRECISION   A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), &
            WI( * ), WORK( * ), WR( * )
     END SUBROUTINE DGEEV
     
     SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR, &
          WORK, LWORK, RWORK, INFO )
       IMPLICIT NONE
       CHARACTER          JOBVL, JOBVR
       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N
       REAL               RWORK( * )
       COMPLEX            A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), &
            W( * ), WORK( * )
     END SUBROUTINE CGEEV
     
     SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR, &
          WORK, LWORK, RWORK, INFO )
       IMPLICIT NONE
       CHARACTER          JOBVL, JOBVR
       INTEGER            INFO, LDA, LDVL, LDVR, LWORK, N
       DOUBLE PRECISION   RWORK( * )
       COMPLEX*16         A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), &
            W( * ), WORK( * )
     END SUBROUTINE ZGEEV
  end interface geev
  
  interface gesv
     SUBROUTINE SGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
       IMPLICIT NONE
       INTEGER            INFO, LDA, LDB, N, NRHS
       INTEGER            IPIV( * )
       REAL               A( LDA, * ), B( LDB, * )
     END SUBROUTINE SGESV
     
     SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
       IMPLICIT NONE
       INTEGER            INFO, LDA, LDB, N, NRHS
       INTEGER            IPIV( * )
       DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
     END SUBROUTINE DGESV
     
     SUBROUTINE CGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
       IMPLICIT NONE
       INTEGER            INFO, LDA, LDB, N, NRHS
       INTEGER            IPIV( * )
       COMPLEX            A( LDA, * ), B( LDB, * )
     END SUBROUTINE CGESV
     
      SUBROUTINE ZGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
        IMPLICIT NONE
        INTEGER            INFO, LDA, LDB, N, NRHS
        INTEGER            IPIV( * )
        COMPLEX*16         A( LDA, * ), B( LDB, * )
      END SUBROUTINE ZGESV
   end interface gesv
   
   interface getrf
      SUBROUTINE SGETRF( M, N, A, LDA, IPIV, INFO )
        IMPLICIT NONE
        INTEGER            INFO, LDA, M, N
        INTEGER            IPIV( * )
        REAL               A( LDA, * )
      END SUBROUTINE SGETRF
      
      SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
        IMPLICIT NONE
        INTEGER            INFO, LDA, M, N
        INTEGER            IPIV( * )
        DOUBLE PRECISION   A( LDA, * )
      END SUBROUTINE DGETRF
      
      SUBROUTINE CGETRF( M, N, A, LDA, IPIV, INFO )
        IMPLICIT NONE
        INTEGER            INFO, LDA, M, N
        INTEGER            IPIV( * )
        COMPLEX            A( LDA, * )
      END SUBROUTINE CGETRF
      
      SUBROUTINE ZGETRF( M, N, A, LDA, IPIV, INFO )
        IMPLICIT NONE
        INTEGER            INFO, LDA, M, N
        INTEGER            IPIV( * )
        COMPLEX*16         A( LDA, * )
      END SUBROUTINE ZGETRF
   end interface getrf
   
   interface posv
      SUBROUTINE SPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, N, NRHS
        REAL               A( LDA, * ), B( LDB, * )
      END SUBROUTINE SPOSV
      
      SUBROUTINE DPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, N, NRHS
        DOUBLE PRECISION   A( LDA, * ), B( LDB, * )
      END SUBROUTINE DPOSV
      
      SUBROUTINE CPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, N, NRHS
        COMPLEX            A( LDA, * ), B( LDB, * )
      END SUBROUTINE CPOSV
      
      SUBROUTINE ZPOSV( UPLO, N, NRHS, A, LDA, B, LDB, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, N, NRHS
        COMPLEX*16         A( LDA, * ), B( LDB, * )
      END SUBROUTINE ZPOSV
   end interface posv
   
   interface sysv
      SUBROUTINE SSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, &
           LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, LWORK, N, NRHS
        INTEGER            IPIV( * )
        REAL               A( LDA, * ), B( LDB, * ), WORK( * )
      END SUBROUTINE SSYSV
      
      SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, &
           LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, LWORK, N, NRHS
        INTEGER            IPIV( * )
        DOUBLE PRECISION   A( LDA, * ), B( LDB, * ), WORK( * )
      END SUBROUTINE DSYSV
      
      SUBROUTINE CSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, &
           LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, LWORK, N, NRHS
        INTEGER            IPIV( * )
        COMPLEX            A( LDA, * ), B( LDB, * ), WORK( * )
      END SUBROUTINE CSYSV
      
      SUBROUTINE ZSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, &
           LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LDB, LWORK, N, NRHS
        INTEGER            IPIV( * )
        COMPLEX*16         A( LDA, * ), B( LDB, * ), WORK( * )
      END SUBROUTINE ZSYSV
   end interface sysv
   
   interface sytrf
      SUBROUTINE SSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LWORK, N
        INTEGER            IPIV( * )
        REAL               A( LDA, * ), WORK( * )
      END SUBROUTINE SSYTRF
      
      SUBROUTINE DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LWORK, N
        INTEGER            IPIV( * )
        DOUBLE PRECISION   A( LDA, * ), WORK( * )
      END SUBROUTINE DSYTRF
      
      SUBROUTINE CSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LWORK, N
        INTEGER            IPIV( * )
        COMPLEX            A( LDA, * ), WORK( * )
      END SUBROUTINE CSYTRF
      
      SUBROUTINE ZSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
        IMPLICIT NONE
        CHARACTER          UPLO
        INTEGER            INFO, LDA, LWORK, N
        INTEGER            IPIV( * )
        COMPLEX*16         A( LDA, * ), WORK( * )
      END SUBROUTINE ZSYTRF
   end interface sytrf
 end module lapack