← Back to team overview

dolfin team mailing list archive

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

 



Johan Hake wrote:
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


That would work with enableDebug=yes, but comes unstuck if debugging is disabled.

Garth

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