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 at mcs.anl.gov 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 at mcs.anl.gov> >>> Date: Oct 30, 2007 9:18 AM >>> Subject: matrices without diagonals... >>> To: Barry Smith <bsmith at mcs.anl.gov> >>> Cc: Matthew Knepley <knepley at mcs.anl.gov> >>> >>> >>> >>> 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 >>> >>> >> >> > >
