Difference between 'umfpack' and 'pardiso'

More
4 years 5 months ago #2783 by dong
I would like to ask a question about different direct solvers.

With umfpack flag, there is traceback call when running the following code.
Code:
#Solve inv = a.mat.Inverse(freedofs=X.FreeDofs(), inverse="umfpack") res = f.vec.CreateVector() res.data = f.vec - a.mat*gfu.vec gfu.vec.data += inv * res
NgException: UmfpackInverse: Numeric factorization failed.

But when I changed to inverse="pardiso" or without that flag. The code run without any errors.
Code:
#Solve inv = a.mat.Inverse(freedofs=X.FreeDofs(), inverse="pardiso") res = f.vec.CreateVector() res.data = f.vec - a.mat*gfu.vec gfu.vec.data += inv * res
Code:
#Solve inv = a.mat.Inverse(freedofs=X.FreeDofs()) res = f.vec.CreateVector() res.data = f.vec - a.mat*gfu.vec gfu.vec.data += inv * res

Could you please tell me what the difference between 'umfpack' , 'pardiso' and no flag is?
Thank you so much.
Attachments:
More
4 years 5 months ago - 4 years 5 months ago #2797 by christopher
Hi, pardiso and umfpack are 2 different direct sparse solvers, if no argument is provided and both are installed pardiso is used.
Umfpack (most likely correctly) tells you that your system is singular and therefore not solveable. Pardiso can "solve" it by numerical error, so the round off errors make your system regular.
Last edit: 4 years 5 months ago by christopher.
More
4 years 1 month ago #3231 by Libo-Yan
Hello Christopher,

If I test the example Fluid-structure interaction proposed by MICHAEL NEUNTEUFEL:

I received the error:

NgException: SparseMatrix::InverseMatrix: UmfpackInverse not available

Then I tried to fix this error as the followings:

stokes.mat.Inverse(bts, inverse = "pardiso")

Then, I received the error:
The kernel appears to have died. It will restart automatically.

I am using Anaconda in WIN10.

Thanks in advance!

Libo Yan
Time to create page: 0.116 seconds