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

« back to all changes in this revision

Viewing changes to src/snes/examples/tests/ex9.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:
3
3
<html>
4
4
<head>
5
5
<title></title>
6
 
<meta name="generator" content="c2html 0.9.1">
7
 
<meta name="date" content="2002-05-31T16:31:26+00:00">
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T20:02:58+00:00">
8
8
</head>
9
9
 
10
10
<body bgcolor="#FFFFFF">
11
11
<pre width="80"><a name="line1">  1: </a><font color="#B22222">/*$Id: ex9.c,v 1.52 2001/08/07 21:31:12 bsmith Exp $*/</font>
12
12
 
13
 
<a name="line3">  3: </a>static char help[] = <font color="#666666">"This program demonstrates use of the <A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> package. Solve systems ofn</font>
14
 
<a name="line4">  4: </a><font color="#666666">nonlinear equations in parallel.  This example uses matrix-free Krylovn</font>
15
 
<a name="line5">  5: </a><font color="#666666">Newton methods with no preconditioner to solve the Bratu (SFI - solid fueln</font>
16
 
<a name="line6">  6: </a><font color="#666666">ignition) test problem. The command line options are:n</font>
17
 
<a name="line7">  7: </a><font color="#666666">   -par &lt;parameter&gt;, where &lt;parameter&gt; indicates the problem's nonlinearityn</font>
18
 
<a name="line8">  8: </a><font color="#666666">      problem SFI:  &lt;parameter&gt; = Bratu parameter (0 &lt;= par &lt;= 6.81)n</font>
19
 
<a name="line9">  9: </a><font color="#666666">   -mx &lt;xg&gt;, where &lt;xg&gt; = number of grid points in the x-directionn</font>
20
 
<a name="line10"> 10: </a><font color="#666666">   -my &lt;yg&gt;, where &lt;yg&gt; = number of grid points in the y-directionn</font>
21
 
<a name="line11"> 11: </a><font color="#666666">   -mz &lt;zg&gt;, where &lt;zg&gt; = number of grid points in the z-directionnn"</font>;
 
13
<a name="line3">  3: </a>static char help[] = <font color="#666666">"This program demonstrates use of the <A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> package. Solve systems of\n\</font>
 
14
<a name="line4">  4: </a><font color="#666666">nonlinear equations in parallel.  This example uses matrix-free Krylov\n\</font>
 
15
<a name="line5">  5: </a><font color="#666666">Newton methods with no preconditioner to solve the Bratu (SFI - solid fuel\n\</font>
 
16
<a name="line6">  6: </a><font color="#666666">ignition) test problem. The command line options are:\n\</font>
 
17
<a name="line7">  7: </a><font color="#666666">   -par &lt;parameter&gt;, where &lt;parameter&gt; indicates the problem's nonlinearity\n\</font>
 
18
<a name="line8">  8: </a><font color="#666666">      problem SFI:  &lt;parameter&gt; = Bratu parameter (0 &lt;= par &lt;= 6.81)\n\</font>
 
19
<a name="line9">  9: </a><font color="#666666">   -mx &lt;xg&gt;, where &lt;xg&gt; = number of grid points in the x-direction\n\</font>
 
20
<a name="line10"> 10: </a><font color="#666666">   -my &lt;yg&gt;, where &lt;yg&gt; = number of grid points in the y-direction\n\</font>
 
21
<a name="line11"> 11: </a><font color="#666666">   -mz &lt;zg&gt;, where &lt;zg&gt; = number of grid points in the z-direction\n\n"</font>;
22
22
 
23
23
<a name="line13"> 13: </a><font color="#B22222">/*  </font>
24
24
<a name="line14"> 14: </a><font color="#B22222">    1) Solid Fuel Ignition (SFI) problem.  This problem is modeled by</font>
39
39
<a name="line29"> 29: </a> #include <A href="../../../../include/petscda.h.html">petscda.h</A>
40
40
 
41
41
<a name="line31"> 31: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
42
 
<a name="line32"> 32: </a>    PetscReal param;           <font color="#B22222">/* test problem nonlinearity parameter */</font>
 
42
<a name="line32"> 32: </a>    <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A> param;           <font color="#B22222">/* test problem nonlinearity parameter */</font>
43
43
<a name="line33"> 33: </a>    int       mx,my,mz;      <font color="#B22222">/* discretization in x,y,z-directions */</font>
44
44
<a name="line34"> 34: </a>    <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>       localX,localF;  <font color="#B22222">/* ghosted local vectors */</font>
45
45
<a name="line35"> 35: </a>    <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>        da;              <font color="#B22222">/* distributed array datastructure */</font>
47
47
 
48
48
<a name="line38"> 38: </a><strong><font color="#4169E1">extern int FormFunction1(<A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A>,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>,void*),FormInitialGuess1(AppCtx*,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>)</font></strong>;
49
49
 
50
 
<a name="line40"> 40: </a><strong><font color="#4169E1"><a name="main"></a>int main(int argc,char **argv)</font></strong>
51
 
<a name="line41"> 41: </a>{
52
 
<a name="line42"> 42: </a>  <A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A>          snes;                 <font color="#B22222">/* nonlinear solver */</font>
53
 
<a name="line43"> 43: </a>  <A href="../../../../docs/manualpages/SLES/SLES.html#SLES">SLES</A>          sles;                 <font color="#B22222">/* linear solver */</font>
54
 
<a name="line44"> 44: </a>  <A href="../../../../docs/manualpages/PC/PC.html#PC">PC</A>            pc;                   <font color="#B22222">/* preconditioner */</font>
55
 
<a name="line45"> 45: </a>  <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>           J;                    <font color="#B22222">/* Jacobian matrix */</font>
56
 
<a name="line46"> 46: </a>  AppCtx        user;                 <font color="#B22222">/* user-defined application context */</font>
57
 
<a name="line47"> 47: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>           x,r;                  <font color="#B22222">/* vectors */</font>
58
 
<a name="line48"> 48: </a>  <A href="../../../../docs/manualpages/DA/DAStencilType.html#DAStencilType">DAStencilType</A> stencil = DA_STENCIL_BOX;
59
 
<a name="line49"> 49: </a>  int           ierr,its;
60
 
<a name="line50"> 50: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>    flg;
61
 
<a name="line51"> 51: </a>  int           Nx = PETSC_DECIDE,Ny = PETSC_DECIDE,Nz = PETSC_DECIDE;
62
 
<a name="line52"> 52: </a>  PetscReal     bratu_lambda_max = 6.81,bratu_lambda_min = 0.;
63
 
 
64
 
<a name="line54"> 54: </a>  <A href="../../../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(&amp;argc,&amp;argv,(char *)0,help);
65
 
<a name="line55"> 55: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(PETSC_NULL,<font color="#666666">"-star"</font>,&amp;flg);
66
 
<a name="line56"> 56: </a>  <font color="#4169E1">if</font> (flg) stencil = DA_STENCIL_STAR;
67
 
 
68
 
<a name="line58"> 58: </a>  user.mx    = 4;
69
 
<a name="line59"> 59: </a>  user.my    = 4;
70
 
<a name="line60"> 60: </a>  user.mz    = 4;
71
 
<a name="line61"> 61: </a>  user.param = 6.0;
72
 
<a name="line62"> 62: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-mx"</font>,&amp;user.mx,PETSC_NULL);
73
 
<a name="line63"> 63: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-my"</font>,&amp;user.my,PETSC_NULL);
74
 
<a name="line64"> 64: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-mz"</font>,&amp;user.mz,PETSC_NULL);
75
 
<a name="line65"> 65: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-Nx"</font>,&amp;Nx,PETSC_NULL);
76
 
<a name="line66"> 66: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-Ny"</font>,&amp;Ny,PETSC_NULL);
77
 
<a name="line67"> 67: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(PETSC_NULL,<font color="#666666">"-Nz"</font>,&amp;Nz,PETSC_NULL);
78
 
<a name="line68"> 68: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(PETSC_NULL,<font color="#666666">"-par"</font>,&amp;user.param,PETSC_NULL);
79
 
<a name="line69"> 69: </a>  <font color="#4169E1">if</font> (user.param &gt;= bratu_lambda_max || user.param &lt;= bratu_lambda_min) {
80
 
<a name="line70"> 70: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Lambda is out of range"</font>);
81
 
<a name="line71"> 71: </a>  }
82
 
<a name="line72"> 72: </a>
83
 
<a name="line73"> 73: </a>  <font color="#B22222">/* Set up distributed array */</font>
84
 
<a name="line74"> 74: </a>  <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(PETSC_COMM_WORLD,DA_NONPERIODIC,stencil,user.mx,user.my,user.mz,
85
 
<a name="line75"> 75: </a>                    Nx,Ny,Nz,1,1,PETSC_NULL,PETSC_NULL,PETSC_NULL,&amp;user.da);
86
 
<a name="line76"> 76: </a>  <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>(user.da,&amp;x);
87
 
<a name="line77"> 77: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(x,&amp;r);
88
 
<a name="line78"> 78: </a>  <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>(user.da,&amp;user.localX);
89
 
<a name="line79"> 79: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(user.localX,&amp;user.localF);
90
 
 
91
 
<a name="line81"> 81: </a>  <font color="#B22222">/* Create nonlinear solver */</font>
92
 
<a name="line82"> 82: </a>  <A href="../../../../docs/manualpages/SNES/SNESCreate.html#SNESCreate">SNESCreate</A>(PETSC_COMM_WORLD,&amp;snes);
93
 
<a name="line83"> 83: </a>  <font color="#B22222">/* Set various routines and options */</font>
94
 
<a name="line84"> 84: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetFunction.html#SNESSetFunction">SNESSetFunction</A>(snes,r,FormFunction1,(void *)&amp;user);
95
 
<a name="line85"> 85: </a>  <A href="../../../../docs/manualpages/SNESMF/MatCreateSNESMF.html#MatCreateSNESMF">MatCreateSNESMF</A>(snes,x,&amp;J);
96
 
<a name="line86"> 86: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetJacobian.html#SNESSetJacobian">SNESSetJacobian</A>(snes,J,J,MatSNESMFComputeJacobian,&amp;user);
97
 
<a name="line87"> 87: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetFromOptions.html#SNESSetFromOptions">SNESSetFromOptions</A>(snes);
98
 
 
99
 
<a name="line89"> 89: </a>  <font color="#B22222">/* Force no preconditioning to be used.  Note that this overrides whatever</font>
100
 
<a name="line90"> 90: </a><font color="#B22222">     choices may have been specified in the options database. */</font>
101
 
<a name="line91"> 91: </a>  <A href="../../../../docs/manualpages/SNES/SNESGetSLES.html#SNESGetSLES">SNESGetSLES</A>(snes,&amp;sles);
102
 
<a name="line92"> 92: </a>  <A href="../../../../docs/manualpages/SLES/SLESGetPC.html#SLESGetPC">SLESGetPC</A>(sles,&amp;pc);
103
 
<a name="line93"> 93: </a>  <A href="../../../../docs/manualpages/PC/PCSetType.html#PCSetType">PCSetType</A>(pc,PCNONE);
104
 
 
105
 
<a name="line95"> 95: </a>  <font color="#B22222">/* Solve nonlinear system */</font>
106
 
<a name="line96"> 96: </a>  FormInitialGuess1(&amp;user,x);
107
 
<a name="line97"> 97: </a>  <A href="../../../../docs/manualpages/SNES/SNESSolve.html#SNESSolve">SNESSolve</A>(snes,x,&amp;its);
108
 
<a name="line98"> 98: </a>  <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(PETSC_COMM_WORLD,<font color="#666666">"Number of Newton iterations = %dn"</font>,its);
109
 
 
110
 
<a name="line100">100: </a>  <font color="#B22222">/* Free data structures */</font>
111
 
<a name="line101">101: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(user.localX);
112
 
<a name="line102">102: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(user.localF);
113
 
<a name="line103">103: </a>  <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(user.da);
114
 
<a name="line104">104: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(x); <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(r);
115
 
<a name="line105">105: </a>  <A href="../../../../docs/manualpages/Mat/MatDestroy.html#MatDestroy">MatDestroy</A>(J); <A href="../../../../docs/manualpages/SNES/SNESDestroy.html#SNESDestroy">SNESDestroy</A>(snes);
116
 
 
117
 
<a name="line107">107: </a>  <A href="../../../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>();
118
 
<a name="line108">108: </a>  <font color="#4169E1">return</font> 0;
119
 
<a name="line109">109: </a>}<font color="#B22222">/* --------------------  Form initial approximation ----------------- */</font>
120
 
<a name="line110">110: </a><strong><font color="#4169E1"><a name="FormInitialGuess1"></a>int FormInitialGuess1(AppCtx *user,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X)</font></strong>
121
 
<a name="line111">111: </a>{
122
 
<a name="line112">112: </a>  int          i,j,k,loc,mx,my,mz,ierr,xs,ys,zs,xm,ym,zm,Xm,Ym,Zm,Xs,Ys,Zs,base1;
123
 
<a name="line113">113: </a>  PetscReal    one = 1.0,lambda,temp1,temp,Hx,Hy;
124
 
<a name="line114">114: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  *x;
125
 
<a name="line115">115: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          localX = user-&gt;localX;
126
 
 
127
 
<a name="line117">117: </a>  mx         = user-&gt;mx; my         = user-&gt;my; mz = user-&gt;mz; lambda = user-&gt;param;
128
 
<a name="line118">118: </a>  Hx     = one / (PetscReal)(mx-1);     Hy     = one / (PetscReal)(my-1);
129
 
 
130
 
<a name="line120">120: </a>  ierr  = <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localX,&amp;x);
131
 
<a name="line121">121: </a>  temp1 = lambda/(lambda + one);
132
 
<a name="line122">122: </a>  ierr  = <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(user-&gt;da,&amp;xs,&amp;ys,&amp;zs,&amp;xm,&amp;ym,&amp;zm);
133
 
<a name="line123">123: </a>  ierr  = <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(user-&gt;da,&amp;Xs,&amp;Ys,&amp;Zs,&amp;Xm,&amp;Ym,&amp;Zm);
134
 
<a name="line124">124: </a>
135
 
<a name="line125">125: </a>  <font color="#4169E1">for</font> (k=zs; k&lt;zs+zm; k++) {
136
 
<a name="line126">126: </a>    base1 = (Xm*Ym)*(k-Zs);
137
 
<a name="line127">127: </a>    <font color="#4169E1">for</font> (j=ys; j&lt;ys+ym; j++) {
138
 
<a name="line128">128: </a>      temp = (PetscReal)(PetscMin(j,my-j-1))*Hy;
139
 
<a name="line129">129: </a>      <font color="#4169E1">for</font> (i=xs; i&lt;xs+xm; i++) {
140
 
<a name="line130">130: </a>        loc = base1 + i-Xs + (j-Ys)*Xm;
141
 
<a name="line131">131: </a>        <font color="#4169E1">if</font> (i == 0 || j == 0 || k == 0 || i==mx-1 || j==my-1 || k==mz-1) {
142
 
<a name="line132">132: </a>          x[loc] = 0.0;
143
 
<a name="line133">133: </a>          <font color="#4169E1">continue</font>;
144
 
<a name="line134">134: </a>        }
145
 
<a name="line135">135: </a>        x[loc] = temp1*sqrt(PetscMin((PetscReal)(PetscMin(i,mx-i-1))*Hx,temp));
146
 
<a name="line136">136: </a>      }
147
 
<a name="line137">137: </a>    }
148
 
<a name="line138">138: </a>  }
149
 
 
150
 
<a name="line140">140: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localX,&amp;x);
151
 
<a name="line141">141: </a>  <font color="#B22222">/* stick values into global vector */</font>
152
 
<a name="line142">142: </a>  <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(user-&gt;da,localX,INSERT_VALUES,X);
153
 
<a name="line143">143: </a>  <font color="#4169E1">return</font> 0;
154
 
<a name="line144">144: </a>}<font color="#B22222">/* --------------------  Evaluate Function F(x) --------------------- */</font>
155
 
<a name="line145">145: </a><strong><font color="#4169E1"><a name="FormFunction1"></a>int FormFunction1(<A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> snes,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> F,void *ptr)</font></strong>
156
 
<a name="line146">146: </a>{
157
 
<a name="line147">147: </a>  AppCtx       *user = (AppCtx*)ptr;
158
 
<a name="line148">148: </a>  int          ierr,i,j,k,loc,mx,my,mz,xs,ys,zs,xm,ym,zm,Xs,Ys,Zs,Xm,Ym,Zm;
159
 
<a name="line149">149: </a>  int          base1,base2;
160
 
<a name="line150">150: </a>  PetscReal    two = 2.0,one = 1.0,lambda,Hx,Hy,Hz,HxHzdHy,HyHzdHx,HxHydHz;
161
 
<a name="line151">151: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  u,uxx,uyy,sc,*x,*f,uzz;
162
 
<a name="line152">152: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          localX = user-&gt;localX,localF = user-&gt;localF;
163
 
 
164
 
<a name="line154">154: </a>  mx      = user-&gt;mx; my = user-&gt;my; mz = user-&gt;mz; lambda = user-&gt;param;
165
 
<a name="line155">155: </a>  Hx      = one / (PetscReal)(mx-1);
166
 
<a name="line156">156: </a>  Hy      = one / (PetscReal)(my-1);
167
 
<a name="line157">157: </a>  Hz      = one / (PetscReal)(mz-1);
168
 
<a name="line158">158: </a>  sc      = Hx*Hy*Hz*lambda; HxHzdHy  = Hx*Hz/Hy; HyHzdHx  = Hy*Hz/Hx;
169
 
<a name="line159">159: </a>  HxHydHz = Hx*Hy/Hz;
170
 
 
171
 
<a name="line161">161: </a>  <A href="../../../../docs/manualpages/DA/DAGlobalToLocalBegin.html#DAGlobalToLocalBegin">DAGlobalToLocalBegin</A>(user-&gt;da,X,INSERT_VALUES,localX);
172
 
<a name="line162">162: </a>  <A href="../../../../docs/manualpages/DA/DAGlobalToLocalEnd.html#DAGlobalToLocalEnd">DAGlobalToLocalEnd</A>(user-&gt;da,X,INSERT_VALUES,localX);
173
 
<a name="line163">163: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localX,&amp;x);
174
 
<a name="line164">164: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localF,&amp;f);
175
 
 
176
 
<a name="line166">166: </a>  <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(user-&gt;da,&amp;xs,&amp;ys,&amp;zs,&amp;xm,&amp;ym,&amp;zm);
177
 
<a name="line167">167: </a>  <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(user-&gt;da,&amp;Xs,&amp;Ys,&amp;Zs,&amp;Xm,&amp;Ym,&amp;Zm);
178
 
 
179
 
<a name="line169">169: </a>  <font color="#4169E1">for</font> (k=zs; k&lt;zs+zm; k++) {
180
 
<a name="line170">170: </a>    base1 = (Xm*Ym)*(k-Zs);
181
 
<a name="line171">171: </a>    <font color="#4169E1">for</font> (j=ys; j&lt;ys+ym; j++) {
182
 
<a name="line172">172: </a>      base2 = base1 + (j-Ys)*Xm;
183
 
<a name="line173">173: </a>      <font color="#4169E1">for</font> (i=xs; i&lt;xs+xm; i++) {
184
 
<a name="line174">174: </a>        loc = base2 + (i-Xs);
185
 
<a name="line175">175: </a>        <font color="#4169E1">if</font> (i == 0 || j == 0 || k== 0 || i == mx-1 || j == my-1 || k == mz-1) {
186
 
<a name="line176">176: </a>          f[loc] = x[loc];
187
 
<a name="line177">177: </a>        }
188
 
<a name="line178">178: </a>        <font color="#4169E1">else</font> {
189
 
<a name="line179">179: </a>          u = x[loc];
190
 
<a name="line180">180: </a>          uxx = (two*u - x[loc-1] - x[loc+1])*HyHzdHx;
191
 
<a name="line181">181: </a>          uyy = (two*u - x[loc-Xm] - x[loc+Xm])*HxHzdHy;
192
 
<a name="line182">182: </a>          uzz = (two*u - x[loc-Xm*Ym] - x[loc+Xm*Ym])*HxHydHz;
193
 
<a name="line183">183: </a>          f[loc] = uxx + uyy + uzz - sc*PetscExpScalar(u);
 
50
<a name="line42"> 42: </a><strong><font color="#4169E1"><a name="main"></a>int main(int argc,char **argv)</font></strong>
 
51
<a name="line43"> 43: </a>{
 
52
<a name="line44"> 44: </a>  <A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A>          snes;                 <font color="#B22222">/* nonlinear solver */</font>
 
53
<a name="line45"> 45: </a>  <A href="../../../../docs/manualpages/KSP/KSP.html#KSP">KSP</A>           ksp;                 <font color="#B22222">/* linear solver */</font>
 
54
<a name="line46"> 46: </a>  <A href="../../../../docs/manualpages/PC/PC.html#PC">PC</A>            pc;                   <font color="#B22222">/* preconditioner */</font>
 
55
<a name="line47"> 47: </a>  <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>           J;                    <font color="#B22222">/* Jacobian matrix */</font>
 
56
<a name="line48"> 48: </a>  AppCtx        user;                 <font color="#B22222">/* user-defined application context */</font>
 
57
<a name="line49"> 49: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>           x,r;                  <font color="#B22222">/* vectors */</font>
 
58
<a name="line50"> 50: </a>  <A href="../../../../docs/manualpages/DA/DAStencilType.html#DAStencilType">DAStencilType</A> stencil = DA_STENCIL_BOX;
 
59
<a name="line51"> 51: </a>  int           ierr,its;
 
60
<a name="line52"> 52: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>    flg;
 
61
<a name="line53"> 53: </a>  int           Nx = <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,Ny = <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,Nz = <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>;
 
62
<a name="line54"> 54: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>     bratu_lambda_max = 6.81,bratu_lambda_min = 0.;
 
63
 
 
64
<a name="line56"> 56: </a>  <A href="../../../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(&amp;argc,&amp;argv,(char *)0,help);
 
65
<a name="line57"> 57: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-star"</font>,&amp;flg);
 
66
<a name="line58"> 58: </a>  <font color="#4169E1">if</font> (flg) stencil = DA_STENCIL_STAR;
 
67
 
 
68
<a name="line60"> 60: </a>  user.mx    = 4;
 
69
<a name="line61"> 61: </a>  user.my    = 4;
 
70
<a name="line62"> 62: </a>  user.mz    = 4;
 
71
<a name="line63"> 63: </a>  user.param = 6.0;
 
72
<a name="line64"> 64: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-mx"</font>,&amp;user.mx,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
73
<a name="line65"> 65: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-my"</font>,&amp;user.my,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
74
<a name="line66"> 66: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-mz"</font>,&amp;user.mz,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
75
<a name="line67"> 67: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-Nx"</font>,&amp;Nx,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
76
<a name="line68"> 68: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-Ny"</font>,&amp;Ny,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
77
<a name="line69"> 69: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetInt.html#PetscOptionsGetInt">PetscOptionsGetInt</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-Nz"</font>,&amp;Nz,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
78
<a name="line70"> 70: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-par"</font>,&amp;user.param,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
79
<a name="line71"> 71: </a>  <font color="#4169E1">if</font> (user.param &gt;= bratu_lambda_max || user.param &lt;= bratu_lambda_min) {
 
80
<a name="line72"> 72: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Lambda is out of range"</font>);
 
81
<a name="line73"> 73: </a>  }
 
82
<a name="line74"> 74: </a>
 
83
<a name="line75"> 75: </a>  <font color="#B22222">/* Set up distributed array */</font>
 
84
<a name="line76"> 76: </a>  <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,DA_NONPERIODIC,stencil,user.mx,user.my,user.mz,
 
85
<a name="line77"> 77: </a>                    Nx,Ny,Nz,1,1,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;user.da);
 
86
<a name="line78"> 78: </a>  <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>(user.da,&amp;x);
 
87
<a name="line79"> 79: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(x,&amp;r);
 
88
<a name="line80"> 80: </a>  <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>(user.da,&amp;user.localX);
 
89
<a name="line81"> 81: </a>  <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(user.localX,&amp;user.localF);
 
90
 
 
91
<a name="line83"> 83: </a>  <font color="#B22222">/* Create nonlinear solver */</font>
 
92
<a name="line84"> 84: </a>  <A href="../../../../docs/manualpages/SNES/SNESCreate.html#SNESCreate">SNESCreate</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,&amp;snes);
 
93
<a name="line85"> 85: </a>  <font color="#B22222">/* Set various routines and options */</font>
 
94
<a name="line86"> 86: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetFunction.html#SNESSetFunction">SNESSetFunction</A>(snes,r,FormFunction1,(void *)&amp;user);
 
95
<a name="line87"> 87: </a>  <A href="../../../../docs/manualpages/SNESMF/MatCreateSNESMF.html#MatCreateSNESMF">MatCreateSNESMF</A>(snes,x,&amp;J);
 
96
<a name="line88"> 88: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetJacobian.html#SNESSetJacobian">SNESSetJacobian</A>(snes,J,J,MatSNESMFComputeJacobian,&amp;user);
 
97
<a name="line89"> 89: </a>  <A href="../../../../docs/manualpages/SNES/SNESSetFromOptions.html#SNESSetFromOptions">SNESSetFromOptions</A>(snes);
 
98
 
 
99
<a name="line91"> 91: </a>  <font color="#B22222">/* Force no preconditioning to be used.  Note that this overrides whatever</font>
 
100
<a name="line92"> 92: </a><font color="#B22222">     choices may have been specified in the options database. */</font>
 
101
<a name="line93"> 93: </a>  <A href="../../../../docs/manualpages/SNES/SNESGetKSP.html#SNESGetKSP">SNESGetKSP</A>(snes,&amp;ksp);
 
102
<a name="line94"> 94: </a>  <A href="../../../../docs/manualpages/KSP/KSPGetPC.html#KSPGetPC">KSPGetPC</A>(ksp,&amp;pc);
 
103
<a name="line95"> 95: </a>  <A href="../../../../docs/manualpages/PC/PCSetType.html#PCSetType">PCSetType</A>(pc,PCNONE);
 
104
 
 
105
<a name="line97"> 97: </a>  <font color="#B22222">/* Solve nonlinear system */</font>
 
106
<a name="line98"> 98: </a>  FormInitialGuess1(&amp;user,x);
 
107
<a name="line99"> 99: </a>  <A href="../../../../docs/manualpages/SNES/SNESSolve.html#SNESSolve">SNESSolve</A>(snes,x);
 
108
<a name="line100">100: </a>  <A href="../../../../docs/manualpages/SNES/SNESGetIterationNumber.html#SNESGetIterationNumber">SNESGetIterationNumber</A>(snes,&amp;its);
 
109
<a name="line101">101: </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 Newton iterations = %d\n"</font>,its);
 
110
 
 
111
<a name="line103">103: </a>  <font color="#B22222">/* Free data structures */</font>
 
112
<a name="line104">104: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(user.localX);
 
113
<a name="line105">105: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(user.localF);
 
114
<a name="line106">106: </a>  <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(user.da);
 
115
<a name="line107">107: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(x); <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(r);
 
116
<a name="line108">108: </a>  <A href="../../../../docs/manualpages/Mat/MatDestroy.html#MatDestroy">MatDestroy</A>(J); <A href="../../../../docs/manualpages/SNES/SNESDestroy.html#SNESDestroy">SNESDestroy</A>(snes);
 
117
 
 
118
<a name="line110">110: </a>  <A href="../../../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>();
 
119
<a name="line111">111: </a>  <font color="#4169E1">return</font> 0;
 
120
<a name="line112">112: </a>}<font color="#B22222">/* --------------------  Form initial approximation ----------------- */</font>
 
121
<a name="line115">115: </a><strong><font color="#4169E1"><a name="FormInitialGuess1"></a>int FormInitialGuess1(AppCtx *user,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X)</font></strong>
 
122
<a name="line116">116: </a>{
 
123
<a name="line117">117: </a>  int          i,j,k,loc,mx,my,mz,ierr,xs,ys,zs,xm,ym,zm,Xm,Ym,Zm,Xs,Ys,Zs,base1;
 
124
<a name="line118">118: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>    one = 1.0,lambda,temp1,temp,Hx,Hy;
 
125
<a name="line119">119: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  *x;
 
126
<a name="line120">120: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          localX = user-&gt;localX;
 
127
 
 
128
<a name="line122">122: </a>  mx         = user-&gt;mx; my         = user-&gt;my; mz = user-&gt;mz; lambda = user-&gt;param;
 
129
<a name="line123">123: </a>  Hx     = one / (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(mx-1);     Hy     = one / (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(my-1);
 
130
 
 
131
<a name="line125">125: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localX,&amp;x);
 
132
<a name="line126">126: </a>  temp1 = lambda/(lambda + one);
 
133
<a name="line127">127: </a>  <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(user-&gt;da,&amp;xs,&amp;ys,&amp;zs,&amp;xm,&amp;ym,&amp;zm);
 
134
<a name="line128">128: </a>  <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(user-&gt;da,&amp;Xs,&amp;Ys,&amp;Zs,&amp;Xm,&amp;Ym,&amp;Zm);
 
135
<a name="line129">129: </a>
 
136
<a name="line130">130: </a>  <font color="#4169E1">for</font> (k=zs; k&lt;zs+zm; k++) {
 
137
<a name="line131">131: </a>    base1 = (Xm*Ym)*(k-Zs);
 
138
<a name="line132">132: </a>    <font color="#4169E1">for</font> (j=ys; j&lt;ys+ym; j++) {
 
139
<a name="line133">133: </a>      temp = (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(<A href="../../../../docs/manualpages/Sys/PetscMin.html#PetscMin">PetscMin</A>(j,my-j-1))*Hy;
 
140
<a name="line134">134: </a>      <font color="#4169E1">for</font> (i=xs; i&lt;xs+xm; i++) {
 
141
<a name="line135">135: </a>        loc = base1 + i-Xs + (j-Ys)*Xm;
 
142
<a name="line136">136: </a>        <font color="#4169E1">if</font> (i == 0 || j == 0 || k == 0 || i==mx-1 || j==my-1 || k==mz-1) {
 
143
<a name="line137">137: </a>          x[loc] = 0.0;
 
144
<a name="line138">138: </a>          <font color="#4169E1">continue</font>;
 
145
<a name="line139">139: </a>        }
 
146
<a name="line140">140: </a>        x[loc] = temp1*sqrt(<A href="../../../../docs/manualpages/Sys/PetscMin.html#PetscMin">PetscMin</A>((<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(<A href="../../../../docs/manualpages/Sys/PetscMin.html#PetscMin">PetscMin</A>(i,mx-i-1))*Hx,temp));
 
147
<a name="line141">141: </a>      }
 
148
<a name="line142">142: </a>    }
 
149
<a name="line143">143: </a>  }
 
150
 
 
151
<a name="line145">145: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localX,&amp;x);
 
152
<a name="line146">146: </a>  <font color="#B22222">/* stick values into global vector */</font>
 
153
<a name="line147">147: </a>  <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(user-&gt;da,localX,INSERT_VALUES,X);
 
154
<a name="line148">148: </a>  <font color="#4169E1">return</font> 0;
 
155
<a name="line149">149: </a>}<font color="#B22222">/* --------------------  Evaluate Function F(x) --------------------- */</font>
 
156
<a name="line152">152: </a><strong><font color="#4169E1"><a name="FormFunction1"></a>int FormFunction1(<A href="../../../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> snes,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> F,void *ptr)</font></strong>
 
157
<a name="line153">153: </a>{
 
158
<a name="line154">154: </a>  AppCtx       *user = (AppCtx*)ptr;
 
159
<a name="line155">155: </a>  int          ierr,i,j,k,loc,mx,my,mz,xs,ys,zs,xm,ym,zm,Xs,Ys,Zs,Xm,Ym,Zm;
 
160
<a name="line156">156: </a>  int          base1,base2;
 
161
<a name="line157">157: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>    two = 2.0,one = 1.0,lambda,Hx,Hy,Hz,HxHzdHy,HyHzdHx,HxHydHz;
 
162
<a name="line158">158: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  u,uxx,uyy,sc,*x,*f,uzz;
 
163
<a name="line159">159: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          localX = user-&gt;localX,localF = user-&gt;localF;
 
164
 
 
165
<a name="line161">161: </a>  mx      = user-&gt;mx; my = user-&gt;my; mz = user-&gt;mz; lambda = user-&gt;param;
 
166
<a name="line162">162: </a>  Hx      = one / (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(mx-1);
 
167
<a name="line163">163: </a>  Hy      = one / (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(my-1);
 
168
<a name="line164">164: </a>  Hz      = one / (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>)(mz-1);
 
169
<a name="line165">165: </a>  sc      = Hx*Hy*Hz*lambda; HxHzdHy  = Hx*Hz/Hy; HyHzdHx  = Hy*Hz/Hx;
 
170
<a name="line166">166: </a>  HxHydHz = Hx*Hy/Hz;
 
171
 
 
172
<a name="line168">168: </a>  <A href="../../../../docs/manualpages/DA/DAGlobalToLocalBegin.html#DAGlobalToLocalBegin">DAGlobalToLocalBegin</A>(user-&gt;da,X,INSERT_VALUES,localX);
 
173
<a name="line169">169: </a>  <A href="../../../../docs/manualpages/DA/DAGlobalToLocalEnd.html#DAGlobalToLocalEnd">DAGlobalToLocalEnd</A>(user-&gt;da,X,INSERT_VALUES,localX);
 
174
<a name="line170">170: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localX,&amp;x);
 
175
<a name="line171">171: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(localF,&amp;f);
 
176
 
 
177
<a name="line173">173: </a>  <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(user-&gt;da,&amp;xs,&amp;ys,&amp;zs,&amp;xm,&amp;ym,&amp;zm);
 
178
<a name="line174">174: </a>  <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(user-&gt;da,&amp;Xs,&amp;Ys,&amp;Zs,&amp;Xm,&amp;Ym,&amp;Zm);
 
179
 
 
180
<a name="line176">176: </a>  <font color="#4169E1">for</font> (k=zs; k&lt;zs+zm; k++) {
 
181
<a name="line177">177: </a>    base1 = (Xm*Ym)*(k-Zs);
 
182
<a name="line178">178: </a>    <font color="#4169E1">for</font> (j=ys; j&lt;ys+ym; j++) {
 
183
<a name="line179">179: </a>      base2 = base1 + (j-Ys)*Xm;
 
184
<a name="line180">180: </a>      <font color="#4169E1">for</font> (i=xs; i&lt;xs+xm; i++) {
 
185
<a name="line181">181: </a>        loc = base2 + (i-Xs);
 
186
<a name="line182">182: </a>        <font color="#4169E1">if</font> (i == 0 || j == 0 || k== 0 || i == mx-1 || j == my-1 || k == mz-1) {
 
187
<a name="line183">183: </a>          f[loc] = x[loc];
194
188
<a name="line184">184: </a>        }
195
 
<a name="line185">185: </a>      }
196
 
<a name="line186">186: </a>    }
197
 
<a name="line187">187: </a>  }
198
 
<a name="line188">188: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localX,&amp;x);
199
 
<a name="line189">189: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localF,&amp;f);
200
 
<a name="line190">190: </a>  <font color="#B22222">/* stick values into global vector */</font>
201
 
<a name="line191">191: </a>  <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(user-&gt;da,localF,INSERT_VALUES,F);
202
 
<a name="line192">192: </a>  <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(11*ym*xm*zm);
203
 
<a name="line193">193: </a>  <font color="#4169E1">return</font> 0;
204
 
<a name="line194">194: </a>}
205
 
<a name="line195">195: </a>
206
 
 
207
 
 
208
 
 
209
 
 
210
 
<a name="line200">200: </a>
 
189
<a name="line185">185: </a>        <font color="#4169E1">else</font> {
 
190
<a name="line186">186: </a>          u = x[loc];
 
191
<a name="line187">187: </a>          uxx = (two*u - x[loc-1] - x[loc+1])*HyHzdHx;
 
192
<a name="line188">188: </a>          uyy = (two*u - x[loc-Xm] - x[loc+Xm])*HxHzdHy;
 
193
<a name="line189">189: </a>          uzz = (two*u - x[loc-Xm*Ym] - x[loc+Xm*Ym])*HxHydHz;
 
194
<a name="line190">190: </a>          f[loc] = uxx + uyy + uzz - sc*PetscExpScalar(u);
 
195
<a name="line191">191: </a>        }
 
196
<a name="line192">192: </a>      }
 
197
<a name="line193">193: </a>    }
 
198
<a name="line194">194: </a>  }
 
199
<a name="line195">195: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localX,&amp;x);
 
200
<a name="line196">196: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(localF,&amp;f);
 
201
<a name="line197">197: </a>  <font color="#B22222">/* stick values into global vector */</font>
 
202
<a name="line198">198: </a>  <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(user-&gt;da,localF,INSERT_VALUES,F);
 
203
<a name="line199">199: </a>  <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(11*ym*xm*zm);
 
204
<a name="line200">200: </a>  <font color="#4169E1">return</font> 0;
 
205
<a name="line201">201: </a>}
 
206
<a name="line202">202: </a>
 
207
 
 
208
 
 
209
 
 
210
 
 
211
<a name="line207">207: </a>
211
212
 
212
213
 
213
214