1c4762a1bSJed Brownprogram newnonzero 2c4762a1bSJed Brown#include <petsc/finclude/petscmat.h> 3c4762a1bSJed Brown use petscmat 4c4762a1bSJed Brown implicit none 5c4762a1bSJed Brown 6c4762a1bSJed Brown Mat :: A 7c4762a1bSJed Brown PetscInt :: n,m,idxm(1),idxn(1),nl1,nl2,one,i 8c4762a1bSJed Brown PetscScalar :: v(1) 9c4762a1bSJed Brown PetscErrorCode :: ierr 10c4762a1bSJed Brown 11c4762a1bSJed Brown call PetscInitialize(PETSC_NULL_CHARACTER,ierr) 12c4762a1bSJed Brown one = 1 13c4762a1bSJed Brown n=3 14c4762a1bSJed Brown m=n 15c4762a1bSJed Brown call MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,n,m,1,PETSC_NULL_INTEGER,0,PETSC_NULL_INTEGER,A,ierr) 16c4762a1bSJed Brown 17c4762a1bSJed Brown 18c4762a1bSJed Brown call MatGetOwnershipRange(A,nl1,nl2,ierr) 19c4762a1bSJed Brown do i=nl1,nl2-1 20c4762a1bSJed Brown idxn(1)=i 21c4762a1bSJed Brown idxm(1)=i 22c4762a1bSJed Brown v(1)=1.0 23c4762a1bSJed Brown call MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr) 24c4762a1bSJed Brown end do 25c4762a1bSJed Brown call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr) 26c4762a1bSJed Brown call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr) 27c4762a1bSJed Brown 28c4762a1bSJed Brown! Ignore any values set into new nonzero locations 29c4762a1bSJed Brown call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE,ierr) 30c4762a1bSJed Brown 31c4762a1bSJed Brown idxn(1)=0 32c4762a1bSJed Brown idxm(1)=n-1 33c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then 34c4762a1bSJed Brown v(1)=2.0 35c4762a1bSJed Brown call MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr);CHKERRA(ierr) 36c4762a1bSJed Brown end if 37c4762a1bSJed Brown call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr) 38c4762a1bSJed Brown call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr) 39c4762a1bSJed Brown 40c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then 41c4762a1bSJed Brown call MatGetValues(A,one,idxn,one,idxm, v,ierr) 42c4762a1bSJed Brown write(6,*) PetscRealPart(v) 43c4762a1bSJed Brown end if 44c4762a1bSJed Brown 45c4762a1bSJed Brown call MatDestroy(A,ierr) 46c4762a1bSJed Brown call PetscFinalize(ierr) 47c4762a1bSJed Brown 48c4762a1bSJed Brown end program newnonzero 49c4762a1bSJed Brown 50c4762a1bSJed Brown!/*TEST 51c4762a1bSJed Brown! 52c4762a1bSJed Brown! test: 53c4762a1bSJed Brown! nsize: 2 54c4762a1bSJed Brown! filter: Error: 55c4762a1bSJed Brown! 56c4762a1bSJed Brown! test: 57*956f8c0dSBarry Smith! requires: define(PETSC_USE_INFO) 58c4762a1bSJed Brown! suffix: 2 59c4762a1bSJed Brown! nsize: 2 60c4762a1bSJed Brown! args: -info 61c4762a1bSJed Brown! filter: grep "Skipping" 62c4762a1bSJed Brown! 63c4762a1bSJed Brown!TEST*/ 64