/// <summary> /// /// </summary> /// <param name="n">Number of rows and columns in the symmetrix matrix A.</param> /// <param name="A">Row indices of A (of size nnz).</param> /// <param name="p">Column pointers of A (of size n+1).</param> /// <param name="perm">The permutation vector (of size n+1).</param> /// <param name="cmember">Constraint set of A (of size n).</param> /// <param name="stype">0: use both parts, >0: upper, <0: lower.</param> /// <returns></returns> /// <remarks> /// The array <paramref name="perm"/> is used as a workspace during the ordering, /// which is why it must be of length n+1, not just n. /// /// If <paramref name="stype"/> < 0, then only the strictly lower triangular /// part of A is accessed. The upper triangular part is assumed to be the transpose /// of the lower triangular part. This is the same as SYMAMD, which did not have /// an stype parameter. /// /// If <paramref name="stype"/> > 0, only the strictly upper triangular part /// of A is accessed. The lower triangular part is assumed to be the transpose /// of the upper triangular part. /// /// If <paramref name="stype"/> == 0, then the nonzero pattern of A+A' is ordered. /// </remarks> public COLAMD.Info Order(int n, int[] A, int[] p, int[] perm, int[] cmember, int stype) { var amd = new COLAMD(); return(amd.SymOrder(n, A, p, perm, GetControl(), cmember, stype)); }
/// <summary> /// /// </summary> /// <param name="n">Number of rows and columns in the symmetrix matrix A.</param> /// <param name="A">Row indices of A (of size nnz).</param> /// <param name="p">Column pointers of A (of size n+1).</param> /// <param name="perm">The permutation vector (of size n+1).</param> /// <returns></returns> /// <remarks> /// The array <paramref name="perm"/> is used as a workspace during the ordering, /// which is why it must be of length n+1, not just n. /// </remarks> public COLAMD.Info Order(int n, int[] A, int[] p, int[] perm) { var amd = new COLAMD(); return(amd.SymOrder(n, A, p, perm, GetControl())); }