← Back to team overview

dolfin team mailing list archive

Re: [HG DOLFIN] Fixes for PETSc 2.3.3 compatibility.

 

On Thursday 05 March 2009 08:43:44 Garth N. Wells wrote:
> 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);

Sounds reasonable.

Should this signature be added in GenericMatrix.h? It is only EpetraMatrix and 
PETScMatrix that need to relate to this information. 

> 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.

Ok.

> 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);

Yes, you are right. I think did it by prupose though, i.e., only letting 
matrices with the same nonzero pattern be addable. :P

Johan

> 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 <gnw20@xxxxxxxxx>"
> >>>>>> 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 <gnw20@xxxxxxxxx>"
> >>>>>> 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 <gnw20@xxxxxxxxx>"
> >>>>>> 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
> >>>>>> DOLFIN-dev@xxxxxxxxxx
> >>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
> >>>>>
> >>>>> _______________________________________________
> >>>>> DOLFIN-dev mailing list
> >>>>> DOLFIN-dev@xxxxxxxxxx
> >>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
> >>>
> >>> _______________________________________________
> >>> DOLFIN-dev mailing list
> >>> DOLFIN-dev@xxxxxxxxxx
> >>> 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)
> >> ----------------------------------------------------




Follow ups

References