On Oct 4, 2010, at 4:21 PM, Tabrez Ali wrote:

> I am trying to assemble a FE matrix (adding one element at a time from the 
> local stiffness matrix) and cant seem to get the preallocation right. I am 
> correctly calculating the number of non zeros per row and storing the value 
> in the array [nnzpr].

  (For sequential case) you cannot be calculating the number of nonzeros per 
row correctly and yet not getting the preallocation correct.

  For your simple problem. Print the nonzeros per row you are computing then 
print the sparse matrix you computing. That will show which rows are not 
computed or set properly.

> I dont understand why -mat_view_info shows allocated nonzeros to be 154 when 
> sum(nnzpr) is 112.

   If you mess up the count on a row it allocates a few extra for that row 
(incase you end up needing them) so the number allocated can be more then the 
number actually needed.

   Barry


> 
> Here is part of the relevant code
> 
> ...
> call MatCreateSeqBAIJ(Petsc_Comm_Self, 1, m, n, petsc_null_integer, nnzpr, 
> Mat_A, ierr)
> ...
> ! Assume a bilinear quad (2 dof per node)
> do j1=1,8
>   do j2=1,8
>     call MatSetValues(Mat_A, 1, indx(j1)-1, 1, indx(j2)-1, k(j1,j2), 
> Add_Values, ierr)
>   end do
> end do
> ...
> call MatAssemblyBegin(Mat_A,Mat_Final_Assembly,ierr)
> call MatAssemblyEnd(Mat_A,Mat_Final_Assembly,ierr)
> ...
> 
> On running it I get
> 
> -bash-3.00$ ./a.out <inp -info -mat_view_info
> ...
>  Total non-zero elements estimated i.e., sum(nnzpr) =                  112
> [0] PetscCommDuplicate(): Duplicating a communicator 1140850689 -2080374784 
> max tags = 2147483647
> [0] PetscCommDuplicate():   returning tag 2147483647
> [0] MatAssemblyEnd_SeqBAIJ(): Matrix size: 12 X 12, block size 1; storage 
> space: 42 unneeded, 112 used
> [0] MatAssemblyEnd_SeqBAIJ(): Number of mallocs during MatSetValues is 9
> [0] MatAssemblyEnd_SeqBAIJ(): Most nonzeros blocks in any row is 12
> ...
> Matrix Object:
>   type=seqbaij, rows=12, cols=12
>   total: nonzeros=112, allocated nonzeros=154
>       block size is 1
> 
> I dont understand why -mat_view_info shows allocated nonzeros to be 154 when 
> sum(nnzpr) is 112.
> 
> Thanks in advance.

Reply via email to