Actual source code: ex120f.F90

  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

  9:       PetscErrorCode ierr
 10:       Mat A
 11:       Vec x,y
 12:       PetscInt tw

 14:       tw = 12
 15:       PetscCallA(VecCreateSeq(PETSC_COMM_SELF,tw,x,ierr))
 16:       PetscCallA(VecCreateSeq(PETSC_COMM_SELF,tw,y,ierr))
 17:       return
 18:       end

 20:       program main
 21: #include <petsc/finclude/petscmat.h>
 22:       use petscmat
 23:       implicit none

 25:       PetscErrorCode ierr
 26:       Vec     x,y
 27:       Mat     m
 28:       PetscInt tw
 29:       external  mymatgetvecs

 31:       PetscCallA(PetscInitialize(ierr))

 33:       tw = 12
 34:       PetscCallA(MatCreateShell(PETSC_COMM_SELF,tw,tw,tw,tw,0,m,ierr))
 35:       PetscCallA(MatAssemblyBegin(m,MAT_FINAL_ASSEMBLY,ierr))
 36:       PetscCallA(MatAssemblyEnd(m,MAT_FINAL_ASSEMBLY,ierr))
 37:       PetscCallA(MatShellSetOperation(m,MATOP_CREATE_VECS,mymatgetvecs,ierr))
 38:       PetscCallA(MatCreateVecs(m,x,y,ierr))
 39:       PetscCallA(MatDestroy(m,ierr))
 40:       PetscCallA(VecDestroy(x,ierr))
 41:       PetscCallA(VecDestroy(y,ierr))
 42:       PetscCallA(PetscFinalize(ierr))
 43:       end

 45: !/*TEST
 46: !
 47: !   test:
 48: !      nsize: 2
 49: !
 50: !TEST*/