Johan Hake wrote:
> Hello Marc!
> 
>>     here's a little patch I did to handle the change in MatInfo from
>> Petsc-3.0.0 (which no longer includes global sizes...this is handled
>> by MatGetSize)
> 
> Ok.
> 
>> I believe this bit of code has the same  functionality as your
>> original code (whether that test is appropriate for determining the
>> same NonZeroStructure, I'm not sure)
> 
> Thanks! 
> 
>>   // mspieg: matinfo no longer includes sizes in petsc-dev
>>    MatInfo this_info, other_info;
>>    MatGetInfo(*(this->A), MAT_GLOBAL_SUM, &this_info);
>>    MatGetInfo(*A.mat(),   MAT_GLOBAL_SUM, &other_info);
>>    PetscInt this_m, this_n, other_m, other_n;
>>    MatGetSize(*(this->A),&this_m,&this_n);
>>    MatGetSize(*(this->A),&other_m,&other_n);
>>
>>    return this_info.nz_allocated   == other_info.nz_allocated   && \
>>           this_n == other_n && \
>>           this_m  == other_m;
> 
> However as you say I am not sure this is enough to determine the same nonzero 
> patter. As a side note we also store the size of the global matrix so we 
> probably do not have to call PETSc for this.
> 
> Should we include more comparisions from the MatInfo, memory, blocksize? 
> 

This should be left to the user,

    void PETScMatrix::axpy(double a, const GenericMatrix& A, bool 
same_nonzero_pattern = false);

The test for the non-zero pattern doesn't look robust to me. I would 
expect that if there was an efficient, robust test to compare sparsity 
patterns that PETSc would perform this.

Also, there is a problem with the code in PETScMatrix::axpy(..). Instead of

   dolfin_assert(sameNonzeroPattern(*AA));
   MatAXPY(*(this->A), a, *AA->mat(), SAME_NONZERO_PATTERN);

it should be

   if (sameNonzeroPattern(*AA))
     MatAXPY(*(this->A), a, *AA->mat(), SAME_NONZERO_PATTERN);
   else
     MatAXPY(*(this->A), a, *AA->mat(), DIFFERENT_NONZERO_PATTERN);

Garth


> Johan
> 
>> cheers
>> marc
>>
>> On Mar 4, 2009, at 2:50 PM, Johan Hake wrote:
>>> On Wednesday 04 March 2009 20:16:56 Garth N. Wells wrote:
>>>> Johan Hake wrote:
>>>>> On Wednesday 04 March 2009 12:46:10 DOLFIN wrote:
>>>>>> One or more new changesets pushed to the primary dolfin repository.
>>>>>> A short summary of the last three changesets is included below.
>>>>>>
>>>>>> changeset:   5791:7b24d1479dff485f4db0ba38c2e28984a0a3cf46
>>>>>> tag:         tip
>>>>>> user:        "Garth N. Wells <[email protected]>"
>>>>>> date:        Wed Mar 04 11:33:23 2009 +0000
>>>>>> files:       dolfin/la/PETScKrylovSolver.cpp
>>>>>> dolfin/la/PETScKrylovSolver.h dolfin/la/PETScMatrix.cpp
>>>>>> dolfin/la/PETScMatrix.h
>>>>>> dolfin/la/PETScPreconditioner.cpp dolfin/la/PETScPreconditioner.h
>>>>>> description:
>>>>>> Fixes for PETSc 2.3.3 compatibility.
>>>>> This commit broke the linear algebra test for PETSc matrices. The
>>>>> check
>>>>> for the sparsity pattern is commented out, and en error is raised
>>>>> instead. Is it not possible to check the non zero pattern for PETSc
>>>>> matrices in 3.0?
>>>> The same check doesn't work with PETSc 3.0 because of changes to
>>>> MatInfo.
>>> Ok.
>>>
>>>> The check is not pretty so we should find a better solution if this
>>>> function is required.
>>> I think it would be nice to have it, as PETSc can do some
>>> optimalizations if
>>> two matrices have the same pattern.
>>>
>>>> There is a PETSc function
>>>> MatGetSeqNonzeroStructure which may help, but I haven't had time
>>>> to look
>>>> at it.
>>> Haven't looked to deep into MatGetSeqNonzeroStructure. But it
>>> sounds like it
>>> gives the nonzero sparsity pattern which we really are not
>>> interested in.
>>>
>>>> Why is the function PETScMatrix::sameNonzeroPattern required? It's
>>>> not
>>>> implemented for all backends.
>>> When I implemented the axpy function I added this test. I do check
>>> the nonzero
>>> pattern for EpetraMatrices too, but there I only do it once, so no
>>> extra
>>> function.
>>>
>>> I think we should be able to still use the MatInfo structure, but
>>> maybe some
>>> guidence from the PETSc developers could help?
>>>
>>> Johan
>>>
>>>> Garth
>>>>
>>>>> Johan
>>>>>
>>>>>> changeset:   5790:05d6f03e87a8bb33cc5dc55add40e8de1c6ebfd0
>>>>>> user:        "Garth N. Wells <[email protected]>"
>>>>>> date:        Wed Mar 04 11:21:41 2009 +0000
>>>>>> files:       dolfin/la/PETScKrylovMatrix.cpp
>>>>>> dolfin/la/PETScKrylovSolver.cpp dolfin/la/PETScKrylovSolver.h
>>>>>> dolfin/la/PETScLUSolver.cpp dolfin/la/PETScMatrix.cpp
>>>>>> dolfin/la/PETScMatrix.h dolfin/la/PETScPreconditioner.cpp
>>>>>> dolfin/la/PETScPreconditioner.h description:
>>>>>> PETSc 3 updates.
>>>>>>
>>>>>>
>>>>>> changeset:   5789:3abcc647c6141cc4b2fd035cc417eedf80872ae7
>>>>>> user:        "Garth N. Wells <[email protected]>"
>>>>>> date:        Wed Mar 04 10:45:44 2009 +0000
>>>>>> files:       dolfin/la/PETScKrylovSolver.cpp
>>>>>> description:
>>>>>> Some updates for PETSc 3.
>>>>>>
>>>>>> -------------------------------------------------------------------
>>>>>> ---
>>>>>> For more details, visit http://www.fenics.org/hg/dolfin
>>>>>> _______________________________________________
>>>>>> DOLFIN-dev mailing list
>>>>>> [email protected]
>>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>>>>> _______________________________________________
>>>>> DOLFIN-dev mailing list
>>>>> [email protected]
>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>>> _______________________________________________
>>> DOLFIN-dev mailing list
>>> [email protected]
>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>> ----------------------------------------------------
>> Marc Spiegelman
>> Lamont-Doherty Earth Observatory
>> Dept. of Applied Physics/Applied Math
>> Columbia University
>> http://www.ldeo.columbia.edu/~mspieg
>> tel: 845 704 2323 (SkypeIn)
>> ----------------------------------------------------
> 
> 


_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to