[petsc-users] zeros in sparse aij

Satish Balay balay at mcs.anl.gov
Wed Dec 7 11:15:16 CST 2011


On Wed, 7 Dec 2011, Satish Balay wrote:

> As indicated call "MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE)
> - before any calls to MatSetValue/s()
> 
> And verify with MatView()

Ok - here is what you can see with a slightly modified mat/examples/tests/ex38.c

Notice "C[0,1] = 0.0" and thats not visible anymore with
MatSetOption(MAT_IGNORE_ZERO_ENTRIES)

Satish

--------
asterix:/home/balay/spetsc/src/mat/examples/tests>cat ex38.c
static char help[] = "Tests MatSetValues().\n\n";
#include <petscmat.h>
#undef __FUNCT__
#define __FUNCT__ "main"
int main(int argc,char **args)
{
  Mat            C;
  PetscInt       i,n = 5,midx[3],nidx[2];
  PetscErrorCode ierr;
  PetscBool      flg;
  PetscScalar    v[6];

  PetscInitialize(&argc,&args,(char *)0,help);
  ierr = MatCreate(PETSC_COMM_WORLD,&C);CHKERRQ(ierr);
  ierr = MatSetSizes(C,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr);
  ierr = MatSetFromOptions(C);CHKERRQ(ierr);

  ierr = PetscOptionsHasName(PETSC_NULL,"-ignore_zero_entries",&flg);CHKERRQ(ierr);
  if (flg) {  ierr = MatSetOption(C,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE);CHKERRQ(ierr);}

  for (i=0; i<6; i++) v[i] = (PetscReal)i;
  midx[0] = 0; midx[1] = 2; midx[2] = 3;
  nidx[0] = 1; nidx[1] = 3;
  ierr = MatSetValues(C,3,midx,2,nidx,v,ADD_VALUES);CHKERRQ(ierr);
  ierr = MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatView(C,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
  ierr = MatDestroy(&C);CHKERRQ(ierr);
  ierr = PetscFinalize();
  return 0;
}

asterix:/home/balay/spetsc/src/mat/examples/tests>./ex38 -mat_view_info
Matrix Object: 1 MPI processes
  type: seqaij
  rows=5, cols=5
  total: nonzeros=6, allocated nonzeros=25
  total number of mallocs used during MatSetValues calls =0
    using I-node routines: found 4 nodes, limit used is 5
Matrix Object: 1 MPI processes
  type: seqaij
row 0: (1, 0)  (3, 1) 
row 1:
row 2: (1, 2)  (3, 3) 
row 3: (1, 4)  (3, 5) 
row 4:
asterix:/home/balay/spetsc/src/mat/examples/tests>./ex38 -mat_view_info -ignore_zero_entries
Matrix Object: 1 MPI processes
  type: seqaij
  rows=5, cols=5
  total: nonzeros=5, allocated nonzeros=25
  total number of mallocs used during MatSetValues calls =0
    using I-node routines: found 4 nodes, limit used is 5
Matrix Object: 1 MPI processes
  type: seqaij
row 0: (3, 1) 
row 1:
row 2: (1, 2)  (3, 3) 
row 3: (1, 4)  (3, 5) 
row 4:
asterix:/home/balay/spetsc/src/mat/examples/tests>


More information about the petsc-users mailing list