@@ -33,99 +33,94 @@ sol = solve(prob, OpenBLASLUFactorization())
33
33
"""
34
34
struct OpenBLASLUFactorization <: AbstractFactorization end
35
35
36
- module OpenBLASLU
36
+ # OpenBLAS methods - OpenBLAS_jll is always available as a standard library
37
37
38
- using LinearAlgebra
39
- using LinearAlgebra. LAPACK: chkfinite, chkstride1, @blasfunc , chkargsok, chktrans,
40
- chklapackerror
41
- using OpenBLAS_jll
42
-
43
- function getrf! (A:: AbstractMatrix{<:ComplexF64} ;
44
- ipiv = similar (A, LinearAlgebra. BlasInt, min (size (A, 1 ), size (A, 2 ))),
45
- info = Ref {LinearAlgebra.BlasInt} (),
38
+ function openblas_getrf! (A:: AbstractMatrix{<:ComplexF64} ;
39
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 ))),
40
+ info = Ref {BlasInt} (),
46
41
check = false )
47
- LinearAlgebra . require_one_based_indexing (A)
42
+ require_one_based_indexing (A)
48
43
check && chkfinite (A)
49
44
chkstride1 (A)
50
45
m, n = size (A)
51
46
lda = max (1 , stride (A, 2 ))
52
47
if isempty (ipiv)
53
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 )))
48
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 )))
54
49
end
55
50
ccall ((@blasfunc (zgetrf_), OpenBLAS_jll. libopenblas), Cvoid,
56
- (Ref{LinearAlgebra . BlasInt}, Ref{LinearAlgebra . BlasInt}, Ptr{ComplexF64},
57
- Ref{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}),
51
+ (Ref{BlasInt}, Ref{BlasInt}, Ptr{ComplexF64},
52
+ Ref{BlasInt}, Ptr{BlasInt}, Ptr{BlasInt}),
58
53
m, n, A, lda, ipiv, info)
59
54
chkargsok (info[])
60
55
A, ipiv, info[], info # Error code is stored in LU factorization type
61
56
end
62
57
63
- function getrf ! (A:: AbstractMatrix{<:ComplexF32} ;
64
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 ))),
65
- info = Ref {LinearAlgebra. BlasInt} (),
58
+ function openblas_getrf ! (A:: AbstractMatrix{<:ComplexF32} ;
59
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 ))),
60
+ info = Ref {BlasInt} (),
66
61
check = false )
67
- LinearAlgebra . require_one_based_indexing (A)
62
+ require_one_based_indexing (A)
68
63
check && chkfinite (A)
69
64
chkstride1 (A)
70
65
m, n = size (A)
71
66
lda = max (1 , stride (A, 2 ))
72
67
if isempty (ipiv)
73
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 )))
68
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 )))
74
69
end
75
70
ccall ((@blasfunc (cgetrf_), OpenBLAS_jll. libopenblas), Cvoid,
76
- (Ref{LinearAlgebra . BlasInt}, Ref{LinearAlgebra . BlasInt}, Ptr{ComplexF32},
77
- Ref{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}),
71
+ (Ref{BlasInt}, Ref{BlasInt}, Ptr{ComplexF32},
72
+ Ref{BlasInt}, Ptr{BlasInt}, Ptr{BlasInt}),
78
73
m, n, A, lda, ipiv, info)
79
74
chkargsok (info[])
80
75
A, ipiv, info[], info # Error code is stored in LU factorization type
81
76
end
82
77
83
- function getrf ! (A:: AbstractMatrix{<:Float64} ;
84
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 ))),
85
- info = Ref {LinearAlgebra. BlasInt} (),
78
+ function openblas_getrf ! (A:: AbstractMatrix{<:Float64} ;
79
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 ))),
80
+ info = Ref {BlasInt} (),
86
81
check = false )
87
- LinearAlgebra . require_one_based_indexing (A)
82
+ require_one_based_indexing (A)
88
83
check && chkfinite (A)
89
84
chkstride1 (A)
90
85
m, n = size (A)
91
86
lda = max (1 , stride (A, 2 ))
92
87
if isempty (ipiv)
93
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 )))
88
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 )))
94
89
end
95
90
ccall ((@blasfunc (dgetrf_), OpenBLAS_jll. libopenblas), Cvoid,
96
- (Ref{LinearAlgebra . BlasInt}, Ref{LinearAlgebra . BlasInt}, Ptr{Float64},
97
- Ref{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}),
91
+ (Ref{BlasInt}, Ref{BlasInt}, Ptr{Float64},
92
+ Ref{BlasInt}, Ptr{BlasInt}, Ptr{BlasInt}),
98
93
m, n, A, lda, ipiv, info)
99
94
chkargsok (info[])
100
95
A, ipiv, info[], info # Error code is stored in LU factorization type
101
96
end
102
97
103
- function getrf ! (A:: AbstractMatrix{<:Float32} ;
104
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 ))),
105
- info = Ref {LinearAlgebra. BlasInt} (),
98
+ function openblas_getrf ! (A:: AbstractMatrix{<:Float32} ;
99
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 ))),
100
+ info = Ref {BlasInt} (),
106
101
check = false )
107
- LinearAlgebra . require_one_based_indexing (A)
102
+ require_one_based_indexing (A)
108
103
check && chkfinite (A)
109
104
chkstride1 (A)
110
105
m, n = size (A)
111
106
lda = max (1 , stride (A, 2 ))
112
107
if isempty (ipiv)
113
- ipiv = similar (A, LinearAlgebra . BlasInt, min (size (A, 1 ), size (A, 2 )))
108
+ ipiv = similar (A, BlasInt, min (size (A, 1 ), size (A, 2 )))
114
109
end
115
110
ccall ((@blasfunc (sgetrf_), OpenBLAS_jll. libopenblas), Cvoid,
116
- (Ref{LinearAlgebra . BlasInt}, Ref{LinearAlgebra . BlasInt}, Ptr{Float32},
117
- Ref{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}, Ptr{LinearAlgebra . BlasInt}),
111
+ (Ref{BlasInt}, Ref{BlasInt}, Ptr{Float32},
112
+ Ref{BlasInt}, Ptr{BlasInt}, Ptr{BlasInt}),
118
113
m, n, A, lda, ipiv, info)
119
114
chkargsok (info[])
120
115
A, ipiv, info[], info # Error code is stored in LU factorization type
121
116
end
122
117
123
- function getrs ! (trans:: AbstractChar ,
118
+ function openblas_getrs ! (trans:: AbstractChar ,
124
119
A:: AbstractMatrix{<:ComplexF64} ,
125
- ipiv:: AbstractVector{LinearAlgebra. BlasInt} ,
120
+ ipiv:: AbstractVector{BlasInt} ,
126
121
B:: AbstractVecOrMat{<:ComplexF64} ;
127
- info = Ref {LinearAlgebra. BlasInt} ())
128
- LinearAlgebra . require_one_based_indexing (A, ipiv, B)
122
+ info = Ref {BlasInt} ())
123
+ require_one_based_indexing (A, ipiv, B)
129
124
LinearAlgebra. LAPACK. chktrans (trans)
130
125
chkstride1 (A, B, ipiv)
131
126
n = LinearAlgebra. checksquare (A)
@@ -137,22 +132,20 @@ function getrs!(trans::AbstractChar,
137
132
end
138
133
nrhs = size (B, 2 )
139
134
ccall ((@blasfunc (zgetrs_), OpenBLAS_jll. libopenblas), Cvoid,
140
- (Ref{UInt8}, Ref{LinearAlgebra. BlasInt}, Ref{LinearAlgebra. BlasInt},
141
- Ptr{ComplexF64}, Ref{LinearAlgebra. BlasInt},
142
- Ptr{LinearAlgebra. BlasInt}, Ptr{ComplexF64}, Ref{LinearAlgebra. BlasInt},
143
- Ptr{LinearAlgebra. BlasInt}, Clong),
135
+ (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{ComplexF64}, Ref{BlasInt},
136
+ Ptr{BlasInt}, Ptr{ComplexF64}, Ref{BlasInt}, Ptr{BlasInt}, Clong),
144
137
trans, n, size (B, 2 ), A, max (1 , stride (A, 2 )), ipiv, B, max (1 , stride (B, 2 )), info,
145
138
1 )
146
- LinearAlgebra. LAPACK. chklapackerror (LinearAlgebra . BlasInt (info[]))
139
+ LinearAlgebra. LAPACK. chklapackerror (BlasInt (info[]))
147
140
B
148
141
end
149
142
150
- function getrs ! (trans:: AbstractChar ,
143
+ function openblas_getrs ! (trans:: AbstractChar ,
151
144
A:: AbstractMatrix{<:ComplexF32} ,
152
- ipiv:: AbstractVector{LinearAlgebra. BlasInt} ,
145
+ ipiv:: AbstractVector{BlasInt} ,
153
146
B:: AbstractVecOrMat{<:ComplexF32} ;
154
- info = Ref {LinearAlgebra. BlasInt} ())
155
- LinearAlgebra . require_one_based_indexing (A, ipiv, B)
147
+ info = Ref {BlasInt} ())
148
+ require_one_based_indexing (A, ipiv, B)
156
149
LinearAlgebra. LAPACK. chktrans (trans)
157
150
chkstride1 (A, B, ipiv)
158
151
n = LinearAlgebra. checksquare (A)
@@ -164,22 +157,20 @@ function getrs!(trans::AbstractChar,
164
157
end
165
158
nrhs = size (B, 2 )
166
159
ccall ((@blasfunc (cgetrs_), OpenBLAS_jll. libopenblas), Cvoid,
167
- (Ref{UInt8}, Ref{LinearAlgebra. BlasInt}, Ref{LinearAlgebra. BlasInt},
168
- Ptr{ComplexF32}, Ref{LinearAlgebra. BlasInt},
169
- Ptr{LinearAlgebra. BlasInt}, Ptr{ComplexF32}, Ref{LinearAlgebra. BlasInt},
170
- Ptr{LinearAlgebra. BlasInt}, Clong),
160
+ (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{ComplexF32}, Ref{BlasInt},
161
+ Ptr{BlasInt}, Ptr{ComplexF32}, Ref{BlasInt}, Ptr{BlasInt}, Clong),
171
162
trans, n, size (B, 2 ), A, max (1 , stride (A, 2 )), ipiv, B, max (1 , stride (B, 2 )), info,
172
163
1 )
173
- LinearAlgebra. LAPACK. chklapackerror (LinearAlgebra . BlasInt (info[]))
164
+ LinearAlgebra. LAPACK. chklapackerror (BlasInt (info[]))
174
165
B
175
166
end
176
167
177
- function getrs ! (trans:: AbstractChar ,
168
+ function openblas_getrs ! (trans:: AbstractChar ,
178
169
A:: AbstractMatrix{<:Float64} ,
179
- ipiv:: AbstractVector{LinearAlgebra. BlasInt} ,
170
+ ipiv:: AbstractVector{BlasInt} ,
180
171
B:: AbstractVecOrMat{<:Float64} ;
181
- info = Ref {LinearAlgebra. BlasInt} ())
182
- LinearAlgebra . require_one_based_indexing (A, ipiv, B)
172
+ info = Ref {BlasInt} ())
173
+ require_one_based_indexing (A, ipiv, B)
183
174
LinearAlgebra. LAPACK. chktrans (trans)
184
175
chkstride1 (A, B, ipiv)
185
176
n = LinearAlgebra. checksquare (A)
@@ -191,21 +182,20 @@ function getrs!(trans::AbstractChar,
191
182
end
192
183
nrhs = size (B, 2 )
193
184
ccall ((@blasfunc (dgetrs_), OpenBLAS_jll. libopenblas), Cvoid,
194
- (Ref{UInt8}, Ref{LinearAlgebra. BlasInt}, Ref{LinearAlgebra. BlasInt},
195
- Ptr{Float64}, Ref{LinearAlgebra. BlasInt},
196
- Ptr{LinearAlgebra. BlasInt}, Ptr{Float64}, Ref{LinearAlgebra. BlasInt}, Ptr{LinearAlgebra. BlasInt}, Clong),
185
+ (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt},
186
+ Ptr{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{BlasInt}, Clong),
197
187
trans, n, size (B, 2 ), A, max (1 , stride (A, 2 )), ipiv, B, max (1 , stride (B, 2 )), info,
198
188
1 )
199
- LinearAlgebra. LAPACK. chklapackerror (LinearAlgebra . BlasInt (info[]))
189
+ LinearAlgebra. LAPACK. chklapackerror (BlasInt (info[]))
200
190
B
201
191
end
202
192
203
- function getrs ! (trans:: AbstractChar ,
193
+ function openblas_getrs ! (trans:: AbstractChar ,
204
194
A:: AbstractMatrix{<:Float32} ,
205
- ipiv:: AbstractVector{LinearAlgebra. BlasInt} ,
195
+ ipiv:: AbstractVector{BlasInt} ,
206
196
B:: AbstractVecOrMat{<:Float32} ;
207
- info = Ref {LinearAlgebra. BlasInt} ())
208
- LinearAlgebra . require_one_based_indexing (A, ipiv, B)
197
+ info = Ref {BlasInt} ())
198
+ require_one_based_indexing (A, ipiv, B)
209
199
LinearAlgebra. LAPACK. chktrans (trans)
210
200
chkstride1 (A, B, ipiv)
211
201
n = LinearAlgebra. checksquare (A)
@@ -217,23 +207,20 @@ function getrs!(trans::AbstractChar,
217
207
end
218
208
nrhs = size (B, 2 )
219
209
ccall ((@blasfunc (sgetrs_), OpenBLAS_jll. libopenblas), Cvoid,
220
- (Ref{UInt8}, Ref{LinearAlgebra. BlasInt}, Ref{LinearAlgebra. BlasInt},
221
- Ptr{Float32}, Ref{LinearAlgebra. BlasInt},
222
- Ptr{LinearAlgebra. BlasInt}, Ptr{Float32}, Ref{LinearAlgebra. BlasInt}, Ptr{LinearAlgebra. BlasInt}, Clong),
210
+ (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{Float32}, Ref{BlasInt},
211
+ Ptr{BlasInt}, Ptr{Float32}, Ref{BlasInt}, Ptr{BlasInt}, Clong),
223
212
trans, n, size (B, 2 ), A, max (1 , stride (A, 2 )), ipiv, B, max (1 , stride (B, 2 )), info,
224
213
1 )
225
- LinearAlgebra. LAPACK. chklapackerror (LinearAlgebra . BlasInt (info[]))
214
+ LinearAlgebra. LAPACK. chklapackerror (BlasInt (info[]))
226
215
B
227
216
end
228
217
229
- end # module OpenBLASLU
230
-
231
218
default_alias_A (:: OpenBLASLUFactorization , :: Any , :: Any ) = false
232
219
default_alias_b (:: OpenBLASLUFactorization , :: Any , :: Any ) = false
233
220
234
221
const PREALLOCATED_OPENBLAS_LU = begin
235
222
A = rand (0 , 0 )
236
- luinst = ArrayInterface. lu_instance (A), Ref {LinearAlgebra. BlasInt} ()
223
+ luinst = ArrayInterface. lu_instance (A), Ref {BlasInt} ()
237
224
end
238
225
239
226
function LinearSolve. init_cacheval (alg:: OpenBLASLUFactorization , A, b, u, Pl, Pr,
@@ -247,7 +234,7 @@ function LinearSolve.init_cacheval(alg::OpenBLASLUFactorization,
247
234
maxiters:: Int , abstol, reltol, verbose:: LinearVerbosity ,
248
235
assumptions:: OperatorAssumptions )
249
236
A = rand (eltype (A), 0 , 0 )
250
- ArrayInterface. lu_instance (A), Ref {LinearAlgebra. BlasInt} ()
237
+ ArrayInterface. lu_instance (A), Ref {BlasInt} ()
251
238
end
252
239
253
240
function SciMLBase. solve! (cache:: LinearCache , alg:: OpenBLASLUFactorization ;
@@ -256,8 +243,8 @@ function SciMLBase.solve!(cache::LinearCache, alg::OpenBLASLUFactorization;
256
243
A = convert (AbstractMatrix, A)
257
244
if cache. isfresh
258
245
cacheval = @get_cacheval (cache, :OpenBLASLUFactorization )
259
- res = OpenBLASLU . getrf ! (A; ipiv = cacheval[1 ]. ipiv, info = cacheval[2 ])
260
- fact = LinearAlgebra . LU (res[1 : 3 ]. .. ), res[4 ]
246
+ res = openblas_getrf ! (A; ipiv = cacheval[1 ]. ipiv, info = cacheval[2 ])
247
+ fact = LU (res[1 : 3 ]. .. ), res[4 ]
261
248
cache. cacheval = fact
262
249
263
250
if ! LinearAlgebra. issuccess (fact[1 ])
@@ -268,15 +255,15 @@ function SciMLBase.solve!(cache::LinearCache, alg::OpenBLASLUFactorization;
268
255
end
269
256
270
257
A, info = @get_cacheval (cache, :OpenBLASLUFactorization )
271
- LinearAlgebra . require_one_based_indexing (cache. u, cache. b)
258
+ require_one_based_indexing (cache. u, cache. b)
272
259
m, n = size (A, 1 ), size (A, 2 )
273
260
if m > n
274
261
Bc = copy (cache. b)
275
- OpenBLASLU . getrs ! (' N' , A. factors, A. ipiv, Bc; info)
262
+ openblas_getrs ! (' N' , A. factors, A. ipiv, Bc; info)
276
263
copyto! (cache. u, 1 , Bc, 1 , n)
277
264
else
278
265
copyto! (cache. u, cache. b)
279
- OpenBLASLU . getrs ! (' N' , A. factors, A. ipiv, cache. u; info)
266
+ openblas_getrs ! (' N' , A. factors, A. ipiv, cache. u; info)
280
267
end
281
268
282
269
SciMLBase. build_linear_solution (
0 commit comments