[petsc-users] Filling a matrix by chunks of nonzero entries

marco restelli mrestelli at gmail.com
Mon Jun 20 10:13:22 CDT 2016


Dear all,
   while assembling a matrix in PETsc we have the following pattern:


do i=1,number_of_chunks

 ! generate a chunk of matrix entries
 call compute_ith_chunk( i_idx , j_idx , values )

 ! insert those entries
 do j=1,size_of_the_ith_chunk
   call MatSetValue( mat , i_idx(j),j_idx(j),value(j) , add_values )
 enddo

enddo


The problem is that inserting the elements with MatSetValue seems to
have a significant overhead due to memory allocations and
deallocations.

Is there a way to speed-up this process, preallocating memory?

Notice that we know the number of elements that we have to insert for
each chunk, but we don't know to which extent they overlap, i.e. we do
not know how many nonzero entries will result in the final matrix.

Also, the entries do not have a block pattern, so we can not use
MatSetValues.

Thank you,
   Marco


More information about the petsc-users mailing list