- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear all,
I would like to use the linear solver PARDISO as the linear solver in my custom Lanczos eigenvalue solver.This is certainly possible and then, I would like to use this factorized matrix in some other context. As an example scenario to keep things simple, say I have a LAnczos routine to solve the eigenvalue problem where I use A and B matrices, for the generalized eigenvalue problem, as inputs to the Lanczos solver, if I do a solve inside this routine by taking a reference to A, how may I use these factors outside the routine is there a way to accomplish this task? I would like to use the factorization information from these eigensolver in another context, but what would be the best stragety for this task?
I appreciate comments.
Umut
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear Umit,
PARDISO doesnt provide LU or LDL^t factors. But you can solve system separately. To solve Ly=b you should use phase=331; to solve Ux=y please use phase=333. If you have symmetric positive indefinite system, i.e. LDL^tx=b, so you can solve Lz=b (phase=331), Dy=z (phase=332) and L^tx=z (phase=333).
What type of system do you have? (Symmetric or unsymmetric, positive definite or indefinite, real or complex). And what operations do you want to do with it? If you have symmetric indefinite system, is it enough to get the diagonal elements or just number of positive and negative elements?
Sergey S.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
U \ ( L \ b)
if you are familiar. I do not have to get them in factored for LU.
In mathematical sense I would like to solve a linear system in another but the operator matrix is the same as the above and these factors might help.
However as far as I could understand PARDISO does not give me the chance to use these factors outside of a solution process, are not there any options to keep the factors in memory for later use, this is what I am looking for?
Best,
Umut
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- To factorize matrix M (M=LU), you can use PARDISO. LU factors and other info are stored in internal PARDISO structures. Pointers to these structures are stored in PARDISO handle h(1,,64). So, if you want to solve Ly=b or Ux=y in another routine, you should to use PARDISO with current handle inside this routine. Unfortunately, PARDISO doesnt have possibility of handle dumping to hard disc. So, you cannot stop the task and restart it with old handle (with old LU factors). Anyway, we have such feature request (store/restore PARDISO handle).
Best regards,
Sergey S.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
++ To factorize matrix M (M=LU), you can use PARDISO. LU factors and other info are stored in internal PARDISO structures. Pointers to these structures are stored in PARDISO handle h(1,,64).
Is this possible to return these handles by reference in another context, if yes could you please point me to an example?
And
++So, if you want to solve Ly=b or Ux=y in another routine, you should to use PARDISO with current handle inside this routine.
This sentence is not clear to me basically __ in another routine ___ and __ use PARDISO with current handle inside this routine __ what do you mean with these two, could you please make that more clear with an example perhaps, that would really help then, because I am stilll not clear on whether this is possible or not?
Best regards,
Umut
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Could you clarify, what do you mean when say another context?
I prepared the simple example. I hope it will help:
programtest
INTEGER*8 pt(64)
call routine_1(pt,.) ! reordering and factorizing in routine_1
do =1,n ! some iterative process
...
call routine_2(pt,.) ! solvingphasein routine_3
enddo
end
subroutine routine_1(pt,.)
INTEGER*8 pt(*)
phase=11
call pardiso(pt,)
phase=22
call pardiso(pt,)
return
end
subroutine routine_2(pt,.)
INTEGER*8 pt(*)
phase=33
call pardiso(pt,)
return
end
Best regards,
Sergey S
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ax = b
Solve for x in a routine and use the factrized A in another routine
routine_1(A, b0, x, factorA)
solve for x
store factorA // this is my question
return the factor from the function
use that in another function, as such
routine_2(factorA, b1, x)
using the factorA from the first routine solve for x for a different right hand side
I hope it is clear now.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok, I see. I have an additional remark:
It is possible to use factorizing and solving in the same program (test1.exe):
Program test1
routine_1(A, b0, x, factorA) ! factorizing
routine_2(factorA, b1, x) ! solving
end program test1
It isnt possible to use factorizing and solving in the different programs (test1.exe and test2.exe):
Program test1
routine_1(A, b0, x, factorA) ! factorizing
end program test1
Program test2
routine_2(factorA, b1, x) ! solving
end program test1
It isnt possible because store factorA (to hard disk) isnt implemented yet. We have such feature request. If you provide us with info about you, weadd this info into our request.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My name is Umut Tabak, I am a Phd researcher at Delft University of Technology in the Netherlands. I conduct on research on model reduction for multiphysical problems. I am developing an in-house code to test industrial benchmark problems where Phillips is also interested in order to analyze their MRI scanner models with this code, not now but in the near future, hopefully, so Intel MKL will be tested on challenging engineering design problems.
Is this information enough to be able to add this important but missing information/feature to PARDISO?
Best regards,
Umut
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
we have added your info into our request
Best regards,
Sergey Solovev
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page