Hi Gennadiy,

If you're wanting to print only "possibly" non-zero entries in the sparse-matrix, you can check the underlying sparsity pattern and determine whether the entry exists or not:
sparse_matrix.get_sparsity_pattern().exists(i,j)
This returns true if the entry is writable and false if the entry does not exist (i.e. always zero).

Regards,
J-P

On Fri 26 Aug 2011 14:49:55 SAST, Markus Bürg wrote:
Hello Gennadiy,

unfortunately you have to check the value of the entries:

if (std::abs (sparse_matrix.el (i,j)) > 1e-15)
std::cout ...

Best Regards,
Markus



Am 26.08.11 14:02, schrieb Gennadiy Rishkin:
Hi

I'm trying to iterate over the nonzero entries in a matrix but the code below gives all entries including zero entries. How do I obtain the values and indexes of the nonzero entries?


The test system_matrix is from step-2 (no refinement):

6.667e-01 0.000e+00 0.000e+00 0.000e+00
0.000e+00 6.667e-01 0.000e+00 0.000e+00
0.000e+00 0.000e+00 6.667e-01 0.000e+00
0.000e+00 0.000e+00 0.000e+00 6.667e-01


for (unsigned int i = 0; i < 1 /*system_matrix.m()*/; ++i) {
std::cout << "Row " << i << " has " << sparsity_pattern.row_length(i) << " entries." << std::endl;

SparsityPattern::row_iterator rowBegin = sparsity_pattern.row_begin(i);
SparsityPattern::row_iterator rowEnd = sparsity_pattern.row_end(i);

for ( ; rowBegin != rowEnd; ++rowBegin) {
if ( sparsity_pattern.exists( i, sparsity_pattern.column_number(i, *rowBegin) ) )
std::cout << *rowBegin << std::endl;
}
}

OUTPUT:

Row 0 has 4 entries.
0
1
2
3


Gennadiy


_______________________________________________
dealii mailing listhttp://poisson.dealii.org/mailman/listinfo/dealii


_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii
_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii

Reply via email to