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); }
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); }