<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Barry Smith wrote:
<blockquote cite="mid:64EFABC4-0232-4BE2-AA6D-BBB05BAEEBC3@mcs.anl.gov"
 type="cite">
  <pre wrap="">On Oct 4, 2010, at 4:21 PM, Tabrez Ali wrote:

  </pre>
  <blockquote type="cite">
    <pre wrap="">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].
    </pre>
  </blockquote>
  <pre wrap=""><!---->
  (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.
  </pre>
</blockquote>
<br>
I am calculating the nonzeros per row correctly and have checked this
by explicitly forming the dense matrix.<br>
<br>
Here is the stiffness matrix (1 corresponds to non zero location)
pattern for the same problem.<br>
<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0<br>
&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0<br>
&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; 1&nbsp; 1<br>
<br>
and here is the [nnzpr] array that I passed to MatCreateSeqBAIJ<br>
&nbsp; <br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
&nbsp; 12<br>
&nbsp; 12<br>
&nbsp; 12<br>
&nbsp; 12<br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
&nbsp;&nbsp; 8<br>
<br>
The sum of values in [nnzpr] adds up to 112.<br>
<br>
Thanks again<br>
<blockquote cite="mid:64EFABC4-0232-4BE2-AA6D-BBB05BAEEBC3@mcs.anl.gov"
 type="cite">
  <pre wrap=""></pre>
  <blockquote type="cite">
    <pre wrap="">I dont understand why -mat_view_info shows allocated nonzeros to be 154 when sum(nnzpr) is 112.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
   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


  </pre>
  <blockquote type="cite">
    <pre wrap="">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 &lt;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.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
  </pre>
</blockquote>
<br>
</body>
</html>