sym-ildl  1.2
Incomplete LDL' factorizations of indefinite symmetric and skew-symmetric matrices.
lilc_matrix_sym_perm.h
1 //-*- mode: c++ -*-
2 #ifndef _LIL_MATRIX_SYM_PERM_H_
3 #define _LIL_MATRIX_SYM_PERM_H_
4 
5 template<class el_type>
6 void lilc_matrix<el_type> :: sym_perm(std::vector<int>& perm) {
7  vector<idx_vector_type> m_idx_new(m_n_cols);
8  vector<elt_vector_type> m_x_new(m_n_cols);
9 
10  int i, j, pi, pj;
11  el_type px;
12  vector<int> pinv(m_n_cols);
13  for (i = 0; i < m_n_cols; i++) {
14  pinv[perm[i]] = i;
15  list[i].clear();
16  }
17 
18  for (j = 0; j < m_n_cols; j++) { //no need to use function call n_cols() every iter
19  pj = pinv[j];
20 
21  for (i = 0; i < (int) m_idx[j].size(); i++) {
22  pi = pinv[m_idx[j][i]];
23  px = m_x[j][i];
24 
25  if (pi < pj) {
26  m_idx_new[ pi ].push_back(pj);
27  m_x_new[ pi ].push_back(px);
28  list[pj].push_back(pi);
29 
30  } else {
31  m_idx_new[ pj ].push_back(pi);
32  m_x_new[ pj ].push_back(px);
33 
34  if (pi != pj)
35  list[pi].push_back(pj);
36 
37  }
38  }
39  }
40 
41  m_idx.swap(m_idx_new);
42  m_x.swap(m_x_new);
43 
44  for (i = 0; i < m_n_cols; i++) {
45  ensure_invariant(i, i, m_idx[i]);
46  ensure_invariant(i, i, list[i], true);
47  }
48 }
49 
50 #endif // _LIL_MATRIX_SYM_PERM_H_
void sym_perm(vector< int > &perm)
Given a permutation vector perm, A is permuted to P&#39;AP, where P is the permutation matrix associated ...
Definition: lilc_matrix_sym_perm.h:6