I have a question related to the SSOR precondtioner for the cg algorithm, and would appreciate it if someone can help me with that.
The system of equation in my case is symmetric positive and it is stored in CSR format (3 array version). My cg solver is based on RCI from MKL. I already have Jacobi preconditioner implemented which, works fine. For the SSOR, there is an example in mkl/example directory, but I cannot really understand the example. That example assumes the the diagonal of the equation system is identity matrix. There is an iterative section in the example which I do not understand!
Let me explain the SSOR which I know:
M rho = r where r is the current residual (&tmp[2n] in rci) , rho is the modified residual (&tmp[3n]), and M is the precondtioner.
The SSOR precondtioner is as follows [SAAD2002]
M = LU
To solve the above equation system we do the following
1. Solve L z = r where L = (D-wE)*D^-1 = I-wED^-1
2. Solve U rho = z where U = D-wF
D = diagonal of A
-E = strict lower triangular part of A
-F = strict upper triangular part of A
w = parameter in SOR method; should be 0<w<2 (if w=1, this is the Symmetric Gauss-Seidel (SGS) preconditioner
now the question is, I don't understand how to implement this! Do I need to store L, U and D separately? Or is there a way to take advantage of the mkl Blas function to do that more efficiently?