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

« back to all changes in this revision

Viewing changes to src/sles/ksp/impls/symmlq/symmlq.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="symmlq.c">Actual source code: symmlq.c</a></center><br>
2
 
 
3
 
<html>
4
 
<head>
5
 
<title></title>
6
 
<meta name="generator" content="c2html 0.9.1">
7
 
<meta name="date" content="2002-05-31T16:27:26+00:00">
8
 
</head>
9
 
 
10
 
<body bgcolor="#FFFFFF">
11
 
<pre width="80"><a name="line1">  1: </a><font color="#B22222">/*$Id: symmlq.c,v 1.16 2001/08/07 03:03:56 balay Exp $*/</font>
12
 
<a name="line2">  2: </a><font color="#B22222">/*                       </font>
13
 
<a name="line3">  3: </a><font color="#B22222">    This code implements the SYMMLQ method. </font>
14
 
<a name="line4">  4: </a><font color="#B22222">    Reference: Paige &amp; Saunders, 1975.</font>
15
 
 
16
 
<a name="line6">  6: </a><font color="#B22222">    Contributed by: Hong Zhang</font>
17
 
<a name="line7">  7: </a><font color="#B22222">*/</font>
18
 
<a name="line8"> 8: </a> #include <A href="../../../../../src/sles/ksp/kspimpl.h.html">src/sles/ksp/kspimpl.h</A>
19
 
 
20
 
<a name="line10"> 10: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
21
 
<a name="line11"> 11: </a>  PetscReal haptol;
22
 
<a name="line12"> 12: </a>} KSP_SYMMLQ;
23
 
 
24
 
<a name="line14"> 14: </a><strong><font color="#4169E1"><a name="KSPSetUp_SYMMLQ"></a>int KSPSetUp_SYMMLQ(<A href="../../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A> ksp)</font></strong>
25
 
<a name="line15"> 15: </a>{
26
 
 
27
 
<a name="line19"> 19: </a>  <font color="#4169E1">if</font> (ksp-&gt;pc_side == PC_RIGHT) {
28
 
<a name="line20"> 20: </a>    <A href="../../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(2,<font color="#666666">"No right preconditioning for KSPSYMMLQ"</font>);
29
 
<a name="line21"> 21: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ksp-&gt;pc_side == PC_SYMMETRIC) {
30
 
<a name="line22"> 22: </a>    <A href="../../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(2,<font color="#666666">"No symmetric preconditioning for KSPSYMMLQ"</font>);
31
 
<a name="line23"> 23: </a>  }
32
 
<a name="line24"> 24: </a>  KSPDefaultGetWork(ksp,9);
33
 
<a name="line25"> 25: </a>  <font color="#4169E1">return</font>(0);
34
 
<a name="line26"> 26: </a>}
35
 
 
36
 
<a name="line28"> 28: </a><strong><font color="#4169E1"><a name="KSPSolve_SYMMLQ"></a>int  KSPSolve_SYMMLQ(<A href="../../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A> ksp,int *its)</font></strong>
37
 
<a name="line29"> 29: </a>{
38
 
<a name="line30"> 30: </a>  int          ierr,i,maxit;
39
 
<a name="line31"> 31: </a>  <A href="../../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  alpha,malpha,beta,mbeta,ibeta,betaold,beta1,ceta,ceta_oold = 0.0, ceta_old = 0.0,ceta_bar;
40
 
<a name="line32"> 32: </a>  <A href="../../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  c=1.0,cold=1.0,s=0.0,sold=0.0,coold,soold,ms,rho0,rho1,rho2,rho3;
41
 
<a name="line33"> 33: </a>  <A href="../../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  mone = -1.0,zero = 0.0,dp = 0.0;
42
 
<a name="line34"> 34: </a>  PetscReal    np,s_prod;
43
 
<a name="line35"> 35: </a>  <A href="../../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          X,B,R,Z,U,V,W,UOLD,VOLD,Wbar;
44
 
<a name="line36"> 36: </a>  <A href="../../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>          Amat,Pmat;
45
 
<a name="line37"> 37: </a>  <A href="../../../../../docs/manualpages/Mat/MatStructure.html#MatStructure">MatStructure</A> pflag;
46
 
<a name="line38"> 38: </a>  KSP_SYMMLQ   *symmlq = (KSP_SYMMLQ*)ksp-&gt;data;
47
 
<a name="line39"> 39: </a>  <A href="../../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>   diagonalscale;
48
 
 
49
 
<a name="line42"> 42: </a>  ierr    = <A href="../../../../../docs/manualpages/PC/PCDiagonalScale.html#PCDiagonalScale">PCDiagonalScale</A>(ksp-&gt;B,&amp;diagonalscale);
50
 
<a name="line43"> 43: </a>  <font color="#4169E1">if</font> (diagonalscale) <A href="../../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Krylov method %s does not support diagonal scaling"</font>,ksp-&gt;type_name);
51
 
 
52
 
<a name="line45"> 45: </a>  maxit   = ksp-&gt;max_it;
53
 
<a name="line46"> 46: </a>  X       = ksp-&gt;vec_sol;
54
 
<a name="line47"> 47: </a>  B       = ksp-&gt;vec_rhs;
55
 
<a name="line48"> 48: </a>  R       = ksp-&gt;work[0];
56
 
<a name="line49"> 49: </a>  Z       = ksp-&gt;work[1];
57
 
<a name="line50"> 50: </a>  U       = ksp-&gt;work[2];
58
 
<a name="line51"> 51: </a>  V       = ksp-&gt;work[3];
59
 
<a name="line52"> 52: </a>  W       = ksp-&gt;work[4];
60
 
<a name="line53"> 53: </a>  UOLD    = ksp-&gt;work[5];
61
 
<a name="line54"> 54: </a>  VOLD    = ksp-&gt;work[6];
62
 
<a name="line55"> 55: </a>  Wbar    = ksp-&gt;work[7];
63
 
<a name="line56"> 56: </a>
64
 
<a name="line57"> 57: </a>  <A href="../../../../../docs/manualpages/PC/PCGetOperators.html#PCGetOperators">PCGetOperators</A>(ksp-&gt;B,&amp;Amat,&amp;Pmat,&amp;pflag);
65
 
 
66
 
<a name="line59"> 59: </a>  ksp-&gt;its = 0;
67
 
 
68
 
<a name="line61"> 61: </a>  <A href="../../../../../docs/manualpages/Vec/VecSet.html#VecSet">VecSet</A>(&amp;zero,UOLD);          <font color="#B22222">/* u_old &lt;- zeros;  */</font>
69
 
<a name="line62"> 62: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(UOLD,VOLD);          <font color="#B22222">/* v_old &lt;- u_old;  */</font>
70
 
<a name="line63"> 63: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(UOLD,W);             <font color="#B22222">/* w     &lt;- u_old;  */</font>
71
 
<a name="line64"> 64: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(UOLD,Wbar);          <font color="#B22222">/* w_bar &lt;- u_old;  */</font>
72
 
<a name="line65"> 65: </a>  <font color="#4169E1">if</font> (!ksp-&gt;guess_zero) {
73
 
<a name="line66"> 66: </a>    KSP_MatMult(ksp,Amat,X,R); <font color="#B22222">/*     r &lt;- b - A*x */</font>
74
 
<a name="line67"> 67: </a>    <A href="../../../../../docs/manualpages/Vec/VecAYPX.html#VecAYPX">VecAYPX</A>(&amp;mone,B,R);
75
 
<a name="line68"> 68: </a>  } <font color="#4169E1">else</font> {
76
 
<a name="line69"> 69: </a>    <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(B,R);              <font color="#B22222">/*     r &lt;- b (x is 0) */</font>
77
 
<a name="line70"> 70: </a>  }
78
 
 
79
 
<a name="line72"> 72: </a>  KSP_PCApply(ksp,ksp-&gt;B,R,Z); <font color="#B22222">/* z  &lt;- B*r       */</font>
80
 
<a name="line73"> 73: </a>  <A href="../../../../../docs/manualpages/Vec/VecDot.html#VecDot">VecDot</A>(R,Z,&amp;dp);             <font color="#B22222">/* dp = r'*z;      */</font>
81
 
<a name="line74"> 74: </a>  <font color="#4169E1">if</font> (PetscAbsScalar(dp) &lt; symmlq-&gt;haptol) {
82
 
<a name="line75"> 75: </a>    <A href="../../../../../docs/manualpages/Profiling/PetscLogInfo.html#PetscLogInfo">PetscLogInfo</A>(ksp,<font color="#666666">"KSPSolve_SYMMLQ:Detected happy breakdown %g tolerance %gn"</font>,PetscAbsScalar(dp),symmlq-&gt;haptol);
83
 
<a name="line76"> 76: </a>    dp = 0.0;
84
 
<a name="line77"> 77: </a>  }
85
 
 
86
 
<a name="line79"> 79: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
87
 
<a name="line80"> 80: </a>  <font color="#4169E1">if</font> (dp &lt; 0.0) <A href="../../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_KSP_BRKDWN,<font color="#666666">"Indefinite preconditioner"</font>);
88
 
<a name="line81"> 81: </a><font color="#A020F0">#endif</font>
89
 
<a name="line82"> 82: </a>  dp = PetscSqrtScalar(dp);
90
 
<a name="line83"> 83: </a>  beta = dp;                         <font color="#B22222">/*  beta &lt;- sqrt(r'*z)  */</font>
91
 
<a name="line84"> 84: </a>  beta1 = beta;
92
 
<a name="line85"> 85: </a>  s_prod = PetscAbsScalar(beta1);
93
 
 
94
 
<a name="line87"> 87: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(R,V);  <font color="#B22222">/* v &lt;- r; */</font>
95
 
<a name="line88"> 88: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(Z,U);  <font color="#B22222">/* u &lt;- z; */</font>
96
 
<a name="line89"> 89: </a>  ibeta = 1.0 / beta;
97
 
<a name="line90"> 90: </a>  <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;ibeta,V);     <font color="#B22222">/* v &lt;- ibeta*v; */</font>
98
 
<a name="line91"> 91: </a>  <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;ibeta,U);     <font color="#B22222">/* u &lt;- ibeta*u; */</font>
99
 
<a name="line92"> 92: </a>  <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(U,Wbar);        <font color="#B22222">/* w_bar &lt;- u;   */</font>
100
 
<a name="line93"> 93: </a>  <A href="../../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(Z,NORM_2,&amp;np);      <font color="#B22222">/*   np &lt;- ||z||        */</font>
101
 
<a name="line94"> 94: </a>  (*ksp-&gt;converged)(ksp,0,np,&amp;ksp-&gt;reason,ksp-&gt;cnvP);  <font color="#B22222">/* test for convergence */</font>
102
 
<a name="line95"> 95: </a>  <font color="#4169E1">if</font> (ksp-&gt;reason) {*its =  0; <font color="#4169E1">return</font>(0);}
103
 
<a name="line96"> 96: </a>  KSPLogResidualHistory(ksp,np);
104
 
<a name="line97"> 97: </a>  KSPMonitor(ksp,0,np);            <font color="#B22222">/* call any registered monitor routines */</font>
105
 
<a name="line98"> 98: </a>  ksp-&gt;rnorm = np;
106
 
 
107
 
<a name="line100">100: </a>  <font color="#4169E1">for</font> (i=0; i&lt;maxit; i++){
108
 
<a name="line101">101: </a>    ksp-&gt;its = i+1;
109
 
 
110
 
<a name="line103">103: </a>    <font color="#B22222">/*    Update    */</font>
111
 
<a name="line104">104: </a>    <font color="#4169E1">if</font> (ksp-&gt;its &gt; 1){
112
 
<a name="line105">105: </a>      <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(V,VOLD);  <font color="#B22222">/* v_old &lt;- v; */</font>
113
 
<a name="line106">106: </a>      <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(U,UOLD);  <font color="#B22222">/* u_old &lt;- u; */</font>
114
 
<a name="line107">107: </a>
115
 
<a name="line108">108: </a>      ibeta = 1.0 / beta;
116
 
<a name="line109">109: </a>      <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(R,V);
117
 
<a name="line110">110: </a>      <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;ibeta,V); <font color="#B22222">/* v &lt;- ibeta*r; */</font>
118
 
<a name="line111">111: </a>      <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(Z,U);
119
 
<a name="line112">112: </a>      <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;ibeta,U); <font color="#B22222">/* u &lt;- ibeta*z; */</font>
120
 
 
121
 
<a name="line114">114: </a>      <A href="../../../../../docs/manualpages/Vec/VecCopy.html#VecCopy">VecCopy</A>(Wbar,W);
122
 
<a name="line115">115: </a>      <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;c,W);
123
 
<a name="line116">116: </a>      <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;s,U,W);   <font color="#B22222">/* w  &lt;- c*w_bar + s*u;    (w_k) */</font>
124
 
<a name="line117">117: </a>      ms = -s;
125
 
<a name="line118">118: </a>      <A href="../../../../../docs/manualpages/Vec/VecScale.html#VecScale">VecScale</A>(&amp;ms,Wbar);
126
 
<a name="line119">119: </a>      <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;c,U,Wbar); <font color="#B22222">/* w_bar &lt;- -s*w_bar + c*u; (w_bar_(k+1)) */</font>
127
 
<a name="line120">120: </a>      <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;ceta,W,X); <font color="#B22222">/* x &lt;- x + ceta * w;       (xL_k)  */</font>
128
 
 
129
 
<a name="line122">122: </a>      ceta_oold = ceta_old;
130
 
<a name="line123">123: </a>      ceta_old  = ceta;
131
 
<a name="line124">124: </a>    }
132
 
 
133
 
<a name="line126">126: </a>    <font color="#B22222">/*   Lanczos  */</font>
134
 
<a name="line127">127: </a>    KSP_MatMult(ksp,Amat,U,R);   <font color="#B22222">/*  r     &lt;- Amat*u; */</font>
135
 
<a name="line128">128: </a>    <A href="../../../../../docs/manualpages/Vec/VecDot.html#VecDot">VecDot</A>(U,R,&amp;alpha);          <font color="#B22222">/*  alpha &lt;- u'*r;   */</font>
136
 
<a name="line129">129: </a>    KSP_PCApply(ksp,ksp-&gt;B,R,Z); <font color="#B22222">/*      z &lt;- B*r;    */</font>
137
 
 
138
 
<a name="line131">131: </a>    malpha = - alpha;
139
 
<a name="line132">132: </a>    <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;malpha,V,R);     <font color="#B22222">/*  r &lt;- r - alpha* v;  */</font>
140
 
<a name="line133">133: </a>    <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;malpha,U,Z);     <font color="#B22222">/*  z &lt;- z - alpha* u;  */</font>
141
 
<a name="line134">134: </a>    mbeta = - beta;
142
 
<a name="line135">135: </a>    <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;mbeta,VOLD,R);   <font color="#B22222">/*  r &lt;- r - beta * v_old; */</font>
143
 
<a name="line136">136: </a>    <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;mbeta,UOLD,Z);   <font color="#B22222">/*  z &lt;- z - beta * u_old; */</font>
144
 
<a name="line137">137: </a>    betaold = beta;                                <font color="#B22222">/* beta_k                  */</font>
145
 
<a name="line138">138: </a>    <A href="../../../../../docs/manualpages/Vec/VecDot.html#VecDot">VecDot</A>(R,Z,&amp;dp);          <font color="#B22222">/* dp &lt;- r'*z;             */</font>
146
 
<a name="line139">139: </a>    <font color="#4169E1">if</font> (PetscAbsScalar(dp) &lt; symmlq-&gt;haptol) {
147
 
<a name="line140">140: </a>      <A href="../../../../../docs/manualpages/Profiling/PetscLogInfo.html#PetscLogInfo">PetscLogInfo</A>(ksp,<font color="#666666">"KSPSolve_SYMMLQ:Detected happy breakdown %g tolerance %gn"</font>,PetscAbsScalar(dp),symmlq-&gt;haptol);
148
 
<a name="line141">141: </a>      dp = 0.0;
149
 
<a name="line142">142: </a>    }
150
 
 
151
 
<a name="line144">144: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
152
 
<a name="line145">145: </a>     <font color="#4169E1">if</font> (dp &lt; 0.0) <A href="../../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_KSP_BRKDWN,<font color="#666666">"Indefinite preconditioner"</font>);
153
 
<a name="line146">146: </a><font color="#A020F0">#endif</font>
154
 
<a name="line147">147: </a>     beta = PetscSqrtScalar(dp);                    <font color="#B22222">/*  beta = sqrt(dp); */</font>
155
 
 
156
 
<a name="line149">149: </a>     <font color="#B22222">/*    QR factorization    */</font>
157
 
<a name="line150">150: </a>     coold = cold; cold = c; soold = sold; sold = s;
158
 
<a name="line151">151: </a>     rho0 = cold * alpha - coold * sold * betaold;    <font color="#B22222">/* gamma_bar */</font>
159
 
<a name="line152">152: </a>     rho1 = PetscSqrtScalar(rho0*rho0 + beta*beta);   <font color="#B22222">/* gamma     */</font>
160
 
<a name="line153">153: </a>     rho2 = sold * alpha + coold * cold * betaold;    <font color="#B22222">/* delta     */</font>
161
 
<a name="line154">154: </a>     rho3 = soold * betaold;                          <font color="#B22222">/* epsilon   */</font>
162
 
 
163
 
<a name="line156">156: </a>     <font color="#B22222">/* Givens rotation: [c -s; s c] (different from the Reference!) */</font>
164
 
<a name="line157">157: </a>     c = rho0 / rho1; s = beta / rho1;
165
 
 
166
 
<a name="line159">159: </a>     <font color="#4169E1">if</font> (ksp-&gt;its==1){
167
 
<a name="line160">160: </a>       ceta = beta1/rho1;
168
 
<a name="line161">161: </a>     } <font color="#4169E1">else</font> {
169
 
<a name="line162">162: </a>       ceta = -(rho2*ceta_old + rho3*ceta_oold)/rho1;
170
 
<a name="line163">163: </a>     }
171
 
<a name="line164">164: </a>
172
 
<a name="line165">165: </a>     s_prod = s_prod*PetscAbsScalar(s);
173
 
<a name="line166">166: </a>     <font color="#4169E1">if</font> (c == 0.0){
174
 
<a name="line167">167: </a>       np = s_prod*1.e16;
175
 
<a name="line168">168: </a>     } <font color="#4169E1">else</font> {
176
 
<a name="line169">169: </a>       np = s_prod/PetscAbsScalar(c);       <font color="#B22222">/* residual norm for xc_k (CGNORM) */</font>
177
 
<a name="line170">170: </a>     }
178
 
<a name="line171">171: </a>     ksp-&gt;rnorm = np;
179
 
<a name="line172">172: </a>     KSPLogResidualHistory(ksp,np);
180
 
<a name="line173">173: </a>     KSPMonitor(ksp,i+1,np);
181
 
<a name="line174">174: </a>     (*ksp-&gt;converged)(ksp,i+1,np,&amp;ksp-&gt;reason,ksp-&gt;cnvP); <font color="#B22222">/* test for convergence */</font>
182
 
<a name="line175">175: </a>     <font color="#4169E1">if</font> (ksp-&gt;reason) <font color="#4169E1">break</font>;
183
 
<a name="line176">176: </a>  }
184
 
 
185
 
<a name="line178">178: </a>  <font color="#B22222">/* move to the CG point: xc_(k+1) */</font>
186
 
<a name="line179">179: </a>  <font color="#4169E1">if</font> (c == 0.0){
187
 
<a name="line180">180: </a>    ceta_bar = ceta*1.e15;
188
 
<a name="line181">181: </a>  } <font color="#4169E1">else</font> {
189
 
<a name="line182">182: </a>    ceta_bar = ceta/c;
190
 
<a name="line183">183: </a>  }
191
 
<a name="line184">184: </a>  <A href="../../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;ceta_bar,Wbar,X); <font color="#B22222">/* x &lt;- x + ceta_bar*w_bar */</font>
192
 
 
193
 
<a name="line186">186: </a>  <font color="#4169E1">if</font> (i == maxit) {
194
 
<a name="line187">187: </a>    ksp-&gt;reason = KSP_DIVERGED_ITS;
195
 
<a name="line188">188: </a>  }
196
 
<a name="line189">189: </a>  *its = ksp-&gt;its;
197
 
 
198
 
<a name="line191">191: </a>  <font color="#4169E1">return</font>(0);
199
 
<a name="line192">192: </a>}
200
 
 
201
 
<a name="line194">194: </a><strong><font color="#4169E1"><a name="KSPCreate_SYMMLQ"></a>EXTERN_C_BEGIN</font></strong>
202
 
<a name="line195">195: </a><strong><font color="#4169E1">int KSPCreate_SYMMLQ(<A href="../../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A> ksp)</font></strong>
203
 
<a name="line196">196: </a>{
204
 
<a name="line197">197: </a>  KSP_SYMMLQ *symmlq;
205
 
 
206
 
 
207
 
<a name="line202">202: </a>  ksp-&gt;pc_side                   = PC_LEFT;
208
 
 
209
 
<a name="line204">204: </a>  ierr           = <A href="../../../../../docs/manualpages/Sys/PetscNew.html#PetscNew">PetscNew</A>(KSP_SYMMLQ,&amp;symmlq);
210
 
<a name="line205">205: </a>  symmlq-&gt;haptol = 1.e-18;
211
 
<a name="line206">206: </a>  ksp-&gt;data      = (void*)symmlq;
212
 
 
213
 
<a name="line208">208: </a>  <font color="#B22222">/*</font>
214
 
<a name="line209">209: </a><font color="#B22222">       Sets the functions that are associated with this data structure </font>
215
 
<a name="line210">210: </a><font color="#B22222">       (in C++ this is the same as defining virtual functions)</font>
216
 
<a name="line211">211: </a><font color="#B22222">  */</font>
217
 
<a name="line212">212: </a>  ksp-&gt;ops-&gt;setup                = KSPSetUp_SYMMLQ;
218
 
<a name="line213">213: </a>  ksp-&gt;ops-&gt;solve                = KSPSolve_SYMMLQ;
219
 
<a name="line214">214: </a>  ksp-&gt;ops-&gt;destroy              = KSPDefaultDestroy;
220
 
<a name="line215">215: </a>  ksp-&gt;ops-&gt;setfromoptions       = 0;
221
 
<a name="line216">216: </a>  ksp-&gt;ops-&gt;buildsolution        = KSPDefaultBuildSolution;
222
 
<a name="line217">217: </a>  ksp-&gt;ops-&gt;buildresidual        = KSPDefaultBuildResidual;
223
 
 
224
 
<a name="line219">219: </a>  <font color="#4169E1">return</font>(0);
225
 
<a name="line220">220: </a>}
226
 
<a name="line221">221: </a>EXTERN_C_END
227
 
 
228
 
 
229
 
 
230
 
 
231
 
 
232
 
</pre>
233
 
</body>
234
 
 
235
 
</html>