Actual source code: ex5f.F

  1: !
  2: !      "$Id: ex5f.F,v 1.9 2000/09/27 20:08:42 bsmith Exp $";
  3: !
  4:       program main
  5:        implicit none

 7:  #include include/finclude/petsc.h
 8:  #include include/finclude/petscvec.h
 9:  #include include/finclude/petscmat.h
 10:  #include include/finclude/petscpc.h
 11:  #include include/finclude/petscsles.h
 12:  #include include/finclude/petscviewer.h
 13: !
 14: !      Solves a linear system matrix free
 15: !

 17:       Mat        A
 18:       Vec        x,y
 19:       integer    m,ierr,its
 20:       SLES       sles
 21:       external   mymatmult

 23:       m = 10
 24: 
 25:       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)

 27:       call SLESCreate(PETSC_COMM_SELF,sles,ierr)

 29:       call MatCreateShell(PETSC_COMM_SELF,m,m,m,m,PETSC_NULL_OBJECT,    &
 30:      &     A,ierr)
 31:       call MatShellSetOperation(A,MATOP_MULT,mymatmult,ierr)

 33:       call VecCreateSeq(PETSC_COMM_SELF,m,x,ierr)
 34:       call VecDuplicate(x,y,ierr)
 35:       call VecSet(1.d0,x,ierr)

 37:       call SLESSetOperators(sles,A,A,SAME_NONZERO_PATTERN,ierr)
 38:       call SLESSetFromOptions(sles,ierr)

 40:       call SLESSolve(sles,x,y,its,ierr)

 42:       call MatDestroy(A,ierr)
 43:       call SLESDestroy(sles,ierr)
 44:       call VecDestroy(x,ierr)
 45:       call VecDestroy(y,ierr)

 47:       call PetscFinalize(ierr)
 48:       end


 51: !  This is a bogus multiply that copies the vector. This corresponds to
 52: !  an identity matrix A
 53: 
 54:       subroutine mymatmult(A,x,y,ierr)
 55: 
 56:       Mat A
 57:       Vec x,y
 58:       integer m,ierr
 59: 
 60:       m = 10

 62:       call VecCopy(y,x,ierr)

 64:       return
 65:       end
 66: