~ubuntu-branches/ubuntu/warty/petsc/warty

« back to all changes in this revision

Viewing changes to src/ksp/examples/tests/ex7.c.html

  • Committer: Bazaar Package Importer
  • Author(s): Adam C. Powell, IV
  • Date: 2004-06-07 13:41:43 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040607134143-92p586zrauvie0le
Tags: 2.2.0-2
* Upstream patch level 2.
* New PETSC_BOPT_EXTRA option for different BOPT and lib names, with _c++
  symlinks only for plain and single (closes: #249617).
* New DEBIAN_DIST=contrib option to link with hypre, parmetis (closes:
  #249619).
* Combined petsc-c and petsc-fortran substvars into petsc-compilers.
* Extra quote in -dev prerm eliminates "too many arguments" problem.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<center><a href="ex7.c">Actual source code: ex7.c</a></center><br>
 
2
 
 
3
<html>
 
4
<head>
 
5
<title></title>
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T20:02:22+00:00">
 
8
</head>
 
9
 
 
10
<body bgcolor="#FFFFFF">
 
11
<pre width="80"><a name="line1">  1: </a><font color="#B22222">/*$Id: ex7.c,v 1.20 2001/09/11 16:33:24 bsmith Exp $*/</font>
 
12
 
 
13
<a name="line3">  3: </a>static char help[] = <font color="#666666">"Reads a PETSc matrix and vector from a file and solves a linear system.\n\</font>
 
14
<a name="line4">  4: </a><font color="#666666"> Tests inplace factorization for SeqBAIJ. Input parameters include\n\</font>
 
15
<a name="line5">  5: </a><font color="#666666">  -f0 &lt;input_file&gt; : first file to load (small system)\n\n"</font>;
 
16
 
 
17
<a name="line7">  7: </a><font color="#B22222">/*T</font>
 
18
<a name="line8">  8: </a><font color="#B22222">   Concepts: <A href="../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A>^solving a linear system</font>
 
19
<a name="line9">  9: </a><font color="#B22222">   Concepts: PetscLog^profiling multiple stages of code;</font>
 
20
<a name="line10"> 10: </a><font color="#B22222">   Processors: n</font>
 
21
<a name="line11"> 11: </a><font color="#B22222">T*/</font>
 
22
 
 
23
<a name="line13"> 13: </a><font color="#B22222">/* </font>
 
24
<a name="line14"> 14: </a><font color="#B22222">  Include "petscksp.h" so that we can use <A href="../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A> solvers.  Note that this file</font>
 
25
<a name="line15"> 15: </a><font color="#B22222">  automatically includes:</font>
 
26
<a name="line16"> 16: </a><font color="#B22222">     petsc.h       - base PETSc routines   petscvec.h - vectors</font>
 
27
<a name="line17"> 17: </a><font color="#B22222">     petscsys.h    - system routines       petscmat.h - matrices</font>
 
28
<a name="line18"> 18: </a><font color="#B22222">     petscis.h     - index sets            petscksp.h - Krylov subspace methods</font>
 
29
<a name="line19"> 19: </a><font color="#B22222">     petscviewer.h - viewers               petscpc.h  - preconditioners</font>
 
30
<a name="line20"> 20: </a><font color="#B22222">*/</font>
 
31
<a name="line21"> 21: </a> #include <A href="../../../../include/petscksp.h.html">petscksp.h</A>
 
32
 
 
33
<a name="line25"> 25: </a><strong><font color="#4169E1"><a name="main"></a>int main(int argc,char **args)</font></strong>
 
34
<a name="line26"> 26: </a>{
 
35
<a name="line27"> 27: </a>  <A href="../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A>         ksp;             <font color="#B22222">/* linear solver context */</font>
 
36
<a name="line28"> 28: </a>  <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>         A,B;                <font color="#B22222">/* matrix */</font>
 
37
<a name="line29"> 29: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>         x,b,u;          <font color="#B22222">/* approx solution, RHS, exact solution */</font>
 
38
<a name="line30"> 30: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> fd;               <font color="#B22222">/* viewer */</font>
 
39
<a name="line31"> 31: </a>  char        file[2][128];     <font color="#B22222">/* input file name */</font>
 
40
<a name="line32"> 32: </a>  int         ierr,its;
 
41
<a name="line33"> 33: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>  flg;
 
42
<a name="line34"> 34: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>   norm;
 
43
<a name="line35"> 35: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> zero = 0.0,none = -1.0;
 
44
 
 
45
<a name="line37"> 37: </a>  <A href="../../../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(&amp;argc,&amp;args,(char *)0,help);
 
46
 
 
47
<a name="line39"> 39: </a>  <font color="#B22222">/* </font>
 
48
<a name="line40"> 40: </a><font color="#B22222">     Determine files from which we read the two linear systems</font>
 
49
<a name="line41"> 41: </a><font color="#B22222">     (matrix and right-hand-side vector).</font>
 
50
<a name="line42"> 42: </a><font color="#B22222">  */</font>
 
51
<a name="line43"> 43: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetString.html#PetscOptionsGetString">PetscOptionsGetString</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-f0"</font>,file[0],127,&amp;flg);
 
52
<a name="line44"> 44: </a>  <font color="#4169E1">if</font> (!flg) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must indicate binary file with the -f0 option"</font>);
 
53
 
 
54
 
 
55
<a name="line47"> 47: </a>  <font color="#B22222">/* </font>
 
56
<a name="line48"> 48: </a><font color="#B22222">       Open binary file.  Note that we use PETSC_FILE_RDONLY to indicate</font>
 
57
<a name="line49"> 49: </a><font color="#B22222">       reading from this file.</font>
 
58
<a name="line50"> 50: </a><font color="#B22222">  */</font>
 
59
<a name="line51"> 51: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryOpen.html#PetscViewerBinaryOpen">PetscViewerBinaryOpen</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,file[0],PETSC_FILE_RDONLY,&amp;fd);
 
60
 
 
61
<a name="line53"> 53: </a>  <font color="#B22222">/*</font>
 
62
<a name="line54"> 54: </a><font color="#B22222">       Load the matrix and vector; then destroy the viewer.</font>
 
63
<a name="line55"> 55: </a><font color="#B22222">  */</font>
 
64
<a name="line56"> 56: </a>  <A href="../../../../docs/manualpages/Mat/MatLoad.html#MatLoad">MatLoad</A>(fd,<A href="../../../../docs/manualpages/Mat/MATSEQBAIJ.html#MATSEQBAIJ">MATSEQBAIJ</A>,&amp;A);
 
65
<a name="line57"> 57: </a>  <A href="../../../../docs/manualpages/Mat/MatConvert.html#MatConvert">MatConvert</A>(A,MATSAME,&amp;B);
 
66
<a name="line58"> 58: </a>  <A href="../../../../docs/manualpages/Vec/VecLoad.html#VecLoad">VecLoad</A>(fd,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;b);
 
67
<a name="line59"> 59: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerDestroy.html#PetscViewerDestroy">PetscViewerDestroy</A>(fd);
 
68
 
 
69
<a name="line61"> 61: </a>  <font color="#B22222">/* </font>
 
70
<a name="line62"> 62: </a><font color="#B22222">       If the loaded matrix is larger than the vector (due to being padded </font>
 
71
<a name="line63"> 63: </a><font color="#B22222">       to match the block <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> of the system), then create a new padded vector.</font>
 
72
<a name="line64"> 64: </a><font color="#B22222">  */</font>
 
73
<a name="line65"> 65: </a>  {
 
74
<a name="line66"> 66: </a>      int    m,n,j,mvec,start,end,idx;
 
75
<a name="line67"> 67: </a>      <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>    tmp;
 
76
<a name="line68"> 68: </a>      <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *bold;
 
77
 
 
78
<a name="line70"> 70: </a>      <font color="#B22222">/* Create a new vector b by padding the old one */</font>
 
79
<a name="line71"> 71: </a>      <A href="../../../../docs/manualpages/Mat/MatGetLocalSize.html#MatGetLocalSize">MatGetLocalSize</A>(A,&amp;m,&amp;n);
 
80
<a name="line72"> 72: </a>      <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,&amp;tmp);
 
81
<a name="line73"> 73: </a>      <A href="../../../../docs/manualpages/Vec/VecSetSizes.html#VecSetSizes">VecSetSizes</A>(tmp,m,<A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>);
 
82
<a name="line74"> 74: </a>      <A href="../../../../docs/manualpages/Vec/VecSetFromOptions.html#VecSetFromOptions">VecSetFromOptions</A>(tmp);
 
83
<a name="line75"> 75: </a>      <A href="../../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(b,&amp;start,&amp;end);
 
84
<a name="line76"> 76: </a>      <A href="../../../../docs/manualpages/Vec/VecGetLocalSize.html#VecGetLocalSize">VecGetLocalSize</A>(b,&amp;mvec);
 
85
<a name="line77"> 77: </a>      <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(b,&amp;bold);
 
86
<a name="line78"> 78: </a>      <font color="#4169E1">for</font> (j=0; j&lt;mvec; j++) {
 
87
<a name="line79"> 79: </a>        idx = start+j;
 
88
<a name="line80"> 80: </a>        <A href="../../../../docs/manualpages/Vec/VecSetValues.html#VecSetValues">VecSetValues</A>(tmp,1,&amp;idx,bold+j,INSERT_VALUES);
 
89
<a name="line81"> 81: </a>      }
 
90
<a name="line82"> 82: </a>      <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(b,&amp;bold);
 
91
<a name="line83"> 83: </a>      <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(b);
 
92
<a name="line84"> 84: </a>      <A href="../../../../docs/manualpages/Vec/VecAssemblyBegin.html#VecAssemblyBegin">VecAssemblyBegin</A>(tmp);
 
93
<a name="line85"> 85: </a>      <A href="../../../../docs/manualpages/Vec/VecAssemblyEnd.html#VecAssemblyEnd">VecAssemblyEnd</A>(tmp);
 
94
<a name="line86"> 86: </a>      b = tmp;
 
95
<a name="line87"> 87: </a>    }
 
96
<a name="line88"> 88: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(b,&amp;x);
 
97
<a name="line89"> 89: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(b,&amp;u);
 
98
<a name="line90"> 90: </a>  <A href="../../../../docs/manualpages/Vec/VecSet.html#VecSet">VecSet</A>(&amp;zero,x);
 
99
 
 
100
<a name="line92"> 92: </a>  <font color="#B22222">/*</font>
 
101
<a name="line93"> 93: </a><font color="#B22222">      Create linear solver; set operators; set runtime options.</font>
 
102
<a name="line94"> 94: </a><font color="#B22222">  */</font>
 
103
<a name="line95"> 95: </a>  <A href="../../../../docs/manualpages/KSP/KSPCreate.html#KSPCreate">KSPCreate</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,&amp;ksp);
 
104
<a name="line96"> 96: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetOperators.html#KSPSetOperators">KSPSetOperators</A>(ksp,A,B,DIFFERENT_NONZERO_PATTERN);
 
105
<a name="line97"> 97: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetFromOptions.html#KSPSetFromOptions">KSPSetFromOptions</A>(ksp);
 
106
 
 
107
<a name="line99"> 99: </a>  <font color="#B22222">/* </font>
 
108
<a name="line100">100: </a><font color="#B22222">       Here we explicitly call <A href="../../../../docs/manualpages/KSP/KSPSetUp.html#KSPSetUp">KSPSetUp</A>() and <A href="../../../../docs/manualpages/KSP/KSPSetUpOnBlocks.html#KSPSetUpOnBlocks">KSPSetUpOnBlocks</A>() to</font>
 
109
<a name="line101">101: </a><font color="#B22222">       enable more precise profiling of setting up the preconditioner.</font>
 
110
<a name="line102">102: </a><font color="#B22222">       These calls are optional, since both will be called within</font>
 
111
<a name="line103">103: </a><font color="#B22222">       <A href="../../../../docs/manualpages/KSP/KSPSolve.html#KSPSolve">KSPSolve</A>() if they haven't been called already.</font>
 
112
<a name="line104">104: </a><font color="#B22222">  */</font>
 
113
<a name="line105">105: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetRhs.html#KSPSetRhs">KSPSetRhs</A>(ksp,b);
 
114
<a name="line106">106: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetSolution.html#KSPSetSolution">KSPSetSolution</A>(ksp,x);
 
115
<a name="line107">107: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetUp.html#KSPSetUp">KSPSetUp</A>(ksp);
 
116
<a name="line108">108: </a>  <A href="../../../../docs/manualpages/KSP/KSPSetUpOnBlocks.html#KSPSetUpOnBlocks">KSPSetUpOnBlocks</A>(ksp);
 
117
<a name="line109">109: </a>  <A href="../../../../docs/manualpages/KSP/KSPSolve.html#KSPSolve">KSPSolve</A>(ksp);
 
118
 
 
119
<a name="line111">111: </a>  <font color="#B22222">/*</font>
 
120
<a name="line112">112: </a><font color="#B22222">            Check error, print output, free data structures.</font>
 
121
<a name="line113">113: </a><font color="#B22222">            This stage is not profiled separately.</font>
 
122
<a name="line114">114: </a><font color="#B22222">     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
 
123
 
 
124
<a name="line116">116: </a>  <font color="#B22222">/* </font>
 
125
<a name="line117">117: </a><font color="#B22222">     Check error</font>
 
126
<a name="line118">118: </a><font color="#B22222">  */</font>
 
127
<a name="line119">119: </a>  <A href="../../../../docs/manualpages/Mat/MatMult.html#MatMult">MatMult</A>(A,x,u);
 
128
<a name="line120">120: </a>  <A href="../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;none,b,u);
 
129
<a name="line121">121: </a>  <A href="../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(u,NORM_2,&amp;norm);
 
130
<a name="line122">122: </a>  <A href="../../../../docs/manualpages/KSP/KSPGetIterationNumber.html#KSPGetIterationNumber">KSPGetIterationNumber</A>(ksp,&amp;its);
 
131
<a name="line123">123: </a>  <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,<font color="#666666">"Number of iterations = %3d\n"</font>,its);
 
132
<a name="line124">124: </a>  <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,<font color="#666666">"Residual norm = %A\n"</font>,norm);
 
133
 
 
134
<a name="line126">126: </a>  <font color="#B22222">/* </font>
 
135
<a name="line127">127: </a><font color="#B22222">       Free work space.  All PETSc objects should be destroyed when they</font>
 
136
<a name="line128">128: </a><font color="#B22222">       are no longer needed.</font>
 
137
<a name="line129">129: </a><font color="#B22222">  */</font>
 
138
<a name="line130">130: </a>  <A href="../../../../docs/manualpages/Mat/MatDestroy.html#MatDestroy">MatDestroy</A>(A);
 
139
<a name="line131">131: </a>  <A href="../../../../docs/manualpages/Mat/MatDestroy.html#MatDestroy">MatDestroy</A>(B);
 
140
<a name="line132">132: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(b);
 
141
<a name="line133">133: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(u); <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(x);
 
142
<a name="line134">134: </a>  <A href="../../../../docs/manualpages/KSP/KSPDestroy.html#KSPDestroy">KSPDestroy</A>(ksp);
 
143
 
 
144
 
 
145
<a name="line137">137: </a>  <A href="../../../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>();
 
146
<a name="line138">138: </a>  <font color="#4169E1">return</font> 0;
 
147
<a name="line139">139: </a>}
 
148
 
 
149
</pre>
 
150
</body>
 
151
 
 
152
</html>