~ubuntu-branches/ubuntu/saucy/deal.ii/saucy

« back to all changes in this revision

Viewing changes to contrib/umfpack/UMFPACK/Source/umf_is_permutation.c

  • Committer: Bazaar Package Importer
  • Author(s): Adam C. Powell, IV
  • Date: 2009-05-08 23:13:50 UTC
  • Revision ID: james.westby@ubuntu.com-20090508231350-rrh1ltgi0tifabwc
Tags: upstream-6.2.0
ImportĀ upstreamĀ versionĀ 6.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* ========================================================================== */
 
2
/* === UMF_is_permutation =================================================== */
 
3
/* ========================================================================== */
 
4
 
 
5
/* -------------------------------------------------------------------------- */
 
6
/* UMFPACK Copyright (c) Timothy A. Davis, CISE,                              */
 
7
/* Univ. of Florida.  All Rights Reserved.  See ../Doc/License for License.   */
 
8
/* web: http://www.cise.ufl.edu/research/sparse/umfpack                       */
 
9
/* -------------------------------------------------------------------------- */
 
10
 
 
11
/* Return TRUE if P is a r-permutation vector, FALSE otherwise */
 
12
/* P [0..r-1] must be an r-permutation of 0..n-1 */
 
13
 
 
14
#include "umf_internal.h"
 
15
 
 
16
GLOBAL Int UMF_is_permutation
 
17
(
 
18
    const Int P [ ],    /* permutation of size r */
 
19
    Int W [ ],          /* workspace of size n */
 
20
    Int n,
 
21
    Int r
 
22
)
 
23
{
 
24
    Int i, k ;
 
25
 
 
26
    if (!P)
 
27
    {
 
28
        /* if P is (Int *) NULL, this is the identity permutation */
 
29
        return (TRUE) ;
 
30
    }
 
31
 
 
32
    ASSERT (W != (Int *) NULL) ;
 
33
 
 
34
    for (i = 0 ; i < n ; i++)
 
35
    {
 
36
        W [i] = FALSE ;
 
37
    }
 
38
    for (k = 0 ; k < r ; k++)
 
39
    {
 
40
        i = P [k] ;
 
41
        DEBUG5 (("k "ID" i "ID"\n", k, i)) ;
 
42
        if (i < 0 || i >= n)
 
43
        {
 
44
            DEBUG0 (("i out of range "ID" "ID"\n", i, n)) ;
 
45
            return (FALSE) ;
 
46
        }
 
47
        if (W [i])
 
48
        {
 
49
            DEBUG0 (("i duplicate "ID"\n", i)) ;
 
50
            return (FALSE) ;
 
51
        }
 
52
        W [i] = TRUE ;
 
53
    }
 
54
    return (TRUE) ;
 
55
}