1! 2! This program tests MatCreateVecs() for Shell Matrix 3! 4 subroutine mymatgetvecs(A, x, y, ierr) 5#include <petsc/finclude/petscmat.h> 6 use petscmat 7 implicit none 8 9 PetscErrorCode ierr 10 Mat A 11 Vec x, y 12 PetscInt tw 13 14 tw = 12 15 PetscCallA(VecCreateSeq(PETSC_COMM_SELF, tw, x, ierr)) 16 PetscCallA(VecCreateSeq(PETSC_COMM_SELF, tw, y, ierr)) 17 end 18 19 program main 20#include <petsc/finclude/petscmat.h> 21 use petscmat 22 implicit none 23 24 PetscErrorCode ierr 25 Vec x, y 26 Mat m 27 PetscInt tw 28 external mymatgetvecs 29 30 PetscCallA(PetscInitialize(ierr)) 31 32 tw = 12 33 PetscCallA(MatCreateShell(PETSC_COMM_SELF, tw, tw, tw, tw, 0, m, ierr)) 34 PetscCallA(MatAssemblyBegin(m, MAT_FINAL_ASSEMBLY, ierr)) 35 PetscCallA(MatAssemblyEnd(m, MAT_FINAL_ASSEMBLY, ierr)) 36 PetscCallA(MatShellSetOperation(m, MATOP_CREATE_VECS, mymatgetvecs, ierr)) 37 PetscCallA(MatCreateVecs(m, x, y, ierr)) 38 PetscCallA(MatDestroy(m, ierr)) 39 PetscCallA(VecDestroy(x, ierr)) 40 PetscCallA(VecDestroy(y, ierr)) 41 PetscCallA(PetscFinalize(ierr)) 42 end 43 44!/*TEST 45! 46! test: 47! nsize: 2 48! output_file: output/empty.out 49! 50!TEST*/ 51