1function test14 (nmat) 2%TEST14 test metis, symbfact2, and etree2 3% Example: 4% test14(nmat) 5% See also cholmod_test 6 7% Copyright 2007, Timothy A. Davis, http://www.suitesparse.com 8 9fprintf ('=================================================================\n'); 10fprintf ('test14: test metis, symbfact2, and etree2\n') ; 11 12index = ssget ; 13 14[ignore f] = sort (max (index.nrows, index.ncols)) ; 15 16% f1 = find (max (index.nrows (f), index.ncols (f)) > 55500) ; 17% f1 = f1 (1) ; 18% f = f (f1:end) ; 19 20% These bugs show up when Common->metis_memory is set to zero: 21% skip = [ 1298 ] ; % runs out of memory in metis(A,'row') 22skip = 1257 ; %#ok % GHS_psdef/crankseg_1: segfault in metis(A,'row') ; 23skip = 850 ; %#ok % Chen/pkustk04: segfault in metis(A,'row') ; 24skip = [ ] ; %#ok 25 26if (nargin > 0) 27 nmat = max (0,nmat) ; 28 nmat = min (nmat, length (f)) ; 29 f = f (1:nmat) ; 30end 31 32for i = f 33 34 fprintf ('%d:\n', i) ; 35 if (any (skip == i)) 36 fprintf ('skip %s / %s\n', index.Group {i}, index.Name {i}) ; 37 continue 38 end 39 40 % try 41 42 Prob = ssget (i) %#ok 43 A = Prob.A ; 44 [m n] = size (A) ; 45 46 if (m == n) 47 S = spones (A) ; 48 else 49 n = min (m,n) ; 50 S = spones (A (1:n,1:n)) ; 51 end 52 53 try % compute nnz(S*S') 54 nzaat = nnz (S*S') ; 55 catch 56 nzaat = -1 ; 57 end 58 try % compute nnz(S'*S) 59 nzata = nnz (S'*S) ; 60 catch 61 nzata = -1 ; 62 end 63 S = S | S' ; 64 65 fprintf ('nnz(A) %d\n', nnz (A)) ; 66 fprintf ('nnz(S) %d\n', nnz (S)) ; 67 fprintf ('nnz(A*A'') %d\n', nzaat) ; 68 fprintf ('nnz(A''*A) %d\n', nzata) ; 69 70 fprintf ('metis (S):\n') ; p1 = metis (S) ; 71 fprintf ('metis (A,row):\n') ; p2 = metis (A, 'row') ; 72 fprintf ('metis (A,col):\n') ; p3 = metis (A, 'col') ; 73 74 fprintf ('turning off postorder:\n') ; 75 fprintf ('metis (S):\n') ; n1 = metis (S, 'sym', 'no postorder') ; 76 fprintf ('metis (A,row):\n') ; n2 = metis (A, 'row', 'no postorder') ; 77 fprintf ('metis (A,col):\n') ; n3 = metis (A, 'col', 'no postorder') ; 78 79 fprintf ('analyzing results:\n') ; 80 81 [pa1 po1] = etree2 (S (n1,n1)) ; 82 [pa2 po2] = etree2 (A (n2,:), 'row') ; 83 [pa3 po3] = etree2 (A (:,n3), 'col') ; 84 85 q1 = n1 (po1) ; 86 q2 = n2 (po2) ; 87 q3 = n3 (po3) ; 88 89 if (any (p1 ~= q1)) 90 error ('1!') ; 91 end 92 93 if (any (p2 ~= q2)) 94 error ('2!') ; 95 end 96 97 if (any (p3 ~= q3)) 98 error ('3!') ; 99 end 100 101 s1 = symbfact2 (S (p1,p1)) ; 102 s2 = symbfact2 (A (p2,:), 'row') ; 103 s3 = symbfact2 (A (:,p3), 'col') ; 104 105 t1 = symbfact2 (S (n1,n1)) ; 106 t2 = symbfact2 (A (n2,:), 'row') ; 107 t3 = symbfact2 (A (:,n3), 'col') ; 108 109 if (any (s1 ~= t1 (po1))) 110 error ('s1!') ; 111 end 112 113 if (any (s2 ~= t2 (po2))) 114 error ('s2!') ; 115 end 116 117 if (any (s3 ~= t3 (po3))) 118 error ('s3!') ; 119 end 120 121 % catch 122 % fprintf ('%d failed\n') ; 123 % end 124end 125 126 127fprintf ('test14 passed\n') ; 128