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/petscksp.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
20: KSP ksp
21: external mymatmult
22: PetscScalar one
24: m = 10
25:
26: call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
27: one = 1.d0
28: call KSPCreate(PETSC_COMM_SELF,ksp,ierr)
30: call MatCreateShell(PETSC_COMM_SELF,m,m,m,m,PETSC_NULL_OBJECT, &
31: & A,ierr)
32: call MatShellSetOperation(A,MATOP_MULT,mymatmult,ierr)
34: call VecCreateSeq(PETSC_COMM_SELF,m,x,ierr)
35: call VecDuplicate(x,y,ierr)
36: call VecSet(one,x,ierr)
38: call KSPSetOperators(ksp,A,A,SAME_NONZERO_PATTERN,ierr)
39: call KSPSetFromOptions(ksp,ierr)
41: call KSPSetRhs(ksp,x,ierr)
42: call KSPSetSolution(ksp,y,ierr)
43: call KSPSolve(ksp,ierr)
45: call MatDestroy(A,ierr)
46: call KSPDestroy(ksp,ierr)
47: call VecDestroy(x,ierr)
48: call VecDestroy(y,ierr)
50: call PetscFinalize(ierr)
51: end
54: ! This is a bogus multiply that copies the vector. This corresponds to
55: ! an identity matrix A
56:
57: subroutine mymatmult(A,x,y,ierr)
58:
59: Mat A
60: Vec x,y
61: integer m,ierr
62:
63: m = 10
65: call VecCopy(y,x,ierr)
67: return
68: end
69: