On Sep 27, 2010, at 4:28 PM, Shri wrote:
> Barry,
> I've modified MatAXPY_SeqAIJ as follows when DIFFERENT_NONZERO_STRUCTURE
> flag is true (i) create a new matrix and do preallocation for it. For
> determining the number of nonzeros per row in the new matrix, i've used the
> number of nonzeros in the original two matrices. This is the piece of code
> which computes the nnz per row in the new matrix
> for(i = 0;i < m;i++) {
> nzx = xi[i+1] - xi[i]; nzy = yi[i+1] - yi[i];
> if (nzx > nzy) nnz[i] = nzy + (nzx - nzy);
> else nnz[i] = nzx + (nzy - nzx);
> }
>
> (ii) Set the values in this new matrix by adding values of matrix Y first
> followed by matrix X (iii) Replace the old matrix by new one using
> MatHeaderReplace.
>
> Let me know if its ok and i'll add the mpiaij version.
Note that the mpiaij one is much simpler; you only need to call the
MatAXPY() on each of the two submatrices A and B.
>
> Btw, i'm getting memory leak in the code.
> [0]Total space allocated 16 bytes
> [ 0]16 bytes PetscCommDuplicate() line 152 in src/sys/objects/tagm.c
> [0] PetscHeaderCreate_Private() line 25 in src/sys/objects/inherit.c
> [0] MatCreate() line 67 in src/mat/utils/gcreate.c
>
> I suspect it might be due to MatHeaderReplace(). Any cues?
Hmmm, does it it lead memory with the old code? Or only after the change.
Barry
>
> Boyce,can you please check if this working for your application.
>
> Shri
>
> ----- Boyce Griffith <griffith at cims.nyu.edu> wrote:
>> Hi, Barry et al. --
>>
>> I'm moving this over to petsc-dev, since that seems like the more
>> appropriate place.
>>
>> I'm attaching my stab at implementing MatAXPY for pairs of sequantial
>> AIJ matrices. I've done only very minimal testing, but it appears to
>> work for my application.
>>
>> In the implementation, I create a new matrix W to store the result of
>> computing a*X+Y. Instead of swapping out the innards of W and Y, my
>> implementation "returns" the newly allocated matrix W. (I didn't see a
>> function to swap out matrices. Is there one that could be used here?)
>>
>> -- Boyce
>>
>> On 9/27/10 1:06 PM, Barry Smith wrote:
>>>
>>> On Sep 27, 2010, at 12:04 PM, Jed Brown wrote:
>>>
>>>> On Mon, Sep 27, 2010 at 19:01, Barry Smith<bsmith at mcs.anl.gov> wrote:
>>>>> If you do not merge the column indices from A and B but simply count them
>>>>> all you will get over allocation, at worst a factor of two, though
>>>>> usually it would just be a little.
>>>>
>>>> You count the number of *unique* entries. You have two indices that
>>>> run through the arrays aj and bj, counting duplicates only once. This
>>>> is easy to do since they are both sorted.
>>>
>>> Yes, sounds like it could work and definitely better than my suggestion.
>>>
>>> Shri, can you try this?
>>>
>>> Barry
>>>
>>>>
>>>> Jed
>>>
>>>
>>>
>