COIN-OR::LEMON - Graph Library

source: glpk-cmake/src/amd/amd_info.c @ 1:c445c931472f

Last change on this file since 1:c445c931472f was 1:c445c931472f, checked in by Alpar Juttner <alpar@…>, 13 years ago

Import glpk-4.45

  • Generated files and doc/notes are removed
File size: 4.4 KB
Line 
1/* ========================================================================= */
2/* === AMD_info ============================================================ */
3/* ========================================================================= */
4
5/* ------------------------------------------------------------------------- */
6/* AMD, Copyright (c) Timothy A. Davis,                                      */
7/* Patrick R. Amestoy, and Iain S. Duff.  See ../README.txt for License.     */
8/* email: davis at cise.ufl.edu    CISE Department, Univ. of Florida.        */
9/* web: http://www.cise.ufl.edu/research/sparse/amd                          */
10/* ------------------------------------------------------------------------- */
11
12/* User-callable.  Prints the output statistics for AMD.  See amd.h
13 * for details.  If the Info array is not present, nothing is printed.
14 */
15
16#include "amd_internal.h"
17
18#define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }}
19
20GLOBAL void AMD_info
21(
22    double Info [ ]
23)
24{
25    double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ;
26
27    PRINTF (("\nAMD version %d.%d.%d, %s, results:\n",
28        AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE)) ;
29
30    if (!Info)
31    {
32        return ;
33    }
34
35    n = Info [AMD_N] ;
36    ndiv = Info [AMD_NDIV] ;
37    nmultsubs_ldl = Info [AMD_NMULTSUBS_LDL] ;
38    nmultsubs_lu = Info [AMD_NMULTSUBS_LU] ;
39    lnz = Info [AMD_LNZ] ;
40    lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ;
41
42    /* AMD return status */
43    PRINTF (("    status: ")) ;
44    if (Info [AMD_STATUS] == AMD_OK)
45    {
46        PRINTF (("OK\n")) ;
47    }
48    else if (Info [AMD_STATUS] == AMD_OUT_OF_MEMORY)
49    {
50        PRINTF (("out of memory\n")) ;
51    }
52    else if (Info [AMD_STATUS] == AMD_INVALID)
53    {
54        PRINTF (("invalid matrix\n")) ;
55    }
56    else if (Info [AMD_STATUS] == AMD_OK_BUT_JUMBLED)
57    {
58        PRINTF (("OK, but jumbled\n")) ;
59    }
60    else
61    {
62        PRINTF (("unknown\n")) ;
63    }
64
65    /* statistics about the input matrix */
66    PRI ("    n, dimension of A:                                  %.20g\n", n);
67    PRI ("    nz, number of nonzeros in A:                        %.20g\n",
68        Info [AMD_NZ]) ;
69    PRI ("    symmetry of A:                                      %.4f\n",
70        Info [AMD_SYMMETRY]) ;
71    PRI ("    number of nonzeros on diagonal:                     %.20g\n",
72        Info [AMD_NZDIAG]) ;
73    PRI ("    nonzeros in pattern of A+A' (excl. diagonal):       %.20g\n",
74        Info [AMD_NZ_A_PLUS_AT]) ;
75    PRI ("    # dense rows/columns of A+A':                       %.20g\n",
76        Info [AMD_NDENSE]) ;
77
78    /* statistics about AMD's behavior  */
79    PRI ("    memory used, in bytes:                              %.20g\n",
80        Info [AMD_MEMORY]) ;
81    PRI ("    # of memory compactions:                            %.20g\n",
82        Info [AMD_NCMPA]) ;
83
84    /* statistics about the ordering quality */
85    PRINTF (("\n"
86        "    The following approximate statistics are for a subsequent\n"
87        "    factorization of A(P,P) + A(P,P)'.  They are slight upper\n"
88        "    bounds if there are no dense rows/columns in A+A', and become\n"
89        "    looser if dense rows/columns exist.\n\n")) ;
90
91    PRI ("    nonzeros in L (excluding diagonal):                 %.20g\n",
92        lnz) ;
93    PRI ("    nonzeros in L (including diagonal):                 %.20g\n",
94        lnzd) ;
95    PRI ("    # divide operations for LDL' or LU:                 %.20g\n",
96        ndiv) ;
97    PRI ("    # multiply-subtract operations for LDL':            %.20g\n",
98        nmultsubs_ldl) ;
99    PRI ("    # multiply-subtract operations for LU:              %.20g\n",
100        nmultsubs_lu) ;
101    PRI ("    max nz. in any column of L (incl. diagonal):        %.20g\n",
102        Info [AMD_DMAX]) ;
103
104    /* total flop counts for various factorizations */
105
106    if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0)
107    {
108        PRINTF (("\n"
109        "    chol flop count for real A, sqrt counted as 1 flop: %.20g\n"
110        "    LDL' flop count for real A:                         %.20g\n"
111        "    LDL' flop count for complex A:                      %.20g\n"
112        "    LU flop count for real A (with no pivoting):        %.20g\n"
113        "    LU flop count for complex A (with no pivoting):     %.20g\n\n",
114        n + ndiv + 2*nmultsubs_ldl,
115            ndiv + 2*nmultsubs_ldl,
116          9*ndiv + 8*nmultsubs_ldl,
117            ndiv + 2*nmultsubs_lu,
118          9*ndiv + 8*nmultsubs_lu)) ;
119    }
120}
Note: See TracBrowser for help on using the repository browser.