1c4762a1bSJed Brown! 2c4762a1bSJed Brown! 3c4762a1bSJed Brown! 4c4762a1bSJed Brown#include <petsc/finclude/petscmat.h> 5*c5e229c2SMartin Diehlprogram main 6c4762a1bSJed Brown use petscmat 7c4762a1bSJed Brown implicit none 8c4762a1bSJed Brown 9c4762a1bSJed Brown Mat A 10c4762a1bSJed Brown PetscErrorCode ierr 11c4762a1bSJed Brown PetscScalar, pointer :: km(:, :) 12c4762a1bSJed Brown PetscInt three, one 13c4762a1bSJed Brown PetscInt idxm(1), i, j 145d83a8b1SBarry Smith PetscScalar v(1) 15c4762a1bSJed Brown 16d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 17c4762a1bSJed Brown 18d8606c27SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD, A, ierr)) 19c4762a1bSJed Brown three = 3 20d8606c27SBarry Smith PetscCallA(MatSetSizes(A, three, three, three, three, ierr)) 21d8606c27SBarry Smith PetscCallA(MatSetBlockSize(A, three, ierr)) 22d8606c27SBarry Smith PetscCallA(MatSetType(A, MATSEQBAIJ, ierr)) 23d8606c27SBarry Smith PetscCallA(MatSetUp(A, ierr)) 24c4762a1bSJed Brown 25c4762a1bSJed Brown one = 1 26c4762a1bSJed Brown idxm(1) = 0 27c4762a1bSJed Brown allocate (km(three, three)) 28c4762a1bSJed Brown do i = 1, 3 29c4762a1bSJed Brown do j = 1, 3 30c4762a1bSJed Brown km(i, j) = i + j 31c4762a1bSJed Brown end do 32c4762a1bSJed Brown end do 33c4762a1bSJed Brown 345d83a8b1SBarry Smith PetscCallA(MatSetValuesBlocked(A, one, idxm, one, idxm, reshape(km, [three*three]), ADD_VALUES, ierr)) 35d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)) 36d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)) 37d8606c27SBarry Smith PetscCallA(MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)) 38c4762a1bSJed Brown 39c4762a1bSJed Brown j = 0 405d83a8b1SBarry Smith PetscCallA(MatGetValues(A, one, [j], one, [j], v, ierr)) 41c4762a1bSJed Brown 42d8606c27SBarry Smith PetscCallA(MatDestroy(A, ierr)) 43c4762a1bSJed Brown 44c4762a1bSJed Brown deallocate (km) 45d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 46c4762a1bSJed Brownend 47c4762a1bSJed Brown 48c4762a1bSJed Brown!/*TEST 49c4762a1bSJed Brown! 50c4762a1bSJed Brown! test: 51c4762a1bSJed Brown! requires: double !complex 52c4762a1bSJed Brown! 53c4762a1bSJed Brown!TEST*/ 54