public Incomplete_LU_Decomposition_CSlR(CSlR_Matrix A)
        {
            ILU      = new CSlR_Matrix();
            ILU.N    = A.N;
            ILU.iptr = A.iptr;
            ILU.jptr = A.jptr;
            int N_autr = A.autr.Length;

            ILU.autr = new double[N_autr];
            ILU.altr = new double[N_autr];
            ILU.di   = new double[A.N];

            for (int i = 0; i < N_autr; i++)
            {
                ILU.altr[i] = A.altr[i];
                ILU.autr[i] = A.autr[i];
            }

            for (int i = 0; i < A.N; i++)
            {
                ILU.di[i] = A.di[i];
            }

            for (int i = 1; i < A.N; i++)
            {
                for (int j = A.iptr[i] - 1; j < A.iptr[i + 1] - 1; j++)
                {
                    for (int a = A.iptr[i] - 1; a < j; a++)
                    {
                        for (int b = A.iptr[A.jptr[j] - 1] - 1; b < A.iptr[A.jptr[j]] - 1; b++)
                        {
                            if (A.jptr[a] == A.jptr[b])
                            {
                                ILU.altr[j] -= ILU.altr[a] * ILU.autr[b];
                                ILU.autr[j] -= ILU.autr[a] * ILU.altr[b];
                            }
                        }
                    }
                    ILU.autr[j] /= ILU.di[A.jptr[j] - 1];
                    ILU.di[i]   -= ILU.autr[j] * ILU.altr[j];
                }
            }
        }
Esempio n. 2
0
 public LU_Preconditioner(CSlR_Matrix A)
 {
     ILU = new Incomplete_LU_Decomposition_CSlR(A);
 }