[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fwd: matrices without diagonals...




The problem I encountered is in:

  src/mat/impls/aij/seq/aijfact.c

The MatICCFactorSymbolic_SeqAIJ does not check for empty rows when the number of levels is set to zero. For a larger number of levels it does get checked.

I changed my code to add the diagonal into the matrix to prevent the error from occuring...

Cheers, Todd.

On Tue, 30 Oct 2007, Barry Smith wrote:


Todd,

  You are correct!

  There is a routine MatMissingDiagonal(). Routines that
implicitly require all diagonal entries in the data structure
are suppose to call this routine and check the flag before
chugging along. It appears that this code is not always
called when needed.

  Note that many methods DO NOT require the diagonal entries
so MatMissingDiagonal() should not be called willy-nilly
but only when needed.

  Please report to petsc-maint@xxxxxxxxxxx the routines that
crash for you and we will add the error checking (note matrix
type in the report).

  Barry


On Tue, 30 Oct 2007, Todd Munson wrote:


I'll let you all decide the best course of action. I'm just going to make the statement that a core dump is not a valid way to signify that the diagonal does not exist. Something needs to be done...

SeqAIJ has a PetscScalar* for the various diagonal entries; not sure why the
others do not do something similar if the diagonal is always required.

Todd.

On Tue, 30 Oct 2007, Matthew Knepley wrote:

I may be wrong, but I think a lot of AIJ methods need the diagonal. Do we
think
it is feasible to relax this? I would be more for filling the diagonal
with zeros
automatically.

  Matt

---------- Forwarded message ----------
From: Todd Munson <tmunson@xxxxxxxxxxx>
Date: Oct 30, 2007 9:18 AM
Subject: matrices without diagonals...
To: Barry Smith <bsmith@xxxxxxxxxxx>
Cc: Matthew Knepley <knepley@xxxxxxxxxxx>



Barry,

We discussed this yesterday and I want to come to a conclusion before I go
and change any code.  The problem is that some of the matrix I have do not
have diagonal entries...in fact both the rows and columns do not have any
nonzeros.  Rather than PETSc terminating gracefully and telling me the
problem, I get a segmentation violation and a core dump.

There are two questions:

  1) Which functions require a diagonal?
  2) Should these functions check for the diagonal and abort with a useful
     error message?

My feeling is that the diagonal is required only in a few cases and it may
not even be necessary, but I've been known to be wrong before.  Most of
the code should work without requiring diagonal entries, which is why it
should only check for them when necessary.

Todd.



--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which
their experiments lead.
-- Norbert Wiener