1420957c1SBarry Smith#include <petsc/finclude/petscmat.h> 2*c5e229c2SMartin Diehlprogram main 3420957c1SBarry Smith use petscmat 4420957c1SBarry Smith implicit none 5420957c1SBarry Smith 6420957c1SBarry Smith Mat A, B 7420957c1SBarry Smith PetscErrorCode ierr 8420957c1SBarry Smith PetscScalar, pointer :: km(:, :) 9420957c1SBarry Smith PetscInt three, one 10420957c1SBarry Smith PetscInt idxm(1), idxmj(1), i, j 11420957c1SBarry Smith PetscMPIInt rank, size 12420957c1SBarry Smith 13420957c1SBarry Smith PetscCallA(PetscInitialize(ierr)) 14420957c1SBarry Smith 15420957c1SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr)) 16420957c1SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size, ierr)) 17420957c1SBarry Smith 18420957c1SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr)) 19420957c1SBarry Smith three = 3 20420957c1SBarry Smith PetscCallA(MatSetSizes(A, three, three, PETSC_DECIDE, PETSC_DECIDE, ierr)) 21420957c1SBarry Smith PetscCallA(MatSetBlockSize(A, three, ierr)) 22420957c1SBarry Smith PetscCallA(MatSetUp(A, ierr)) 23420957c1SBarry Smith PetscCallA(MatDuplicate(A, MAT_DO_NOT_COPY_VALUES, B, ierr)) 24420957c1SBarry Smith one = 1 25420957c1SBarry Smith idxm(1) = 0 26420957c1SBarry Smith allocate (km(three, three)) 27420957c1SBarry Smith do i = 1, 3 28420957c1SBarry Smith do j = 1, 3 29420957c1SBarry Smith km(1, 1) = i + j 30420957c1SBarry Smith idxm(1) = i - 1 + 3*rank 31420957c1SBarry Smith idxmj(1) = j - 1 + 3*rank 325d83a8b1SBarry Smith PetscCallA(MatSetValues(B, one, idxm, one, idxmj, reshape(km, [three*three]), ADD_VALUES, ierr)) 33420957c1SBarry Smith end do 34420957c1SBarry Smith end do 35420957c1SBarry Smith 36420957c1SBarry Smith PetscCallA(MatAssemblyBegin(B, MAT_FINAL_ASSEMBLY, ierr)) 37420957c1SBarry Smith PetscCallA(MatAssemblyEnd(B, MAT_FINAL_ASSEMBLY, ierr)) 38420957c1SBarry Smith PetscCallA(MatView(B, PETSC_VIEWER_STDOUT_WORLD, ierr)) 39420957c1SBarry Smith 40420957c1SBarry Smith PetscCallA(MatDestroy(A, ierr)) 41420957c1SBarry Smith PetscCallA(MatDestroy(B, ierr)) 42420957c1SBarry Smith 43420957c1SBarry Smith deallocate (km) 44420957c1SBarry Smith PetscCallA(PetscFinalize(ierr)) 45420957c1SBarry Smithend 46420957c1SBarry Smith 47420957c1SBarry Smith!/*TEST 48420957c1SBarry Smith! 49420957c1SBarry Smith! test: 50420957c1SBarry Smith! nsize: 2 51420957c1SBarry Smith! 52420957c1SBarry Smith!TEST*/ 53