> On Jun 29, 2015, at 1:42 PM, Michael Povolotskyi <[email protected]> wrote:
> 
> Will a call to MatZeroEntries
> and MatAssemblyBegin/End(mat,MAT_FINAL_ASSEMBLY) do same as MatSetValues() 
> with zero values?

  No, unfortunately not. If you call MatZeroEntires() before you have put any 
entries (and their locations) in it has no way to know what nonzero pattern you 
actually want.  You have to tell it the "nonzero" entries so it knows where you 
want them.


  Barry

> Michael.
> 
> 
> On 06/29/2015 02:38 PM, Barry Smith wrote:
>>> On Jun 29, 2015, at 1:28 PM, Michael Povolotskyi <[email protected]> 
>>> wrote:
>>> 
>>> Thank you.
>>> Is there a way to disable the squeeze?
>>   Not directly (it won't know what to do with the empty space). If you want 
>> to insure that a sparse matrix has a particular nonzero structure then just 
>> set values of 0.0 into the "extra" locations you want represented in the 
>> "nonzero pattern".  One simple way to do this is call MatSetValues() for the 
>> nonzero structure you want with all zero entries, then call 
>> MatAssemblyBegin/End(mat,MAT_FINAL_ASSEMBLY) and then call MatSetValues() to 
>> put the numerical values you want to set (which will be a subset of the 
>> location you put in with zeros) then call 
>> MatAssemblyBegin/End(mat,MAT_FINAL_ASSEMBLY) again.
>> 
>>   Barry
>> 
>>> Michael.
>>> 
>>> On 06/29/2015 01:58 PM, Barry Smith wrote:
>>>>> On Jun 29, 2015, at 10:49 AM, Michael Povolotskyi <[email protected]> 
>>>>> wrote:
>>>>> 
>>>>> Dear developers,
>>>>> I have the following question:
>>>>> 
>>>>> Imagine that I have two matrices A and B
>>>>> Both are created using MatCreateSeqAIJ(MPI_Comm comm,PetscInt m,PetscInt 
>>>>> n,PetscInt nz,const PetscInt nnz[],Mat *A)
>>>>> with the same first 5 arguments.
>>>>> In addition, for both matrices I call
>>>>>  MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_TRUE);
>>>>> 
>>>>> After this I set some entries to both A and B matrices and assemble them.
>>>>> Question: can I use MatAXPY with SAME_NONZERO_PATTERN argument?
>>>>    Only if you KNOW that they have the exact same nonzero pattern. The 
>>>> MatAssembly "squeezes" out any "extra" space that was preallocated but was 
>>>> not actually used when calling MatSetValues() so even if two matrices have 
>>>> the same preallocation it doesn't mean they have the same nonzero pattern.
>>>> 
>>>>   Barry
>>>> 
>>>> 
>>>>> Thank you,
>>>>> Michael.
>>>>> -- 
>>>>> Michael Povolotskyi, PhD
>>>>> Research Assistant Professor
>>>>> Network for Computational Nanotechnology
>>>>> Hall for Discover and Learning Research, Room 441
>>>>> West Lafayette, IN 47907
>>>>> Phone (765) 4949396
>>>>> 
> 
> -- 
> Michael Povolotskyi, PhD
> Research Assistant Professor
> Network for Computational Nanotechnology
> Hall for Discover and Learning Research, Room 441
> West Lafayette, IN 47907
> Phone (765) 4949396
> 

Reply via email to