/ILU

preconditioners in matlab

Primary LanguageMATLAB

Feb 10, 2017

-----------------------------------------------------------------------
To run some tests, just try one of the demos 
   demoArms or demoHB  
under  matlab. 

A very important file is the  file arms_params.m which is read by many
of the scripts.  It sets all the parameters needed  for setting up the
preconditioner and for the iterations, global and inner).  This avoids
having  to  pass  these  parameters  around or  to  search  for  these
parameters in the various files to change them when doing tests.

=======================================================================
CONTENTS

LinvX.m                  : computes  S = inv(L) * X, L and S are sparse
                           L = lower triangular 

PQ.m                     : creates the nonsymmetric ordering
PQ_E   		         : a copy of PQ.m
PQ1.m                    : simple version of PQ orderings.

XUinv.m                  : computes  S = X * inv (U), U, and S are sparse
                           U = upper  triangular 

arms2.m                  : computes the multilevel arms factorization
                           [standard arms]

armsC.m                  : computes the multilevel arms factorization
                           with nonsymmetric permutations for diag. dominance.

arms_params.m            : contains all setup parameters (see above) 

ascend.m                 : ascend operation 
check_perm               : for debugging - checks permutation
create_testmatrix        : a little script called by some of the demo files,

demo2.m                  : demo file runs a few solvers
demo5.m                  : demo file runs only armsC 
demoArms                 : demo file runs only armsC   [2 levels]

descend.m                : descend operation

drop2.m                  : drop2 drop small elements from a sparse matrix 
droprow.m                : drop small elements from a sparse row 

fd3d.m                   : non-block finite difference matrix 
fd3dB.m                  : creates an artifical block matrix.

fgmres.m                 : main global fgmres solver...

iluk                     : incomplete lu factorization with level of fill.
                           (very slow - not optimized). Not used here.

indset.m                 : independent set reodering 
indset2.m                : (BLOCK) reodering - for testing-not used/.

lev1arms.m               : computes one level of arms  - use with arms2
lev1armsC.m              : computes one level of arms  - use with armsC

memus.m                  : gets nnz elements used by arms-type factorizations
precLU                   : preconditioninig operation for ILU type precon
presel                   : preselection routine for armsC
rev_ord                  : computes the reverse ordering

schurprod.m              : schur product w = (C - E inv(B) F) v
tridiag.m                : creates a tridiagonal matrix.

=======================================================================

SOME COMMENTS ON THE CODES: 

-- they basically follow the implementation in the C-version of arms. 

-- in particular the solves are recursive. A C/C++ implementation should
   follow the same general idea.

-- The arms and armsC preconditioner are help in an array of matlab structs 
   (one for each level). The last level is also stored as a similar
   struct. The struct at each level stores the permutation and the
   blocks in 

            |\         |       |
            |  \   U   |       |
            |    \     |   F   |
            |  L   \   |       |
            |        \ |       |
            |----------|-------|
            |          |       |
            |    E     |   C   |  
            |          |       |
            
 so it  contains

   rperm   permutation for this level
   L       L matrix [see diagram] 
   U       U matrix [see diagram] 
   F       F matrix [see diagram]     
   E       E matrix [see diagram] 
   C       C matrix [see diagram]  <-- only for last level 
  The C matrix is actually a NULL matrix -- except for the last level
  (it is not needed in this implementation for the other levels). 
 
 -- If you ask for nlev levels, you will get nlev+1 structs because
    the last one is used to store the ILU factors LS and US for 
    the last Schur complement (in this case, E, F, C are all NULL 
    matrices) 

=======================================================================