On Wed, Dec 7, 2011 at 9:28 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> 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.
I think I did have 10 zeros entries. In my script, I have inserted
zeros by MatSetValue(A,i, (i+1)%N, 0.0, ADD_VALUES); Why doesn't that
option matter in my case? That option prevents PETSc from inserting
zeros, doesn't it? Thank you.
>
>
>> 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
>>>>>>
>>>>>>
>>>>>
>>>
>