Friday, June 14, 2013

And then there was iluk()

Little good news for the weekend: my first interface to ITSOLs ILUK is working as desired:

>> A_sparse = spconvert([...
     1 4 2 3 3 4 2 5; % row indices
     1 1 2 3 4 4 5 5; % column indices
     1 2 3 4 5 6 7 8  % non-zero values
     ]');

>> [L,U] = iluk(A_sparse)
L =

Compressed Column Sparse (rows = 5, cols = 5, nnz = 6 [24%])

  (1, 1) ->  1
  (4, 1) ->  2
  (2, 2) ->  1
  (3, 3) ->  1
  (4, 4) ->  1
  (5, 5) ->  1

U =

Compressed Column Sparse (rows = 5, cols = 5, nnz = 7 [28%])

  (1, 1) ->  1
  (2, 2) ->  3
  (3, 3) ->  4
  (3, 4) ->  5
  (4, 4) ->  6
  (2, 5) ->  7
  (5, 5) ->  8

>> L * U - A_sparse % Should be a zero matrix
ans =

Compressed Column Sparse (rows = 5, cols = 5, nnz = 0 [0%])


Another example from MATLAB http://www.mathworks.com/help/matlab/ref/ilu.html

>> A = gallery('neumann', 1600) + speye(1600);
>> nnz(A)
ans =  7840
>> nnz(lu(A))
ans =  126402
>> [L,U] = iluk(A);
>> nnz(L+U-speye(size(A))) % This behaviour will be added to ilu.m later
ans =  7840


Now I'm very optimistic, that the ILUT and ILUC will be interfaced till the end of the next week.

No comments:

Post a Comment