@@ -300,39 +300,50 @@ end
300
300
301
301
# # Paradiso
302
302
303
- struct PardisoJL{F,S,P,A,K} <: SciMLLinearSolveAlgorithm
304
- alg_selector:: F
305
- schur:: S
306
- parallel:: P
303
+ struct PardisoJL{F,A,K} <: SciMLLinearSolveAlgorithm
304
+ which_paradiso:: F
305
+ matrix_type:: Union{Int, Nothing}
306
+ nthreads:: Union{Int, Nothing}
307
+ solver_type:: Union{Int, Nothing}
308
+ solve_phase:: Union{Int, Nothing}
309
+ release_phase:: Union{Int, Nothing}
310
+ ipram:: Union{Int, Nothing}
311
+ dpram:: Union{Int, Nothing}
307
312
args:: A
308
313
kwargs:: K
309
314
end
310
315
311
- function PardisoJL (args... ; alg_selector= :default_alg ,
312
- schur= :smart ,
313
- parallel= :fancy ,
316
+ function PardisoJL (args... ; which_pardiso= MKLPardisoSolver,
314
317
kwargs... )
315
318
316
- return PardisoJL (alg_selector, schur, parallel ,
319
+ return PardisoJL (which_pardiso ,
317
320
args, kwargs)
318
321
end
319
322
323
+ # some standard implementation - maybe SPD, or
320
324
PardisoJL_Default (args... ; kwargs... ) = PardisoJL (args... ;
321
- alg_selector = :this_one ,
325
+ which_pardiso = :this_one ,
322
326
kwargs... )
323
327
324
328
function init_cacheval (alg:: PardisoJL , cache:: LinearCache )
329
+ @unpack verbose, matrix_type
325
330
326
- solver =
327
- if alg. alg_selector == :default_alg
328
- MKLPardisoSolver ()
329
- elseif alg_selector == :this_one
331
+ solver = """ is alg.which_pardiso necessary? """
332
+ if Pardiso. PARDISO_LOADED[]
330
333
PardisoSolver ()
331
334
else
332
- PardisoSolver ()
335
+ MKLPardisoSolver ()
333
336
end
334
337
335
- alg. verbose && set_msglvl! (solver, Pardiso. MESSAGE_LEVEL_ON)
338
+ verbose && Pardiso. set_msglvl! (solver, Pardiso. MESSAGE_LEVEL_ON)
339
+ matrix_type != = nothing && Pardiso. set_matrixtype! (solver, matrix_type)
340
+ nthreads != = nothing && set_nprocs! (ps, nthreads)
341
+ # set_iparm!(solver, 5, 13.37)
342
+ # set_dparm!(solver, 5, 13.37)
343
+ # set_solver!(solver, key)
344
+
345
+ # inject user code for additional setup stuff
346
+ # solver_setup!(solver)
336
347
337
348
return solver
338
349
end
@@ -352,8 +363,13 @@ function SciMLBase.solve(cache::LinearCache, alg::PardisoJL; kwargs...)
352
363
kwargs = (abstol= abstol, reltol= reltol,
353
364
alg. kwargs... )
354
365
366
+ Pardiso. set_phase! (ps, alg. phase)
367
+
355
368
Pardiso. solve! (cacheval, u, A, b)
356
369
370
+ # is this necessary?
371
+ Pardiso. set_phase! (ps, Pardiso. RELEASE_ALL)
372
+
357
373
return cache. u
358
374
end
359
375
0 commit comments