[petsc-users] question about MatXAIJSetPreallocation

Geoffrey Irving irving at naml.us
Tue Oct 2 21:14:36 CDT 2012


Thanks, that's what I ended up doing to fix my local version as well
(and forgot to send a final email).

Geoffrey

On Tue, Oct 2, 2012 at 7:12 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:
> Oh noes, that's not what I ever intended. That code is creating an array
> that is much longer than it should be.
>
> The logic for setting block size was also changed in the spring and
> evidently not propagated to this routine so I added the PetscLayoutSetUp()
> calls that ensure local size is divisible by block size.
>
> I think this patch fixes both issues:
>
> http://petsc.cs.iit.edu/petsc/releases/petsc-3.3/rev/4e499e21f7a2
>
>
> On Tue, Oct 2, 2012 at 7:57 PM, Geoffrey Irving <irving at naml.us> wrote:
>>
>> On Tue, Oct 2, 2012 at 4:48 PM, Geoffrey Irving <irving at naml.us> wrote:
>> > The dnnz argument to MatXAIJSetPreallocation is described as
>> >
>> >     dnnz - number of nonzero blocks per block row of diagonal part of
>> > parallel matrix
>> >
>> > To me, this implies that if the matrix has size m and the block size
>> > is bs, dnnz should have size m/bs.  However, the loop inside the
>> > routine looks like
>> >
>> >      for (i=0; i<m*bs; i++) {
>> >         if (dnnz) sdnnz[i] = dnnz[i/bs] * bs;
>> >         if (onnz) sonnz[i] = onnz[i/bs] * bs;
>> >       }
>> >
>> > which implies that dnnz should have m entries.  Is this a bug, or am I
>> > misinterpreting the meaning of dnnz?
>>
>> It looks like the loop hasn't changed since the beginning of
>> MatXAIJSetPreallocation, but the comment changed from
>>
>>     dnnz - number of nonzeros per row of diagonal block of parallel matrix
>>
>> to
>>
>>     dnnz - number of nonzero blocks per block row of diagonal part of
>> parallel matrix
>>
>> in
>>
>>     commit abccccb5e4359792067c7bef9b175a0511adf626
>>     Author: Jed Brown <jed at 59A2.org>
>>     Date:   Thu Mar 1 11:51:58 2012 -0600
>>
>>         Remove the maximum nonzero arguments from
>> MatXAIJSetPreallocation()
>>
>> I'll change my code to match the first comment and see if it works.
>>
>> Geoffrey
>
>


More information about the petsc-users mailing list