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: