lemon-project-template-glpk
diff deps/glpk/src/amd/amd_info.c @ 9:33de93886c88
Import GLPK 4.47
author | Alpar Juttner <alpar@cs.elte.hu> |
---|---|
date | Sun, 06 Nov 2011 20:59:10 +0100 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/deps/glpk/src/amd/amd_info.c Sun Nov 06 20:59:10 2011 +0100 1.3 @@ -0,0 +1,120 @@ 1.4 +/* ========================================================================= */ 1.5 +/* === AMD_info ============================================================ */ 1.6 +/* ========================================================================= */ 1.7 + 1.8 +/* ------------------------------------------------------------------------- */ 1.9 +/* AMD, Copyright (c) Timothy A. Davis, */ 1.10 +/* Patrick R. Amestoy, and Iain S. Duff. See ../README.txt for License. */ 1.11 +/* email: davis at cise.ufl.edu CISE Department, Univ. of Florida. */ 1.12 +/* web: http://www.cise.ufl.edu/research/sparse/amd */ 1.13 +/* ------------------------------------------------------------------------- */ 1.14 + 1.15 +/* User-callable. Prints the output statistics for AMD. See amd.h 1.16 + * for details. If the Info array is not present, nothing is printed. 1.17 + */ 1.18 + 1.19 +#include "amd_internal.h" 1.20 + 1.21 +#define PRI(format,x) { if (x >= 0) { PRINTF ((format, x)) ; }} 1.22 + 1.23 +GLOBAL void AMD_info 1.24 +( 1.25 + double Info [ ] 1.26 +) 1.27 +{ 1.28 + double n, ndiv, nmultsubs_ldl, nmultsubs_lu, lnz, lnzd ; 1.29 + 1.30 + PRINTF (("\nAMD version %d.%d.%d, %s, results:\n", 1.31 + AMD_MAIN_VERSION, AMD_SUB_VERSION, AMD_SUBSUB_VERSION, AMD_DATE)) ; 1.32 + 1.33 + if (!Info) 1.34 + { 1.35 + return ; 1.36 + } 1.37 + 1.38 + n = Info [AMD_N] ; 1.39 + ndiv = Info [AMD_NDIV] ; 1.40 + nmultsubs_ldl = Info [AMD_NMULTSUBS_LDL] ; 1.41 + nmultsubs_lu = Info [AMD_NMULTSUBS_LU] ; 1.42 + lnz = Info [AMD_LNZ] ; 1.43 + lnzd = (n >= 0 && lnz >= 0) ? (n + lnz) : (-1) ; 1.44 + 1.45 + /* AMD return status */ 1.46 + PRINTF ((" status: ")) ; 1.47 + if (Info [AMD_STATUS] == AMD_OK) 1.48 + { 1.49 + PRINTF (("OK\n")) ; 1.50 + } 1.51 + else if (Info [AMD_STATUS] == AMD_OUT_OF_MEMORY) 1.52 + { 1.53 + PRINTF (("out of memory\n")) ; 1.54 + } 1.55 + else if (Info [AMD_STATUS] == AMD_INVALID) 1.56 + { 1.57 + PRINTF (("invalid matrix\n")) ; 1.58 + } 1.59 + else if (Info [AMD_STATUS] == AMD_OK_BUT_JUMBLED) 1.60 + { 1.61 + PRINTF (("OK, but jumbled\n")) ; 1.62 + } 1.63 + else 1.64 + { 1.65 + PRINTF (("unknown\n")) ; 1.66 + } 1.67 + 1.68 + /* statistics about the input matrix */ 1.69 + PRI (" n, dimension of A: %.20g\n", n); 1.70 + PRI (" nz, number of nonzeros in A: %.20g\n", 1.71 + Info [AMD_NZ]) ; 1.72 + PRI (" symmetry of A: %.4f\n", 1.73 + Info [AMD_SYMMETRY]) ; 1.74 + PRI (" number of nonzeros on diagonal: %.20g\n", 1.75 + Info [AMD_NZDIAG]) ; 1.76 + PRI (" nonzeros in pattern of A+A' (excl. diagonal): %.20g\n", 1.77 + Info [AMD_NZ_A_PLUS_AT]) ; 1.78 + PRI (" # dense rows/columns of A+A': %.20g\n", 1.79 + Info [AMD_NDENSE]) ; 1.80 + 1.81 + /* statistics about AMD's behavior */ 1.82 + PRI (" memory used, in bytes: %.20g\n", 1.83 + Info [AMD_MEMORY]) ; 1.84 + PRI (" # of memory compactions: %.20g\n", 1.85 + Info [AMD_NCMPA]) ; 1.86 + 1.87 + /* statistics about the ordering quality */ 1.88 + PRINTF (("\n" 1.89 + " The following approximate statistics are for a subsequent\n" 1.90 + " factorization of A(P,P) + A(P,P)'. They are slight upper\n" 1.91 + " bounds if there are no dense rows/columns in A+A', and become\n" 1.92 + " looser if dense rows/columns exist.\n\n")) ; 1.93 + 1.94 + PRI (" nonzeros in L (excluding diagonal): %.20g\n", 1.95 + lnz) ; 1.96 + PRI (" nonzeros in L (including diagonal): %.20g\n", 1.97 + lnzd) ; 1.98 + PRI (" # divide operations for LDL' or LU: %.20g\n", 1.99 + ndiv) ; 1.100 + PRI (" # multiply-subtract operations for LDL': %.20g\n", 1.101 + nmultsubs_ldl) ; 1.102 + PRI (" # multiply-subtract operations for LU: %.20g\n", 1.103 + nmultsubs_lu) ; 1.104 + PRI (" max nz. in any column of L (incl. diagonal): %.20g\n", 1.105 + Info [AMD_DMAX]) ; 1.106 + 1.107 + /* total flop counts for various factorizations */ 1.108 + 1.109 + if (n >= 0 && ndiv >= 0 && nmultsubs_ldl >= 0 && nmultsubs_lu >= 0) 1.110 + { 1.111 + PRINTF (("\n" 1.112 + " chol flop count for real A, sqrt counted as 1 flop: %.20g\n" 1.113 + " LDL' flop count for real A: %.20g\n" 1.114 + " LDL' flop count for complex A: %.20g\n" 1.115 + " LU flop count for real A (with no pivoting): %.20g\n" 1.116 + " LU flop count for complex A (with no pivoting): %.20g\n\n", 1.117 + n + ndiv + 2*nmultsubs_ldl, 1.118 + ndiv + 2*nmultsubs_ldl, 1.119 + 9*ndiv + 8*nmultsubs_ldl, 1.120 + ndiv + 2*nmultsubs_lu, 1.121 + 9*ndiv + 8*nmultsubs_lu)) ; 1.122 + } 1.123 +}