Amesos Package Browser (Single Doxygen Collection)  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
amesos_amd_info.c
Go to the documentation of this file.
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 "amesos_amd_internal.h"
17 
18 #define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }}
19 
20 GLOBAL 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",
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 }
#define AMD_NCMPA
Definition: amesos_amd.h:360
#define AMD_NMULTSUBS_LDL
Definition: amesos_amd.h:363
#define AMD_SUBSUB_VERSION
Definition: amesos_amd.h:405
#define GLOBAL
#define AMD_NZ_A_PLUS_AT
Definition: amesos_amd.h:357
#define PRI(format, x)
#define AMD_STATUS
Definition: amesos_amd.h:352
#define AMD_MAIN_VERSION
Definition: amesos_amd.h:403
#define AMD_NDENSE
Definition: amesos_amd.h:358
#define AMD_NZDIAG
Definition: amesos_amd.h:356
GLOBAL void AMD_info(double Info[])
#define AMD_MEMORY
Definition: amesos_amd.h:359
#define AMD_INVALID
Definition: amesos_amd.h:373
#define AMD_DMAX
Definition: amesos_amd.h:365
#define AMD_NMULTSUBS_LU
Definition: amesos_amd.h:364
#define AMD_OK
Definition: amesos_amd.h:371
#define AMD_N
Definition: amesos_amd.h:353
#define AMD_NDIV
Definition: amesos_amd.h:362
#define AMD_SUB_VERSION
Definition: amesos_amd.h:404
#define AMD_NZ
Definition: amesos_amd.h:354
#define AMD_OK_BUT_JUMBLED
Definition: amesos_amd.h:374
#define AMD_SYMMETRY
Definition: amesos_amd.h:355
#define AMD_OUT_OF_MEMORY
Definition: amesos_amd.h:372
#define PRINTF(params)
int n
#define AMD_DATE
Definition: amesos_amd.h:401
#define AMD_LNZ
Definition: amesos_amd.h:361