1c4762a1bSJed Brownprogram newnonzero 2*85835d77SBarry Smith#include <petsc/finclude/petscis.h> 3c4762a1bSJed Brown#include <petsc/finclude/petscmat.h> 4c4762a1bSJed Brown use petscmat 5c4762a1bSJed Brown implicit none 6c4762a1bSJed Brown 7c4762a1bSJed Brown Mat :: A 806946f3aSJose E. Roman PetscInt :: n,m,idxm(1),idxn(1),nl1,nl2,zero,one,i 9*85835d77SBarry Smith PetscScalar :: v(1),value,values(2) 10c4762a1bSJed Brown PetscErrorCode :: ierr 11*85835d77SBarry Smith IS :: is 12*85835d77SBarry Smith ISLocalToGlobalMapping :: ismap 13c4762a1bSJed Brown 14d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 1506946f3aSJose E. Roman zero = 0 16c4762a1bSJed Brown one = 1 17c4762a1bSJed Brown n=3 18c4762a1bSJed Brown m=n 19d8606c27SBarry Smith PetscCallA(MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,n,m,one,PETSC_NULL_INTEGER,zero,PETSC_NULL_INTEGER,A,ierr)) 20c4762a1bSJed Brown 21d8606c27SBarry Smith PetscCallA(MatGetOwnershipRange(A,nl1,nl2,ierr)) 22c4762a1bSJed Brown do i=nl1,nl2-1 23c4762a1bSJed Brown idxn(1)=i 24c4762a1bSJed Brown idxm(1)=i 25c4762a1bSJed Brown v(1)=1.0 26d8606c27SBarry Smith PetscCallA(MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr)) 27c4762a1bSJed Brown end do 28d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)) 29d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)) 30c4762a1bSJed Brown 31c4762a1bSJed Brown! Ignore any values set into new nonzero locations 32d8606c27SBarry Smith PetscCallA(MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE,ierr)) 33c4762a1bSJed Brown 34c4762a1bSJed Brown idxn(1)=0 35c4762a1bSJed Brown idxm(1)=n-1 36c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then 37c4762a1bSJed Brown v(1)=2.0 38d8606c27SBarry Smith PetscCallA(MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr)) 39c4762a1bSJed Brown end if 40d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)) 41d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)) 42c4762a1bSJed Brown 43c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then 44d8606c27SBarry Smith PetscCallA(MatGetValues(A,one,idxn,one,idxm, v,ierr)) 45c4762a1bSJed Brown write(6,*) PetscRealPart(v) 46c4762a1bSJed Brown end if 47c4762a1bSJed Brown 48*85835d77SBarry Smith PetscCallA(ISCreateStride(PETSC_COMM_WORLD,nl2-nl1,nl1,one,is,ierr)) 49*85835d77SBarry Smith PetscCallA(ISLocalToGlobalMappingCreateIS(is,ismap,ierr)) 50*85835d77SBarry Smith PetscCallA(MatSetLocalToGlobalMapping(A,ismap,ismap,ierr)) 51*85835d77SBarry Smith PetscCallA(ISLocalToGlobalMappingDestroy(ismap,ierr)) 52*85835d77SBarry Smith PetscCallA(ISDestroy(is,ierr)) 53*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,zero,one,zero,value,ierr)) 54*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,zero,one,zero,values,ierr)) 55*85835d77SBarry Smith idxn(1) = 0 56*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,idxn,one,zero,values,ierr)) 57*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,idxn,one,idxn,values,ierr)) 58*85835d77SBarry Smith 59d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr)) 60d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 61c4762a1bSJed Brown 62c4762a1bSJed Brown end program newnonzero 63c4762a1bSJed Brown 64c4762a1bSJed Brown!/*TEST 65c4762a1bSJed Brown! 66c4762a1bSJed Brown! test: 67c4762a1bSJed Brown! nsize: 2 68c4762a1bSJed Brown! filter: Error: 69c4762a1bSJed Brown! 70c4762a1bSJed Brown! test: 71dfd57a17SPierre Jolivet! requires: defined(PETSC_USE_INFO) 72c4762a1bSJed Brown! suffix: 2 73c4762a1bSJed Brown! nsize: 2 74c4762a1bSJed Brown! args: -info 75c4762a1bSJed Brown! filter: grep "Skipping" 76c4762a1bSJed Brown! 77c4762a1bSJed Brown!TEST*/ 78