On Dec 6, 2011, at 11:39 PM, Xiangdong Liang wrote:

> On Wed, Dec 7, 2011 at 12:11 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>> 
>> On Dec 6, 2011, at 10:26 PM, Xiangdong Liang wrote:
>> 
>>> Hello everyone,
>>> 
>>> Can anyone help on the usage of MAT_IGNORE_ZERO_ENTRIES? Suppose I
>>> want to have a 10-by-10 sparse matrix, where each row has maximum two
>>> nonzeros. I would like to have petsc ignore the 0.0  values by not
>>> allocating space for 0.0 values. In my problem, the nonzero pattern of
>>> sparse matrix will never change. I hope the ignore of zero entries
>>> will save lots of operations when I am doing matrix-vector product or
>>> spare-direct decomposition .
>>> 
>>> Below is my script. When I check the mat_view_info, I have
>>> 
>>> Matrix Object:
>>> type=mpiaij, rows=10, cols=10
>>> total: nonzeros=20, allocated nonzeros=40
>>>   not using I-node (on process 0) routines
>>> 
>>> Is there a way to have nonzeros=10, and allocated nonzeros=10, since
>>> the number of real nonzeros=10? Thanks.
>> 
>>   Those "extra" nonzeros are not actually in the sparse matrix so they do 
>> not cause extra multiples. You can safely ignore them.
> 
> I am sorry I am still not clear.   Do "extra" nonzeros refer to
> ?nonzeros=20? or "allocated nonzeros=40"? With or without
> MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE), I see the same
> mat_view_info.

   You will see the same message. You are not setting any zero entries so the 
option doesn't matter in your case.


> How can I see the differences in the spare matrix
> generated With/Without this option?

   You will not see a difference in the output.

   Don't worry about it. The option does prevent zero entries from being 
inserted and thus slowing down the matrix operations.

 

   Barry

> Thanks.
> 
> Xiangdong
> 
> 
>> 
>>  Barry
>> 
>>> 
>>> Xiangdong
>>> 
>>> -----------------------------------------------------------
>>>  Mat A;  int N=10, i, ns,ne;
>>>   
>>> ierr=MatCreateMPIAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,N,N,2,NULL,2,NULL,&A);CHKERRQ(ierr);
>>>   ierr = MatGetOwnershipRange(A, &ns, &ne); CHKERRQ(ierr);
>>>   for (i=ns;i<ne;i++)    {      ierr=MatSetValue(A,i, i, 1.0,
>>> ADD_VALUES); CHKERRQ(ierr);      ierr=MatSetValue(A,i, (i+1)%N, 0.0,
>>> ADD_VALUES); CHKERRQ(ierr);    }
>>>     MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE);     ierr =
>>> MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);     ierr =
>>> MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
>>> 
>>> --------------------------------------------------------
>>> 
>>> 
>>> On Thu, Dec 1, 2011 at 10:01 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>>> 
>>>>  The checks in the code are lines like
>>>> 
>>>>      if (value == 0.0 && ignorezeroentries && (is == ADD_VALUES)) continue;
>>>> 
>>>> hence changing the source code  to ignore small values is not difficult.  
>>>> But I think this is a terribly cheesy hack and would hope people would not 
>>>> do this.
>>>> 
>>>>    Barry
>>>> 
>>>> 
>>>> 
>>>> On Dec 1, 2011, at 8:42 PM, Mohamad M. Nasr-Azadani wrote:
>>>> 
>>>>> I was always wondering how difficult it would be to define a constant 
>>>>> say, ZERO_DROP_TOLERANCE so that when the matrix is setup, 
>>>>> MatAssemblyBegin()/End(), it automatically ignores the values below this 
>>>>> threshold?
>>>>> I understand the for the matrices that might change in successive 
>>>>> iterations, that might not be a good idea since the memory reallocation 
>>>>> could be very slow, but for a lot of cases which a constant matrix, that 
>>>>> could be simply helpful.
>>>>> 
>>>>> Best,
>>>>> Mohamad
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Thu, Dec 1, 2011 at 5:00 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>>>> 
>>>>> On Dec 1, 2011, at 6:44 PM, Xiangdong Liang wrote:
>>>>> 
>>>>>> Hello everyone,
>>>>>> 
>>>>>> I have a question about whether zeros will change the sparse pattern.
>>>>>> Suppose I am generating two sparse matrices A and B. A is generated
>>>>>> with exactly number of nonzeros, say 10 nnz per row. When I generate
>>>>>> matrix B, I specify 12 nonzeros, but two of them are given zero values
>>>>>> by MatSetValue. Will A and B have same sparsity patterns and
>>>>>> performance ? In other words, will PETSc simply ignore these zeros
>>>>>> entries?  I output these A and B in matlab, and it seems that these
>>>>>> zeros entries are ignored. I just want to double check on this.
>>>>>> 
>>>>>> Is the option MAT_IGNORE_ZERO_ENTRIES on by default?
>>>>> 
>>>>>   No, by default PETSc will insert the zero values thus increasing the 
>>>>> nonzero pattern. If you set that option to the matrix then inserting 
>>>>> values it will not introduce an increase in the pattern.
>>>>> 
>>>>> 
>>>>>    BTW: if you then load the matrix via a binary file to MATLAB it may be 
>>>>> that MATLAB silently removes those locations so you don't see them.
>>>>>   Barry
>>>>> 
>>>>>> Thanks.
>>>>>> 
>>>>>> Best,
>>>>>> Xiangdong
>>>>> 
>>>>> 
>>>> 
>> 

Reply via email to