18 sparsity(nrows,ncols),
32 matrix.set_size(nrows, ncols);
69 if(
matrix.n_rows != rdofs.n_rows ||
matrix.n_cols != cdofs.n_rows)
71 set_size(rdofs.n_rows, cdofs.n_rows);
112 uint ic, ir, row, col;
118 tmp_mat.col( col ).zeros();
124 tmp_rhs( row ) = 0.0;
125 tmp_mat.row( row ).zeros();
133 double new_diagonal =
matrix(row, col);
137 else if(new_diagonal == 0.0)
147 tmp_mat(row,col) = new_diagonal;
173 ASSERT(
sparsity(row,col))(row)(col).error(
"Violation of sparsity pattern.");
175 matrix(row, col) += mat_val;
183 ASSERT(
sparsity(row,col))(row)(col).error(
"Violation of sparsity pattern.");
185 matrix(row, col) += mat_val;
213 for(
uint i=0; i < sp.n_rows; i++)
214 for(
uint j=0; j < sp.n_cols; j++)
224 arma::uword n =
matrix.n_rows - 1;
225 ASSERT_LT(offset, n)(
"Schur complement (offset) dimension mismatch.");
228 arma::mat BinvA =
matrix.submat(offset, 0, n, offset-1) *
matrix.submat(0, 0, offset-1, offset-1).i();
231 schur.
matrix =
matrix.submat(offset, offset, n, n) - BinvA *
matrix.submat(0, offset, offset-1, n);
232 schur.
rhs =
rhs.subvec(offset, n) - BinvA *
rhs.subvec(0, offset-1);
237 schur.
rhs = -1.0 * schur.
rhs;
245 arma::uword n =
matrix.n_rows - 1;
246 ASSERT_LT(offset, n)(
"Schur complement (offset) dimension mismatch.");
248 reconstructed_solution.set_size(offset);
253 reconstructed_solution = invA *
rhs.subvec(0,offset-1) - invA *
matrix.submat(0, offset, offset-1, n) * schur_solution;