File: print_prob.m

package info (click to toggle)
rocsolver 6.4.3-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 17,876 kB
  • sloc: cpp: 151,850; python: 2,275; sh: 875; objc: 642; ansic: 402; makefile: 71; xml: 26
file content (106 lines) | stat: -rw-r--r-- 2,141 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
% ********************************************************************
% Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
% ********************************************************************

function [T,Q] = print_prob( A, dir_in )
%
% [T,Q] = print_prob( A [, dir] )
%
%
% Given a sparse matrix, write out the permutations and factorization
%
% The files are created in the current local directory by default
% If optional "dir" is given, the files are created under that directory

dir = '.';
if (nargin >= 2),
  dir = dir_in;
  is_absolute_dir = (dir(1) == '/');
  if (is_absolute_dir),
    [status,msg,msgid] = mkdir('',dir);
  else
    [status,msg,msgid] = mkdir('.',dir);
  end;
  isok = (status == 1);
  if (~isok),
    error(sprintf('print_prob: mkdir for %s return msg=%s, msgid=%g', ...
                                         dir,      msg,    msgid ));
    return;
  end;
end;

has_final_slash = (dir( numel(dir) ) == '/');
if (~has_final_slash),
  dir = strcat(dir,'/');
end;

nrow = size(A,1);
ncol = size(A,2);
[Ap,Ai,Ax] = sparse2csr( A );
print_gvec(strcat(dir,'ptrA'),Ap);
print_gvec(strcat(dir,'indA'),Ai);
print_gvec(strcat(dir,'valA'),Ax);



m = 30;
X = reshape( 1:(ncol*m), ncol, m );
B = A * X;

print_gvec(strcat(dir,'X_30'),X(:,1:30));
print_gvec(strcat(dir,'X_10'),X(:,1:10));
print_gvec(strcat(dir,'X_1'),X(:,1:1));

print_gvec(strcat(dir,'B_30'),B(:,1:30));
print_gvec(strcat(dir,'B_10'),B(:,1:10));
print_gvec(strcat(dir,'B_1'),B(:,1:1));


[L, is_indefinite, Q] = chol(A,'lower');
if (is_indefinite),

% perform LU instead

[L,U,P,Q] = lu(A);

np = size(P,2);
pvec = P*reshape(1:np,np,1);
pvec = pvec - 1;
print_gvec(strcat(dir,'P'),pvec);

nq = size(Q,2);
qvec = Q * reshape(1:nq,nq,1);
qvec = qvec - 1;
print_gvec(strcat(dir,'Q'),qvec);


T = tril(L,-1) + triu(U);


else


tiny = 1e-100;
T = L + triu(L',1)*tiny + triu(Q'*A*Q,1);

nq = size(Q,2);
qvec = Q * reshape(1:nq,nq,1);
qvec = qvec - 1;
print_gvec(strcat(dir,'Q'),qvec);

end



[Tp,Ti,Tx] = sparse2csr( T );




print_gvec(strcat(dir,'ptrT'),Tp);
print_gvec(strcat(dir,'indT'),Ti);
print_gvec(strcat(dir,'valT'),Tx);



end