Hi, I'm trying to find out what is the performance advantage of Petsc over Matlab when solving a particular linear system. For the comparison to be meaningful I have to use the exact same linear solver and preconditioner in both Petsc and Matlab. The one problem I have found in this attempt is that I haven't been able to identify which options should I give to my Petsc code so that it uses the same preconditioner as Matlab's function "luinc" when used in the syntax "[L,U]=luinc(A,droptol)". In the Matlab documentation it is said that in this syntax the function uses incomplete LU factorization with drop tolerance. A similar preconditioner is available in Petsc through the option "-pc_factor_use_drop_tolerance <dt>,<dtcol>,<dtcoutn> ". To see if they were exactly the same I tried to know about the internal working of each preconditioner. In the manual page of the Petsc function "PCFactorSetUseDropTolerance" (that sets the same preconditioner as the option above) it is said that this preconditioner uses the function "iludt" from SPARSKIT. I downloaded SPARSKIT from www-users.cs.umn.edu/~saad/software/SPARSKIT/sparskit.html and when searching through the source code I couldn't find any function with that exact name. My fist question is if the function's name is not misspelled in the Petsc documentation both the manual page and the Petsc user's manual and if it is not rather "ilutp". "ilutp" is documented in Saad's book "Iterative methods for sparse linear systems" and at least two of its arguments are similar to those of the "-pc_factor_use_drop_tolerance" option, that is, <dt>, the threshold or drop tolerance (the "t" in "ilutp") and the number of nonzeros per row <dtcount>. The remaining argument, <dtcol>, the "tolerance for column pivot", sounds related to the "p" in "ilutp" that stands for "pivoting".
There is a main difference between "ilutp" and "luinc" (Matlab) and is that the dropping rule is applied by rows in "ilutp" (Saad's book) while it is applied by columns in "luinc" (Matlab help). If the function used by Petsc is "ilutp" I have to conclude that the preconditioner implemented by the Matlab function "luinc(A,droptol)" is not available in Petsc. Could you validate or deny this? Through the PCSHELL preconditioner a custom preconditioner can be implemented. But this looks like difficult job. Could I generate the preconditioner matrices with Matlab, read them on a Petsc program and use them as preconditioner? Is there a quick way to do this by using PCSHELL? Thanks. -- Alejandro
