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