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:       end

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

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

 30:         PetscCallA(PetscInitialize(ierr))

 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

 44: !/*TEST
 45: !
 46: !   test:
 47: !      nsize: 2
 48: !      output_file: output/empty.out
 49: !
 50: !TEST*/