[petsc-users] MatZeroEntries for retaining allocated space

Samuel Estes samuelestes91 at gmail.com
Tue Apr 12 19:23:22 CDT 2022


Thank you both so much. That makes sense. It also explains the zero fill option in the MatPreallocatorPreallocate routine. I believe I understand what I need to now. 

> On Apr 12, 2022, at 4:11 PM, Junchao Zhang <junchao.zhang at gmail.com> wrote:
> 
> 
> 
> 
>> On Tue, Apr 12, 2022 at 3:51 PM Samuel Estes <samuelestes91 at gmail.com> wrote:
>> Ah, ok thank you. So let me just make sure I completely understand. When using the MatPreallocatorPreallocate() routine, since the exact sparsity pattern is specified (as opposed to just specifying the number of nnz per row), there is no need to put in extra zeros to maintain the allocated space because the routine does that for me?
> Yes, as Mark said. The zeroing code is at https://gitlab.com/petsc/petsc/-/blob/main/src/mat/impls/preallocator/matpreallocator.c#L186 
>  But please note that you need to call  MatPreallocatorPreallocate(Mat mat, PetscBool fill, Mat A) with fill=PETSC_TRUE to zero A. See manual at https://petsc.org/main/docs/manualpages/Mat/MatPreallocatorPreallocate.html
> 
>  
>>> On Tue, Apr 12, 2022 at 3:46 PM Junchao Zhang <junchao.zhang at gmail.com> wrote:
>>> 
>>> 
>>>> On Tue, Apr 12, 2022 at 12:23 PM Samuel Estes <samuelestes91 at gmail.com> wrote:
>>>> Maybe I should create a separate question for this but I did some testing and now I'm a bit confused on how PETSc handles preallocated space which is not assigned a value. I created a test case where I allocated a certain amount of space for a matrix. I then only assigned a value to the (0,0) entry and assembled the matrix. When I look at the MatInfo it says that there were 0 unneeded entries. Furthermore, when I use MatView, I see that there are 0 values in the matrix so there actually were values which were put there. 
>>>> 
>>>> I have a guess at what's happening and if I'm correct then it would solve my original problem but I would like to confirm here. I am using the MatPreallocator class along with the MatPreallocatorPreallocate() routine to allocate space for the matrix. My guess is that this routine automatically assigns a value of zero to the entries which I specified in the preallocator. So if I had done the original MatXXXAIJSetPreallocation() routines which just allocate a certain number of non-zeros to the rows, then I would have to explicitly assign them zero values or else I would lose unassigned space in the assembly routines. Since the MatPreallocator specifies exactly which entries will be non-zero, PETSc also actually assigns a zero value under the hood so that I don't have to explicitly assign values myself. Is this correct?
>>> I think your understanding is correct.
>>> I think the rule is: if you have not specified the exact sparsity pattern in preallocation (for example, you only said this row had this number of nonzeros, but did not give the column indices), then in MatAssebmlyEnd(), unused slots will be compressed out.
>>> You can call MatZeroEntries() on assembled or unassembled (but preallocated) matrices. The routine just zeros the internal value array.  It does not help you to preserve nonzero entries. 
>>> With MatPreallocatorPreallocate(), the sparsity is specified, so that petsc will keep the entries. 
>>>  
>>>> 
>>>> Sorry for the convoluted question. I hope it's clear. 
>>>> 
>>>>> On Tue, Apr 12, 2022 at 11:54 AM Samuel Estes <samuelestes91 at gmail.com> wrote:
>>>>> Hi,
>>>>> 
>>>>> I have a problem where I want to allocate some nonzero structure to a sparse matrix which will be used repeatedly to solve some equations. The assembly routines will compress out allocated space which has not been assigned a value so I know that I need to assign zero values to any unused entries in order to keep that space. Will MatZeroEntries do this? If not, I could always just loop over and explicitly assign zero values but MatZeroEntries would be more convenient. Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220412/93a8dcfa/attachment.html>


More information about the petsc-users mailing list