On Fri, Feb 10, 2012 at 3:38 PM, Matthew Knepley <knepley at gmail.com> wrote:
> On Fri, Feb 10, 2012 at 3:24 PM, Dmitry Karpeev <karpeev at mcs.anl.gov>wrote: > >> >> >> On Fri, Feb 10, 2012 at 12:13 AM, Jed Brown <jedbrown at mcs.anl.gov> wrote: >> >>> On Fri, Feb 10, 2012 at 00:05, Dmitry Karpeev <karpeev at mcs.anl.gov>wrote: >>> >>>> I don't think so. Preallocating doesn't set any values and seems to >>>> leave the matrix marked !assembled. >>>> MatDuplicate for such a matrix will fail. Assemblying it before >>>> setting values (just to force an assembled flag) >>>> will squeeze out the extra values, won't it? I think it would just be >>>> reasonable to allow to duplicate unassembled >>>> matrices, or, better yet, have a matrix be "assembled" by default until >>>> MatSetValues has been called. >>>> But I'm not sure whether either solution will break something else. >>>> >>> >>> Are you calling DMSetMatrixPreallocateOnly()? >>> >> >> So, as I understand, this behavior is reasonable for the use with SNES, >> since the matrix is assembled with a call to SNES(DM)ComputeJacobian. >> DMGetMatrix is also used with KSP, when it is also expected to assemble >> the matrix. >> This seems to make the behavior of DMGetMatrix a bit schizophrenic and >> dependent on whether it is used from a SNES or a KSP. Should we try to >> unify this instead? One option is to assume that DMGetMatrix (or >> DMGetOperators) merely preallocates the matrix of a DM-preferred type, >> while a call to SNESDMComputeJacobian or (the new method) >> KSPDMFormOperators, respectively, would actually compute the values and >> assemble or do the equivalent thing for MF. In fact, one could unify this >> behavior already by treating linear problems as nonlinear. >> > > It responds the same whether you use it from KSP or SNES. Are actually > running an example which has > the behavior you are talking about? > Yes, DMGetMatrix responds the same way wherever you call it from, but what will happen if you call DMSetMatrixPreallocateOnly() and use that DM with a KSP? It seems to me that once DMSetMatrixPreallocateOnly() has been called, that DM is only usable from SNES. Dmitry. > > Matt > > >> Dmitry. >> >> Dmitry. >> >> > > > -- > 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 > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120210/07dc79fc/attachment.html>
