I have the fix almost ready, but a new issue arises and I want to know your opinions
What to do if MatXXXSetPreallocation() is called after a matrix was assembled? Should we generate an error? See the behavior of this in action with a simple python snipet of code: A = PETSc.Mat().create() A.setSizes([5,5]) A.setFromOptions() A.setPreallocation(nz=3) for i in range(5): A[i,i] = 1 A.assemble() A.view() print A.setPreallocation(nz=3) A.view() the output of this is row 0: (0, 1) row 1: (1, 1) row 2: (2, 1) row 3: (3, 1) row 4: (4, 1) row 0: (0, 0) (0, 0) (0, 0) row 1: (0, 0) (0, 0) (0, 0) row 2: (0, 0) (0, 0) (0, 0) row 3: (0, 0) (0, 0) (0, 0) row 4: (0, 0) (0, 0) (0, 0) The matrix structure is completely broken. The easiest way to go is not enable users to reset preallocation if the matrix was ever assembled. What do you think? On 10/23/07, Barry Smith <bsmith at mcs.anl.gov> wrote: > > Fine. > > On Tue, 23 Oct 2007, Lisandro Dalcin wrote: > > > Of course, the space that can be reutilized are the arrays with > > preallocation info, not the ones with actual matrix entries (a,i,j). > > > > On 10/23/07, Lisandro Dalcin <dalcinl at gmail.com> wrote: > > > Looking at the actual code, it seems there is not need to actually > > > reallocate space, the same space can be reutilized. Do you think I'm > > > missing something? > > > > > > And please, tell me: should I fix this in release-2.3.3? I believe > > > this will not impact previous user code in any way. > > > > > > > > > > > > On 10/23/07, Barry Smith <bsmith at mcs.anl.gov> wrote: > > > > > > > > Lisandro, > > > > > > > > I agree we should support multiple calls (or at worst generate an > > > > error on the second call). Presumably the specific > > > > MatXXXYYYSetPreallocation() routines would simply free up their > > > > current points and then (as it does now) allocate the appropriate new > > > > space. Feel free to add this. > > > > > > > > Barry > > > > > > > > > > > > On Mon, 22 Oct 2007, Lisandro Dalcin wrote: > > > > > > > > > Currently, making sucessive calls for preallocating AIJ matrices seem > > > > > to originate memory leaks. > > > > > > > > > > How should this be corrected? I would prefer that this is a valid > > > > > operation, and fix appropriate routines to deallocate/reuse previous > > > > > memory, and set the new user-specified preallocation data. > > > > > > > > > > Other point: should this fix go to release-2.3.3? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Lisandro Dalc?n > > > --------------- > > > Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) > > > Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) > > > Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) > > > PTLC - G?emes 3450, (3000) Santa Fe, Argentina > > > Tel/Fax: +54-(0)342-451.1594 > > > > > > > > > -- Lisandro Dalc?n --------------- Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) PTLC - G?emes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594
