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. 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 >> >> >