1*420957c1SBarry Smith program main 2*420957c1SBarry Smith#include <petsc/finclude/petscmat.h> 3*420957c1SBarry Smith use petscmat 4*420957c1SBarry Smith implicit none 5*420957c1SBarry Smith 6*420957c1SBarry Smith Mat A,B 7*420957c1SBarry Smith PetscErrorCode ierr 8*420957c1SBarry Smith PetscScalar, pointer :: km(:,:) 9*420957c1SBarry Smith PetscInt three,one 10*420957c1SBarry Smith PetscInt idxm(1),idxmj(1),i,j 11*420957c1SBarry Smith PetscMPIInt rank,size 12*420957c1SBarry Smith 13*420957c1SBarry Smith PetscCallA(PetscInitialize(ierr)) 14*420957c1SBarry Smith 15*420957c1SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)) 16*420957c1SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD,size,ierr)) 17*420957c1SBarry Smith 18*420957c1SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr)) 19*420957c1SBarry Smith three = 3 20*420957c1SBarry Smith PetscCallA(MatSetSizes(A,three,three,PETSC_DECIDE,PETSC_DECIDE,ierr)) 21*420957c1SBarry Smith PetscCallA(MatSetBlockSize(A,three,ierr)) 22*420957c1SBarry Smith PetscCallA(MatSetUp(A,ierr)) 23*420957c1SBarry Smith PetscCallA( MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,B,ierr)) 24*420957c1SBarry Smith one = 1 25*420957c1SBarry Smith idxm(1) = 0 26*420957c1SBarry Smith allocate (km(three,three)) 27*420957c1SBarry Smith do i=1,3 28*420957c1SBarry Smith do j=1,3 29*420957c1SBarry Smith km(1,1) = i + j 30*420957c1SBarry Smith idxm(1) = i - 1 + 3*rank 31*420957c1SBarry Smith idxmj(1) = j - 1 + 3*rank 32*420957c1SBarry Smith PetscCallA(MatSetValues(B, one, idxm, one, idxmj, km, ADD_VALUES, ierr)) 33*420957c1SBarry Smith enddo 34*420957c1SBarry Smith enddo 35*420957c1SBarry Smith 36*420957c1SBarry Smith PetscCallA(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY,ierr)) 37*420957c1SBarry Smith PetscCallA(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY,ierr)) 38*420957c1SBarry Smith PetscCallA(MatView(B,PETSC_VIEWER_STDOUT_WORLD,ierr)) 39*420957c1SBarry Smith 40*420957c1SBarry Smith PetscCallA(MatDestroy(A,ierr)) 41*420957c1SBarry Smith PetscCallA(MatDestroy(B,ierr)) 42*420957c1SBarry Smith 43*420957c1SBarry Smith deallocate(km) 44*420957c1SBarry Smith PetscCallA(PetscFinalize(ierr)) 45*420957c1SBarry Smith end 46*420957c1SBarry Smith 47*420957c1SBarry Smith!/*TEST 48*420957c1SBarry Smith! 49*420957c1SBarry Smith! test: 50*420957c1SBarry Smith! nsize: 2 51*420957c1SBarry Smith! 52*420957c1SBarry Smith!TEST*/ 53