Beispiel #1
0
        protected override int DoFactorize()
        {
            int info = 0;

            var mem_usage = new mem_usage();
            var stat      = new SuperLUStat();

            int m = A.nrow;
            int n = A.ncol;

            var h = new List <GCHandle>();

            // Create matrix with ncol = 0 to indicate not to solve the system.
            var B = CreateEmptyDense(Dtype.SLU_D, m, h);
            var X = CreateEmptyDense(Dtype.SLU_D, n, h);

            try
            {
                var o = options.Raw;

                NativeMethods.StatInit(ref stat);

                NativeMethods.dgssvx(ref o, ref A, perm_c, perm_r, etree, equed,
                                     (double[])R, (double[])C, ref L, ref U,
                                     IntPtr.Zero, 0, ref B, ref X, out rpg, out rcond, null, null,
                                     ref glu, ref mem_usage, ref stat, out info);

                NativeMethods.StatFree(ref stat);

                options.Raw.Fact = Constants.FACTORED;
            }
            finally
            {
                InteropHelper.Free(h);
            }

            return(info);
        }
Beispiel #2
0
        protected override int DoSolve(DenseColumnMajorStorage <double> input, DenseColumnMajorStorage <double> result)
        {
            int info = 0;

            var mem_usage = new mem_usage();
            var stat      = new SuperLUStat();

            int nrhs = input.ColumnCount;

            var ferr = new double[nrhs];
            var berr = new double[nrhs];

            var h = new List <GCHandle>();

            var B = CreateDense(Dtype.SLU_D, input, h);
            var X = CreateDense(Dtype.SLU_D, result, h);

            try
            {
                var o = options.Raw;

                NativeMethods.StatInit(ref stat);

                NativeMethods.dgssvx(ref o, ref A, perm_c, perm_r, etree, equed,
                                     (double[])R, (double[])C, ref L, ref U,
                                     IntPtr.Zero, 0, ref B, ref X, out rpg, out rcond, ferr, berr,
                                     ref glu, ref mem_usage, ref stat, out info);

                NativeMethods.StatFree(ref stat);
            }
            finally
            {
                InteropHelper.Free(h);
            }

            return(info);
        }