1
<center><a href="ex16.F">Actual source code: ex16.F</a></center><br>
6
<meta name="generator" content="c2html 0.9.1">
7
<meta name="date" content="2002-05-31T16:28:03+00:00">
10
<body bgcolor="#FFFFFF">
11
<pre width="80"><a name="line1"> 1: </a>!
12
<a name="line2"> 2: </a>! <font color="#666666">"$Id: ex16.F,v 1.29 2001/08/07 03:03:57 balay Exp $"</font>;
13
<a name="line3"> 3: </a>!
14
<a name="line4"> 4: </a> program main
15
<a name="line5"> 5: </a> implicit none
17
<a name="line7"> 7: </a> #include <A href="../../../../include/finclude/petsc.h.html">include/finclude/petsc.h</A>
18
<a name="line8"> 8: </a> #include <A href="../../../../include/finclude/petscvec.h.html">include/finclude/petscvec.h</A>
19
<a name="line9"> 9: </a> #include <A href="../../../../include/finclude/petscmat.h.html">include/finclude/petscmat.h</A>
20
<a name="line10"> 10: </a> #include <A href="../../../../include/finclude/petscpc.h.html">include/finclude/petscpc.h</A>
21
<a name="line11"> 11: </a> #include <A href="../../../../include/finclude/petscsles.h.html">include/finclude/petscsles.h</A>
22
<a name="line12"> 12: </a> #include <A href="../../../../include/finclude/petscviewer.h.html">include/finclude/petscviewer.h</A>
23
<a name="line13"> 13: </a> #include <A href="../../../../include/finclude/petscis.h.html">include/finclude/petscis.h</A>
24
<a name="line14"> 14: </a>!
25
<a name="line15"> 15: </a>! This example is a modified Fortran version of ex6.c. It tests the use of
26
<a name="line16"> 16: </a>! options prefixes in PETSc. Two linear problems are solved in this program.
27
<a name="line17"> 17: </a>! The first problem is read from a file. The second problem is constructed
28
<a name="line18"> 18: </a>! from the first, by eliminating some of the entries of the linear matrix 'A'.
30
<a name="line20"> 20: </a>! Each solve is distinguished by a unique prefix - 'a' <font color="#4169E1">for</font> the first, 'b'
31
<a name="line21"> 21: </a>! <font color="#4169E1">for</font> the second. With the prefix the user can distinguish between the various
32
<a name="line22"> 22: </a>! options (command line, from .petscrc file, etc.) <font color="#4169E1">for</font> each of the solvers.
33
<a name="line23"> 23: </a>! Input arguments are:
34
<a name="line24"> 24: </a>! -f <input_file> : file to load. For a 5X5 example of the 5-pt. stencil
35
<a name="line25"> 25: </a>! use the file petsc/src/mat/examples/mat.ex.binary
37
<a name="line27"> 27: </a> integer ierr,its,flg
38
<a name="line28"> 28: </a> <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> norm,none,five
39
<a name="line29"> 29: </a> <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> x,b,u
40
<a name="line30"> 30: </a> <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A
41
<a name="line31"> 31: </a> <A href="../../../../docs/manualpages/SLES/SLES.html#SLES">SLES</A> sles1,sles2
42
<a name="line32"> 32: </a> character*(128) f
43
<a name="line33"> 33: </a> <A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> fd
44
<a name="line34"> 34: </a> <A href="../../../../docs/manualpages/IS/IS.html#IS">IS</A> isrow
45
<a name="line35"> 35: </a> PetscLogDouble time1,time2
47
<a name="line37"> 37: </a> none = -1.0
48
<a name="line38"> 38: </a> five = 5.0
49
<a name="line39"> 39: </a> call <A href="../../../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(PETSC_NULL_CHARACTER,ierr)
51
<a name="line41"> 41: </a>! Read in matrix and RHS
52
<a name="line42"> 42: </a> call <A href="../../../../docs/manualpages/Sys/PetscOptionsGetString.html#PetscOptionsGetString">PetscOptionsGetString</A>(PETSC_NULL_CHARACTER,'-f',f,flg,ierr)
53
<a name="line43"> 43: </a> call <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryOpen.html#PetscViewerBinaryOpen">PetscViewerBinaryOpen</A>(PETSC_COMM_WORLD,f,PETSC_BINARY_RDONLY, &
54
<a name="line44"> 44: </a> & fd,ierr)
55
<a name="line45"> 45: </a> <font color="#4169E1">if</font> (ierr .ne. 0) then
56
<a name="line46"> 46: </a> print*, 'Unable to open file ',f
57
<a name="line47"> 47: </a> <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,' ',ierr)
58
<a name="line48"> 48: </a> endif
60
<a name="line50"> 50: </a> call <A href="../../../../docs/manualpages/Mat/MatLoad.html#MatLoad">MatLoad</A>(fd,MATSEQAIJ,A,ierr)
61
<a name="line51"> 51: </a> <font color="#4169E1">if</font> (ierr .ne. 0) then
62
<a name="line52"> 52: </a> print*, 'Unable to load matrix '
63
<a name="line53"> 53: </a> <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,' ',ierr)
64
<a name="line54"> 54: </a> endif
66
<a name="line56"> 56: </a> call <A href="../../../../docs/manualpages/Vec/VecLoad.html#VecLoad">VecLoad</A>(fd,b,ierr)
67
<a name="line57"> 57: </a> call <A href="../../../../docs/manualpages/Viewer/PetscViewerDestroy.html#PetscViewerDestroy">PetscViewerDestroy</A>(fd,ierr)
69
<a name="line59"> 59: </a>! Set up solution
70
<a name="line60"> 60: </a> call <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(b,x,ierr)
71
<a name="line61"> 61: </a> call <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(b,u,ierr)
73
<a name="line63"> 63: </a>! Solve system-1
74
<a name="line64"> 64: </a> call <A href="../../../../docs/manualpages/SLES/SLESCreate.html#SLESCreate">SLESCreate</A>(PETSC_COMM_WORLD,sles1,ierr)
75
<a name="line65"> 65: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetOptionsPrefix.html#SLESSetOptionsPrefix">SLESSetOptionsPrefix</A>(sles1,'a',ierr)
76
<a name="line66"> 66: </a> call <A href="../../../../docs/manualpages/SLES/SLESAppendOptionsPrefix.html#SLESAppendOptionsPrefix">SLESAppendOptionsPrefix</A>(sles1,'_',ierr)
77
<a name="line67"> 67: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetOperators.html#SLESSetOperators">SLESSetOperators</A>(sles1,A,A,DIFFERENT_NONZERO_PATTERN, &
78
<a name="line68"> 68: </a> & ierr)
79
<a name="line69"> 69: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetFromOptions.html#SLESSetFromOptions">SLESSetFromOptions</A>(sles1,ierr)
80
<a name="line70"> 70: </a> call <A href="../../../../docs/manualpages/Profiling/PetscGetTime.html#PetscGetTime">PetscGetTime</A>(time1,ierr)
81
<a name="line71"> 71: </a> call <A href="../../../../docs/manualpages/SLES/SLESSolve.html#SLESSolve">SLESSolve</A>(sles1,b,x,its,ierr)
82
<a name="line72"> 72: </a> call <A href="../../../../docs/manualpages/Profiling/PetscGetTime.html#PetscGetTime">PetscGetTime</A>(time2,ierr)
84
<a name="line74"> 74: </a>! Show result
85
<a name="line75"> 75: </a> call <A href="../../../../docs/manualpages/Mat/MatMult.html#MatMult">MatMult</A>(A,x,u,ierr)
86
<a name="line76"> 76: </a> call <A href="../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(none,b,u,ierr)
87
<a name="line77"> 77: </a> call <A href="../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(u,NORM_2,norm,ierr)
89
<a name="line79"> 79: </a>! print*, 'Time for solve = ',time2-time1
91
<a name="line81"> 81: </a> write(6,100) norm,its
92
<a name="line82"> 82: </a> 100 format('Residual norm ',e10.4,' iterations ',i5)
94
<a name="line84"> 84: </a>! Create system 2 by striping off some rows of the matrix
95
<a name="line85"> 85: </a> call <A href="../../../../docs/manualpages/IS/ISCreateStride.html#ISCreateStride">ISCreateStride</A>(PETSC_COMM_SELF,5,0,1,isrow,ierr)
96
<a name="line86"> 86: </a> call <A href="../../../../docs/manualpages/Mat/MatZeroRows.html#MatZeroRows">MatZeroRows</A>(A,isrow,five,ierr)
98
<a name="line88"> 88: </a>! Solve system-2
99
<a name="line89"> 89: </a> call <A href="../../../../docs/manualpages/SLES/SLESCreate.html#SLESCreate">SLESCreate</A>(PETSC_COMM_WORLD,sles2,ierr)
100
<a name="line90"> 90: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetOptionsPrefix.html#SLESSetOptionsPrefix">SLESSetOptionsPrefix</A>(sles2,'b',ierr)
101
<a name="line91"> 91: </a> call <A href="../../../../docs/manualpages/SLES/SLESAppendOptionsPrefix.html#SLESAppendOptionsPrefix">SLESAppendOptionsPrefix</A>(sles2,'_',ierr)
102
<a name="line92"> 92: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetOperators.html#SLESSetOperators">SLESSetOperators</A>(sles2,A,A,DIFFERENT_NONZERO_PATTERN, &
103
<a name="line93"> 93: </a> & ierr)
104
<a name="line94"> 94: </a> call <A href="../../../../docs/manualpages/SLES/SLESSetFromOptions.html#SLESSetFromOptions">SLESSetFromOptions</A>(sles2,ierr)
105
<a name="line95"> 95: </a> call <A href="../../../../docs/manualpages/Profiling/PetscGetTime.html#PetscGetTime">PetscGetTime</A>(time1,ierr)
106
<a name="line96"> 96: </a> call <A href="../../../../docs/manualpages/SLES/SLESSolve.html#SLESSolve">SLESSolve</A>(sles2,b,x,its,ierr)
107
<a name="line97"> 97: </a> call <A href="../../../../docs/manualpages/Profiling/PetscGetTime.html#PetscGetTime">PetscGetTime</A>(time2,ierr)
109
<a name="line99"> 99: </a>! Show result
110
<a name="line100">100: </a> call <A href="../../../../docs/manualpages/Mat/MatMult.html#MatMult">MatMult</A>(A,x,u,ierr)
111
<a name="line101">101: </a> call <A href="../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(none,b,u,ierr)
112
<a name="line102">102: </a> call <A href="../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(u,NORM_2,norm,ierr)
113
<a name="line103">103: </a>! print*, 'Time for solve = ',time2-time1
114
<a name="line104">104: </a> write(6,100) norm,its
116
<a name="line106">106: </a>! Cleanup
117
<a name="line107">107: </a> call <A href="../../../../docs/manualpages/SLES/SLESDestroy.html#SLESDestroy">SLESDestroy</A>(sles1,ierr)
118
<a name="line108">108: </a> call <A href="../../../../docs/manualpages/SLES/SLESDestroy.html#SLESDestroy">SLESDestroy</A>(sles2,ierr)
119
<a name="line109">109: </a> call <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(b,ierr)
120
<a name="line110">110: </a> call <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(x,ierr)
121
<a name="line111">111: </a> call <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(u,ierr)
122
<a name="line112">112: </a> call <A href="../../../../docs/manualpages/Mat/MatDestroy.html#MatDestroy">MatDestroy</A>(A,ierr)
123
<a name="line113">113: </a> call <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(isrow,ierr)
125
<a name="line115">115: </a> call <A href="../../../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>(ierr)
126
<a name="line116">116: </a> end