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

« back to all changes in this revision

Viewing changes to src/dm/da/src/da2.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:36:45+00:00">
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T20:03:59+00:00">
8
8
</head>
9
9
 
10
10
<body bgcolor="#FFFFFF">
12
12
<a name="line2">  2: </a>
13
13
<a name="line3"> 3: </a> #include <A href="../../../../src/dm/da/daimpl.h.html">src/dm/da/daimpl.h</A>
14
14
 
15
 
<a name="line5">  5: </a><strong><font color="#4169E1"><a name="DAGetOwnershipRange"></a>int DAGetOwnershipRange(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int **lx,int **ly,int **lz)</font></strong>
16
 
<a name="line6">  6: </a>{
17
 
<a name="line9">  9: </a>  <font color="#4169E1">if</font> (lx) *lx = da-&gt;lx;
18
 
<a name="line10"> 10: </a>  <font color="#4169E1">if</font> (ly) *ly = da-&gt;ly;
19
 
<a name="line11"> 11: </a>  <font color="#4169E1">if</font> (lz) *lz = da-&gt;lz;
20
 
<a name="line12"> 12: </a>  <font color="#4169E1">return</font>(0);
21
 
<a name="line13"> 13: </a>}
22
 
 
23
 
<a name="line15"> 15: </a><strong><font color="#4169E1"><a name="DAView_2d"></a>int DAView_2d(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
24
 
<a name="line16"> 16: </a>{
25
 
<a name="line17"> 17: </a>  int        <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,ierr;
26
 
<a name="line18"> 18: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isascii,isdraw,isbinary;
27
 
 
28
 
<a name="line21"> 21: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
29
 
 
30
 
<a name="line23"> 23: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_ASCII,&amp;isascii);
31
 
<a name="line24"> 24: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_DRAW,&amp;isdraw);
32
 
<a name="line25"> 25: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_BINARY,&amp;isbinary);
33
 
<a name="line26"> 26: </a>  <font color="#4169E1">if</font> (isascii) {
34
 
<a name="line27"> 27: </a>    PetscViewerASCIISynchronizedPrintf(viewer,<font color="#666666">"Processor [%d] <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> %d N %d m %d n %d w %d s %dn"</font>,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,
35
 
<a name="line28"> 28: </a>                             da-&gt;N,da-&gt;m,da-&gt;n,da-&gt;w,da-&gt;s);
36
 
<a name="line29"> 29: </a>    PetscViewerASCIISynchronizedPrintf(viewer,<font color="#666666">"X range of indices: %d %d, Y range of indices: %d %dn"</font>,da-&gt;xs,da-&gt;xe,da-&gt;ys,da-&gt;ye);
37
 
<a name="line30"> 30: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerFlush.html#PetscViewerFlush">PetscViewerFlush</A>(viewer);
38
 
<a name="line31"> 31: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isdraw) {
39
 
<a name="line32"> 32: </a>    <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>       draw;
40
 
<a name="line33"> 33: </a>    double     ymin = -1*da-&gt;s-1,ymax = da-&gt;N+da-&gt;s;
41
 
<a name="line34"> 34: </a>    double     xmin = -1*da-&gt;s-1,xmax = da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>+da-&gt;s;
42
 
<a name="line35"> 35: </a>    double     x,y;
43
 
<a name="line36"> 36: </a>    int        base,*idx;
44
 
<a name="line37"> 37: </a>    char       node[10];
45
 
<a name="line38"> 38: </a>    <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isnull;
46
 
<a name="line39"> 39: </a>
47
 
<a name="line40"> 40: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDraw.html#PetscViewerDrawGetDraw">PetscViewerDrawGetDraw</A>(viewer,0,&amp;draw);
48
 
<a name="line41"> 41: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawIsNull.html#PetscDrawIsNull">PetscDrawIsNull</A>(draw,&amp;isnull); <font color="#4169E1">if</font> (isnull) <font color="#4169E1">return</font>(0);
49
 
<a name="line42"> 42: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSetCoordinates.html#PetscDrawSetCoordinates">PetscDrawSetCoordinates</A>(draw,xmin,ymin,xmax,ymax);
50
 
<a name="line43"> 43: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedClear.html#PetscDrawSynchronizedClear">PetscDrawSynchronizedClear</A>(draw);
51
 
 
52
 
<a name="line45"> 45: </a>    <font color="#B22222">/* first processor draw all node lines */</font>
53
 
<a name="line46"> 46: </a>    <font color="#4169E1">if</font> (!<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>) {
54
 
<a name="line47"> 47: </a>      ymin = 0.0; ymax = da-&gt;N - 1;
55
 
<a name="line48"> 48: </a>      <font color="#4169E1">for</font> (xmin=0; xmin&lt;da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>; xmin++) {
56
 
<a name="line49"> 49: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmin,ymax,PETSC_DRAW_BLACK);
57
 
<a name="line50"> 50: </a>      }
58
 
<a name="line51"> 51: </a>      xmin = 0.0; xmax = da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> - 1;
59
 
<a name="line52"> 52: </a>      <font color="#4169E1">for</font> (ymin=0; ymin&lt;da-&gt;N; ymin++) {
60
 
<a name="line53"> 53: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmax,ymin,PETSC_DRAW_BLACK);
61
 
<a name="line54"> 54: </a>      }
62
 
<a name="line55"> 55: </a>    }
63
 
<a name="line56"> 56: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
64
 
<a name="line57"> 57: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
65
 
 
66
 
<a name="line59"> 59: </a>    <font color="#B22222">/* draw my box */</font>
67
 
<a name="line60"> 60: </a>    ymin = da-&gt;ys; ymax = da-&gt;ye - 1; xmin = da-&gt;xs/da-&gt;w;
68
 
<a name="line61"> 61: </a>    xmax =(da-&gt;xe-1)/da-&gt;w;
69
 
<a name="line62"> 62: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmax,ymin,PETSC_DRAW_RED);
70
 
<a name="line63"> 63: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmin,ymax,PETSC_DRAW_RED);
71
 
<a name="line64"> 64: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymax,xmax,ymax,PETSC_DRAW_RED);
72
 
<a name="line65"> 65: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmax,ymin,xmax,ymax,PETSC_DRAW_RED);
73
 
 
74
 
<a name="line67"> 67: </a>    <font color="#B22222">/* put in numbers */</font>
75
 
<a name="line68"> 68: </a>    base = (da-&gt;base)/da-&gt;w;
76
 
<a name="line69"> 69: </a>    <font color="#4169E1">for</font> (y=ymin; y&lt;=ymax; y++) {
77
 
<a name="line70"> 70: </a>      <font color="#4169E1">for</font> (x=xmin; x&lt;=xmax; x++) {
78
 
<a name="line71"> 71: </a>        sprintf(node,<font color="#666666">"%d"</font>,base++);
79
 
<a name="line72"> 72: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawString.html#PetscDrawString">PetscDrawString</A>(draw,x,y,PETSC_DRAW_BLACK,node);
80
 
<a name="line73"> 73: </a>      }
81
 
<a name="line74"> 74: </a>    }
82
 
 
83
 
<a name="line76"> 76: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
84
 
<a name="line77"> 77: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
85
 
<a name="line78"> 78: </a>    <font color="#B22222">/* overlay ghost numbers, useful for error checking */</font>
86
 
<a name="line79"> 79: </a>    <font color="#B22222">/* put in numbers */</font>
87
 
 
88
 
<a name="line81"> 81: </a>    base = 0; idx = da-&gt;idx;
89
 
<a name="line82"> 82: </a>    ymin = da-&gt;Ys; ymax = da-&gt;Ye; xmin = da-&gt;Xs; xmax = da-&gt;Xe;
90
 
<a name="line83"> 83: </a>    <font color="#4169E1">for</font> (y=ymin; y&lt;ymax; y++) {
91
 
<a name="line84"> 84: </a>      <font color="#4169E1">for</font> (x=xmin; x&lt;xmax; x++) {
92
 
<a name="line85"> 85: </a>        <font color="#4169E1">if</font> ((base % da-&gt;w) == 0) {
93
 
<a name="line86"> 86: </a>          sprintf(node,<font color="#666666">"%d"</font>,idx[base]/da-&gt;w);
94
 
<a name="line87"> 87: </a>          <A href="../../../../docs/manualpages/Draw/PetscDrawString.html#PetscDrawString">PetscDrawString</A>(draw,x/da-&gt;w,y,PETSC_DRAW_BLUE,node);
95
 
<a name="line88"> 88: </a>        }
96
 
<a name="line89"> 89: </a>        base++;
97
 
<a name="line90"> 90: </a>      }
98
 
<a name="line91"> 91: </a>    }
99
 
<a name="line92"> 92: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
100
 
<a name="line93"> 93: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
101
 
<a name="line94"> 94: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isbinary) {
102
 
<a name="line95"> 95: </a>    DAView_Binary(da,viewer);
103
 
<a name="line96"> 96: </a>  } <font color="#4169E1">else</font> {
104
 
<a name="line97"> 97: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Viewer type %s not supported for DA2d"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer)-&gt;type_name);
105
 
<a name="line98"> 98: </a>  }
106
 
<a name="line99"> 99: </a>  <font color="#4169E1">return</font>(0);
107
 
<a name="line100">100: </a>}
108
 
 
109
 
<a name="line102">102: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
110
 
<a name="line103">103: </a><font color="#B22222">/*</font>
111
 
<a name="line104">104: </a><font color="#B22222">      This function tells the AMS the layout of the vectors, it is called</font>
112
 
<a name="line105">105: </a><font color="#B22222">   in the VecPublish_xx routines.</font>
113
 
<a name="line106">106: </a><font color="#B22222">*/</font>
114
 
<a name="line107">107: </a><strong><font color="#4169E1"><a name="AMSSetFieldBlock_DA"></a>EXTERN_C_BEGIN</font></strong>
115
 
<a name="line108">108: </a><strong><font color="#4169E1">int AMSSetFieldBlock_DA(AMS_Memory amem,char *name,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vec)</font></strong>
116
 
<a name="line109">109: </a>{
117
 
<a name="line110">110: </a>  int        ierr,dof,dim,ends[4],shift = 0,starts[] = {0,0,0,0};
118
 
<a name="line111">111: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>         da = 0;
119
 
<a name="line112">112: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isseq,ismpi;
120
 
 
121
 
<a name="line115">115: </a>  <font color="#4169E1">if</font> (((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec)-&gt;amem &lt; 0) <font color="#4169E1">return</font>(0); <font color="#B22222">/* return if not published */</font>
122
 
 
123
 
<a name="line117">117: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectQuery.html#PetscObjectQuery">PetscObjectQuery</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>,(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>*)&amp;da);
124
 
<a name="line118">118: </a>  <font color="#4169E1">if</font> (!da) <font color="#4169E1">return</font>(0);
125
 
<a name="line119">119: </a>  <A href="../../../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(da,&amp;dim,0,0,0,0,0,0,&amp;dof,0,0,0);
126
 
<a name="line120">120: </a>  <font color="#4169E1">if</font> (dof &gt; 1) {dim++; shift = 1; ends[0] = dof;}
127
 
 
128
 
<a name="line122">122: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,VECSEQ,&amp;isseq);
129
 
<a name="line123">123: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,VECMPI,&amp;ismpi);
130
 
<a name="line124">124: </a>  <font color="#4169E1">if</font> (isseq) {
131
 
<a name="line125">125: </a>    <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(da,0,0,0,ends+shift,ends+shift+1,ends+shift+2);
132
 
<a name="line126">126: </a>    ends[shift]   += starts[shift]-1;
133
 
<a name="line127">127: </a>    ends[shift+1] += starts[shift+1]-1;
134
 
<a name="line128">128: </a>    ends[shift+2] += starts[shift+2]-1;
135
 
<a name="line129">129: </a>    AMS_Memory_set_field_block(amem,name,dim,starts,ends);
136
 
<a name="line130">130: </a>    <font color="#4169E1">if</font> (ierr) {
137
 
<a name="line131">131: </a>      char *message;
138
 
<a name="line132">132: </a>      AMS_Explain_error(ierr,&amp;message);
139
 
<a name="line133">133: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(ierr,message);
140
 
<a name="line134">134: </a>    }
141
 
<a name="line135">135: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ismpi) {
142
 
<a name="line136">136: </a>    <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(da,starts+shift,starts+shift+1,starts+shift+2,
143
 
<a name="line137">137: </a>                           ends+shift,ends+shift+1,ends+shift+2);
144
 
<a name="line138">138: </a>    ends[shift]   += starts[shift]-1;
145
 
<a name="line139">139: </a>    ends[shift+1] += starts[shift+1]-1;
146
 
<a name="line140">140: </a>    ends[shift+2] += starts[shift+2]-1;
147
 
<a name="line141">141: </a>    AMS_Memory_set_field_block(amem,name,dim,starts,ends);
148
 
<a name="line142">142: </a>    <font color="#4169E1">if</font> (ierr) {
149
 
<a name="line143">143: </a>      char *message;
150
 
<a name="line144">144: </a>      AMS_Explain_error(ierr,&amp;message);
151
 
<a name="line145">145: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(ierr,message);
152
 
<a name="line146">146: </a>    }
153
 
<a name="line147">147: </a>  } <font color="#4169E1">else</font> {
154
 
<a name="line148">148: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Wrong vector type %s for this call"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec)-&gt;type_name);
155
 
<a name="line149">149: </a>  }
156
 
 
157
 
<a name="line151">151: </a>  <font color="#4169E1">return</font>(0);
158
 
<a name="line152">152: </a>}
159
 
<a name="line153">153: </a>EXTERN_C_END
160
 
<a name="line154">154: </a><font color="#A020F0">#endif</font>
161
 
 
162
 
<a name="line156">156: </a><strong><font color="#4169E1"><a name="DAPublish_Petsc"></a>int DAPublish_Petsc(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A> obj)</font></strong>
163
 
<a name="line157">157: </a>{
164
 
<a name="line158">158: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
165
 
<a name="line159">159: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>          v = (<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>) obj;
166
 
<a name="line160">160: </a>  int         ierr;
167
 
<a name="line161">161: </a><font color="#A020F0">#endif</font>
168
 
 
169
 
 
170
 
<a name="line165">165: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
171
 
<a name="line166">166: </a>  <font color="#B22222">/* if it is already published then return */</font>
172
 
<a name="line167">167: </a>  <font color="#4169E1">if</font> (v-&gt;amem &gt;=0) <font color="#4169E1">return</font>(0);
173
 
 
174
 
<a name="line169">169: </a>  PetscObjectPublishBaseBegin(obj);
175
 
<a name="line170">170: </a>  PetscObjectPublishBaseEnd(obj);
176
 
<a name="line171">171: </a><font color="#A020F0">#endif</font>
177
 
 
178
 
<a name="line173">173: </a>  <font color="#4169E1">return</font>(0);
179
 
<a name="line174">174: </a>}
180
 
 
181
 
<a name="line176">176: </a><font color="#B22222">/*</font>
182
 
<a name="line177">177: </a><font color="#B22222">   This allows the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> vectors to properly tell Matlab their dimensions</font>
183
 
<a name="line178">178: </a><font color="#B22222">*/</font>
184
 
<a name="line179">179: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB_ENGINE) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
185
 
<a name="line180">180: </a><font color="#A020F0">#include </font><font color="#666666">"engine.h"</font><font color="#A020F0">   </font><font color="#B22222">/* Matlab include file */</font><font color="#A020F0"></font>
186
 
<a name="line181">181: </a><font color="#A020F0">#include </font><font color="#666666">"mex.h"</font><font color="#A020F0">      </font><font color="#B22222">/* Matlab include file */</font><font color="#A020F0"></font>
187
 
<a name="line182">182: </a><strong><font color="#4169E1"><a name="VecMatlabEnginePut_DA2d"></a>EXTERN_C_BEGIN</font></strong>
188
 
<a name="line183">183: </a><strong><font color="#4169E1">int VecMatlabEnginePut_DA2d(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A> obj,void *engine)</font></strong>
189
 
<a name="line184">184: </a>{
190
 
<a name="line185">185: </a>  int     ierr,n,m;
191
 
<a name="line186">186: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>     vec = (<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>)obj;
192
 
<a name="line187">187: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  *array;
193
 
<a name="line188">188: </a>  mxArray *mat;
194
 
<a name="line189">189: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>      da;
195
 
 
196
 
<a name="line192">192: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectQuery.html#PetscObjectQuery">PetscObjectQuery</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>,(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>*)&amp;da);
197
 
<a name="line193">193: </a>  <font color="#4169E1">if</font> (!da) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Vector not associated with a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>);
198
 
<a name="line194">194: </a>  <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(da,0,0,0,&amp;m,&amp;n,0);
199
 
 
200
 
<a name="line196">196: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vec,&amp;array);
201
 
<a name="line197">197: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
202
 
<a name="line198">198: </a>  mat  = mxCreateDoubleMatrix(m,n,mxREAL);
203
 
<a name="line199">199: </a><font color="#A020F0">#else</font>
204
 
<a name="line200">200: </a>  mat  = mxCreateDoubleMatrix(m,n,mxCOMPLEX);
205
 
<a name="line201">201: </a><font color="#A020F0">#endif</font>
206
 
<a name="line202">202: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(mxGetPr(mat),array,n*m*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
207
 
<a name="line203">203: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectName.html#PetscObjectName">PetscObjectName</A>(obj);
208
 
<a name="line204">204: </a>  mxSetName(mat,obj-&gt;name);
209
 
<a name="line205">205: </a>  engPutArray((Engine *)engine,mat);
210
 
<a name="line206">206: </a>
211
 
<a name="line207">207: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vec,&amp;array);
212
 
<a name="line208">208: </a>  <font color="#4169E1">return</font>(0);
213
 
<a name="line209">209: </a>}
214
 
<a name="line210">210: </a>EXTERN_C_END
215
 
<a name="line211">211: </a><font color="#A020F0">#endif</font>
216
 
 
217
 
<a name="line213">213: </a><font color="#B22222">/*@C</font>
218
 
<a name="line214">214: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A> -  Creates an object that will manage the communication of  two-dimensional </font>
219
 
<a name="line215">215: </a><font color="#B22222">   regular array data that is distributed across some processors.</font>
220
 
 
221
 
<a name="line217">217: </a><font color="#B22222">   Collective on MPI_Comm</font>
222
 
 
223
 
<a name="line219">219: </a><font color="#B22222">   Input Parameters:</font>
224
 
<a name="line220">220: </a><font color="#B22222">+  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - MPI communicator</font>
225
 
<a name="line221">221: </a><font color="#B22222">.  wrap - type of periodicity should the array have. </font>
226
 
<a name="line222">222: </a><font color="#B22222">         Use one of DA_NONPERIODIC, DA_XPERIODIC, DA_YPERIODIC, or DA_XYPERIODIC.</font>
227
 
<a name="line223">223: </a><font color="#B22222">.  stencil_type - stencil type.  Use either DA_STENCIL_BOX or DA_STENCIL_STAR.</font>
228
 
<a name="line224">224: </a><font color="#B22222">.  <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,N - global dimension in each direction of the array</font>
229
 
<a name="line225">225: </a><font color="#B22222">.  m,n - corresponding number of processors in each dimension </font>
230
 
<a name="line226">226: </a><font color="#B22222">         (or PETSC_DECIDE to have calculated)</font>
231
 
<a name="line227">227: </a><font color="#B22222">.  dof - number of degrees of freedom per node</font>
232
 
<a name="line228">228: </a><font color="#B22222">.  s - stencil width</font>
233
 
<a name="line229">229: </a><font color="#B22222">-  lx, ly - arrays containing the number of nodes in each cell along</font>
234
 
<a name="line230">230: </a><font color="#B22222">           the x and y coordinates, or PETSC_NULL. If non-null, these</font>
235
 
<a name="line231">231: </a><font color="#B22222">           must be of length as m and n, and the corresponding</font>
236
 
<a name="line232">232: </a><font color="#B22222">           m and n cannot be PETSC_DECIDE. The sum of the lx[] entries</font>
237
 
<a name="line233">233: </a><font color="#B22222">           must be <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>, and the sum of the ly[] entries must be N.</font>
238
 
 
239
 
<a name="line235">235: </a><font color="#B22222">   Output Parameter:</font>
240
 
<a name="line236">236: </a><font color="#B22222">.  inra - the resulting distributed array object</font>
241
 
 
242
 
<a name="line238">238: </a><font color="#B22222">   Options Database Key:</font>
243
 
<a name="line239">239: </a><font color="#B22222">+  -da_view - Calls <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>() at the conclusion of <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>()</font>
244
 
<a name="line240">240: </a><font color="#B22222">.  -da_grid_x &lt;nx&gt; - number of grid points in x direction, if <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> &lt; 0</font>
245
 
<a name="line241">241: </a><font color="#B22222">.  -da_grid_y &lt;ny&gt; - number of grid points in y direction, if N &lt; 0</font>
246
 
<a name="line242">242: </a><font color="#B22222">.  -da_processors_x &lt;nx&gt; - number of processors in x direction</font>
247
 
<a name="line243">243: </a><font color="#B22222">-  -da_processors_y &lt;ny&gt; - number of processors in y direction</font>
248
 
 
249
 
<a name="line245">245: </a><font color="#B22222">   Level: beginner</font>
250
 
 
251
 
<a name="line247">247: </a><font color="#B22222">   Notes:</font>
252
 
<a name="line248">248: </a><font color="#B22222">   The stencil type DA_STENCIL_STAR with width 1 corresponds to the </font>
253
 
<a name="line249">249: </a><font color="#B22222">   standard 5-pt stencil, while DA_STENCIL_BOX with width 1 denotes</font>
254
 
<a name="line250">250: </a><font color="#B22222">   the standard 9-pt stencil.</font>
255
 
 
256
 
<a name="line252">252: </a><font color="#B22222">   The array data itself is NOT stored in the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, it is stored in <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> objects;</font>
257
 
<a name="line253">253: </a><font color="#B22222">   The appropriate vector objects can be obtained with calls to <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>()</font>
258
 
<a name="line254">254: </a><font color="#B22222">   and <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>() and calls to <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>() if more are needed.</font>
259
 
 
260
 
<a name="line256">256: </a><font color="#B22222">.keywords: distributed array, create, two-dimensional</font>
261
 
 
262
 
<a name="line258">258: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(), <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DAGlobalToLocalBegin.html#DAGlobalToLocalBegin">DAGlobalToLocalBegin</A>(),</font>
263
 
<a name="line259">259: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DAGlobalToLocalEnd.html#DAGlobalToLocalEnd">DAGlobalToLocalEnd</A>(), <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(), <A href="../../../../docs/manualpages/DA/DALocalToLocalBegin.html#DALocalToLocalBegin">DALocalToLocalBegin</A>(), <A href="../../../../docs/manualpages/DA/DALocalToLocalEnd.html#DALocalToLocalEnd">DALocalToLocalEnd</A>(),</font>
264
 
<a name="line260">260: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(), <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>(), <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>(), <A href="../../../../docs/manualpages/DA/DACreateNaturalVector.html#DACreateNaturalVector">DACreateNaturalVector</A>(), <A href="../../../../docs/manualpages/DA/DALoad.html#DALoad">DALoad</A>(), <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>()</font>
265
 
 
266
 
<a name="line262">262: </a><font color="#B22222">@*/</font>
267
 
<a name="line263">263: </a><strong><font color="#4169E1"><a name="DACreate2d"></a>int <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DAPeriodicType.html#DAPeriodicType">DAPeriodicType</A> wrap,<A href="../../../../docs/manualpages/DA/DAStencilType.html#DAStencilType">DAStencilType</A> stencil_type,</font></strong>
268
 
<a name="line264">264: </a><strong><font color="#4169E1">                int <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,int N,int m,int n,int dof,int s,int *lx,int *ly,<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> *inra)</font></strong>
269
 
<a name="line265">265: </a>{
270
 
<a name="line266">266: </a>  int           <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,xs,xe,ys,ye,x,y,Xs,Xe,Ys,Ye,ierr,start,end;
271
 
<a name="line267">267: </a>  int           up,down,left,i,n0,n1,n2,n3,n5,n6,n7,n8,*idx,nn;
272
 
<a name="line268">268: </a>  int           xbase,*bases,*ldims,j,x_t,y_t,s_t,base,count;
273
 
<a name="line269">269: </a>  int           s_x,s_y; <font color="#B22222">/* s proportionalized to w */</font>
274
 
<a name="line270">270: </a>  int           *flx = 0,*fly = 0;
275
 
<a name="line271">271: </a>  int           sn0 = 0,sn2 = 0,sn6 = 0,sn8 = 0,refine_x = 2, refine_y = 2,tM = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,tN = N;
276
 
<a name="line272">272: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>    flg1,flg2;
277
 
<a name="line273">273: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>            da;
278
 
<a name="line274">274: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>           local,global;
279
 
<a name="line275">275: </a>  <A href="../../../../docs/manualpages/Vec/VecScatter.html#VecScatter">VecScatter</A>    ltog,gtol;
280
 
<a name="line276">276: </a>  <A href="../../../../docs/manualpages/IS/IS.html#IS">IS</A>            to,from;
281
 
 
282
 
<a name="line280">280: </a>  *inra = 0;
283
 
<a name="line281">281: </a><font color="#A020F0">#ifndef PETSC_USE_DYNAMIC_LIBRARIES</font>
284
 
<a name="line282">282: </a>  <A href="../../../../docs/manualpages/AO/DMInitializePackage.html#DMInitializePackage">DMInitializePackage</A>(PETSC_NULL);
285
 
<a name="line283">283: </a><font color="#A020F0">#endif</font>
286
 
 
287
 
<a name="line285">285: </a>  <font color="#4169E1">if</font> (dof &lt; 1) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Must have 1 or more degrees of freedom per node: %d"</font>,dof);
288
 
<a name="line286">286: </a>  <font color="#4169E1">if</font> (s &lt; 0) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Stencil width cannot be negative: %d"</font>,s);
289
 
 
290
 
<a name="line288">288: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsBegin.html#PetscOptionsBegin">PetscOptionsBegin</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,PETSC_NULL,<font color="#666666">"2d <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> Options"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>);
291
 
<a name="line289">289: </a>    <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> &lt; 0){
292
 
<a name="line290">290: </a>      tM = -<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>;
293
 
<a name="line291">291: </a>      <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_grid_x"</font>,<font color="#666666">"Number of grid points in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,tM,&amp;tM,PETSC_NULL);
294
 
<a name="line292">292: </a>    }
295
 
<a name="line293">293: </a>    <font color="#4169E1">if</font> (N &lt; 0){
296
 
<a name="line294">294: </a>      tN = -N;
297
 
<a name="line295">295: </a>      <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_grid_y"</font>,<font color="#666666">"Number of grid points in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,tN,&amp;tN,PETSC_NULL);
298
 
<a name="line296">296: </a>    }
299
 
<a name="line297">297: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_processors_x"</font>,<font color="#666666">"Number of processors in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,m,&amp;m,PETSC_NULL);
300
 
<a name="line298">298: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_processors_y"</font>,<font color="#666666">"Number of processors in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,n,&amp;n,PETSC_NULL);
301
 
<a name="line299">299: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_refine_x"</font>,<font color="#666666">"Refinement ratio in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,refine_x,&amp;refine_x,PETSC_NULL);
302
 
<a name="line300">300: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_refine_y"</font>,<font color="#666666">"Refinement ratio in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,refine_y,&amp;refine_y,PETSC_NULL);
303
 
<a name="line301">301: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsEnd.html#PetscOptionsEnd">PetscOptionsEnd</A>();
304
 
<a name="line302">302: </a>  <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> = tM; N = tN;
305
 
 
306
 
<a name="line304">304: </a>  PetscHeaderCreate(da,_p_DA,<font color="#4169E1">struct _DAOps</font>,DA_COOKIE,0,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>,<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>);
307
 
<a name="line305">305: </a>  PetscLogObjectCreate(da);
308
 
<a name="line306">306: </a>  da-&gt;bops-&gt;publish           = DAPublish_Petsc;
309
 
<a name="line307">307: </a>  da-&gt;ops-&gt;createglobalvector = <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>;
310
 
<a name="line308">308: </a>  da-&gt;ops-&gt;getinterpolation   = <A href="../../../../docs/manualpages/DA/DAGetInterpolation.html#DAGetInterpolation">DAGetInterpolation</A>;
311
 
<a name="line309">309: </a>  da-&gt;ops-&gt;getcoloring        = <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>;
312
 
<a name="line310">310: </a>  da-&gt;ops-&gt;getmatrix          = <A href="../../../../docs/manualpages/DA/DAGetMatrix.html#DAGetMatrix">DAGetMatrix</A>;
313
 
<a name="line311">311: </a>  da-&gt;ops-&gt;refine             = <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A>;
314
 
<a name="line312">312: </a>  PetscLogObjectMemory(da,<font color="#4169E1">sizeof</font>(<font color="#4169E1">struct _p_DA</font>));
315
 
<a name="line313">313: </a>  da-&gt;dim        = 2;
316
 
<a name="line314">314: </a>  da-&gt;interptype = DA_Q1;
317
 
<a name="line315">315: </a>  da-&gt;refine_x   = refine_x;
318
 
<a name="line316">316: </a>  da-&gt;refine_y   = refine_y;
319
 
<a name="line317">317: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(dof*<font color="#4169E1">sizeof</font>(char*),&amp;da-&gt;fieldname);
320
 
<a name="line318">318: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(da-&gt;fieldname,dof*<font color="#4169E1">sizeof</font>(char*));
321
 
 
322
 
<a name="line320">320: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_size.html#MPI_Comm_size">MPI_Comm_size</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);
323
 
<a name="line321">321: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
324
 
 
325
 
<a name="line323">323: </a>  <font color="#4169E1">if</font> (m != PETSC_DECIDE) {
326
 
<a name="line324">324: </a>    <font color="#4169E1">if</font> (m &lt; 1) {<A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Non-positive number of processors in X direction: %d"</font>,m);}
327
 
<a name="line325">325: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (m &gt; <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) {<A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Too many processors in X direction: %d %d"</font>,m,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);}
328
 
<a name="line326">326: </a>  }
329
 
<a name="line327">327: </a>  <font color="#4169E1">if</font> (n != PETSC_DECIDE) {
330
 
<a name="line328">328: </a>    <font color="#4169E1">if</font> (n &lt; 1) {<A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Non-positive number of processors in Y direction: %d"</font>,n);}
331
 
<a name="line329">329: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (n &gt; <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) {<A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Too many processors in Y direction: %d %d"</font>,n,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);}
332
 
<a name="line330">330: </a>  }
333
 
 
334
 
<a name="line332">332: </a>  <font color="#4169E1">if</font> (m == PETSC_DECIDE || n == PETSC_DECIDE) {
335
 
<a name="line333">333: </a>    <font color="#B22222">/* try for squarish distribution */</font>
336
 
<a name="line334">334: </a>    <font color="#B22222">/* This should use <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Dims_create.html#MPI_Dims_create">MPI_Dims_create</A> instead */</font>
337
 
<a name="line335">335: </a>    m = (int)(0.5 + sqrt(((double)<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>)*((double)<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>)/((double)N)));
338
 
<a name="line336">336: </a>    <font color="#4169E1">if</font> (!m) m = 1;
339
 
<a name="line337">337: </a>    <font color="#4169E1">while</font> (m &gt; 0) {
340
 
<a name="line338">338: </a>      n = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>/m;
341
 
<a name="line339">339: </a>      <font color="#4169E1">if</font> (m*n == <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <font color="#4169E1">break</font>;
342
 
<a name="line340">340: </a>      m--;
343
 
<a name="line341">341: </a>    }
344
 
<a name="line342">342: </a>    <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> &gt; N &amp;&amp; m &lt; n) {int _m = m; m = n; n = _m;}
345
 
<a name="line343">343: </a>    <font color="#4169E1">if</font> (m*n != <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_PLIB,<font color="#666666">"Internally Created Bad Partition"</font>);
346
 
<a name="line344">344: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (m*n != <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Given Bad partition"</font>);
347
 
 
348
 
<a name="line346">346: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> &lt; m) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Partition in x direction is too fine! %d %d"</font>,<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,m);
349
 
<a name="line347">347: </a>  <font color="#4169E1">if</font> (N &lt; n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Partition in y direction is too fine! %d %d"</font>,N,n);
350
 
 
351
 
<a name="line349">349: </a>  <font color="#B22222">/*</font>
352
 
<a name="line350">350: </a><font color="#B22222">     We should create an MPI Cartesian topology here, with reorder</font>
353
 
<a name="line351">351: </a><font color="#B22222">     set to true.  That would create a NEW communicator that we would</font>
354
 
<a name="line352">352: </a><font color="#B22222">     need to use for operations on this distributed array </font>
355
 
<a name="line353">353: </a><font color="#B22222">  */</font>
356
 
<a name="line354">354: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(PETSC_NULL,<font color="#666666">"-da_partition_nodes_at_end"</font>,&amp;flg2);
357
 
 
358
 
<a name="line356">356: </a>  <font color="#B22222">/* </font>
359
 
<a name="line357">357: </a><font color="#B22222">     Determine locally owned region </font>
360
 
<a name="line358">358: </a><font color="#B22222">     xs is the first local node number, x is the number of local nodes </font>
361
 
<a name="line359">359: </a><font color="#B22222">  */</font>
362
 
<a name="line360">360: </a>  <font color="#4169E1">if</font> (lx) { <font color="#B22222">/* user sets distribution */</font>
363
 
<a name="line361">361: </a>    x  = lx[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m];
364
 
<a name="line362">362: </a>    xs = 0;
365
 
<a name="line363">363: </a>    <font color="#4169E1">for</font> (i=0; i&lt;(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m); i++) {
366
 
<a name="line364">364: </a>      xs += lx[i];
367
 
<a name="line365">365: </a>    }
368
 
<a name="line366">366: </a>    left = xs;
369
 
<a name="line367">367: </a>    <font color="#4169E1">for</font> (i=(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m); i&lt;m; i++) {
370
 
<a name="line368">368: </a>      left += lx[i];
371
 
<a name="line369">369: </a>    }
372
 
<a name="line370">370: </a>    <font color="#4169E1">if</font> (left != <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>) {
373
 
<a name="line371">371: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Sum of lx across processors not equal to <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>: %d %d"</font>,left,<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>);
374
 
<a name="line372">372: </a>    }
375
 
<a name="line373">373: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (flg2) {
376
 
<a name="line374">374: </a>    x = (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)/m;
377
 
<a name="line375">375: </a>    <font color="#4169E1">if</font> (x &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Column width is too thin for stencil! %d %d"</font>,x,s);
378
 
<a name="line376">376: </a>    <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>/m == x) { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*x; }
379
 
<a name="line377">377: </a>    <font color="#4169E1">else</font>          { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*(x-1) + (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>+(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m))%(x*m); }
380
 
<a name="line378">378: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_SUP,<font color="#666666">"-da_partition_nodes_at_end not supported"</font>);
381
 
<a name="line379">379: </a>  } <font color="#4169E1">else</font> { <font color="#B22222">/* Normal PETSc distribution */</font>
382
 
<a name="line380">380: </a>    x = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>/m + ((<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m));
383
 
<a name="line381">381: </a>    <font color="#4169E1">if</font> (x &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Column width is too thin for stencil! %d %d"</font>,x,s);
384
 
<a name="line382">382: </a>    <font color="#4169E1">if</font> ((<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)) { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*x; }
385
 
<a name="line383">383: </a>    <font color="#4169E1">else</font>                      { xs = (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m)*(x+1) + ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)-(<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m))*x; }
386
 
<a name="line384">384: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(m*<font color="#4169E1">sizeof</font>(int),&amp;lx);
387
 
<a name="line385">385: </a>    flx = lx;
388
 
<a name="line386">386: </a>    <font color="#4169E1">for</font> (i=0; i&lt;m; i++) {
389
 
<a name="line387">387: </a>      lx[i] = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>/m + ((<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m) &gt; i);
390
 
<a name="line388">388: </a>    }
391
 
<a name="line389">389: </a>  }
392
 
 
393
 
<a name="line391">391: </a>  <font color="#B22222">/* </font>
394
 
<a name="line392">392: </a><font color="#B22222">     Determine locally owned region </font>
395
 
<a name="line393">393: </a><font color="#B22222">     ys is the first local node number, y is the number of local nodes </font>
396
 
<a name="line394">394: </a><font color="#B22222">  */</font>
397
 
<a name="line395">395: </a>  <font color="#4169E1">if</font> (ly) { <font color="#B22222">/* user sets distribution */</font>
398
 
<a name="line396">396: </a>    y  = ly[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m];
399
 
<a name="line397">397: </a>    ys = 0;
400
 
<a name="line398">398: </a>    <font color="#4169E1">for</font> (i=0; i&lt;(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m); i++) {
401
 
<a name="line399">399: </a>      ys += ly[i];
402
 
<a name="line400">400: </a>    }
403
 
<a name="line401">401: </a>    left = ys;
404
 
<a name="line402">402: </a>    <font color="#4169E1">for</font> (i=(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m); i&lt;n; i++) {
405
 
<a name="line403">403: </a>      left += ly[i];
406
 
<a name="line404">404: </a>    }
407
 
<a name="line405">405: </a>    <font color="#4169E1">if</font> (left != N) {
408
 
<a name="line406">406: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Sum of ly across processors not equal to N: %d %d"</font>,left,N);
409
 
<a name="line407">407: </a>    }
410
 
<a name="line408">408: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (flg2) {
411
 
<a name="line409">409: </a>    y = (N + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)/n;
412
 
<a name="line410">410: </a>    <font color="#4169E1">if</font> (y &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Row width is too thin for stencil! %d %d"</font>,y,s);
413
 
<a name="line411">411: </a>    <font color="#4169E1">if</font> (N/n == y) { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*y;  }
414
 
<a name="line412">412: </a>    <font color="#4169E1">else</font>          { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*(y-1) + (N+(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m))%(y*n); }
415
 
<a name="line413">413: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_SUP,<font color="#666666">"-da_partition_nodes_at_end not supported"</font>);
416
 
<a name="line414">414: </a>  } <font color="#4169E1">else</font> { <font color="#B22222">/* Normal PETSc distribution */</font>
417
 
<a name="line415">415: </a>    y = N/n + ((N % n) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m));
418
 
<a name="line416">416: </a>    <font color="#4169E1">if</font> (y &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Row width is too thin for stencil! %d %d"</font>,y,s);
419
 
<a name="line417">417: </a>    <font color="#4169E1">if</font> ((N % n) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)) { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*y; }
420
 
<a name="line418">418: </a>    <font color="#4169E1">else</font>                    { ys = (N % n)*(y+1) + ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)-(N % n))*y; }
421
 
<a name="line419">419: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(n*<font color="#4169E1">sizeof</font>(int),&amp;ly);
422
 
<a name="line420">420: </a>    fly  = ly;
423
 
<a name="line421">421: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
424
 
<a name="line422">422: </a>      ly[i] = N/n + ((N % n) &gt; i);
425
 
<a name="line423">423: </a>    }
426
 
<a name="line424">424: </a>  }
427
 
 
428
 
<a name="line426">426: </a>  xe = xs + x;
429
 
<a name="line427">427: </a>  ye = ys + y;
430
 
 
431
 
<a name="line429">429: </a>  <font color="#B22222">/* determine ghost region */</font>
432
 
<a name="line430">430: </a>  <font color="#B22222">/* Assume No Periodicity */</font>
433
 
<a name="line431">431: </a>  <font color="#4169E1">if</font> (xs-s &gt; 0) Xs = xs - s; <font color="#4169E1">else</font> Xs = 0;
434
 
<a name="line432">432: </a>  <font color="#4169E1">if</font> (ys-s &gt; 0) Ys = ys - s; <font color="#4169E1">else</font> Ys = 0;
435
 
<a name="line433">433: </a>  <font color="#4169E1">if</font> (xe+s &lt;= <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>) Xe = xe + s; <font color="#4169E1">else</font> Xe = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>;
436
 
<a name="line434">434: </a>  <font color="#4169E1">if</font> (ye+s &lt;= N) Ye = ye + s; <font color="#4169E1">else</font> Ye = N;
437
 
 
438
 
<a name="line436">436: </a>  <font color="#B22222">/* X Periodic */</font>
439
 
<a name="line437">437: </a>  <font color="#4169E1">if</font> (DAXPeriodic(wrap)){
440
 
<a name="line438">438: </a>    Xs = xs - s;
441
 
<a name="line439">439: </a>    Xe = xe + s;
442
 
<a name="line440">440: </a>  }
443
 
 
444
 
<a name="line442">442: </a>  <font color="#B22222">/* Y Periodic */</font>
445
 
<a name="line443">443: </a>  <font color="#4169E1">if</font> (DAYPeriodic(wrap)){
446
 
<a name="line444">444: </a>    Ys = ys - s;
447
 
<a name="line445">445: </a>    Ye = ye + s;
448
 
<a name="line446">446: </a>  }
449
 
 
450
 
<a name="line448">448: </a>  <font color="#B22222">/* Resize all X parameters to reflect w */</font>
451
 
<a name="line449">449: </a>  x   *= dof;
452
 
<a name="line450">450: </a>  xs  *= dof;
453
 
<a name="line451">451: </a>  xe  *= dof;
454
 
<a name="line452">452: </a>  Xs  *= dof;
455
 
<a name="line453">453: </a>  Xe  *= dof;
456
 
<a name="line454">454: </a>  s_x = s*dof;
457
 
<a name="line455">455: </a>  s_y = s;
458
 
 
459
 
<a name="line457">457: </a>  <font color="#B22222">/* determine starting point of each processor */</font>
460
 
<a name="line458">458: </a>  nn = x*y;
461
 
<a name="line459">459: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((2*<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>+1)*<font color="#4169E1">sizeof</font>(int),&amp;bases);
462
 
<a name="line460">460: </a>  ldims = (int*)(bases+<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>+1);
463
 
<a name="line461">461: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Allgather.html#MPI_Allgather">MPI_Allgather</A>(&amp;nn,1,MPI_INT,ldims,1,MPI_INT,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
464
 
<a name="line462">462: </a>  bases[0] = 0;
465
 
<a name="line463">463: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>; i++) {
466
 
<a name="line464">464: </a>    bases[i] = ldims[i-1];
467
 
<a name="line465">465: </a>  }
468
 
<a name="line466">466: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>; i++) {
469
 
<a name="line467">467: </a>    bases[i] += bases[i-1];
470
 
<a name="line468">468: </a>  }
471
 
 
472
 
<a name="line470">470: </a>  <font color="#B22222">/* allocate the base parallel and sequential vectors */</font>
473
 
<a name="line471">471: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateMPI.html#VecCreateMPI">VecCreateMPI</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,x*y,PETSC_DECIDE,&amp;global);
474
 
<a name="line472">472: </a>  <A href="../../../../docs/manualpages/Vec/VecSetBlockSize.html#VecSetBlockSize">VecSetBlockSize</A>(global,dof);
475
 
<a name="line473">473: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>(PETSC_COMM_SELF,(Xe-Xs)*(Ye-Ys),&amp;local);
476
 
<a name="line474">474: </a>  <A href="../../../../docs/manualpages/Vec/VecSetBlockSize.html#VecSetBlockSize">VecSetBlockSize</A>(local,dof);
477
 
 
478
 
 
479
 
<a name="line477">477: </a>  <font color="#B22222">/* generate appropriate vector scatters */</font>
480
 
<a name="line478">478: </a>  <font color="#B22222">/* local to global inserts non-ghost point region into global */</font>
481
 
<a name="line479">479: </a>  <A href="../../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(global,&amp;start,&amp;end);
482
 
<a name="line480">480: </a>  <A href="../../../../docs/manualpages/IS/ISCreateStride.html#ISCreateStride">ISCreateStride</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,x*y,start,1,&amp;to);
483
 
 
484
 
<a name="line482">482: </a>  left  = xs - Xs; down  = ys - Ys; up    = down + y;
485
 
<a name="line483">483: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(x*(up - down)*<font color="#4169E1">sizeof</font>(int),&amp;idx);
486
 
<a name="line484">484: </a>  count = 0;
487
 
<a name="line485">485: </a>  <font color="#4169E1">for</font> (i=down; i&lt;up; i++) {
488
 
<a name="line486">486: </a>    <font color="#4169E1">for</font> (j=0; j&lt;x; j++) {
489
 
<a name="line487">487: </a>      idx[count++] = left + i*(Xe-Xs) + j;
490
 
<a name="line488">488: </a>    }
491
 
<a name="line489">489: </a>  }
492
 
<a name="line490">490: </a>  <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,count,idx,&amp;from);
493
 
<a name="line491">491: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(idx);
494
 
 
495
 
<a name="line493">493: </a>  <A href="../../../../docs/manualpages/Vec/VecScatterCreate.html#VecScatterCreate">VecScatterCreate</A>(local,from,global,to,&amp;ltog);
496
 
<a name="line494">494: </a>  PetscLogObjectParent(da,to);
497
 
<a name="line495">495: </a>  PetscLogObjectParent(da,from);
498
 
<a name="line496">496: </a>  PetscLogObjectParent(da,ltog);
499
 
<a name="line497">497: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(from);
500
 
<a name="line498">498: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(to);
501
 
 
502
 
<a name="line500">500: </a>  <font color="#B22222">/* global to local must include ghost points */</font>
503
 
<a name="line501">501: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_BOX) {
504
 
<a name="line502">502: </a>    <A href="../../../../docs/manualpages/IS/ISCreateStride.html#ISCreateStride">ISCreateStride</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,(Xe-Xs)*(Ye-Ys),0,1,&amp;to);
505
 
<a name="line503">503: </a>  } <font color="#4169E1">else</font> {
506
 
<a name="line504">504: </a>    <font color="#B22222">/* must drop into cross shape region */</font>
507
 
<a name="line505">505: </a>    <font color="#B22222">/*       ---------|</font>
508
 
<a name="line506">506: </a><font color="#B22222">            |  top    |</font>
509
 
<a name="line507">507: </a><font color="#B22222">         |---         ---|</font>
510
 
<a name="line508">508: </a><font color="#B22222">         |   middle      |</font>
511
 
<a name="line509">509: </a><font color="#B22222">         |               |</font>
512
 
<a name="line510">510: </a><font color="#B22222">         ----         ----</font>
513
 
<a name="line511">511: </a><font color="#B22222">            | bottom  |</font>
514
 
<a name="line512">512: </a><font color="#B22222">            -----------</font>
515
 
<a name="line513">513: </a><font color="#B22222">        Xs xs        xe  Xe */</font>
516
 
<a name="line514">514: </a>    <font color="#B22222">/* bottom */</font>
517
 
<a name="line515">515: </a>    left  = xs - Xs; down = ys - Ys; up    = down + y;
518
 
<a name="line516">516: </a>    count = down*(xe-xs) + (up-down)*(Xe-Xs) + (Ye-Ys-up)*(xe-xs);
519
 
<a name="line517">517: </a>    ierr  = <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(count*<font color="#4169E1">sizeof</font>(int),&amp;idx);
520
 
<a name="line518">518: </a>    count = 0;
521
 
<a name="line519">519: </a>    <font color="#4169E1">for</font> (i=0; i&lt;down; i++) {
522
 
<a name="line520">520: </a>      <font color="#4169E1">for</font> (j=0; j&lt;xe-xs; j++) {
523
 
<a name="line521">521: </a>        idx[count++] = left + i*(Xe-Xs) + j;
524
 
<a name="line522">522: </a>      }
525
 
<a name="line523">523: </a>    }
526
 
<a name="line524">524: </a>    <font color="#B22222">/* middle */</font>
527
 
<a name="line525">525: </a>    <font color="#4169E1">for</font> (i=down; i&lt;up; i++) {
528
 
<a name="line526">526: </a>      <font color="#4169E1">for</font> (j=0; j&lt;Xe-Xs; j++) {
529
 
<a name="line527">527: </a>        idx[count++] = i*(Xe-Xs) + j;
530
 
<a name="line528">528: </a>      }
531
 
<a name="line529">529: </a>    }
532
 
<a name="line530">530: </a>    <font color="#B22222">/* top */</font>
533
 
<a name="line531">531: </a>    <font color="#4169E1">for</font> (i=up; i&lt;Ye-Ys; i++) {
534
 
<a name="line532">532: </a>      <font color="#4169E1">for</font> (j=0; j&lt;xe-xs; j++) {
535
 
<a name="line533">533: </a>        idx[count++] = left + i*(Xe-Xs) + j;
536
 
<a name="line534">534: </a>      }
537
 
<a name="line535">535: </a>    }
538
 
<a name="line536">536: </a>    <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,count,idx,&amp;to);
539
 
<a name="line537">537: </a>    <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(idx);
540
 
<a name="line538">538: </a>  }
541
 
 
542
 
 
543
 
<a name="line541">541: </a>  <font color="#B22222">/* determine who lies on each side of us stored in    n6 n7 n8</font>
544
 
<a name="line542">542: </a><font color="#B22222">                                                        n3    n5</font>
545
 
<a name="line543">543: </a><font color="#B22222">                                                        n0 n1 n2</font>
546
 
<a name="line544">544: </a><font color="#B22222">  */</font>
547
 
 
548
 
<a name="line546">546: </a>  <font color="#B22222">/* Assume the Non-Periodic Case */</font>
549
 
<a name="line547">547: </a>  n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m;
550
 
<a name="line548">548: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m) {
551
 
<a name="line549">549: </a>    n0 = n1 - 1;
552
 
<a name="line550">550: </a>  } <font color="#4169E1">else</font> {
553
 
<a name="line551">551: </a>    n0 = -1;
554
 
<a name="line552">552: </a>  }
555
 
<a name="line553">553: </a>  <font color="#4169E1">if</font> ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1) % m) {
556
 
<a name="line554">554: </a>    n2 = n1 + 1;
557
 
<a name="line555">555: </a>    n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
558
 
<a name="line556">556: </a>    n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m + 1; <font color="#4169E1">if</font> (n8 &gt;= m*n) n8 = -1;
559
 
<a name="line557">557: </a>  } <font color="#4169E1">else</font> {
560
 
<a name="line558">558: </a>    n2 = -1; n5 = -1; n8 = -1;
561
 
<a name="line559">559: </a>  }
562
 
<a name="line560">560: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m) {
563
 
<a name="line561">561: </a>    n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
564
 
<a name="line562">562: </a>    n6 = n3 + m; <font color="#4169E1">if</font> (n6 &gt;= m*n) n6 = -1;
565
 
<a name="line563">563: </a>  } <font color="#4169E1">else</font> {
566
 
<a name="line564">564: </a>    n3 = -1; n6 = -1;
567
 
<a name="line565">565: </a>  }
568
 
<a name="line566">566: </a>  n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m; <font color="#4169E1">if</font> (n7 &gt;= m*n) n7 = -1;
569
 
 
570
 
 
571
 
<a name="line569">569: </a>  <font color="#B22222">/* Modify for Periodic Cases */</font>
572
 
<a name="line570">570: </a>  <font color="#4169E1">if</font> (wrap == DA_YPERIODIC) {  <font color="#B22222">/* Handle Top and Bottom Sides */</font>
573
 
<a name="line571">571: </a>    <font color="#4169E1">if</font> (n1 &lt; 0) n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m * (n-1);
574
 
<a name="line572">572: </a>    <font color="#4169E1">if</font> (n7 &lt; 0) n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m * (n-1);
575
 
<a name="line573">573: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
576
 
<a name="line574">574: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)-1;
577
 
<a name="line575">575: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
578
 
<a name="line576">576: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)+1;
579
 
<a name="line577">577: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (wrap == DA_XPERIODIC) { <font color="#B22222">/* Handle Left and Right Sides */</font>
580
 
<a name="line578">578: </a>    <font color="#4169E1">if</font> (n3 &lt; 0) n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + (m-1);
581
 
<a name="line579">579: </a>    <font color="#4169E1">if</font> (n5 &lt; 0) n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - (m-1);
582
 
<a name="line580">580: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-1;
583
 
<a name="line581">581: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-2*m+1;
584
 
<a name="line582">582: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+2*m-1;
585
 
<a name="line583">583: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1;
586
 
<a name="line584">584: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (wrap == DA_XYPERIODIC) {
587
 
 
588
 
<a name="line586">586: </a>    <font color="#B22222">/* Handle all four corners */</font>
589
 
<a name="line587">587: </a>    <font color="#4169E1">if</font> ((n6 &lt; 0) &amp;&amp; (n7 &lt; 0) &amp;&amp; (n3 &lt; 0)) n6 = m-1;
590
 
<a name="line588">588: </a>    <font color="#4169E1">if</font> ((n8 &lt; 0) &amp;&amp; (n7 &lt; 0) &amp;&amp; (n5 &lt; 0)) n8 = 0;
591
 
<a name="line589">589: </a>    <font color="#4169E1">if</font> ((n2 &lt; 0) &amp;&amp; (n5 &lt; 0) &amp;&amp; (n1 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>-m;
592
 
<a name="line590">590: </a>    <font color="#4169E1">if</font> ((n0 &lt; 0) &amp;&amp; (n3 &lt; 0) &amp;&amp; (n1 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>-1;
593
 
 
594
 
<a name="line592">592: </a>    <font color="#B22222">/* Handle Top and Bottom Sides */</font>
595
 
<a name="line593">593: </a>    <font color="#4169E1">if</font> (n1 &lt; 0) n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m * (n-1);
596
 
<a name="line594">594: </a>    <font color="#4169E1">if</font> (n7 &lt; 0) n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m * (n-1);
597
 
<a name="line595">595: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
598
 
<a name="line596">596: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)-1;
599
 
<a name="line597">597: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
600
 
<a name="line598">598: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)+1;
601
 
 
602
 
<a name="line600">600: </a>    <font color="#B22222">/* Handle Left and Right Sides */</font>
603
 
<a name="line601">601: </a>    <font color="#4169E1">if</font> (n3 &lt; 0) n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + (m-1);
604
 
<a name="line602">602: </a>    <font color="#4169E1">if</font> (n5 &lt; 0) n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - (m-1);
605
 
<a name="line603">603: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-1;
606
 
<a name="line604">604: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-2*m+1;
607
 
<a name="line605">605: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+2*m-1;
608
 
<a name="line606">606: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1;
609
 
<a name="line607">607: </a>  }
610
 
 
611
 
<a name="line609">609: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_STAR) {
612
 
<a name="line610">610: </a>    <font color="#B22222">/* save corner processor numbers */</font>
613
 
<a name="line611">611: </a>    sn0 = n0; sn2 = n2; sn6 = n6; sn8 = n8;
614
 
<a name="line612">612: </a>    n0 = n2 = n6 = n8 = -1;
615
 
<a name="line613">613: </a>  }
616
 
 
617
 
<a name="line615">615: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((x+2*s_x)*(y+2*s_y)*<font color="#4169E1">sizeof</font>(int),&amp;idx);
618
 
<a name="line616">616: </a>  PetscLogObjectMemory(da,(x+2*s_x)*(y+2*s_y)*<font color="#4169E1">sizeof</font>(int));
619
 
<a name="line617">617: </a>  nn = 0;
620
 
 
621
 
<a name="line619">619: </a>  xbase = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
622
 
<a name="line620">620: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
623
 
<a name="line621">621: </a>    <font color="#4169E1">if</font> (n0 &gt;= 0) { <font color="#B22222">/* left below */</font>
624
 
<a name="line622">622: </a>      x_t = lx[n0 % m]*dof;
625
 
<a name="line623">623: </a>      y_t = ly[(n0/m)];
626
 
<a name="line624">624: </a>      s_t = bases[n0] + x_t*y_t - (s_y-i)*x_t - s_x;
627
 
<a name="line625">625: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
628
 
<a name="line626">626: </a>    }
629
 
<a name="line627">627: </a>    <font color="#4169E1">if</font> (n1 &gt;= 0) { <font color="#B22222">/* directly below */</font>
630
 
<a name="line628">628: </a>      x_t = x;
631
 
<a name="line629">629: </a>      y_t = ly[(n1/m)];
632
 
<a name="line630">630: </a>      s_t = bases[n1] + x_t*y_t - (s_y+1-i)*x_t;
633
 
<a name="line631">631: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
634
 
<a name="line632">632: </a>    }
635
 
<a name="line633">633: </a>    <font color="#4169E1">if</font> (n2 &gt;= 0) { <font color="#B22222">/* right below */</font>
636
 
<a name="line634">634: </a>      x_t = lx[n2 % m]*dof;
637
 
<a name="line635">635: </a>      y_t = ly[(n2/m)];
638
 
<a name="line636">636: </a>      s_t = bases[n2] + x_t*y_t - (s_y+1-i)*x_t;
639
 
<a name="line637">637: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
640
 
<a name="line638">638: </a>    }
641
 
<a name="line639">639: </a>  }
642
 
 
643
 
<a name="line641">641: </a>  <font color="#4169E1">for</font> (i=0; i&lt;y; i++) {
644
 
<a name="line642">642: </a>    <font color="#4169E1">if</font> (n3 &gt;= 0) { <font color="#B22222">/* directly left */</font>
645
 
<a name="line643">643: </a>      x_t = lx[n3 % m]*dof;
646
 
<a name="line644">644: </a>      <font color="#B22222">/* y_t = y; */</font>
647
 
<a name="line645">645: </a>      s_t = bases[n3] + (i+1)*x_t - s_x;
648
 
<a name="line646">646: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
649
 
<a name="line647">647: </a>    }
650
 
 
651
 
<a name="line649">649: </a>    <font color="#4169E1">for</font> (j=0; j&lt;x; j++) { idx[nn++] = xbase++; } <font color="#B22222">/* interior */</font>
652
 
 
653
 
<a name="line651">651: </a>    <font color="#4169E1">if</font> (n5 &gt;= 0) { <font color="#B22222">/* directly right */</font>
654
 
<a name="line652">652: </a>      x_t = lx[n5 % m]*dof;
655
 
<a name="line653">653: </a>      <font color="#B22222">/* y_t = y; */</font>
656
 
<a name="line654">654: </a>      s_t = bases[n5] + (i)*x_t;
657
 
<a name="line655">655: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
658
 
<a name="line656">656: </a>    }
659
 
<a name="line657">657: </a>  }
660
 
 
661
 
<a name="line659">659: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
662
 
<a name="line660">660: </a>    <font color="#4169E1">if</font> (n6 &gt;= 0) { <font color="#B22222">/* left above */</font>
663
 
<a name="line661">661: </a>      x_t = lx[n6 % m]*dof;
664
 
<a name="line662">662: </a>      <font color="#B22222">/* y_t = ly[(n6/m)]; */</font>
665
 
<a name="line663">663: </a>      s_t = bases[n6] + (i)*x_t - s_x;
666
 
<a name="line664">664: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
667
 
<a name="line665">665: </a>    }
668
 
<a name="line666">666: </a>    <font color="#4169E1">if</font> (n7 &gt;= 0) { <font color="#B22222">/* directly above */</font>
669
 
<a name="line667">667: </a>      x_t = x;
670
 
<a name="line668">668: </a>      <font color="#B22222">/* y_t = ly[(n7/m)]; */</font>
671
 
<a name="line669">669: </a>      s_t = bases[n7] + (i-1)*x_t;
672
 
<a name="line670">670: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
673
 
<a name="line671">671: </a>    }
674
 
<a name="line672">672: </a>    <font color="#4169E1">if</font> (n8 &gt;= 0) { <font color="#B22222">/* right above */</font>
675
 
<a name="line673">673: </a>      x_t = lx[n8 % m]*dof;
676
 
<a name="line674">674: </a>      <font color="#B22222">/* y_t = ly[(n8/m)]; */</font>
677
 
<a name="line675">675: </a>      s_t = bases[n8] + (i-1)*x_t;
678
 
<a name="line676">676: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
679
 
<a name="line677">677: </a>    }
680
 
<a name="line678">678: </a>  }
681
 
 
682
 
<a name="line680">680: </a>  base = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
683
 
<a name="line681">681: </a>  <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,nn,idx,&amp;from);
684
 
<a name="line682">682: </a>  <A href="../../../../docs/manualpages/Vec/VecScatterCreate.html#VecScatterCreate">VecScatterCreate</A>(global,from,local,to,&amp;gtol);
685
 
<a name="line683">683: </a>  PetscLogObjectParent(da,to);
686
 
<a name="line684">684: </a>  PetscLogObjectParent(da,from);
687
 
<a name="line685">685: </a>  PetscLogObjectParent(da,gtol);
688
 
<a name="line686">686: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(to);
689
 
<a name="line687">687: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(from);
690
 
 
691
 
<a name="line689">689: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_STAR) {
692
 
<a name="line690">690: </a>    <font color="#B22222">/*</font>
693
 
<a name="line691">691: </a><font color="#B22222">        Recompute the local to global mappings, this time keeping the </font>
694
 
<a name="line692">692: </a><font color="#B22222">      information about the cross corner processor numbers.</font>
695
 
<a name="line693">693: </a><font color="#B22222">    */</font>
696
 
<a name="line694">694: </a>    n0 = sn0; n2 = sn2; n6 = sn6; n8 = sn8;
697
 
<a name="line695">695: </a>    nn = 0;
698
 
<a name="line696">696: </a>    xbase = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
699
 
<a name="line697">697: </a>    <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
700
 
<a name="line698">698: </a>      <font color="#4169E1">if</font> (n0 &gt;= 0) { <font color="#B22222">/* left below */</font>
701
 
<a name="line699">699: </a>        x_t = lx[n0 % m]*dof;
702
 
<a name="line700">700: </a>        y_t = ly[(n0/m)];
703
 
<a name="line701">701: </a>        s_t = bases[n0] + x_t*y_t - (s_y-i)*x_t - s_x;
704
 
<a name="line702">702: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
705
 
<a name="line703">703: </a>      }
706
 
<a name="line704">704: </a>      <font color="#4169E1">if</font> (n1 &gt;= 0) { <font color="#B22222">/* directly below */</font>
707
 
<a name="line705">705: </a>        x_t = x;
708
 
<a name="line706">706: </a>        y_t = ly[(n1/m)];
709
 
<a name="line707">707: </a>        s_t = bases[n1] + x_t*y_t - (s_y+1-i)*x_t;
710
 
<a name="line708">708: </a>        <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
711
 
<a name="line709">709: </a>      }
712
 
<a name="line710">710: </a>      <font color="#4169E1">if</font> (n2 &gt;= 0) { <font color="#B22222">/* right below */</font>
713
 
<a name="line711">711: </a>        x_t = lx[n2 % m]*dof;
714
 
<a name="line712">712: </a>        y_t = ly[(n2/m)];
715
 
<a name="line713">713: </a>        s_t = bases[n2] + x_t*y_t - (s_y+1-i)*x_t;
716
 
<a name="line714">714: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
717
 
<a name="line715">715: </a>      }
718
 
<a name="line716">716: </a>    }
719
 
 
720
 
<a name="line718">718: </a>    <font color="#4169E1">for</font> (i=0; i&lt;y; i++) {
721
 
<a name="line719">719: </a>      <font color="#4169E1">if</font> (n3 &gt;= 0) { <font color="#B22222">/* directly left */</font>
722
 
<a name="line720">720: </a>        x_t = lx[n3 % m]*dof;
723
 
<a name="line721">721: </a>        <font color="#B22222">/* y_t = y; */</font>
724
 
<a name="line722">722: </a>        s_t = bases[n3] + (i+1)*x_t - s_x;
725
 
<a name="line723">723: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
726
 
<a name="line724">724: </a>      }
727
 
 
728
 
<a name="line726">726: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x; j++) { idx[nn++] = xbase++; } <font color="#B22222">/* interior */</font>
729
 
 
730
 
<a name="line728">728: </a>      <font color="#4169E1">if</font> (n5 &gt;= 0) { <font color="#B22222">/* directly right */</font>
731
 
<a name="line729">729: </a>        x_t = lx[n5 % m]*dof;
732
 
<a name="line730">730: </a>        <font color="#B22222">/* y_t = y; */</font>
733
 
<a name="line731">731: </a>        s_t = bases[n5] + (i)*x_t;
734
 
<a name="line732">732: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
735
 
<a name="line733">733: </a>      }
736
 
<a name="line734">734: </a>    }
737
 
 
738
 
<a name="line736">736: </a>    <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
739
 
<a name="line737">737: </a>      <font color="#4169E1">if</font> (n6 &gt;= 0) { <font color="#B22222">/* left above */</font>
740
 
<a name="line738">738: </a>        x_t = lx[n6 % m]*dof;
741
 
<a name="line739">739: </a>        <font color="#B22222">/* y_t = ly[(n6/m)]; */</font>
742
 
<a name="line740">740: </a>        s_t = bases[n6] + (i)*x_t - s_x;
743
 
<a name="line741">741: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
744
 
<a name="line742">742: </a>      }
745
 
<a name="line743">743: </a>      <font color="#4169E1">if</font> (n7 &gt;= 0) { <font color="#B22222">/* directly above */</font>
746
 
<a name="line744">744: </a>        x_t = x;
747
 
<a name="line745">745: </a>        <font color="#B22222">/* y_t = ly[(n7/m)]; */</font>
748
 
<a name="line746">746: </a>        s_t = bases[n7] + (i-1)*x_t;
749
 
<a name="line747">747: </a>        <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
750
 
<a name="line748">748: </a>      }
751
 
<a name="line749">749: </a>      <font color="#4169E1">if</font> (n8 &gt;= 0) { <font color="#B22222">/* right above */</font>
752
 
<a name="line750">750: </a>        x_t = lx[n8 % m]*dof;
753
 
<a name="line751">751: </a>        <font color="#B22222">/* y_t = ly[(n8/m)]; */</font>
754
 
<a name="line752">752: </a>        s_t = bases[n8] + (i-1)*x_t;
755
 
<a name="line753">753: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
756
 
<a name="line754">754: </a>      }
757
 
<a name="line755">755: </a>    }
758
 
<a name="line756">756: </a>  }
759
 
<a name="line757">757: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(bases);
760
 
 
761
 
<a name="line759">759: </a>  da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>  = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>;  da-&gt;N  = N;  da-&gt;m  = m;  da-&gt;n  = n;  da-&gt;w = dof;  da-&gt;s = s;
762
 
<a name="line760">760: </a>  da-&gt;xs = xs; da-&gt;xe = xe; da-&gt;ys = ys; da-&gt;ye = ye; da-&gt;zs = 0; da-&gt;ze = 1;
763
 
<a name="line761">761: </a>  da-&gt;Xs = Xs; da-&gt;Xe = Xe; da-&gt;Ys = Ys; da-&gt;Ye = Ye; da-&gt;Zs = 0; da-&gt;Ze = 1;
764
 
<a name="line762">762: </a>  da-&gt;P  = 1;  da-&gt;p  = 1;
765
 
 
766
 
<a name="line764">764: </a>  PetscLogObjectParent(da,global);
767
 
<a name="line765">765: </a>  PetscLogObjectParent(da,local);
768
 
 
769
 
<a name="line767">767: </a>  da-&gt;global       = global;
770
 
<a name="line768">768: </a>  da-&gt;local        = local;
771
 
<a name="line769">769: </a>  da-&gt;gtol         = gtol;
772
 
<a name="line770">770: </a>  da-&gt;ltog         = ltog;
773
 
<a name="line771">771: </a>  da-&gt;idx          = idx;
774
 
<a name="line772">772: </a>  da-&gt;Nl           = nn;
775
 
<a name="line773">773: </a>  da-&gt;base         = base;
776
 
<a name="line774">774: </a>  da-&gt;wrap         = wrap;
777
 
<a name="line775">775: </a>  da-&gt;ops-&gt;view    = DAView_2d;
778
 
<a name="line776">776: </a>  da-&gt;stencil_type = stencil_type;
779
 
 
780
 
<a name="line778">778: </a>  <font color="#B22222">/* </font>
781
 
<a name="line779">779: </a><font color="#B22222">     Set the local to global ordering in the global vector, this allows use</font>
782
 
<a name="line780">780: </a><font color="#B22222">     of <A href="../../../../docs/manualpages/Vec/VecSetValuesLocal.html#VecSetValuesLocal">VecSetValuesLocal</A>().</font>
783
 
<a name="line781">781: </a><font color="#B22222">  */</font>
784
 
<a name="line782">782: </a>  <A href="../../../../docs/manualpages/IS/ISLocalToGlobalMappingCreateNC.html#ISLocalToGlobalMappingCreateNC">ISLocalToGlobalMappingCreateNC</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,nn,idx,&amp;da-&gt;ltogmap);
785
 
<a name="line783">783: </a>  <A href="../../../../docs/manualpages/Vec/VecSetLocalToGlobalMapping.html#VecSetLocalToGlobalMapping">VecSetLocalToGlobalMapping</A>(da-&gt;global,da-&gt;ltogmap);
786
 
<a name="line784">784: </a>  <A href="../../../../docs/manualpages/IS/ISLocalToGlobalMappingBlock.html#ISLocalToGlobalMappingBlock">ISLocalToGlobalMappingBlock</A>(da-&gt;ltogmap,da-&gt;w,&amp;da-&gt;ltogmapb);
787
 
<a name="line785">785: </a>  <A href="../../../../docs/manualpages/Vec/VecSetLocalToGlobalMappingBlock.html#VecSetLocalToGlobalMappingBlock">VecSetLocalToGlobalMappingBlock</A>(da-&gt;global,da-&gt;ltogmapb);
788
 
<a name="line786">786: </a>  PetscLogObjectParent(da,da-&gt;ltogmap);
789
 
 
790
 
<a name="line788">788: </a>  *inra = da;
791
 
 
792
 
<a name="line790">790: </a>  da-&gt;ltol = PETSC_NULL;
793
 
<a name="line791">791: </a>  da-&gt;ao   = PETSC_NULL;
794
 
 
795
 
 
796
 
<a name="line794">794: </a>  <font color="#4169E1">if</font> (!flx) {
797
 
<a name="line795">795: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(m*<font color="#4169E1">sizeof</font>(int),&amp;flx);
798
 
<a name="line796">796: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(flx,lx,m*<font color="#4169E1">sizeof</font>(int));
799
 
<a name="line797">797: </a>  }
800
 
<a name="line798">798: </a>  <font color="#4169E1">if</font> (!fly) {
801
 
<a name="line799">799: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(n*<font color="#4169E1">sizeof</font>(int),&amp;fly);
802
 
<a name="line800">800: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(fly,ly,n*<font color="#4169E1">sizeof</font>(int));
803
 
<a name="line801">801: </a>  }
804
 
<a name="line802">802: </a>  da-&gt;lx = flx;
805
 
<a name="line803">803: </a>  da-&gt;ly = fly;
806
 
 
807
 
<a name="line805">805: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(PETSC_NULL,<font color="#666666">"-da_view"</font>,&amp;flg1);
808
 
<a name="line806">806: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(da,<A href="../../../../docs/manualpages/Viewer/PETSC_VIEWER_STDOUT_.html#PETSC_VIEWER_STDOUT_">PETSC_VIEWER_STDOUT_</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>));}
809
 
<a name="line807">807: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(PETSC_NULL,<font color="#666666">"-da_view_draw"</font>,&amp;flg1);
810
 
<a name="line808">808: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(da,<A href="../../../../docs/manualpages/Viewer/PETSC_VIEWER_DRAW_.html#PETSC_VIEWER_DRAW_">PETSC_VIEWER_DRAW_</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>));}
811
 
<a name="line809">809: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(PETSC_NULL,<font color="#666666">"-help"</font>,&amp;flg1);
812
 
<a name="line810">810: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A>(da);}
813
 
 
814
 
<a name="line812">812: </a>  PetscPublishAll(da);
815
 
<a name="line813">813: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
816
 
<a name="line814">814: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)global,<font color="#666666">"AMSSetFieldBlock_C"</font>,
817
 
<a name="line815">815: </a>         <font color="#666666">"AMSSetFieldBlock_DA"</font>,AMSSetFieldBlock_DA);
818
 
<a name="line816">816: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)local,<font color="#666666">"AMSSetFieldBlock_C"</font>,
819
 
<a name="line817">817: </a>         <font color="#666666">"AMSSetFieldBlock_DA"</font>,AMSSetFieldBlock_DA);
820
 
<a name="line818">818: </a>  <font color="#4169E1">if</font> (((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)global)-&gt;amem &gt; -1) {
821
 
<a name="line819">819: </a>    AMSSetFieldBlock_DA(((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)global)-&gt;amem,<font color="#666666">"values"</font>,global);
822
 
<a name="line820">820: </a>  }
823
 
<a name="line821">821: </a><font color="#A020F0">#endif</font>
824
 
<a name="line822">822: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB_ENGINE) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
825
 
<a name="line823">823: </a>  <font color="#4169E1">if</font> (dof == 1) {
826
 
<a name="line824">824: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)local,<font color="#666666">"PetscMatlabEnginePut_C"</font>,<font color="#666666">"VecMatlabEnginePut_DA2d"</font>,VecMatlabEnginePut_DA2d);
827
 
<a name="line825">825: </a>  }
828
 
<a name="line826">826: </a><font color="#A020F0">#endif</font>
829
 
<a name="line827">827: </a>  VecSetOperation(global,VECOP_VIEW,(void(*)(void))VecView_MPI_DA);
830
 
<a name="line828">828: </a>  VecSetOperation(global,VECOP_LOADINTOVECTOR,(void(*)(void))VecLoadIntoVector_Binary_DA);
831
 
<a name="line829">829: </a>  <font color="#4169E1">return</font>(0);
832
 
<a name="line830">830: </a>}
833
 
 
834
 
<a name="line832">832: </a><font color="#B22222">/*@</font>
835
 
<a name="line833">833: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A> - Prints command line options for <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
836
 
 
837
 
<a name="line835">835: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
838
 
 
839
 
<a name="line837">837: </a><font color="#B22222">   Input Parameters:</font>
840
 
<a name="line838">838: </a><font color="#B22222">.  da - the distributed array</font>
841
 
 
842
 
<a name="line840">840: </a><font color="#B22222">   Level: intermediate</font>
843
 
 
844
 
<a name="line842">842: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>()</font>
845
 
 
846
 
<a name="line844">844: </a><font color="#B22222">.keywords: <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, help</font>
847
 
 
848
 
<a name="line846">846: </a><font color="#B22222">@*/</font>
849
 
<a name="line847">847: </a><strong><font color="#4169E1"><a name="DAPrintHelp"></a>int <A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da)</font></strong>
850
 
<a name="line848">848: </a>{
851
 
<a name="line849">849: </a>  static <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> called = PETSC_FALSE;
852
 
<a name="line850">850: </a>  MPI_Comm          <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
853
 
<a name="line851">851: </a>  int               ierr;
854
 
 
855
 
 
856
 
<a name="line856">856: </a>  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> = da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
857
 
<a name="line857">857: </a>  <font color="#4169E1">if</font> (!called) {
858
 
<a name="line858">858: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"General Distributed Array (<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>) options:n"</font>);
859
 
<a name="line859">859: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"  -da_view: print <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> distribution to screenn"</font>);
860
 
<a name="line860">860: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"  -da_view_draw: display <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> in windown"</font>);
861
 
<a name="line861">861: </a>    called = PETSC_TRUE;
 
15
<a name="line7">  7: </a><strong><font color="#4169E1"><a name="DAGetOwnershipRange"></a>int DAGetOwnershipRange(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int **lx,int **ly,int **lz)</font></strong>
 
16
<a name="line8">  8: </a>{
 
17
<a name="line11"> 11: </a>  <font color="#4169E1">if</font> (lx) *lx = da-&gt;lx;
 
18
<a name="line12"> 12: </a>  <font color="#4169E1">if</font> (ly) *ly = da-&gt;ly;
 
19
<a name="line13"> 13: </a>  <font color="#4169E1">if</font> (lz) *lz = da-&gt;lz;
 
20
<a name="line14"> 14: </a>  <font color="#4169E1">return</font>(0);
 
21
<a name="line15"> 15: </a>}
 
22
 
 
23
<a name="line19"> 19: </a><strong><font color="#4169E1"><a name="DAView_2d"></a>int DAView_2d(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
 
24
<a name="line20"> 20: </a>{
 
25
<a name="line21"> 21: </a>  int        <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,ierr;
 
26
<a name="line22"> 22: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isascii,isdraw;
 
27
 
 
28
<a name="line25"> 25: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
 
29
 
 
30
<a name="line27"> 27: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_ASCII,&amp;isascii);
 
31
<a name="line28"> 28: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_DRAW,&amp;isdraw);
 
32
<a name="line29"> 29: </a>  <font color="#4169E1">if</font> (isascii) {
 
33
<a name="line30"> 30: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIISynchronizedPrintf.html#PetscViewerASCIISynchronizedPrintf">PetscViewerASCIISynchronizedPrintf</A>(viewer,<font color="#666666">"Processor [%d] M %d N %d m %d n %d w %d s %d\n"</font>,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,da-&gt;M,
 
34
<a name="line31"> 31: </a>                             da-&gt;N,da-&gt;m,da-&gt;n,da-&gt;w,da-&gt;s);
 
35
<a name="line32"> 32: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIISynchronizedPrintf.html#PetscViewerASCIISynchronizedPrintf">PetscViewerASCIISynchronizedPrintf</A>(viewer,<font color="#666666">"X range of indices: %d %d, Y range of indices: %d %d\n"</font>,da-&gt;xs,da-&gt;xe,da-&gt;ys,da-&gt;ye);
 
36
<a name="line33"> 33: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerFlush.html#PetscViewerFlush">PetscViewerFlush</A>(viewer);
 
37
<a name="line34"> 34: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isdraw) {
 
38
<a name="line35"> 35: </a>    <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>       draw;
 
39
<a name="line36"> 36: </a>    double     ymin = -1*da-&gt;s-1,ymax = da-&gt;N+da-&gt;s;
 
40
<a name="line37"> 37: </a>    double     xmin = -1*da-&gt;s-1,xmax = da-&gt;M+da-&gt;s;
 
41
<a name="line38"> 38: </a>    double     x,y;
 
42
<a name="line39"> 39: </a>    int        base,*idx;
 
43
<a name="line40"> 40: </a>    char       node[10];
 
44
<a name="line41"> 41: </a>    <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isnull;
 
45
<a name="line42"> 42: </a>
 
46
<a name="line43"> 43: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDraw.html#PetscViewerDrawGetDraw">PetscViewerDrawGetDraw</A>(viewer,0,&amp;draw);
 
47
<a name="line44"> 44: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawIsNull.html#PetscDrawIsNull">PetscDrawIsNull</A>(draw,&amp;isnull); <font color="#4169E1">if</font> (isnull) <font color="#4169E1">return</font>(0);
 
48
<a name="line45"> 45: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSetCoordinates.html#PetscDrawSetCoordinates">PetscDrawSetCoordinates</A>(draw,xmin,ymin,xmax,ymax);
 
49
<a name="line46"> 46: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedClear.html#PetscDrawSynchronizedClear">PetscDrawSynchronizedClear</A>(draw);
 
50
 
 
51
<a name="line48"> 48: </a>    <font color="#B22222">/* first processor draw all node lines */</font>
 
52
<a name="line49"> 49: </a>    <font color="#4169E1">if</font> (!<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>) {
 
53
<a name="line50"> 50: </a>      ymin = 0.0; ymax = da-&gt;N - 1;
 
54
<a name="line51"> 51: </a>      <font color="#4169E1">for</font> (xmin=0; xmin&lt;da-&gt;M; xmin++) {
 
55
<a name="line52"> 52: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmin,ymax,PETSC_DRAW_BLACK);
 
56
<a name="line53"> 53: </a>      }
 
57
<a name="line54"> 54: </a>      xmin = 0.0; xmax = da-&gt;M - 1;
 
58
<a name="line55"> 55: </a>      <font color="#4169E1">for</font> (ymin=0; ymin&lt;da-&gt;N; ymin++) {
 
59
<a name="line56"> 56: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmax,ymin,PETSC_DRAW_BLACK);
 
60
<a name="line57"> 57: </a>      }
 
61
<a name="line58"> 58: </a>    }
 
62
<a name="line59"> 59: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
 
63
<a name="line60"> 60: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
 
64
 
 
65
<a name="line62"> 62: </a>    <font color="#B22222">/* draw my box */</font>
 
66
<a name="line63"> 63: </a>    ymin = da-&gt;ys; ymax = da-&gt;ye - 1; xmin = da-&gt;xs/da-&gt;w;
 
67
<a name="line64"> 64: </a>    xmax =(da-&gt;xe-1)/da-&gt;w;
 
68
<a name="line65"> 65: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmax,ymin,PETSC_DRAW_RED);
 
69
<a name="line66"> 66: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymin,xmin,ymax,PETSC_DRAW_RED);
 
70
<a name="line67"> 67: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmin,ymax,xmax,ymax,PETSC_DRAW_RED);
 
71
<a name="line68"> 68: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLine.html#PetscDrawLine">PetscDrawLine</A>(draw,xmax,ymin,xmax,ymax,PETSC_DRAW_RED);
 
72
 
 
73
<a name="line70"> 70: </a>    <font color="#B22222">/* put in numbers */</font>
 
74
<a name="line71"> 71: </a>    base = (da-&gt;base)/da-&gt;w;
 
75
<a name="line72"> 72: </a>    <font color="#4169E1">for</font> (y=ymin; y&lt;=ymax; y++) {
 
76
<a name="line73"> 73: </a>      <font color="#4169E1">for</font> (x=xmin; x&lt;=xmax; x++) {
 
77
<a name="line74"> 74: </a>        sprintf(node,<font color="#666666">"%d"</font>,base++);
 
78
<a name="line75"> 75: </a>        <A href="../../../../docs/manualpages/Draw/PetscDrawString.html#PetscDrawString">PetscDrawString</A>(draw,x,y,PETSC_DRAW_BLACK,node);
 
79
<a name="line76"> 76: </a>      }
 
80
<a name="line77"> 77: </a>    }
 
81
 
 
82
<a name="line79"> 79: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
 
83
<a name="line80"> 80: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
 
84
<a name="line81"> 81: </a>    <font color="#B22222">/* overlay ghost numbers, useful for error checking */</font>
 
85
<a name="line82"> 82: </a>    <font color="#B22222">/* put in numbers */</font>
 
86
 
 
87
<a name="line84"> 84: </a>    base = 0; idx = da-&gt;idx;
 
88
<a name="line85"> 85: </a>    ymin = da-&gt;Ys; ymax = da-&gt;Ye; xmin = da-&gt;Xs; xmax = da-&gt;Xe;
 
89
<a name="line86"> 86: </a>    <font color="#4169E1">for</font> (y=ymin; y&lt;ymax; y++) {
 
90
<a name="line87"> 87: </a>      <font color="#4169E1">for</font> (x=xmin; x&lt;xmax; x++) {
 
91
<a name="line88"> 88: </a>        <font color="#4169E1">if</font> ((base % da-&gt;w) == 0) {
 
92
<a name="line89"> 89: </a>          sprintf(node,<font color="#666666">"%d"</font>,idx[base]/da-&gt;w);
 
93
<a name="line90"> 90: </a>          <A href="../../../../docs/manualpages/Draw/PetscDrawString.html#PetscDrawString">PetscDrawString</A>(draw,x/da-&gt;w,y,PETSC_DRAW_BLUE,node);
 
94
<a name="line91"> 91: </a>        }
 
95
<a name="line92"> 92: </a>        base++;
 
96
<a name="line93"> 93: </a>      }
 
97
<a name="line94"> 94: </a>    }
 
98
<a name="line95"> 95: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(draw);
 
99
<a name="line96"> 96: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawPause.html#PetscDrawPause">PetscDrawPause</A>(draw);
 
100
<a name="line97"> 97: </a>  } <font color="#4169E1">else</font> {
 
101
<a name="line98"> 98: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Viewer type %s not supported for DA2d"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer)-&gt;type_name);
 
102
<a name="line99"> 99: </a>  }
 
103
<a name="line100">100: </a>  <font color="#4169E1">return</font>(0);
 
104
<a name="line101">101: </a>}
 
105
 
 
106
<a name="line103">103: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
107
<a name="line104">104: </a><font color="#B22222">/*</font>
 
108
<a name="line105">105: </a><font color="#B22222">      This function tells the AMS the layout of the vectors, it is called</font>
 
109
<a name="line106">106: </a><font color="#B22222">   in the VecPublish_xx routines.</font>
 
110
<a name="line107">107: </a><font color="#B22222">*/</font>
 
111
<a name="line108">108: </a>EXTERN_C_BEGIN
 
112
<a name="line111">111: </a><strong><font color="#4169E1"><a name="AMSSetFieldBlock_DA"></a>int AMSSetFieldBlock_DA(AMS_Memory amem,char *name,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vec)</font></strong>
 
113
<a name="line112">112: </a>{
 
114
<a name="line113">113: </a>  int        ierr,dof,dim,ends[4],shift = 0,starts[] = {0,0,0,0};
 
115
<a name="line114">114: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>         da = 0;
 
116
<a name="line115">115: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> isseq,ismpi;
 
117
 
 
118
<a name="line118">118: </a>  <font color="#4169E1">if</font> (((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec)-&gt;amem &lt; 0) <font color="#4169E1">return</font>(0); <font color="#B22222">/* return if not published */</font>
 
119
 
 
120
<a name="line120">120: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectQuery.html#PetscObjectQuery">PetscObjectQuery</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>,(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>*)&amp;da);
 
121
<a name="line121">121: </a>  <font color="#4169E1">if</font> (!da) <font color="#4169E1">return</font>(0);
 
122
<a name="line122">122: </a>  <A href="../../../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(da,&amp;dim,0,0,0,0,0,0,&amp;dof,0,0,0);
 
123
<a name="line123">123: </a>  <font color="#4169E1">if</font> (dof &gt; 1) {dim++; shift = 1; ends[0] = dof;}
 
124
 
 
125
<a name="line125">125: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,VECSEQ,&amp;isseq);
 
126
<a name="line126">126: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec,VECMPI,&amp;ismpi);
 
127
<a name="line127">127: </a>  <font color="#4169E1">if</font> (isseq) {
 
128
<a name="line128">128: </a>    <A href="../../../../docs/manualpages/DA/DAGetGhostCorners.html#DAGetGhostCorners">DAGetGhostCorners</A>(da,0,0,0,ends+shift,ends+shift+1,ends+shift+2);
 
129
<a name="line129">129: </a>    ends[shift]   += starts[shift]-1;
 
130
<a name="line130">130: </a>    ends[shift+1] += starts[shift+1]-1;
 
131
<a name="line131">131: </a>    ends[shift+2] += starts[shift+2]-1;
 
132
<a name="line132">132: </a>    AMS_Memory_set_field_block(amem,name,dim,starts,ends);
 
133
<a name="line133">133: </a>    <font color="#4169E1">if</font> (ierr) {
 
134
<a name="line134">134: </a>      char *message;
 
135
<a name="line135">135: </a>      AMS_Explain_error(ierr,&amp;message);
 
136
<a name="line136">136: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(ierr,message);
 
137
<a name="line137">137: </a>    }
 
138
<a name="line138">138: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ismpi) {
 
139
<a name="line139">139: </a>    <A href="../../../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(da,starts+shift,starts+shift+1,starts+shift+2,
 
140
<a name="line140">140: </a>                           ends+shift,ends+shift+1,ends+shift+2);
 
141
<a name="line141">141: </a>    ends[shift]   += starts[shift]-1;
 
142
<a name="line142">142: </a>    ends[shift+1] += starts[shift+1]-1;
 
143
<a name="line143">143: </a>    ends[shift+2] += starts[shift+2]-1;
 
144
<a name="line144">144: </a>    AMS_Memory_set_field_block(amem,name,dim,starts,ends);
 
145
<a name="line145">145: </a>    <font color="#4169E1">if</font> (ierr) {
 
146
<a name="line146">146: </a>      char *message;
 
147
<a name="line147">147: </a>      AMS_Explain_error(ierr,&amp;message);
 
148
<a name="line148">148: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(ierr,message);
 
149
<a name="line149">149: </a>    }
 
150
<a name="line150">150: </a>  } <font color="#4169E1">else</font> {
 
151
<a name="line151">151: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Wrong vector type %s for this call"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec)-&gt;type_name);
 
152
<a name="line152">152: </a>  }
 
153
 
 
154
<a name="line154">154: </a>  <font color="#4169E1">return</font>(0);
 
155
<a name="line155">155: </a>}
 
156
<a name="line156">156: </a>EXTERN_C_END
 
157
<a name="line157">157: </a><font color="#A020F0">#endif</font>
 
158
 
 
159
<a name="line161">161: </a><strong><font color="#4169E1"><a name="DAPublish_Petsc"></a>int DAPublish_Petsc(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A> obj)</font></strong>
 
160
<a name="line162">162: </a>{
 
161
<a name="line163">163: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
162
<a name="line164">164: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>          v = (<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>) obj;
 
163
<a name="line165">165: </a>  int         ierr;
 
164
<a name="line166">166: </a><font color="#A020F0">#endif</font>
 
165
 
 
166
 
 
167
<a name="line170">170: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
168
<a name="line171">171: </a>  <font color="#B22222">/* if it is already published then return */</font>
 
169
<a name="line172">172: </a>  <font color="#4169E1">if</font> (v-&gt;amem &gt;=0) <font color="#4169E1">return</font>(0);
 
170
 
 
171
<a name="line174">174: </a>  PetscObjectPublishBaseBegin(obj);
 
172
<a name="line175">175: </a>  PetscObjectPublishBaseEnd(obj);
 
173
<a name="line176">176: </a><font color="#A020F0">#endif</font>
 
174
 
 
175
<a name="line178">178: </a>  <font color="#4169E1">return</font>(0);
 
176
<a name="line179">179: </a>}
 
177
 
 
178
 
 
179
<a name="line184">184: </a><font color="#B22222">/*@C</font>
 
180
<a name="line185">185: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A> -  Creates an object that will manage the communication of  two-dimensional </font>
 
181
<a name="line186">186: </a><font color="#B22222">   regular array data that is distributed across some processors.</font>
 
182
 
 
183
<a name="line188">188: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A></font>
 
184
 
 
185
<a name="line190">190: </a><font color="#B22222">   Input Parameters:</font>
 
186
<a name="line191">191: </a><font color="#B22222">+  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - MPI communicator</font>
 
187
<a name="line192">192: </a><font color="#B22222">.  wrap - type of periodicity should the array have. </font>
 
188
<a name="line193">193: </a><font color="#B22222">         Use one of DA_NONPERIODIC, DA_XPERIODIC, DA_YPERIODIC, or DA_XYPERIODIC.</font>
 
189
<a name="line194">194: </a><font color="#B22222">.  stencil_type - stencil type.  Use either DA_STENCIL_BOX or DA_STENCIL_STAR.</font>
 
190
<a name="line195">195: </a><font color="#B22222">.  M,N - global dimension in each direction of the array (use -M and or -N to indicate that it may be set to a different value </font>
 
191
<a name="line196">196: </a><font color="#B22222">            from the command line with -da_grid_x &lt;M&gt; -da_grid_y &lt;N&gt;)</font>
 
192
<a name="line197">197: </a><font color="#B22222">.  m,n - corresponding number of processors in each dimension </font>
 
193
<a name="line198">198: </a><font color="#B22222">         (or <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A> to have calculated)</font>
 
194
<a name="line199">199: </a><font color="#B22222">.  dof - number of degrees of freedom per node</font>
 
195
<a name="line200">200: </a><font color="#B22222">.  s - stencil width</font>
 
196
<a name="line201">201: </a><font color="#B22222">-  lx, ly - arrays containing the number of nodes in each cell along</font>
 
197
<a name="line202">202: </a><font color="#B22222">           the x and y coordinates, or <A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>. If non-null, these</font>
 
198
<a name="line203">203: </a><font color="#B22222">           must be of length as m and n, and the corresponding</font>
 
199
<a name="line204">204: </a><font color="#B22222">           m and n cannot be <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>. The sum of the lx[] entries</font>
 
200
<a name="line205">205: </a><font color="#B22222">           must be M, and the sum of the ly[] entries must be N.</font>
 
201
 
 
202
<a name="line207">207: </a><font color="#B22222">   Output Parameter:</font>
 
203
<a name="line208">208: </a><font color="#B22222">.  inra - the resulting distributed array object</font>
 
204
 
 
205
<a name="line210">210: </a><font color="#B22222">   Options Database Key:</font>
 
206
<a name="line211">211: </a><font color="#B22222">+  -da_view - Calls <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>() at the conclusion of <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>()</font>
 
207
<a name="line212">212: </a><font color="#B22222">.  -da_grid_x &lt;nx&gt; - number of grid points in x direction, if M &lt; 0</font>
 
208
<a name="line213">213: </a><font color="#B22222">.  -da_grid_y &lt;ny&gt; - number of grid points in y direction, if N &lt; 0</font>
 
209
<a name="line214">214: </a><font color="#B22222">.  -da_processors_x &lt;nx&gt; - number of processors in x direction</font>
 
210
<a name="line215">215: </a><font color="#B22222">-  -da_processors_y &lt;ny&gt; - number of processors in y direction</font>
 
211
 
 
212
<a name="line217">217: </a><font color="#B22222">   Level: beginner</font>
 
213
 
 
214
<a name="line219">219: </a><font color="#B22222">   Notes:</font>
 
215
<a name="line220">220: </a><font color="#B22222">   The stencil type DA_STENCIL_STAR with width 1 corresponds to the </font>
 
216
<a name="line221">221: </a><font color="#B22222">   standard 5-pt stencil, while DA_STENCIL_BOX with width 1 denotes</font>
 
217
<a name="line222">222: </a><font color="#B22222">   the standard 9-pt stencil.</font>
 
218
 
 
219
<a name="line224">224: </a><font color="#B22222">   The array data itself is NOT stored in the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, it is stored in <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> objects;</font>
 
220
<a name="line225">225: </a><font color="#B22222">   The appropriate vector objects can be obtained with calls to <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>()</font>
 
221
<a name="line226">226: </a><font color="#B22222">   and <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>() and calls to <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>() if more are needed.</font>
 
222
 
 
223
<a name="line228">228: </a><font color="#B22222">.keywords: distributed array, create, two-dimensional</font>
 
224
 
 
225
<a name="line230">230: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(), <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DAGlobalToLocalBegin.html#DAGlobalToLocalBegin">DAGlobalToLocalBegin</A>(),</font>
 
226
<a name="line231">231: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DAGlobalToLocalEnd.html#DAGlobalToLocalEnd">DAGlobalToLocalEnd</A>(), <A href="../../../../docs/manualpages/DA/DALocalToGlobal.html#DALocalToGlobal">DALocalToGlobal</A>(), <A href="../../../../docs/manualpages/DA/DALocalToLocalBegin.html#DALocalToLocalBegin">DALocalToLocalBegin</A>(), <A href="../../../../docs/manualpages/DA/DALocalToLocalEnd.html#DALocalToLocalEnd">DALocalToLocalEnd</A>(),</font>
 
227
<a name="line232">232: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(), <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>(), <A href="../../../../docs/manualpages/DA/DACreateLocalVector.html#DACreateLocalVector">DACreateLocalVector</A>(), <A href="../../../../docs/manualpages/DA/DACreateNaturalVector.html#DACreateNaturalVector">DACreateNaturalVector</A>(), <A href="../../../../docs/manualpages/DA/DALoad.html#DALoad">DALoad</A>(), <A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>()</font>
 
228
 
 
229
<a name="line234">234: </a><font color="#B22222">@*/</font>
 
230
<a name="line235">235: </a><strong><font color="#4169E1"><a name="DACreate2d"></a>int <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DAPeriodicType.html#DAPeriodicType">DAPeriodicType</A> wrap,<A href="../../../../docs/manualpages/DA/DAStencilType.html#DAStencilType">DAStencilType</A> stencil_type,</font></strong>
 
231
<a name="line236">236: </a><strong><font color="#4169E1">                int M,int N,int m,int n,int dof,int s,int *lx,int *ly,<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> *inra)</font></strong>
 
232
<a name="line237">237: </a>{
 
233
<a name="line238">238: </a>  int           <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,xs,xe,ys,ye,x,y,Xs,Xe,Ys,Ye,ierr,start,end;
 
234
<a name="line239">239: </a>  int           up,down,left,i,n0,n1,n2,n3,n5,n6,n7,n8,*idx,nn;
 
235
<a name="line240">240: </a>  int           xbase,*bases,*ldims,j,x_t,y_t,s_t,base,count;
 
236
<a name="line241">241: </a>  int           s_x,s_y; <font color="#B22222">/* s proportionalized to w */</font>
 
237
<a name="line242">242: </a>  int           *flx = 0,*fly = 0;
 
238
<a name="line243">243: </a>  int           sn0 = 0,sn2 = 0,sn6 = 0,sn8 = 0,refine_x = 2, refine_y = 2,tM = M,tN = N;
 
239
<a name="line244">244: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>    flg1,flg2;
 
240
<a name="line245">245: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>            da;
 
241
<a name="line246">246: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>           local,global;
 
242
<a name="line247">247: </a>  <A href="../../../../docs/manualpages/Vec/VecScatter.html#VecScatter">VecScatter</A>    ltog,gtol;
 
243
<a name="line248">248: </a>  <A href="../../../../docs/manualpages/IS/IS.html#IS">IS</A>            to,from;
 
244
 
 
245
<a name="line252">252: </a>  *inra = 0;
 
246
<a name="line253">253: </a><font color="#A020F0">#ifndef PETSC_USE_DYNAMIC_LIBRARIES</font>
 
247
<a name="line254">254: </a>  <A href="../../../../docs/manualpages/AO/DMInitializePackage.html#DMInitializePackage">DMInitializePackage</A>(<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
248
<a name="line255">255: </a><font color="#A020F0">#endif</font>
 
249
 
 
250
<a name="line257">257: </a>  <font color="#4169E1">if</font> (dof &lt; 1) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Must have 1 or more degrees of freedom per node: %d"</font>,dof);
 
251
<a name="line258">258: </a>  <font color="#4169E1">if</font> (s &lt; 0) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Stencil width cannot be negative: %d"</font>,s);
 
252
 
 
253
<a name="line260">260: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsBegin.html#PetscOptionsBegin">PetscOptionsBegin</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"2d <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> Options"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>);
 
254
<a name="line261">261: </a>    <font color="#4169E1">if</font> (M &lt; 0){
 
255
<a name="line262">262: </a>      tM = -M;
 
256
<a name="line263">263: </a>      <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_grid_x"</font>,<font color="#666666">"Number of grid points in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,tM,&amp;tM,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
257
<a name="line264">264: </a>    }
 
258
<a name="line265">265: </a>    <font color="#4169E1">if</font> (N &lt; 0){
 
259
<a name="line266">266: </a>      tN = -N;
 
260
<a name="line267">267: </a>      <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_grid_y"</font>,<font color="#666666">"Number of grid points in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,tN,&amp;tN,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
261
<a name="line268">268: </a>    }
 
262
<a name="line269">269: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_processors_x"</font>,<font color="#666666">"Number of processors in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,m,&amp;m,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
263
<a name="line270">270: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_processors_y"</font>,<font color="#666666">"Number of processors in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,n,&amp;n,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
264
<a name="line271">271: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_refine_x"</font>,<font color="#666666">"Refinement ratio in x direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,refine_x,&amp;refine_x,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
265
<a name="line272">272: </a>    <A href="../../../../docs/manualpages/Sys/PetscOptionsInt.html#PetscOptionsInt">PetscOptionsInt</A>(<font color="#666666">"-da_refine_y"</font>,<font color="#666666">"Refinement ratio in y direction"</font>,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>"</font>,refine_y,&amp;refine_y,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
266
<a name="line273">273: </a>  <A href="../../../../docs/manualpages/Sys/PetscOptionsEnd.html#PetscOptionsEnd">PetscOptionsEnd</A>();
 
267
<a name="line274">274: </a>  M = tM; N = tN;
 
268
 
 
269
<a name="line276">276: </a>  PetscHeaderCreate(da,_p_DA,<font color="#4169E1">struct _DAOps</font>,DA_COOKIE,0,<font color="#666666">"<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>"</font>,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>,<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>);
 
270
<a name="line277">277: </a>  PetscLogObjectCreate(da);
 
271
<a name="line278">278: </a>  da-&gt;bops-&gt;publish           = DAPublish_Petsc;
 
272
<a name="line279">279: </a>  da-&gt;ops-&gt;createglobalvector = <A href="../../../../docs/manualpages/DA/DACreateGlobalVector.html#DACreateGlobalVector">DACreateGlobalVector</A>;
 
273
<a name="line280">280: </a>  da-&gt;ops-&gt;getinterpolation   = <A href="../../../../docs/manualpages/DA/DAGetInterpolation.html#DAGetInterpolation">DAGetInterpolation</A>;
 
274
<a name="line281">281: </a>  da-&gt;ops-&gt;getcoloring        = <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>;
 
275
<a name="line282">282: </a>  da-&gt;ops-&gt;getmatrix          = <A href="../../../../docs/manualpages/DA/DAGetMatrix.html#DAGetMatrix">DAGetMatrix</A>;
 
276
<a name="line283">283: </a>  da-&gt;ops-&gt;refine             = <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A>;
 
277
<a name="line284">284: </a>  da-&gt;ops-&gt;getinjection       = <A href="../../../../docs/manualpages/DA/DAGetInjection.html#DAGetInjection">DAGetInjection</A>;
 
278
<a name="line285">285: </a>  PetscLogObjectMemory(da,<font color="#4169E1">sizeof</font>(<font color="#4169E1">struct _p_DA</font>));
 
279
<a name="line286">286: </a>  da-&gt;dim        = 2;
 
280
<a name="line287">287: </a>  da-&gt;interptype = DA_Q1;
 
281
<a name="line288">288: </a>  da-&gt;refine_x   = refine_x;
 
282
<a name="line289">289: </a>  da-&gt;refine_y   = refine_y;
 
283
<a name="line290">290: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(dof*<font color="#4169E1">sizeof</font>(char*),&amp;da-&gt;fieldname);
 
284
<a name="line291">291: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(da-&gt;fieldname,dof*<font color="#4169E1">sizeof</font>(char*));
 
285
 
 
286
<a name="line293">293: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_size.html#MPI_Comm_size">MPI_Comm_size</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);
 
287
<a name="line294">294: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
 
288
 
 
289
<a name="line296">296: </a>  <font color="#4169E1">if</font> (m != <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>) {
 
290
<a name="line297">297: </a>    <font color="#4169E1">if</font> (m &lt; 1) {<A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Non-positive number of processors in X direction: %d"</font>,m);}
 
291
<a name="line298">298: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (m &gt; <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) {<A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Too many processors in X direction: %d %d"</font>,m,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);}
 
292
<a name="line299">299: </a>  }
 
293
<a name="line300">300: </a>  <font color="#4169E1">if</font> (n != <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>) {
 
294
<a name="line301">301: </a>    <font color="#4169E1">if</font> (n &lt; 1) {<A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Non-positive number of processors in Y direction: %d"</font>,n);}
 
295
<a name="line302">302: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (n &gt; <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) {<A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Too many processors in Y direction: %d %d"</font>,n,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);}
 
296
<a name="line303">303: </a>  }
 
297
 
 
298
<a name="line305">305: </a>  <font color="#4169E1">if</font> (m == <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A> || n == <A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>) {
 
299
<a name="line306">306: </a>    <font color="#B22222">/* try for squarish distribution */</font>
 
300
<a name="line307">307: </a>    <font color="#B22222">/* This should use <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Dims_create.html#MPI_Dims_create">MPI_Dims_create</A> instead */</font>
 
301
<a name="line308">308: </a>    m = (int)(0.5 + sqrt(((double)M)*((double)<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>)/((double)N)));
 
302
<a name="line309">309: </a>    <font color="#4169E1">if</font> (!m) m = 1;
 
303
<a name="line310">310: </a>    <font color="#4169E1">while</font> (m &gt; 0) {
 
304
<a name="line311">311: </a>      n = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>/m;
 
305
<a name="line312">312: </a>      <font color="#4169E1">if</font> (m*n == <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <font color="#4169E1">break</font>;
 
306
<a name="line313">313: </a>      m--;
 
307
<a name="line314">314: </a>    }
 
308
<a name="line315">315: </a>    <font color="#4169E1">if</font> (M &gt; N &amp;&amp; m &lt; n) {int _m = m; m = n; n = _m;}
 
309
<a name="line316">316: </a>    <font color="#4169E1">if</font> (m*n != <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_PLIB,<font color="#666666">"Internally Created Bad Partition"</font>);
 
310
<a name="line317">317: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (m*n != <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Given Bad partition"</font>);
 
311
 
 
312
<a name="line319">319: </a>  <font color="#4169E1">if</font> (M &lt; m) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Partition in x direction is too fine! %d %d"</font>,M,m);
 
313
<a name="line320">320: </a>  <font color="#4169E1">if</font> (N &lt; n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Partition in y direction is too fine! %d %d"</font>,N,n);
 
314
 
 
315
<a name="line322">322: </a>  <font color="#B22222">/*</font>
 
316
<a name="line323">323: </a><font color="#B22222">     We should create an MPI Cartesian topology here, with reorder</font>
 
317
<a name="line324">324: </a><font color="#B22222">     set to true.  That would create a NEW communicator that we would</font>
 
318
<a name="line325">325: </a><font color="#B22222">     need to use for operations on this distributed array </font>
 
319
<a name="line326">326: </a><font color="#B22222">  */</font>
 
320
<a name="line327">327: </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">"-da_partition_nodes_at_end"</font>,&amp;flg2);
 
321
 
 
322
<a name="line329">329: </a>  <font color="#B22222">/* </font>
 
323
<a name="line330">330: </a><font color="#B22222">     Determine locally owned region </font>
 
324
<a name="line331">331: </a><font color="#B22222">     xs is the first local node number, x is the number of local nodes </font>
 
325
<a name="line332">332: </a><font color="#B22222">  */</font>
 
326
<a name="line333">333: </a>  <font color="#4169E1">if</font> (lx) { <font color="#B22222">/* user sets distribution */</font>
 
327
<a name="line334">334: </a>    x  = lx[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m];
 
328
<a name="line335">335: </a>    xs = 0;
 
329
<a name="line336">336: </a>    <font color="#4169E1">for</font> (i=0; i&lt;(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m); i++) {
 
330
<a name="line337">337: </a>      xs += lx[i];
 
331
<a name="line338">338: </a>    }
 
332
<a name="line339">339: </a>    left = xs;
 
333
<a name="line340">340: </a>    <font color="#4169E1">for</font> (i=(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m); i&lt;m; i++) {
 
334
<a name="line341">341: </a>      left += lx[i];
 
335
<a name="line342">342: </a>    }
 
336
<a name="line343">343: </a>    <font color="#4169E1">if</font> (left != M) {
 
337
<a name="line344">344: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Sum of lx across processors not equal to M: %d %d"</font>,left,M);
 
338
<a name="line345">345: </a>    }
 
339
<a name="line346">346: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (flg2) {
 
340
<a name="line347">347: </a>    x = (M + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)/m;
 
341
<a name="line348">348: </a>    <font color="#4169E1">if</font> (m &gt; 1 &amp;&amp; x &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Column width is too thin for stencil! %d %d"</font>,x,s);
 
342
<a name="line349">349: </a>    <font color="#4169E1">if</font> (M/m == x) { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*x; }
 
343
<a name="line350">350: </a>    <font color="#4169E1">else</font>          { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*(x-1) + (M+(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m))%(x*m); }
 
344
<a name="line351">351: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_SUP,<font color="#666666">"-da_partition_nodes_at_end not supported"</font>);
 
345
<a name="line352">352: </a>  } <font color="#4169E1">else</font> { <font color="#B22222">/* Normal PETSc distribution */</font>
 
346
<a name="line353">353: </a>    x = M/m + ((M % m) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m));
 
347
<a name="line354">354: </a>    <font color="#4169E1">if</font> (m &gt; 1 &amp;&amp; x &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Column width is too thin for stencil! %d %d"</font>,x,s);
 
348
<a name="line355">355: </a>    <font color="#4169E1">if</font> ((M % m) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)) { xs = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)*x; }
 
349
<a name="line356">356: </a>    <font color="#4169E1">else</font>                      { xs = (M % m)*(x+1) + ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m)-(M % m))*x; }
 
350
<a name="line357">357: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(m*<font color="#4169E1">sizeof</font>(int),&amp;lx);
 
351
<a name="line358">358: </a>    flx = lx;
 
352
<a name="line359">359: </a>    <font color="#4169E1">for</font> (i=0; i&lt;m; i++) {
 
353
<a name="line360">360: </a>      lx[i] = M/m + ((M % m) &gt; i);
 
354
<a name="line361">361: </a>    }
 
355
<a name="line362">362: </a>  }
 
356
 
 
357
<a name="line364">364: </a>  <font color="#B22222">/* </font>
 
358
<a name="line365">365: </a><font color="#B22222">     Determine locally owned region </font>
 
359
<a name="line366">366: </a><font color="#B22222">     ys is the first local node number, y is the number of local nodes </font>
 
360
<a name="line367">367: </a><font color="#B22222">  */</font>
 
361
<a name="line368">368: </a>  <font color="#4169E1">if</font> (ly) { <font color="#B22222">/* user sets distribution */</font>
 
362
<a name="line369">369: </a>    y  = ly[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m];
 
363
<a name="line370">370: </a>    ys = 0;
 
364
<a name="line371">371: </a>    <font color="#4169E1">for</font> (i=0; i&lt;(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m); i++) {
 
365
<a name="line372">372: </a>      ys += ly[i];
 
366
<a name="line373">373: </a>    }
 
367
<a name="line374">374: </a>    left = ys;
 
368
<a name="line375">375: </a>    <font color="#4169E1">for</font> (i=(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m); i&lt;n; i++) {
 
369
<a name="line376">376: </a>      left += ly[i];
 
370
<a name="line377">377: </a>    }
 
371
<a name="line378">378: </a>    <font color="#4169E1">if</font> (left != N) {
 
372
<a name="line379">379: </a>      <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Sum of ly across processors not equal to N: %d %d"</font>,left,N);
 
373
<a name="line380">380: </a>    }
 
374
<a name="line381">381: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (flg2) {
 
375
<a name="line382">382: </a>    y = (N + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)/n;
 
376
<a name="line383">383: </a>    <font color="#4169E1">if</font> (n &gt; 1 &amp;&amp; y &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Row width is too thin for stencil! %d %d"</font>,y,s);
 
377
<a name="line384">384: </a>    <font color="#4169E1">if</font> (N/n == y) { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*y;  }
 
378
<a name="line385">385: </a>    <font color="#4169E1">else</font>          { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*(y-1) + (N+(<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m))%(y*n); }
 
379
<a name="line386">386: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(PETSC_ERR_SUP,<font color="#666666">"-da_partition_nodes_at_end not supported"</font>);
 
380
<a name="line387">387: </a>  } <font color="#4169E1">else</font> { <font color="#B22222">/* Normal PETSc distribution */</font>
 
381
<a name="line388">388: </a>    y = N/n + ((N % n) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m));
 
382
<a name="line389">389: </a>    <font color="#4169E1">if</font> (n &gt; 1 &amp;&amp; y &lt; s) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Row width is too thin for stencil! %d %d"</font>,y,s);
 
383
<a name="line390">390: </a>    <font color="#4169E1">if</font> ((N % n) &gt; (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)) { ys = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)*y; }
 
384
<a name="line391">391: </a>    <font color="#4169E1">else</font>                    { ys = (N % n)*(y+1) + ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/m)-(N % n))*y; }
 
385
<a name="line392">392: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(n*<font color="#4169E1">sizeof</font>(int),&amp;ly);
 
386
<a name="line393">393: </a>    fly  = ly;
 
387
<a name="line394">394: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
388
<a name="line395">395: </a>      ly[i] = N/n + ((N % n) &gt; i);
 
389
<a name="line396">396: </a>    }
 
390
<a name="line397">397: </a>  }
 
391
 
 
392
<a name="line399">399: </a>  xe = xs + x;
 
393
<a name="line400">400: </a>  ye = ys + y;
 
394
 
 
395
<a name="line402">402: </a>  <font color="#B22222">/* determine ghost region */</font>
 
396
<a name="line403">403: </a>  <font color="#B22222">/* Assume No Periodicity */</font>
 
397
<a name="line404">404: </a>  <font color="#4169E1">if</font> (xs-s &gt; 0) Xs = xs - s; <font color="#4169E1">else</font> Xs = 0;
 
398
<a name="line405">405: </a>  <font color="#4169E1">if</font> (ys-s &gt; 0) Ys = ys - s; <font color="#4169E1">else</font> Ys = 0;
 
399
<a name="line406">406: </a>  <font color="#4169E1">if</font> (xe+s &lt;= M) Xe = xe + s; <font color="#4169E1">else</font> Xe = M;
 
400
<a name="line407">407: </a>  <font color="#4169E1">if</font> (ye+s &lt;= N) Ye = ye + s; <font color="#4169E1">else</font> Ye = N;
 
401
 
 
402
<a name="line409">409: </a>  <font color="#B22222">/* X Periodic */</font>
 
403
<a name="line410">410: </a>  <font color="#4169E1">if</font> (DAXPeriodic(wrap)){
 
404
<a name="line411">411: </a>    Xs = xs - s;
 
405
<a name="line412">412: </a>    Xe = xe + s;
 
406
<a name="line413">413: </a>  }
 
407
 
 
408
<a name="line415">415: </a>  <font color="#B22222">/* Y Periodic */</font>
 
409
<a name="line416">416: </a>  <font color="#4169E1">if</font> (DAYPeriodic(wrap)){
 
410
<a name="line417">417: </a>    Ys = ys - s;
 
411
<a name="line418">418: </a>    Ye = ye + s;
 
412
<a name="line419">419: </a>  }
 
413
 
 
414
<a name="line421">421: </a>  <font color="#B22222">/* Resize all X parameters to reflect w */</font>
 
415
<a name="line422">422: </a>  x   *= dof;
 
416
<a name="line423">423: </a>  xs  *= dof;
 
417
<a name="line424">424: </a>  xe  *= dof;
 
418
<a name="line425">425: </a>  Xs  *= dof;
 
419
<a name="line426">426: </a>  Xe  *= dof;
 
420
<a name="line427">427: </a>  s_x = s*dof;
 
421
<a name="line428">428: </a>  s_y = s;
 
422
 
 
423
<a name="line430">430: </a>  <font color="#B22222">/* determine starting point of each processor */</font>
 
424
<a name="line431">431: </a>  nn = x*y;
 
425
<a name="line432">432: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((2*<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>+1)*<font color="#4169E1">sizeof</font>(int),&amp;bases);
 
426
<a name="line433">433: </a>  ldims = (int*)(bases+<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>+1);
 
427
<a name="line434">434: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Allgather.html#MPI_Allgather">MPI_Allgather</A>(&amp;nn,1,MPI_INT,ldims,1,MPI_INT,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
 
428
<a name="line435">435: </a>  bases[0] = 0;
 
429
<a name="line436">436: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>; i++) {
 
430
<a name="line437">437: </a>    bases[i] = ldims[i-1];
 
431
<a name="line438">438: </a>  }
 
432
<a name="line439">439: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>; i++) {
 
433
<a name="line440">440: </a>    bases[i] += bases[i-1];
 
434
<a name="line441">441: </a>  }
 
435
 
 
436
<a name="line443">443: </a>  <font color="#B22222">/* allocate the base parallel and sequential vectors */</font>
 
437
<a name="line444">444: </a>  da-&gt;Nlocal = x*y;
 
438
<a name="line445">445: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateMPIWithArray.html#VecCreateMPIWithArray">VecCreateMPIWithArray</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;Nlocal,<A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,0,&amp;global);
 
439
<a name="line446">446: </a>  <A href="../../../../docs/manualpages/Vec/VecSetBlockSize.html#VecSetBlockSize">VecSetBlockSize</A>(global,dof);
 
440
<a name="line447">447: </a>  da-&gt;nlocal = (Xe-Xs)*(Ye-Ys) ;
 
441
<a name="line448">448: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A>,da-&gt;nlocal,0,&amp;local);
 
442
<a name="line449">449: </a>  <A href="../../../../docs/manualpages/Vec/VecSetBlockSize.html#VecSetBlockSize">VecSetBlockSize</A>(local,dof);
 
443
 
 
444
 
 
445
<a name="line452">452: </a>  <font color="#B22222">/* generate appropriate vector scatters */</font>
 
446
<a name="line453">453: </a>  <font color="#B22222">/* local to global inserts non-ghost point region into global */</font>
 
447
<a name="line454">454: </a>  <A href="../../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(global,&amp;start,&amp;end);
 
448
<a name="line455">455: </a>  <A href="../../../../docs/manualpages/IS/ISCreateStride.html#ISCreateStride">ISCreateStride</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,x*y,start,1,&amp;to);
 
449
 
 
450
<a name="line457">457: </a>  left  = xs - Xs; down  = ys - Ys; up    = down + y;
 
451
<a name="line458">458: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(x*(up - down)*<font color="#4169E1">sizeof</font>(int),&amp;idx);
 
452
<a name="line459">459: </a>  count = 0;
 
453
<a name="line460">460: </a>  <font color="#4169E1">for</font> (i=down; i&lt;up; i++) {
 
454
<a name="line461">461: </a>    <font color="#4169E1">for</font> (j=0; j&lt;x; j++) {
 
455
<a name="line462">462: </a>      idx[count++] = left + i*(Xe-Xs) + j;
 
456
<a name="line463">463: </a>    }
 
457
<a name="line464">464: </a>  }
 
458
<a name="line465">465: </a>  <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,count,idx,&amp;from);
 
459
<a name="line466">466: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(idx);
 
460
 
 
461
<a name="line468">468: </a>  <A href="../../../../docs/manualpages/Vec/VecScatterCreate.html#VecScatterCreate">VecScatterCreate</A>(local,from,global,to,&amp;ltog);
 
462
<a name="line469">469: </a>  PetscLogObjectParent(da,to);
 
463
<a name="line470">470: </a>  PetscLogObjectParent(da,from);
 
464
<a name="line471">471: </a>  PetscLogObjectParent(da,ltog);
 
465
<a name="line472">472: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(from);
 
466
<a name="line473">473: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(to);
 
467
 
 
468
<a name="line475">475: </a>  <font color="#B22222">/* global to local must include ghost points */</font>
 
469
<a name="line476">476: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_BOX) {
 
470
<a name="line477">477: </a>    <A href="../../../../docs/manualpages/IS/ISCreateStride.html#ISCreateStride">ISCreateStride</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,(Xe-Xs)*(Ye-Ys),0,1,&amp;to);
 
471
<a name="line478">478: </a>  } <font color="#4169E1">else</font> {
 
472
<a name="line479">479: </a>    <font color="#B22222">/* must drop into cross shape region */</font>
 
473
<a name="line480">480: </a>    <font color="#B22222">/*       ---------|</font>
 
474
<a name="line481">481: </a><font color="#B22222">            |  top    |</font>
 
475
<a name="line482">482: </a><font color="#B22222">         |---         ---|</font>
 
476
<a name="line483">483: </a><font color="#B22222">         |   middle      |</font>
 
477
<a name="line484">484: </a><font color="#B22222">         |               |</font>
 
478
<a name="line485">485: </a><font color="#B22222">         ----         ----</font>
 
479
<a name="line486">486: </a><font color="#B22222">            | bottom  |</font>
 
480
<a name="line487">487: </a><font color="#B22222">            -----------</font>
 
481
<a name="line488">488: </a><font color="#B22222">        Xs xs        xe  Xe */</font>
 
482
<a name="line489">489: </a>    <font color="#B22222">/* bottom */</font>
 
483
<a name="line490">490: </a>    left  = xs - Xs; down = ys - Ys; up    = down + y;
 
484
<a name="line491">491: </a>    count = down*(xe-xs) + (up-down)*(Xe-Xs) + (Ye-Ys-up)*(xe-xs);
 
485
<a name="line492">492: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(count*<font color="#4169E1">sizeof</font>(int),&amp;idx);
 
486
<a name="line493">493: </a>    count = 0;
 
487
<a name="line494">494: </a>    <font color="#4169E1">for</font> (i=0; i&lt;down; i++) {
 
488
<a name="line495">495: </a>      <font color="#4169E1">for</font> (j=0; j&lt;xe-xs; j++) {
 
489
<a name="line496">496: </a>        idx[count++] = left + i*(Xe-Xs) + j;
 
490
<a name="line497">497: </a>      }
 
491
<a name="line498">498: </a>    }
 
492
<a name="line499">499: </a>    <font color="#B22222">/* middle */</font>
 
493
<a name="line500">500: </a>    <font color="#4169E1">for</font> (i=down; i&lt;up; i++) {
 
494
<a name="line501">501: </a>      <font color="#4169E1">for</font> (j=0; j&lt;Xe-Xs; j++) {
 
495
<a name="line502">502: </a>        idx[count++] = i*(Xe-Xs) + j;
 
496
<a name="line503">503: </a>      }
 
497
<a name="line504">504: </a>    }
 
498
<a name="line505">505: </a>    <font color="#B22222">/* top */</font>
 
499
<a name="line506">506: </a>    <font color="#4169E1">for</font> (i=up; i&lt;Ye-Ys; i++) {
 
500
<a name="line507">507: </a>      <font color="#4169E1">for</font> (j=0; j&lt;xe-xs; j++) {
 
501
<a name="line508">508: </a>        idx[count++] = left + i*(Xe-Xs) + j;
 
502
<a name="line509">509: </a>      }
 
503
<a name="line510">510: </a>    }
 
504
<a name="line511">511: </a>    <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,count,idx,&amp;to);
 
505
<a name="line512">512: </a>    <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(idx);
 
506
<a name="line513">513: </a>  }
 
507
 
 
508
 
 
509
<a name="line516">516: </a>  <font color="#B22222">/* determine who lies on each side of us stored in    n6 n7 n8</font>
 
510
<a name="line517">517: </a><font color="#B22222">                                                        n3    n5</font>
 
511
<a name="line518">518: </a><font color="#B22222">                                                        n0 n1 n2</font>
 
512
<a name="line519">519: </a><font color="#B22222">  */</font>
 
513
 
 
514
<a name="line521">521: </a>  <font color="#B22222">/* Assume the Non-Periodic Case */</font>
 
515
<a name="line522">522: </a>  n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m;
 
516
<a name="line523">523: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m) {
 
517
<a name="line524">524: </a>    n0 = n1 - 1;
 
518
<a name="line525">525: </a>  } <font color="#4169E1">else</font> {
 
519
<a name="line526">526: </a>    n0 = -1;
 
520
<a name="line527">527: </a>  }
 
521
<a name="line528">528: </a>  <font color="#4169E1">if</font> ((<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1) % m) {
 
522
<a name="line529">529: </a>    n2 = n1 + 1;
 
523
<a name="line530">530: </a>    n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
 
524
<a name="line531">531: </a>    n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m + 1; <font color="#4169E1">if</font> (n8 &gt;= m*n) n8 = -1;
 
525
<a name="line532">532: </a>  } <font color="#4169E1">else</font> {
 
526
<a name="line533">533: </a>    n2 = -1; n5 = -1; n8 = -1;
 
527
<a name="line534">534: </a>  }
 
528
<a name="line535">535: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> % m) {
 
529
<a name="line536">536: </a>    n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
 
530
<a name="line537">537: </a>    n6 = n3 + m; <font color="#4169E1">if</font> (n6 &gt;= m*n) n6 = -1;
 
531
<a name="line538">538: </a>  } <font color="#4169E1">else</font> {
 
532
<a name="line539">539: </a>    n3 = -1; n6 = -1;
 
533
<a name="line540">540: </a>  }
 
534
<a name="line541">541: </a>  n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m; <font color="#4169E1">if</font> (n7 &gt;= m*n) n7 = -1;
 
535
 
 
536
 
 
537
<a name="line544">544: </a>  <font color="#B22222">/* Modify for Periodic Cases */</font>
 
538
<a name="line545">545: </a>  <font color="#4169E1">if</font> (wrap == DA_YPERIODIC) {  <font color="#B22222">/* Handle Top and Bottom Sides */</font>
 
539
<a name="line546">546: </a>    <font color="#4169E1">if</font> (n1 &lt; 0) n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m * (n-1);
 
540
<a name="line547">547: </a>    <font color="#4169E1">if</font> (n7 &lt; 0) n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m * (n-1);
 
541
<a name="line548">548: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
 
542
<a name="line549">549: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)-1;
 
543
<a name="line550">550: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
 
544
<a name="line551">551: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)+1;
 
545
<a name="line552">552: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (wrap == DA_XPERIODIC) { <font color="#B22222">/* Handle Left and Right Sides */</font>
 
546
<a name="line553">553: </a>    <font color="#4169E1">if</font> (n3 &lt; 0) n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + (m-1);
 
547
<a name="line554">554: </a>    <font color="#4169E1">if</font> (n5 &lt; 0) n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - (m-1);
 
548
<a name="line555">555: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-1;
 
549
<a name="line556">556: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-2*m+1;
 
550
<a name="line557">557: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+2*m-1;
 
551
<a name="line558">558: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1;
 
552
<a name="line559">559: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (wrap == DA_XYPERIODIC) {
 
553
 
 
554
<a name="line561">561: </a>    <font color="#B22222">/* Handle all four corners */</font>
 
555
<a name="line562">562: </a>    <font color="#4169E1">if</font> ((n6 &lt; 0) &amp;&amp; (n7 &lt; 0) &amp;&amp; (n3 &lt; 0)) n6 = m-1;
 
556
<a name="line563">563: </a>    <font color="#4169E1">if</font> ((n8 &lt; 0) &amp;&amp; (n7 &lt; 0) &amp;&amp; (n5 &lt; 0)) n8 = 0;
 
557
<a name="line564">564: </a>    <font color="#4169E1">if</font> ((n2 &lt; 0) &amp;&amp; (n5 &lt; 0) &amp;&amp; (n1 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>-m;
 
558
<a name="line565">565: </a>    <font color="#4169E1">if</font> ((n0 &lt; 0) &amp;&amp; (n3 &lt; 0) &amp;&amp; (n1 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A>-1;
 
559
 
 
560
<a name="line567">567: </a>    <font color="#B22222">/* Handle Top and Bottom Sides */</font>
 
561
<a name="line568">568: </a>    <font color="#4169E1">if</font> (n1 &lt; 0) n1 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + m * (n-1);
 
562
<a name="line569">569: </a>    <font color="#4169E1">if</font> (n7 &lt; 0) n7 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - m * (n-1);
 
563
<a name="line570">570: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - 1;
 
564
<a name="line571">571: </a>    <font color="#4169E1">if</font> ((n3 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)-1;
 
565
<a name="line572">572: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> - m + <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + 1;
 
566
<a name="line573">573: </a>    <font color="#4169E1">if</font> ((n5 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>%m)+1;
 
567
 
 
568
<a name="line575">575: </a>    <font color="#B22222">/* Handle Left and Right Sides */</font>
 
569
<a name="line576">576: </a>    <font color="#4169E1">if</font> (n3 &lt; 0) n3 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> + (m-1);
 
570
<a name="line577">577: </a>    <font color="#4169E1">if</font> (n5 &lt; 0) n5 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A> - (m-1);
 
571
<a name="line578">578: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n0 &lt; 0)) n0 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-1;
 
572
<a name="line579">579: </a>    <font color="#4169E1">if</font> ((n1 &gt;= 0) &amp;&amp; (n2 &lt; 0)) n2 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>-2*m+1;
 
573
<a name="line580">580: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n6 &lt; 0)) n6 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+2*m-1;
 
574
<a name="line581">581: </a>    <font color="#4169E1">if</font> ((n7 &gt;= 0) &amp;&amp; (n8 &lt; 0)) n8 = <A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>+1;
 
575
<a name="line582">582: </a>  }
 
576
 
 
577
<a name="line584">584: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_STAR) {
 
578
<a name="line585">585: </a>    <font color="#B22222">/* save corner processor numbers */</font>
 
579
<a name="line586">586: </a>    sn0 = n0; sn2 = n2; sn6 = n6; sn8 = n8;
 
580
<a name="line587">587: </a>    n0 = n2 = n6 = n8 = -1;
 
581
<a name="line588">588: </a>  }
 
582
 
 
583
<a name="line590">590: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((x+2*s_x)*(y+2*s_y)*<font color="#4169E1">sizeof</font>(int),&amp;idx);
 
584
<a name="line591">591: </a>  PetscLogObjectMemory(da,(x+2*s_x)*(y+2*s_y)*<font color="#4169E1">sizeof</font>(int));
 
585
<a name="line592">592: </a>  nn = 0;
 
586
 
 
587
<a name="line594">594: </a>  xbase = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
 
588
<a name="line595">595: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
 
589
<a name="line596">596: </a>    <font color="#4169E1">if</font> (n0 &gt;= 0) { <font color="#B22222">/* left below */</font>
 
590
<a name="line597">597: </a>      x_t = lx[n0 % m]*dof;
 
591
<a name="line598">598: </a>      y_t = ly[(n0/m)];
 
592
<a name="line599">599: </a>      s_t = bases[n0] + x_t*y_t - (s_y-i)*x_t - s_x;
 
593
<a name="line600">600: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
594
<a name="line601">601: </a>    }
 
595
<a name="line602">602: </a>    <font color="#4169E1">if</font> (n1 &gt;= 0) { <font color="#B22222">/* directly below */</font>
 
596
<a name="line603">603: </a>      x_t = x;
 
597
<a name="line604">604: </a>      y_t = ly[(n1/m)];
 
598
<a name="line605">605: </a>      s_t = bases[n1] + x_t*y_t - (s_y+1-i)*x_t;
 
599
<a name="line606">606: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
 
600
<a name="line607">607: </a>    }
 
601
<a name="line608">608: </a>    <font color="#4169E1">if</font> (n2 &gt;= 0) { <font color="#B22222">/* right below */</font>
 
602
<a name="line609">609: </a>      x_t = lx[n2 % m]*dof;
 
603
<a name="line610">610: </a>      y_t = ly[(n2/m)];
 
604
<a name="line611">611: </a>      s_t = bases[n2] + x_t*y_t - (s_y+1-i)*x_t;
 
605
<a name="line612">612: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
606
<a name="line613">613: </a>    }
 
607
<a name="line614">614: </a>  }
 
608
 
 
609
<a name="line616">616: </a>  <font color="#4169E1">for</font> (i=0; i&lt;y; i++) {
 
610
<a name="line617">617: </a>    <font color="#4169E1">if</font> (n3 &gt;= 0) { <font color="#B22222">/* directly left */</font>
 
611
<a name="line618">618: </a>      x_t = lx[n3 % m]*dof;
 
612
<a name="line619">619: </a>      <font color="#B22222">/* y_t = y; */</font>
 
613
<a name="line620">620: </a>      s_t = bases[n3] + (i+1)*x_t - s_x;
 
614
<a name="line621">621: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
615
<a name="line622">622: </a>    }
 
616
 
 
617
<a name="line624">624: </a>    <font color="#4169E1">for</font> (j=0; j&lt;x; j++) { idx[nn++] = xbase++; } <font color="#B22222">/* interior */</font>
 
618
 
 
619
<a name="line626">626: </a>    <font color="#4169E1">if</font> (n5 &gt;= 0) { <font color="#B22222">/* directly right */</font>
 
620
<a name="line627">627: </a>      x_t = lx[n5 % m]*dof;
 
621
<a name="line628">628: </a>      <font color="#B22222">/* y_t = y; */</font>
 
622
<a name="line629">629: </a>      s_t = bases[n5] + (i)*x_t;
 
623
<a name="line630">630: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
624
<a name="line631">631: </a>    }
 
625
<a name="line632">632: </a>  }
 
626
 
 
627
<a name="line634">634: </a>  <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
 
628
<a name="line635">635: </a>    <font color="#4169E1">if</font> (n6 &gt;= 0) { <font color="#B22222">/* left above */</font>
 
629
<a name="line636">636: </a>      x_t = lx[n6 % m]*dof;
 
630
<a name="line637">637: </a>      <font color="#B22222">/* y_t = ly[(n6/m)]; */</font>
 
631
<a name="line638">638: </a>      s_t = bases[n6] + (i)*x_t - s_x;
 
632
<a name="line639">639: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
633
<a name="line640">640: </a>    }
 
634
<a name="line641">641: </a>    <font color="#4169E1">if</font> (n7 &gt;= 0) { <font color="#B22222">/* directly above */</font>
 
635
<a name="line642">642: </a>      x_t = x;
 
636
<a name="line643">643: </a>      <font color="#B22222">/* y_t = ly[(n7/m)]; */</font>
 
637
<a name="line644">644: </a>      s_t = bases[n7] + (i-1)*x_t;
 
638
<a name="line645">645: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
 
639
<a name="line646">646: </a>    }
 
640
<a name="line647">647: </a>    <font color="#4169E1">if</font> (n8 &gt;= 0) { <font color="#B22222">/* right above */</font>
 
641
<a name="line648">648: </a>      x_t = lx[n8 % m]*dof;
 
642
<a name="line649">649: </a>      <font color="#B22222">/* y_t = ly[(n8/m)]; */</font>
 
643
<a name="line650">650: </a>      s_t = bases[n8] + (i-1)*x_t;
 
644
<a name="line651">651: </a>      <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
645
<a name="line652">652: </a>    }
 
646
<a name="line653">653: </a>  }
 
647
 
 
648
<a name="line655">655: </a>  base = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
 
649
<a name="line656">656: </a>  <A href="../../../../docs/manualpages/IS/ISCreateGeneral.html#ISCreateGeneral">ISCreateGeneral</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,nn,idx,&amp;from);
 
650
<a name="line657">657: </a>  <A href="../../../../docs/manualpages/Vec/VecScatterCreate.html#VecScatterCreate">VecScatterCreate</A>(global,from,local,to,&amp;gtol);
 
651
<a name="line658">658: </a>  PetscLogObjectParent(da,to);
 
652
<a name="line659">659: </a>  PetscLogObjectParent(da,from);
 
653
<a name="line660">660: </a>  PetscLogObjectParent(da,gtol);
 
654
<a name="line661">661: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(to);
 
655
<a name="line662">662: </a>  <A href="../../../../docs/manualpages/IS/ISDestroy.html#ISDestroy">ISDestroy</A>(from);
 
656
 
 
657
<a name="line664">664: </a>  <font color="#4169E1">if</font> (stencil_type == DA_STENCIL_STAR) {
 
658
<a name="line665">665: </a>    <font color="#B22222">/*</font>
 
659
<a name="line666">666: </a><font color="#B22222">        Recompute the local to global mappings, this time keeping the </font>
 
660
<a name="line667">667: </a><font color="#B22222">      information about the cross corner processor numbers.</font>
 
661
<a name="line668">668: </a><font color="#B22222">    */</font>
 
662
<a name="line669">669: </a>    n0 = sn0; n2 = sn2; n6 = sn6; n8 = sn8;
 
663
<a name="line670">670: </a>    nn = 0;
 
664
<a name="line671">671: </a>    xbase = bases[<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>];
 
665
<a name="line672">672: </a>    <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
 
666
<a name="line673">673: </a>      <font color="#4169E1">if</font> (n0 &gt;= 0) { <font color="#B22222">/* left below */</font>
 
667
<a name="line674">674: </a>        x_t = lx[n0 % m]*dof;
 
668
<a name="line675">675: </a>        y_t = ly[(n0/m)];
 
669
<a name="line676">676: </a>        s_t = bases[n0] + x_t*y_t - (s_y-i)*x_t - s_x;
 
670
<a name="line677">677: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
671
<a name="line678">678: </a>      }
 
672
<a name="line679">679: </a>      <font color="#4169E1">if</font> (n1 &gt;= 0) { <font color="#B22222">/* directly below */</font>
 
673
<a name="line680">680: </a>        x_t = x;
 
674
<a name="line681">681: </a>        y_t = ly[(n1/m)];
 
675
<a name="line682">682: </a>        s_t = bases[n1] + x_t*y_t - (s_y+1-i)*x_t;
 
676
<a name="line683">683: </a>        <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
 
677
<a name="line684">684: </a>      }
 
678
<a name="line685">685: </a>      <font color="#4169E1">if</font> (n2 &gt;= 0) { <font color="#B22222">/* right below */</font>
 
679
<a name="line686">686: </a>        x_t = lx[n2 % m]*dof;
 
680
<a name="line687">687: </a>        y_t = ly[(n2/m)];
 
681
<a name="line688">688: </a>        s_t = bases[n2] + x_t*y_t - (s_y+1-i)*x_t;
 
682
<a name="line689">689: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
683
<a name="line690">690: </a>      }
 
684
<a name="line691">691: </a>    }
 
685
 
 
686
<a name="line693">693: </a>    <font color="#4169E1">for</font> (i=0; i&lt;y; i++) {
 
687
<a name="line694">694: </a>      <font color="#4169E1">if</font> (n3 &gt;= 0) { <font color="#B22222">/* directly left */</font>
 
688
<a name="line695">695: </a>        x_t = lx[n3 % m]*dof;
 
689
<a name="line696">696: </a>        <font color="#B22222">/* y_t = y; */</font>
 
690
<a name="line697">697: </a>        s_t = bases[n3] + (i+1)*x_t - s_x;
 
691
<a name="line698">698: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
692
<a name="line699">699: </a>      }
 
693
 
 
694
<a name="line701">701: </a>      <font color="#4169E1">for</font> (j=0; j&lt;x; j++) { idx[nn++] = xbase++; } <font color="#B22222">/* interior */</font>
 
695
 
 
696
<a name="line703">703: </a>      <font color="#4169E1">if</font> (n5 &gt;= 0) { <font color="#B22222">/* directly right */</font>
 
697
<a name="line704">704: </a>        x_t = lx[n5 % m]*dof;
 
698
<a name="line705">705: </a>        <font color="#B22222">/* y_t = y; */</font>
 
699
<a name="line706">706: </a>        s_t = bases[n5] + (i)*x_t;
 
700
<a name="line707">707: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
701
<a name="line708">708: </a>      }
 
702
<a name="line709">709: </a>    }
 
703
 
 
704
<a name="line711">711: </a>    <font color="#4169E1">for</font> (i=1; i&lt;=s_y; i++) {
 
705
<a name="line712">712: </a>      <font color="#4169E1">if</font> (n6 &gt;= 0) { <font color="#B22222">/* left above */</font>
 
706
<a name="line713">713: </a>        x_t = lx[n6 % m]*dof;
 
707
<a name="line714">714: </a>        <font color="#B22222">/* y_t = ly[(n6/m)]; */</font>
 
708
<a name="line715">715: </a>        s_t = bases[n6] + (i)*x_t - s_x;
 
709
<a name="line716">716: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
710
<a name="line717">717: </a>      }
 
711
<a name="line718">718: </a>      <font color="#4169E1">if</font> (n7 &gt;= 0) { <font color="#B22222">/* directly above */</font>
 
712
<a name="line719">719: </a>        x_t = x;
 
713
<a name="line720">720: </a>        <font color="#B22222">/* y_t = ly[(n7/m)]; */</font>
 
714
<a name="line721">721: </a>        s_t = bases[n7] + (i-1)*x_t;
 
715
<a name="line722">722: </a>        <font color="#4169E1">for</font> (j=0; j&lt;x_t; j++) { idx[nn++] = s_t++;}
 
716
<a name="line723">723: </a>      }
 
717
<a name="line724">724: </a>      <font color="#4169E1">if</font> (n8 &gt;= 0) { <font color="#B22222">/* right above */</font>
 
718
<a name="line725">725: </a>        x_t = lx[n8 % m]*dof;
 
719
<a name="line726">726: </a>        <font color="#B22222">/* y_t = ly[(n8/m)]; */</font>
 
720
<a name="line727">727: </a>        s_t = bases[n8] + (i-1)*x_t;
 
721
<a name="line728">728: </a>        <font color="#4169E1">for</font> (j=0; j&lt;s_x; j++) { idx[nn++] = s_t++;}
 
722
<a name="line729">729: </a>      }
 
723
<a name="line730">730: </a>    }
 
724
<a name="line731">731: </a>  }
 
725
<a name="line732">732: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(bases);
 
726
 
 
727
<a name="line734">734: </a>  da-&gt;M  = M;  da-&gt;N  = N;  da-&gt;m  = m;  da-&gt;n  = n;  da-&gt;w = dof;  da-&gt;s = s;
 
728
<a name="line735">735: </a>  da-&gt;xs = xs; da-&gt;xe = xe; da-&gt;ys = ys; da-&gt;ye = ye; da-&gt;zs = 0; da-&gt;ze = 1;
 
729
<a name="line736">736: </a>  da-&gt;Xs = Xs; da-&gt;Xe = Xe; da-&gt;Ys = Ys; da-&gt;Ye = Ye; da-&gt;Zs = 0; da-&gt;Ze = 1;
 
730
<a name="line737">737: </a>  da-&gt;P  = 1;  da-&gt;p  = 1;
 
731
 
 
732
<a name="line739">739: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(local);
 
733
<a name="line740">740: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(global);
 
734
 
 
735
<a name="line742">742: </a>  da-&gt;gtol         = gtol;
 
736
<a name="line743">743: </a>  da-&gt;ltog         = ltog;
 
737
<a name="line744">744: </a>  da-&gt;idx          = idx;
 
738
<a name="line745">745: </a>  da-&gt;Nl           = nn;
 
739
<a name="line746">746: </a>  da-&gt;base         = base;
 
740
<a name="line747">747: </a>  da-&gt;wrap         = wrap;
 
741
<a name="line748">748: </a>  da-&gt;ops-&gt;view    = DAView_2d;
 
742
<a name="line749">749: </a>  da-&gt;stencil_type = stencil_type;
 
743
 
 
744
<a name="line751">751: </a>  <font color="#B22222">/* </font>
 
745
<a name="line752">752: </a><font color="#B22222">     Set the local to global ordering in the global vector, this allows use</font>
 
746
<a name="line753">753: </a><font color="#B22222">     of <A href="../../../../docs/manualpages/Vec/VecSetValuesLocal.html#VecSetValuesLocal">VecSetValuesLocal</A>().</font>
 
747
<a name="line754">754: </a><font color="#B22222">  */</font>
 
748
<a name="line755">755: </a>  <A href="../../../../docs/manualpages/IS/ISLocalToGlobalMappingCreateNC.html#ISLocalToGlobalMappingCreateNC">ISLocalToGlobalMappingCreateNC</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,nn,idx,&amp;da-&gt;ltogmap);
 
749
<a name="line756">756: </a>  <A href="../../../../docs/manualpages/IS/ISLocalToGlobalMappingBlock.html#ISLocalToGlobalMappingBlock">ISLocalToGlobalMappingBlock</A>(da-&gt;ltogmap,da-&gt;w,&amp;da-&gt;ltogmapb);
 
750
<a name="line757">757: </a>  PetscLogObjectParent(da,da-&gt;ltogmap);
 
751
 
 
752
<a name="line759">759: </a>  *inra = da;
 
753
 
 
754
<a name="line761">761: </a>  da-&gt;ltol = <A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>;
 
755
<a name="line762">762: </a>  da-&gt;ao   = <A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>;
 
756
 
 
757
 
 
758
<a name="line765">765: </a>  <font color="#4169E1">if</font> (!flx) {
 
759
<a name="line766">766: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(m*<font color="#4169E1">sizeof</font>(int),&amp;flx);
 
760
<a name="line767">767: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(flx,lx,m*<font color="#4169E1">sizeof</font>(int));
 
761
<a name="line768">768: </a>  }
 
762
<a name="line769">769: </a>  <font color="#4169E1">if</font> (!fly) {
 
763
<a name="line770">770: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(n*<font color="#4169E1">sizeof</font>(int),&amp;fly);
 
764
<a name="line771">771: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(fly,ly,n*<font color="#4169E1">sizeof</font>(int));
 
765
<a name="line772">772: </a>  }
 
766
<a name="line773">773: </a>  da-&gt;lx = flx;
 
767
<a name="line774">774: </a>  da-&gt;ly = fly;
 
768
 
 
769
<a name="line776">776: </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">"-da_view"</font>,&amp;flg1);
 
770
<a name="line777">777: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(da,<A href="../../../../docs/manualpages/Viewer/PETSC_VIEWER_STDOUT_.html#PETSC_VIEWER_STDOUT_">PETSC_VIEWER_STDOUT_</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>));}
 
771
<a name="line778">778: </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">"-da_view_draw"</font>,&amp;flg1);
 
772
<a name="line779">779: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAView.html#DAView">DAView</A>(da,<A href="../../../../docs/manualpages/Viewer/PETSC_VIEWER_DRAW_.html#PETSC_VIEWER_DRAW_">PETSC_VIEWER_DRAW_</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>));}
 
773
<a name="line780">780: </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">"-help"</font>,&amp;flg1);
 
774
<a name="line781">781: </a>  <font color="#4169E1">if</font> (flg1) {<A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A>(da);}
 
775
 
 
776
<a name="line783">783: </a>  PetscPublishAll(da);
 
777
<a name="line784">784: </a>  <font color="#4169E1">return</font>(0);
 
778
<a name="line785">785: </a>}
 
779
 
 
780
<a name="line789">789: </a><font color="#B22222">/*@</font>
 
781
<a name="line790">790: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A> - Prints command line options for <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
 
782
 
 
783
<a name="line792">792: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
784
 
 
785
<a name="line794">794: </a><font color="#B22222">   Input Parameters:</font>
 
786
<a name="line795">795: </a><font color="#B22222">.  da - the distributed array</font>
 
787
 
 
788
<a name="line797">797: </a><font color="#B22222">   Level: intermediate</font>
 
789
 
 
790
<a name="line799">799: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>()</font>
 
791
 
 
792
<a name="line801">801: </a><font color="#B22222">.keywords: <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, help</font>
 
793
 
 
794
<a name="line803">803: </a><font color="#B22222">@*/</font>
 
795
<a name="line804">804: </a><strong><font color="#4169E1"><a name="DAPrintHelp"></a>int <A href="../../../../docs/manualpages/DA/DAPrintHelp.html#DAPrintHelp">DAPrintHelp</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da)</font></strong>
 
796
<a name="line805">805: </a>{
 
797
<a name="line806">806: </a>  static <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> called = PETSC_FALSE;
 
798
<a name="line807">807: </a>  <A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A>          <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
 
799
<a name="line808">808: </a>  int               ierr;
 
800
 
 
801
 
 
802
<a name="line813">813: </a>  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> = da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
 
803
<a name="line814">814: </a>  <font color="#4169E1">if</font> (!called) {
 
804
<a name="line815">815: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"General Distributed Array (<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>) options:\n"</font>);
 
805
<a name="line816">816: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"  -da_view: print <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> distribution to screen\n"</font>);
 
806
<a name="line817">817: </a>    (*<A href="../../../../docs/manualpages/Sys/PetscHelpPrintf.html#PetscHelpPrintf">PetscHelpPrintf</A>)(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"  -da_view_draw: display <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> in window\n"</font>);
 
807
<a name="line818">818: </a>    called = PETSC_TRUE;
 
808
<a name="line819">819: </a>  }
 
809
<a name="line820">820: </a>  <font color="#4169E1">return</font>(0);
 
810
<a name="line821">821: </a>}
 
811
 
 
812
<a name="line825">825: </a><font color="#B22222">/*@C</font>
 
813
<a name="line826">826: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A> - Creates a new distributed array that is a refinement of a given</font>
 
814
<a name="line827">827: </a><font color="#B22222">   distributed array.</font>
 
815
 
 
816
<a name="line829">829: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
817
 
 
818
<a name="line831">831: </a><font color="#B22222">   Input Parameter:</font>
 
819
<a name="line832">832: </a><font color="#B22222">+  da - initial distributed array</font>
 
820
<a name="line833">833: </a><font color="#B22222">-  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - communicator to contain refined <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, must be either same as the da communicator or include the </font>
 
821
<a name="line834">834: </a><font color="#B22222">          da communicator and be 2, 4, or 8 times larger. Currently ignored</font>
 
822
 
 
823
<a name="line836">836: </a><font color="#B22222">   Output Parameter:</font>
 
824
<a name="line837">837: </a><font color="#B22222">.  daref - refined distributed array</font>
 
825
 
 
826
<a name="line839">839: </a><font color="#B22222">   Level: advanced</font>
 
827
 
 
828
<a name="line841">841: </a><font color="#B22222">   Note:</font>
 
829
<a name="line842">842: </a><font color="#B22222">   Currently, refinement consists of just doubling the number of grid spaces</font>
 
830
<a name="line843">843: </a><font color="#B22222">   in each dimension of the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
 
831
 
 
832
<a name="line845">845: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
833
 
 
834
<a name="line847">847: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>()</font>
 
835
<a name="line848">848: </a><font color="#B22222">@*/</font>
 
836
<a name="line849">849: </a><strong><font color="#4169E1"><a name="DARefine"></a>int <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> *daref)</font></strong>
 
837
<a name="line850">850: </a>{
 
838
<a name="line851">851: </a>  int M,N,P,ierr;
 
839
<a name="line852">852: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>  da2;
 
840
 
 
841
 
 
842
<a name="line858">858: </a>  <font color="#4169E1">if</font> (DAXPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
 
843
<a name="line859">859: </a>    M = da-&gt;refine_x*da-&gt;M;
 
844
<a name="line860">860: </a>  } <font color="#4169E1">else</font> {
 
845
<a name="line861">861: </a>    M = 1 + da-&gt;refine_x*(da-&gt;M - 1);
862
846
<a name="line862">862: </a>  }
863
 
<a name="line863">863: </a>  <font color="#4169E1">return</font>(0);
864
 
<a name="line864">864: </a>}
865
 
 
866
 
<a name="line866">866: </a><font color="#B22222">/*@C</font>
867
 
<a name="line867">867: </a><font color="#B22222">   <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A> - Creates a new distributed array that is a refinement of a given</font>
868
 
<a name="line868">868: </a><font color="#B22222">   distributed array.</font>
869
 
 
870
 
<a name="line870">870: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
871
 
 
872
 
<a name="line872">872: </a><font color="#B22222">   Input Parameter:</font>
873
 
<a name="line873">873: </a><font color="#B22222">+  da - initial distributed array</font>
874
 
<a name="line874">874: </a><font color="#B22222">-  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - communicator to contain refined <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, must be either same as the da communicator or include the </font>
875
 
<a name="line875">875: </a><font color="#B22222">          da communicator and be 2, 4, or 8 times larger. Currently ignored</font>
876
 
 
877
 
<a name="line877">877: </a><font color="#B22222">   Output Parameter:</font>
878
 
<a name="line878">878: </a><font color="#B22222">.  daref - refined distributed array</font>
879
 
 
880
 
<a name="line880">880: </a><font color="#B22222">   Level: advanced</font>
881
 
 
882
 
<a name="line882">882: </a><font color="#B22222">   Note:</font>
883
 
<a name="line883">883: </a><font color="#B22222">   Currently, refinement consists of just doubling the number of grid spaces</font>
884
 
<a name="line884">884: </a><font color="#B22222">   in each dimension of the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
885
 
 
886
 
<a name="line886">886: </a><font color="#B22222">.keywords:  distributed array, refine</font>
887
 
 
888
 
<a name="line888">888: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>()</font>
889
 
<a name="line889">889: </a><font color="#B22222">@*/</font>
890
 
<a name="line890">890: </a><strong><font color="#4169E1"><a name="DARefine"></a>int <A href="../../../../docs/manualpages/DA/DARefine.html#DARefine">DARefine</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> *daref)</font></strong>
891
 
<a name="line891">891: </a>{
892
 
<a name="line892">892: </a>  int <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,N,P,ierr;
893
 
<a name="line893">893: </a>  <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>  da2;
894
 
 
895
 
 
896
 
<a name="line898">898: </a>  <font color="#4169E1">if</font> (DAXPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
897
 
<a name="line899">899: </a>    <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> = da-&gt;refine_x*da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>;
898
 
<a name="line900">900: </a>  } <font color="#4169E1">else</font> {
899
 
<a name="line901">901: </a>    <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> = 1 + da-&gt;refine_x*(da-&gt;<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> - 1);
900
 
<a name="line902">902: </a>  }
901
 
<a name="line903">903: </a>  <font color="#4169E1">if</font> (DAYPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
902
 
<a name="line904">904: </a>    N = da-&gt;refine_y*da-&gt;N;
903
 
<a name="line905">905: </a>  } <font color="#4169E1">else</font> {
904
 
<a name="line906">906: </a>    N = 1 + da-&gt;refine_y*(da-&gt;N - 1);
905
 
<a name="line907">907: </a>  }
906
 
<a name="line908">908: </a>  <font color="#4169E1">if</font> (DAZPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
907
 
<a name="line909">909: </a>    P = da-&gt;refine_z*da-&gt;P;
908
 
<a name="line910">910: </a>  } <font color="#4169E1">else</font> {
909
 
<a name="line911">911: </a>    P = 1 + da-&gt;refine_z*(da-&gt;P - 1);
910
 
<a name="line912">912: </a>  }
911
 
<a name="line913">913: </a>  <font color="#4169E1">if</font> (da-&gt;dim == 1) {
912
 
<a name="line914">914: </a>    <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,da-&gt;w,da-&gt;s,PETSC_NULL,&amp;da2);
913
 
<a name="line915">915: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;dim == 2) {
914
 
<a name="line916">916: </a>    <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,da-&gt;stencil_type,<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,N,da-&gt;m,da-&gt;n,da-&gt;w,da-&gt;s,PETSC_NULL,PETSC_NULL,&amp;da2);
915
 
<a name="line917">917: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;dim == 3) {
916
 
<a name="line918">918: </a>    <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,da-&gt;stencil_type,<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,N,P,da-&gt;m,da-&gt;n,da-&gt;p,da-&gt;w,da-&gt;s,0,0,0,&amp;da2);
917
 
<a name="line919">919: </a>  }
918
 
<a name="line920">920: </a>  *daref = da2;
919
 
<a name="line921">921: </a>  <font color="#4169E1">return</font>(0);
920
 
<a name="line922">922: </a>}
921
 
 
922
 
<a name="line924">924: </a><font color="#B22222">/*</font>
923
 
<a name="line925">925: </a><font color="#B22222">      <A href="../../../../docs/manualpages/Vec/M.html#M">M</A> is number of grid points </font>
924
 
<a name="line926">926: </a><font color="#B22222">      m is number of processors</font>
925
 
 
926
 
<a name="line928">928: </a><font color="#B22222">*/</font>
927
 
<a name="line929">929: </a><strong><font color="#4169E1"><a name="DASplitComm2d"></a>int DASplitComm2d(MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,int <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>,int N,int sw,MPI_Comm *outcomm)</font></strong>
928
 
<a name="line930">930: </a>{
929
 
<a name="line931">931: </a>  int ierr,m,n = 0,csize,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,x = 0,y = 0;
930
 
 
931
 
<a name="line934">934: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_size.html#MPI_Comm_size">MPI_Comm_size</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);
932
 
<a name="line935">935: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
933
 
 
934
 
<a name="line937">937: </a>  csize = 4*<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>;
935
 
<a name="line938">938: </a>  <font color="#4169E1">do</font> {
936
 
<a name="line939">939: </a>    <font color="#4169E1">if</font> (csize % 4) SETERRQ4(1,<font color="#666666">"Cannot split communicator of <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> %d tried %d %d %d"</font>,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,csize,x,y);
937
 
<a name="line940">940: </a>    csize   = csize/4;
938
 
<a name="line941">941: </a>
939
 
<a name="line942">942: </a>    m = (int)(0.5 + sqrt(((double)<A href="../../../../docs/manualpages/Vec/M.html#M">M</A>)*((double)csize)/((double)N)));
940
 
<a name="line943">943: </a>    <font color="#4169E1">if</font> (!m) m = 1;
941
 
<a name="line944">944: </a>    <font color="#4169E1">while</font> (m &gt; 0) {
942
 
<a name="line945">945: </a>      n = csize/m;
943
 
<a name="line946">946: </a>      <font color="#4169E1">if</font> (m*n == csize) <font color="#4169E1">break</font>;
944
 
<a name="line947">947: </a>      m--;
945
 
<a name="line948">948: </a>    }
946
 
<a name="line949">949: </a>    <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> &gt; N &amp;&amp; m &lt; n) {int _m = m; m = n; n = _m;}
947
 
 
948
 
<a name="line951">951: </a>    x = <A href="../../../../docs/manualpages/Vec/M.html#M">M</A>/m + ((<A href="../../../../docs/manualpages/Vec/M.html#M">M</A> % m) &gt; ((csize-1) % m));
949
 
<a name="line952">952: </a>    y = (N + (csize-1)/m)/n;
950
 
<a name="line953">953: </a>  } <font color="#4169E1">while</font> ((x &lt; 4 || y &lt; 4) &amp;&amp; csize &gt; 1);
951
 
<a name="line954">954: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/size.html#size">size</A> != csize) {
952
 
<a name="line955">955: </a>    MPI_Group entire_group,sub_group;
953
 
<a name="line956">956: </a>    int       i,*groupies;
954
 
 
955
 
<a name="line958">958: </a>    ierr     = <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_group.html#MPI_Comm_group">MPI_Comm_group</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;entire_group);
956
 
<a name="line959">959: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(csize*<font color="#4169E1">sizeof</font>(int),&amp;groupies);
957
 
<a name="line960">960: </a>    <font color="#4169E1">for</font> (i=0; i&lt;csize; i++) {
958
 
<a name="line961">961: </a>      groupies[i] = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/csize)*csize + i;
959
 
<a name="line962">962: </a>    }
960
 
<a name="line963">963: </a>    ierr     = <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_incl.html#MPI_Group_incl">MPI_Group_incl</A>(entire_group,csize,groupies,&amp;sub_group);
961
 
<a name="line964">964: </a>    ierr     = <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(groupies);
962
 
<a name="line965">965: </a>    ierr     = <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_create.html#MPI_Comm_create">MPI_Comm_create</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,sub_group,outcomm);
963
 
<a name="line966">966: </a>    ierr     = <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_free.html#MPI_Group_free">MPI_Group_free</A>(&amp;entire_group);
964
 
<a name="line967">967: </a>    ierr     = <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_free.html#MPI_Group_free">MPI_Group_free</A>(&amp;sub_group);
965
 
<a name="line968">968: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogInfo.html#PetscLogInfo">PetscLogInfo</A>(0,<font color="#666666">"Creating redundant coarse problems of <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> %dn"</font>,csize);
966
 
<a name="line969">969: </a>  } <font color="#4169E1">else</font> {
967
 
<a name="line970">970: </a>    *outcomm = <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
968
 
<a name="line971">971: </a>  }
969
 
<a name="line972">972: </a>  <font color="#4169E1">return</font>(0);
970
 
<a name="line973">973: </a>}
971
 
 
972
 
<a name="line975">975: </a><font color="#B22222">/*@C</font>
973
 
<a name="line976">976: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function</font>
974
 
 
975
 
<a name="line978">978: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
976
 
 
977
 
<a name="line980">980: </a><font color="#B22222">   Input Parameter:</font>
978
 
<a name="line981">981: </a><font color="#B22222">+  da - initial distributed array</font>
979
 
<a name="line982">982: </a><font color="#B22222">-  lf - the local function</font>
980
 
 
981
 
<a name="line984">984: </a><font color="#B22222">   Level: intermediate</font>
982
 
 
983
 
<a name="line986">986: </a><font color="#B22222">.keywords:  distributed array, refine</font>
984
 
 
985
 
<a name="line988">988: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
986
 
<a name="line989">989: </a><font color="#B22222">@*/</font>
987
 
<a name="line990">990: </a><strong><font color="#4169E1"><a name="DASetLocalFunction"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 lf)</font></strong>
988
 
<a name="line991">991: </a>{
989
 
<a name="line994">994: </a>  da-&gt;lf    = lf;
990
 
<a name="line995">995: </a>  <font color="#4169E1">return</font>(0);
991
 
<a name="line996">996: </a>}
992
 
 
993
 
<a name="line998">998: </a><font color="#B22222">/*@C</font>
994
 
<a name="line999">999: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function that evaluates a single component</font>
995
 
 
996
 
<a name="line1001">1001: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
997
 
 
998
 
<a name="line1003">1003: </a><font color="#B22222">   Input Parameter:</font>
999
 
<a name="line1004">1004: </a><font color="#B22222">+  da - initial distributed array</font>
1000
 
<a name="line1005">1005: </a><font color="#B22222">-  lfi - the local function</font>
1001
 
 
1002
 
<a name="line1007">1007: </a><font color="#B22222">   Level: intermediate</font>
1003
 
 
1004
 
<a name="line1009">1009: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1005
 
 
1006
 
<a name="line1011">1011: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>()</font>
1007
 
<a name="line1012">1012: </a><font color="#B22222">@*/</font>
1008
 
<a name="line1013">1013: </a><strong><font color="#4169E1"><a name="DASetLocalFunctioni"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*))</font></strong>
1009
 
<a name="line1014">1014: </a>{
1010
 
<a name="line1017">1017: </a>  da-&gt;lfi = lfi;
1011
 
<a name="line1018">1018: </a>  <font color="#4169E1">return</font>(0);
1012
 
<a name="line1019">1019: </a>}
1013
 
 
1014
 
<a name="line1021">1021: </a><font color="#B22222">/*MC</font>
1015
 
<a name="line1022">1022: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunction.html#DASetLocalAdicFunction">DASetLocalAdicFunction</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function computed by ADIC/ADIFOR</font>
1016
 
 
1017
 
<a name="line1024">1024: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1018
 
 
1019
 
<a name="line1026">1026: </a><font color="#B22222">   Synopsis:</font>
1020
 
<a name="line1027">1027: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunction.html#DASetLocalAdicFunction">DASetLocalAdicFunction</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font>
1021
 
<a name="line1028">1028: </a><font color="#B22222">   </font>
1022
 
<a name="line1029">1029: </a><font color="#B22222">   Input Parameter:</font>
1023
 
<a name="line1030">1030: </a><font color="#B22222">+  da - initial distributed array</font>
1024
 
<a name="line1031">1031: </a><font color="#B22222">-  ad_lf - the local function as computed by ADIC/ADIFOR</font>
1025
 
 
1026
 
<a name="line1033">1033: </a><font color="#B22222">   Level: intermediate</font>
1027
 
 
1028
 
<a name="line1035">1035: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1029
 
 
1030
 
<a name="line1037">1037: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
1031
 
<a name="line1038">1038: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>()</font>
1032
 
<a name="line1039">1039: </a><font color="#B22222"><A href="../../../../docs/manualpages/Vec/M.html#M">M</A>*/</font>
1033
 
 
1034
 
<a name="line1041">1041: </a><strong><font color="#4169E1"><a name="DASetLocalAdicFunction_Private"></a>int DASetLocalAdicFunction_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font></strong>
1035
 
<a name="line1042">1042: </a>{
1036
 
<a name="line1045">1045: </a>  da-&gt;adic_lf = ad_lf;
1037
 
<a name="line1046">1046: </a>  <font color="#4169E1">return</font>(0);
1038
 
<a name="line1047">1047: </a>}
1039
 
 
1040
 
<a name="line1049">1049: </a><font color="#B22222">/*MC</font>
1041
 
<a name="line1050">1050: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local functioni computed by ADIC/ADIFOR</font>
1042
 
 
1043
 
<a name="line1052">1052: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1044
 
 
1045
 
<a name="line1054">1054: </a><font color="#B22222">   Synopsis:</font>
1046
 
<a name="line1055">1055: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (ad_lf*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*)</font>
1047
 
<a name="line1056">1056: </a><font color="#B22222">   </font>
1048
 
<a name="line1057">1057: </a><font color="#B22222">   Input Parameter:</font>
1049
 
<a name="line1058">1058: </a><font color="#B22222">+  da - initial distributed array</font>
1050
 
<a name="line1059">1059: </a><font color="#B22222">-  ad_lfi - the local function as computed by ADIC/ADIFOR</font>
1051
 
 
1052
 
<a name="line1061">1061: </a><font color="#B22222">   Level: intermediate</font>
1053
 
 
1054
 
<a name="line1063">1063: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1055
 
 
1056
 
<a name="line1065">1065: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
1057
 
<a name="line1066">1066: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
1058
 
<a name="line1067">1067: </a><font color="#B22222"><A href="../../../../docs/manualpages/Vec/M.html#M">M</A>*/</font>
1059
 
 
1060
 
<a name="line1069">1069: </a><strong><font color="#4169E1"><a name="DASetLocalAdicFunctioni_Private"></a>int DASetLocalAdicFunctioni_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*ad_lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*))</font></strong>
1061
 
<a name="line1070">1070: </a>{
1062
 
<a name="line1073">1073: </a>  da-&gt;adic_lfi = ad_lfi;
1063
 
<a name="line1074">1074: </a>  <font color="#4169E1">return</font>(0);
1064
 
<a name="line1075">1075: </a>}
1065
 
 
1066
 
<a name="line1077">1077: </a><font color="#B22222">/*MC</font>
1067
 
<a name="line1078">1078: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunctioni.html#DASetLocalAdicMFFunctioni">DASetLocalAdicMFFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local functioni computed by ADIC/ADIFOR</font>
1068
 
 
1069
 
<a name="line1080">1080: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1070
 
 
1071
 
<a name="line1082">1082: </a><font color="#B22222">   Synopsis:</font>
1072
 
<a name="line1083">1083: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (ad_lf*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*)</font>
1073
 
<a name="line1084">1084: </a><font color="#B22222">   </font>
1074
 
<a name="line1085">1085: </a><font color="#B22222">   Input Parameter:</font>
1075
 
<a name="line1086">1086: </a><font color="#B22222">+  da - initial distributed array</font>
1076
 
<a name="line1087">1087: </a><font color="#B22222">-  admf_lfi - the local matrix-free function as computed by ADIC/ADIFOR</font>
1077
 
 
1078
 
<a name="line1089">1089: </a><font color="#B22222">   Level: intermediate</font>
1079
 
 
1080
 
<a name="line1091">1091: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1081
 
 
1082
 
<a name="line1093">1093: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
1083
 
<a name="line1094">1094: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
1084
 
<a name="line1095">1095: </a><font color="#B22222"><A href="../../../../docs/manualpages/Vec/M.html#M">M</A>*/</font>
1085
 
 
1086
 
<a name="line1097">1097: </a><strong><font color="#4169E1"><a name="DASetLocalAdicMFFunctioni_Private"></a>int DASetLocalAdicMFFunctioni_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*admf_lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*))</font></strong>
1087
 
<a name="line1098">1098: </a>{
1088
 
<a name="line1101">1101: </a>  da-&gt;adicmf_lfi = admf_lfi;
1089
 
<a name="line1102">1102: </a>  <font color="#4169E1">return</font>(0);
1090
 
<a name="line1103">1103: </a>}
1091
 
 
1092
 
<a name="line1105">1105: </a><font color="#B22222">/*MC</font>
1093
 
<a name="line1106">1106: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function computed by ADIC/ADIFOR</font>
1094
 
 
1095
 
<a name="line1108">1108: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1096
 
 
1097
 
<a name="line1110">1110: </a><font color="#B22222">   Synopsis:</font>
1098
 
<a name="line1111">1111: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font>
1099
 
<a name="line1112">1112: </a><font color="#B22222">   </font>
1100
 
<a name="line1113">1113: </a><font color="#B22222">   Input Parameter:</font>
1101
 
<a name="line1114">1114: </a><font color="#B22222">+  da - initial distributed array</font>
1102
 
<a name="line1115">1115: </a><font color="#B22222">-  ad_lf - the local function as computed by ADIC/ADIFOR</font>
1103
 
 
1104
 
<a name="line1117">1117: </a><font color="#B22222">   Level: intermediate</font>
1105
 
 
1106
 
<a name="line1119">1119: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1107
 
 
1108
 
<a name="line1121">1121: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
1109
 
<a name="line1122">1122: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>()</font>
1110
 
<a name="line1123">1123: </a><font color="#B22222"><A href="../../../../docs/manualpages/Vec/M.html#M">M</A>*/</font>
1111
 
 
1112
 
<a name="line1125">1125: </a><strong><font color="#4169E1"><a name="DASetLocalAdicMFFunction_Private"></a>int DASetLocalAdicMFFunction_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font></strong>
1113
 
<a name="line1126">1126: </a>{
1114
 
<a name="line1129">1129: </a>  da-&gt;adicmf_lf = ad_lf;
1115
 
<a name="line1130">1130: </a>  <font color="#4169E1">return</font>(0);
1116
 
<a name="line1131">1131: </a>}
1117
 
 
1118
 
<a name="line1133">1133: </a><font color="#B22222">/*@C</font>
1119
 
<a name="line1134">1134: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local Jacobian</font>
1120
 
 
1121
 
<a name="line1136">1136: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1122
 
 
1123
 
<a name="line1138">1138: </a><font color="#B22222">   </font>
1124
 
<a name="line1139">1139: </a><font color="#B22222">   Input Parameter:</font>
1125
 
<a name="line1140">1140: </a><font color="#B22222">+  da - initial distributed array</font>
1126
 
<a name="line1141">1141: </a><font color="#B22222">-  lj - the local Jacobian</font>
1127
 
 
1128
 
<a name="line1143">1143: </a><font color="#B22222">   Level: intermediate</font>
1129
 
 
1130
 
<a name="line1145">1145: </a><font color="#B22222">.keywords:  distributed array, refine</font>
1131
 
 
1132
 
<a name="line1147">1147: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>()</font>
1133
 
<a name="line1148">1148: </a><font color="#B22222">@*/</font>
1134
 
<a name="line1149">1149: </a><strong><font color="#4169E1"><a name="DASetLocalJacobian"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 lj)</font></strong>
1135
 
<a name="line1150">1150: </a>{
1136
 
<a name="line1153">1153: </a>  da-&gt;lj    = lj;
1137
 
<a name="line1154">1154: </a>  <font color="#4169E1">return</font>(0);
1138
 
<a name="line1155">1155: </a>}
 
847
<a name="line863">863: </a>  <font color="#4169E1">if</font> (DAYPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
 
848
<a name="line864">864: </a>    N = da-&gt;refine_y*da-&gt;N;
 
849
<a name="line865">865: </a>  } <font color="#4169E1">else</font> {
 
850
<a name="line866">866: </a>    N = 1 + da-&gt;refine_y*(da-&gt;N - 1);
 
851
<a name="line867">867: </a>  }
 
852
<a name="line868">868: </a>  <font color="#4169E1">if</font> (DAZPeriodic(da-&gt;wrap) || da-&gt;interptype == DA_Q0){
 
853
<a name="line869">869: </a>    P = da-&gt;refine_z*da-&gt;P;
 
854
<a name="line870">870: </a>  } <font color="#4169E1">else</font> {
 
855
<a name="line871">871: </a>    P = 1 + da-&gt;refine_z*(da-&gt;P - 1);
 
856
<a name="line872">872: </a>  }
 
857
<a name="line873">873: </a>  <font color="#4169E1">if</font> (da-&gt;dim == 1) {
 
858
<a name="line874">874: </a>    <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,M,da-&gt;w,da-&gt;s,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;da2);
 
859
<a name="line875">875: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;dim == 2) {
 
860
<a name="line876">876: </a>    <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,da-&gt;stencil_type,M,N,da-&gt;m,da-&gt;n,da-&gt;w,da-&gt;s,<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;da2);
 
861
<a name="line877">877: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;dim == 3) {
 
862
<a name="line878">878: </a>    <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,da-&gt;wrap,da-&gt;stencil_type,M,N,P,da-&gt;m,da-&gt;n,da-&gt;p,da-&gt;w,da-&gt;s,0,0,0,&amp;da2);
 
863
<a name="line879">879: </a>  }
 
864
<a name="line880">880: </a>  <font color="#B22222">/* allow overloaded (user replaced) operations to be inherited by refinement clones */</font>
 
865
<a name="line881">881: </a>  da2-&gt;ops-&gt;getmatrix        = da-&gt;ops-&gt;getmatrix;
 
866
<a name="line882">882: </a>  da2-&gt;ops-&gt;getinterpolation = da-&gt;ops-&gt;getinterpolation;
 
867
<a name="line883">883: </a>  da2-&gt;ops-&gt;getcoloring      = da-&gt;ops-&gt;getcoloring;
 
868
<a name="line884">884: </a>
 
869
<a name="line885">885: </a>  <font color="#B22222">/* copy fill information if given */</font>
 
870
<a name="line886">886: </a>  <font color="#4169E1">if</font> (da-&gt;dfill) {
 
871
<a name="line887">887: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((da-&gt;dfill[da-&gt;w]+da-&gt;w+1)*<font color="#4169E1">sizeof</font>(int),&amp;da2-&gt;dfill);
 
872
<a name="line888">888: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(da2-&gt;dfill,da-&gt;dfill,(da-&gt;dfill[da-&gt;w]+da-&gt;w+1)*<font color="#4169E1">sizeof</font>(int));
 
873
<a name="line889">889: </a>  }
 
874
<a name="line890">890: </a>  <font color="#4169E1">if</font> (da-&gt;ofill) {
 
875
<a name="line891">891: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((da-&gt;ofill[da-&gt;w]+da-&gt;w+1)*<font color="#4169E1">sizeof</font>(int),&amp;da2-&gt;ofill);
 
876
<a name="line892">892: </a>    <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(da2-&gt;ofill,da-&gt;ofill,(da-&gt;ofill[da-&gt;w]+da-&gt;w+1)*<font color="#4169E1">sizeof</font>(int));
 
877
<a name="line893">893: </a>  }
 
878
<a name="line894">894: </a>  *daref = da2;
 
879
<a name="line895">895: </a>  <font color="#4169E1">return</font>(0);
 
880
<a name="line896">896: </a>}
 
881
 
 
882
<a name="line898">898: </a><font color="#B22222">/*@C</font>
 
883
<a name="line899">899: </a><font color="#B22222">     <A href="../../../../docs/manualpages/DA/DASetGetMatrix.html#DASetGetMatrix">DASetGetMatrix</A> - Sets the routine used by the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> to allocate a matrix.</font>
 
884
 
 
885
<a name="line901">901: </a><font color="#B22222">    Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
886
 
 
887
<a name="line903">903: </a><font color="#B22222">  Input Parameters:</font>
 
888
<a name="line904">904: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> object</font>
 
889
<a name="line905">905: </a><font color="#B22222">-    f - the function that allocates the matrix for that specific <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
890
 
 
891
<a name="line907">907: </a><font color="#B22222">  Level: developer</font>
 
892
 
 
893
<a name="line909">909: </a><font color="#B22222">   Notes: See <A href="../../../../docs/manualpages/DA/DASetBlockFills.html#DASetBlockFills">DASetBlockFills</A>() that provides a simple way to provide the nonzero structure for </font>
 
894
<a name="line910">910: </a><font color="#B22222">       the diagonal and off-diagonal blocks of the matrix</font>
 
895
 
 
896
<a name="line912">912: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAGetMatrix.html#DAGetMatrix">DAGetMatrix</A>(), <A href="../../../../docs/manualpages/DA/DASetBlockFills.html#DASetBlockFills">DASetBlockFills</A>()</font>
 
897
<a name="line913">913: </a><font color="#B22222">@*/</font>
 
898
<a name="line914">914: </a><strong><font color="#4169E1"><a name="DASetGetMatrix"></a>int <A href="../../../../docs/manualpages/DA/DASetGetMatrix.html#DASetGetMatrix">DASetGetMatrix</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*f)(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>,const <A href="../../../../docs/manualpages/Mat/MatType.html#MatType">MatType</A>,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>*))</font></strong>
 
899
<a name="line915">915: </a>{
 
900
<a name="line917">917: </a>  da-&gt;ops-&gt;getmatrix = f;
 
901
<a name="line918">918: </a>  <font color="#4169E1">return</font>(0);
 
902
<a name="line919">919: </a>}
 
903
 
 
904
<a name="line921">921: </a><font color="#B22222">/*</font>
 
905
<a name="line922">922: </a><font color="#B22222">      M is number of grid points </font>
 
906
<a name="line923">923: </a><font color="#B22222">      m is number of processors</font>
 
907
 
 
908
<a name="line925">925: </a><font color="#B22222">*/</font>
 
909
<a name="line928">928: </a><strong><font color="#4169E1"><a name="DASplitComm2d"></a>int DASplitComm2d(<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,int M,int N,int sw,<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> *outcomm)</font></strong>
 
910
<a name="line929">929: </a>{
 
911
<a name="line930">930: </a>  int ierr,m,n = 0,csize,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,x = 0,y = 0;
 
912
 
 
913
<a name="line933">933: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_size.html#MPI_Comm_size">MPI_Comm_size</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>);
 
914
<a name="line934">934: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
 
915
 
 
916
<a name="line936">936: </a>  csize = 4*<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>;
 
917
<a name="line937">937: </a>  <font color="#4169E1">do</font> {
 
918
<a name="line938">938: </a>    <font color="#4169E1">if</font> (csize % 4) SETERRQ4(1,<font color="#666666">"Cannot split communicator of <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> %d tried %d %d %d"</font>,<A href="../../../../docs/manualpages/Sys/size.html#size">size</A>,csize,x,y);
 
919
<a name="line939">939: </a>    csize   = csize/4;
 
920
<a name="line940">940: </a>
 
921
<a name="line941">941: </a>    m = (int)(0.5 + sqrt(((double)M)*((double)csize)/((double)N)));
 
922
<a name="line942">942: </a>    <font color="#4169E1">if</font> (!m) m = 1;
 
923
<a name="line943">943: </a>    <font color="#4169E1">while</font> (m &gt; 0) {
 
924
<a name="line944">944: </a>      n = csize/m;
 
925
<a name="line945">945: </a>      <font color="#4169E1">if</font> (m*n == csize) <font color="#4169E1">break</font>;
 
926
<a name="line946">946: </a>      m--;
 
927
<a name="line947">947: </a>    }
 
928
<a name="line948">948: </a>    <font color="#4169E1">if</font> (M &gt; N &amp;&amp; m &lt; n) {int _m = m; m = n; n = _m;}
 
929
 
 
930
<a name="line950">950: </a>    x = M/m + ((M % m) &gt; ((csize-1) % m));
 
931
<a name="line951">951: </a>    y = (N + (csize-1)/m)/n;
 
932
<a name="line952">952: </a>  } <font color="#4169E1">while</font> ((x &lt; 4 || y &lt; 4) &amp;&amp; csize &gt; 1);
 
933
<a name="line953">953: </a>  <font color="#4169E1">if</font> (<A href="../../../../docs/manualpages/Sys/size.html#size">size</A> != csize) {
 
934
<a name="line954">954: </a>    MPI_Group entire_group,sub_group;
 
935
<a name="line955">955: </a>    int       i,*groupies;
 
936
 
 
937
<a name="line957">957: </a>    <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_group.html#MPI_Comm_group">MPI_Comm_group</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&amp;entire_group);
 
938
<a name="line958">958: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(csize*<font color="#4169E1">sizeof</font>(int),&amp;groupies);
 
939
<a name="line959">959: </a>    <font color="#4169E1">for</font> (i=0; i&lt;csize; i++) {
 
940
<a name="line960">960: </a>      groupies[i] = (<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>/csize)*csize + i;
 
941
<a name="line961">961: </a>    }
 
942
<a name="line962">962: </a>    <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_incl.html#MPI_Group_incl">MPI_Group_incl</A>(entire_group,csize,groupies,&amp;sub_group);
 
943
<a name="line963">963: </a>    <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(groupies);
 
944
<a name="line964">964: </a>    <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_create.html#MPI_Comm_create">MPI_Comm_create</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,sub_group,outcomm);
 
945
<a name="line965">965: </a>    <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_free.html#MPI_Group_free">MPI_Group_free</A>(&amp;entire_group);
 
946
<a name="line966">966: </a>    <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Group_free.html#MPI_Group_free">MPI_Group_free</A>(&amp;sub_group);
 
947
<a name="line967">967: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogInfo.html#PetscLogInfo">PetscLogInfo</A>(0,<font color="#666666">"Creating redundant coarse problems of <A href="../../../../docs/manualpages/Sys/size.html#size">size</A> %d\n"</font>,csize);
 
948
<a name="line968">968: </a>  } <font color="#4169E1">else</font> {
 
949
<a name="line969">969: </a>    *outcomm = <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
 
950
<a name="line970">970: </a>  }
 
951
<a name="line971">971: </a>  <font color="#4169E1">return</font>(0);
 
952
<a name="line972">972: </a>}
 
953
 
 
954
<a name="line976">976: </a><font color="#B22222">/*@C</font>
 
955
<a name="line977">977: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function. </font>
 
956
 
 
957
<a name="line979">979: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
958
 
 
959
<a name="line981">981: </a><font color="#B22222">   Input Parameter:</font>
 
960
<a name="line982">982: </a><font color="#B22222">+  da - initial distributed array</font>
 
961
<a name="line983">983: </a><font color="#B22222">-  lf - the local function</font>
 
962
 
 
963
<a name="line985">985: </a><font color="#B22222">   Level: intermediate</font>
 
964
 
 
965
<a name="line987">987: </a><font color="#B22222">   Notes: The routine <A href="../../../../docs/manualpages/SNES/SNESDAFormFunction.html#SNESDAFormFunction">SNESDAFormFunction</A>() uses this the cached function to evaluate the user provided function.</font>
 
966
 
 
967
<a name="line989">989: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
968
 
 
969
<a name="line991">991: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
 
970
<a name="line992">992: </a><font color="#B22222">@*/</font>
 
971
<a name="line993">993: </a><strong><font color="#4169E1"><a name="DASetLocalFunction"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 lf)</font></strong>
 
972
<a name="line994">994: </a>{
 
973
<a name="line997">997: </a>  da-&gt;lf    = lf;
 
974
<a name="line998">998: </a>  <font color="#4169E1">return</font>(0);
 
975
<a name="line999">999: </a>}
 
976
 
 
977
<a name="line1003">1003: </a><font color="#B22222">/*@C</font>
 
978
<a name="line1004">1004: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function that evaluates a single component</font>
 
979
 
 
980
<a name="line1006">1006: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
981
 
 
982
<a name="line1008">1008: </a><font color="#B22222">   Input Parameter:</font>
 
983
<a name="line1009">1009: </a><font color="#B22222">+  da - initial distributed array</font>
 
984
<a name="line1010">1010: </a><font color="#B22222">-  lfi - the local function</font>
 
985
 
 
986
<a name="line1012">1012: </a><font color="#B22222">   Level: intermediate</font>
 
987
 
 
988
<a name="line1014">1014: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
989
 
 
990
<a name="line1016">1016: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>()</font>
 
991
<a name="line1017">1017: </a><font color="#B22222">@*/</font>
 
992
<a name="line1018">1018: </a><strong><font color="#4169E1"><a name="DASetLocalFunctioni"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*))</font></strong>
 
993
<a name="line1019">1019: </a>{
 
994
<a name="line1022">1022: </a>  da-&gt;lfi = lfi;
 
995
<a name="line1023">1023: </a>  <font color="#4169E1">return</font>(0);
 
996
<a name="line1024">1024: </a>}
 
997
 
 
998
 
 
999
<a name="line1029">1029: </a><strong><font color="#4169E1"><a name="DASetLocalAdicFunction_Private"></a>int DASetLocalAdicFunction_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font></strong>
 
1000
<a name="line1030">1030: </a>{
 
1001
<a name="line1033">1033: </a>  da-&gt;adic_lf = ad_lf;
 
1002
<a name="line1034">1034: </a>  <font color="#4169E1">return</font>(0);
 
1003
<a name="line1035">1035: </a>}
 
1004
 
 
1005
<a name="line1037">1037: </a><font color="#B22222">/*MC</font>
 
1006
<a name="line1038">1038: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local functioni computed by ADIC/ADIFOR</font>
 
1007
 
 
1008
<a name="line1040">1040: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1009
 
 
1010
<a name="line1042">1042: </a><font color="#B22222">   Synopsis:</font>
 
1011
<a name="line1043">1043: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (ad_lf*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*)</font>
 
1012
<a name="line1044">1044: </a><font color="#B22222">   </font>
 
1013
<a name="line1045">1045: </a><font color="#B22222">   Input Parameter:</font>
 
1014
<a name="line1046">1046: </a><font color="#B22222">+  da - initial distributed array</font>
 
1015
<a name="line1047">1047: </a><font color="#B22222">-  ad_lfi - the local function as computed by ADIC/ADIFOR</font>
 
1016
 
 
1017
<a name="line1049">1049: </a><font color="#B22222">   Level: intermediate</font>
 
1018
 
 
1019
<a name="line1051">1051: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
1020
 
 
1021
<a name="line1053">1053: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
 
1022
<a name="line1054">1054: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
 
1023
<a name="line1055">1055: </a><font color="#B22222">M*/</font>
 
1024
 
 
1025
<a name="line1059">1059: </a><strong><font color="#4169E1"><a name="DASetLocalAdicFunctioni_Private"></a>int DASetLocalAdicFunctioni_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*ad_lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*))</font></strong>
 
1026
<a name="line1060">1060: </a>{
 
1027
<a name="line1063">1063: </a>  da-&gt;adic_lfi = ad_lfi;
 
1028
<a name="line1064">1064: </a>  <font color="#4169E1">return</font>(0);
 
1029
<a name="line1065">1065: </a>}
 
1030
 
 
1031
<a name="line1067">1067: </a><font color="#B22222">/*MC</font>
 
1032
<a name="line1068">1068: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunctioni.html#DASetLocalAdicMFFunctioni">DASetLocalAdicMFFunctioni</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local functioni computed by ADIC/ADIFOR</font>
 
1033
 
 
1034
<a name="line1070">1070: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1035
 
 
1036
<a name="line1072">1072: </a><font color="#B22222">   Synopsis:</font>
 
1037
<a name="line1073">1073: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicFunctioni.html#DASetLocalAdicFunctioni">DASetLocalAdicFunctioni</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (ad_lf*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*)</font>
 
1038
<a name="line1074">1074: </a><font color="#B22222">   </font>
 
1039
<a name="line1075">1075: </a><font color="#B22222">   Input Parameter:</font>
 
1040
<a name="line1076">1076: </a><font color="#B22222">+  da - initial distributed array</font>
 
1041
<a name="line1077">1077: </a><font color="#B22222">-  admf_lfi - the local matrix-free function as computed by ADIC/ADIFOR</font>
 
1042
 
 
1043
<a name="line1079">1079: </a><font color="#B22222">   Level: intermediate</font>
 
1044
 
 
1045
<a name="line1081">1081: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
1046
 
 
1047
<a name="line1083">1083: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
 
1048
<a name="line1084">1084: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunctioni.html#DASetLocalFunctioni">DASetLocalFunctioni</A>()</font>
 
1049
<a name="line1085">1085: </a><font color="#B22222">M*/</font>
 
1050
 
 
1051
<a name="line1089">1089: </a><strong><font color="#4169E1"><a name="DASetLocalAdicMFFunctioni_Private"></a>int DASetLocalAdicMFFunctioni_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int (*admf_lfi)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>*,void*,void*,void*))</font></strong>
 
1052
<a name="line1090">1090: </a>{
 
1053
<a name="line1093">1093: </a>  da-&gt;adicmf_lfi = admf_lfi;
 
1054
<a name="line1094">1094: </a>  <font color="#4169E1">return</font>(0);
 
1055
<a name="line1095">1095: </a>}
 
1056
 
 
1057
<a name="line1097">1097: </a><font color="#B22222">/*MC</font>
 
1058
<a name="line1098">1098: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function computed by ADIC/ADIFOR</font>
 
1059
 
 
1060
<a name="line1100">1100: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1061
 
 
1062
<a name="line1102">1102: </a><font color="#B22222">   Synopsis:</font>
 
1063
<a name="line1103">1103: </a><font color="#B22222">   int int <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font>
 
1064
<a name="line1104">1104: </a><font color="#B22222">   </font>
 
1065
<a name="line1105">1105: </a><font color="#B22222">   Input Parameter:</font>
 
1066
<a name="line1106">1106: </a><font color="#B22222">+  da - initial distributed array</font>
 
1067
<a name="line1107">1107: </a><font color="#B22222">-  ad_lf - the local function as computed by ADIC/ADIFOR</font>
 
1068
 
 
1069
<a name="line1109">1109: </a><font color="#B22222">   Level: intermediate</font>
 
1070
 
 
1071
<a name="line1111">1111: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
1072
 
 
1073
<a name="line1113">1113: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>(),</font>
 
1074
<a name="line1114">1114: </a><font color="#B22222">          <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>()</font>
 
1075
<a name="line1115">1115: </a><font color="#B22222">M*/</font>
 
1076
 
 
1077
<a name="line1119">1119: </a><strong><font color="#4169E1"><a name="DASetLocalAdicMFFunction_Private"></a>int DASetLocalAdicMFFunction_Private(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 ad_lf)</font></strong>
 
1078
<a name="line1120">1120: </a>{
 
1079
<a name="line1123">1123: </a>  da-&gt;adicmf_lf = ad_lf;
 
1080
<a name="line1124">1124: </a>  <font color="#4169E1">return</font>(0);
 
1081
<a name="line1125">1125: </a>}
 
1082
 
 
1083
<a name="line1127">1127: </a><font color="#B22222">/*@C</font>
 
1084
<a name="line1128">1128: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A> - Caches in a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local Jacobian</font>
 
1085
 
 
1086
<a name="line1130">1130: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1087
 
 
1088
<a name="line1132">1132: </a><font color="#B22222">   </font>
 
1089
<a name="line1133">1133: </a><font color="#B22222">   Input Parameter:</font>
 
1090
<a name="line1134">1134: </a><font color="#B22222">+  da - initial distributed array</font>
 
1091
<a name="line1135">1135: </a><font color="#B22222">-  lj - the local Jacobian</font>
 
1092
 
 
1093
<a name="line1137">1137: </a><font color="#B22222">   Level: intermediate</font>
 
1094
 
 
1095
<a name="line1139">1139: </a><font color="#B22222">   Notes: The routine <A href="../../../../docs/manualpages/SNES/SNESDAFormFunction.html#SNESDAFormFunction">SNESDAFormFunction</A>() uses this the cached function to evaluate the user provided function.</font>
 
1096
 
 
1097
<a name="line1141">1141: </a><font color="#B22222">.keywords:  distributed array, refine</font>
 
1098
 
 
1099
<a name="line1143">1143: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A>(), <A href="../../../../docs/manualpages/DA/DASetLocalFunction.html#DASetLocalFunction">DASetLocalFunction</A>()</font>
 
1100
<a name="line1144">1144: </a><font color="#B22222">@*/</font>
 
1101
<a name="line1147">1147: </a><strong><font color="#4169E1"><a name="DASetLocalJacobian"></a>int <A href="../../../../docs/manualpages/DA/DASetLocalJacobian.html#DASetLocalJacobian">DASetLocalJacobian</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,DALocalFunction1 lj)</font></strong>
 
1102
<a name="line1148">1148: </a>{
 
1103
<a name="line1151">1151: </a>  da-&gt;lj    = lj;
 
1104
<a name="line1152">1152: </a>  <font color="#4169E1">return</font>(0);
 
1105
<a name="line1153">1153: </a>}
1139
1106
 
1140
1107
<a name="line1157">1157: </a><font color="#B22222">/*@C</font>
1141
1108
<a name="line1158">1158: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DAGetLocalFunction.html#DAGetLocalFunction">DAGetLocalFunction</A> - Gets from a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> a local function and its ADIC/ADIFOR Jacobian</font>
1160
1127
<a name="line1179">1179: </a>  <font color="#4169E1">return</font>(0);
1161
1128
<a name="line1180">1180: </a>}
1162
1129
 
1163
 
<a name="line1182">1182: </a><font color="#B22222">/*@</font>
1164
 
<a name="line1183">1183: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A> - Evaluates a user provided function on each processor that </font>
1165
 
<a name="line1184">1184: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1166
 
 
1167
 
<a name="line1186">1186: </a><font color="#B22222">   Input Parameters:</font>
1168
 
<a name="line1187">1187: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1169
 
<a name="line1188">1188: </a><font color="#B22222">.    vu - input vector</font>
1170
 
<a name="line1189">1189: </a><font color="#B22222">.    vfu - output vector </font>
1171
 
<a name="line1190">1190: </a><font color="#B22222">-    w - any user data</font>
1172
 
 
1173
 
<a name="line1192">1192: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
1174
 
 
1175
 
<a name="line1194">1194: </a><font color="#B22222">    Level: advanced</font>
1176
 
 
1177
 
<a name="line1196">1196: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>()</font>
1178
 
 
1179
 
<a name="line1198">1198: </a><font color="#B22222">@*/</font>
1180
 
<a name="line1199">1199: </a><strong><font color="#4169E1"><a name="DAFormFunction1"></a>int <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vfu,void *w)</font></strong>
1181
 
<a name="line1200">1200: </a>{
1182
 
<a name="line1201">1201: </a>  int         ierr;
1183
 
<a name="line1202">1202: </a>  void        *u,*fu;
1184
 
<a name="line1203">1203: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1185
 
<a name="line1204">1204: </a>
1186
 
 
1187
 
<a name="line1207">1207: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1188
 
<a name="line1208">1208: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,(void**)&amp;u);
1189
 
<a name="line1209">1209: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vfu,(void**)&amp;fu);
1190
 
 
1191
 
<a name="line1211">1211: </a>  (*da-&gt;lf)(&amp;info,u,fu,w);
1192
 
 
1193
 
<a name="line1213">1213: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,(void**)&amp;u);
1194
 
<a name="line1214">1214: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vfu,(void**)&amp;fu);
1195
 
<a name="line1215">1215: </a>  <font color="#4169E1">return</font>(0);
1196
 
<a name="line1216">1216: </a>}
1197
 
 
1198
 
<a name="line1218">1218: </a><strong><font color="#4169E1"><a name="DAFormFunctioniTest1"></a>int DAFormFunctioniTest1(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,void *w)</font></strong>
1199
 
<a name="line1219">1219: </a>{
1200
 
<a name="line1220">1220: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>         vu,fu,fui;
1201
 
<a name="line1221">1221: </a>  int         ierr,i,n;
1202
 
<a name="line1222">1222: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *ui,mone = -1.0;
1203
 
<a name="line1223">1223: </a>  PetscRandom rnd;
1204
 
<a name="line1224">1224: </a>  PetscReal   norm;
1205
 
 
1206
 
<a name="line1227">1227: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalVector.html#DAGetLocalVector">DAGetLocalVector</A>(da,&amp;vu);
1207
 
<a name="line1228">1228: </a>  <A href="../../../../docs/manualpages/Sys/PetscRandomCreate.html#PetscRandomCreate">PetscRandomCreate</A>(PETSC_COMM_SELF,RANDOM_DEFAULT,&amp;rnd);
1208
 
<a name="line1229">1229: </a>  <A href="../../../../docs/manualpages/Vec/VecSetRandom.html#VecSetRandom">VecSetRandom</A>(rnd,vu);
1209
 
<a name="line1230">1230: </a>  <A href="../../../../docs/manualpages/Sys/PetscRandomDestroy.html#PetscRandomDestroy">PetscRandomDestroy</A>(rnd);
1210
 
 
1211
 
<a name="line1232">1232: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;fu);
1212
 
<a name="line1233">1233: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;fui);
1213
 
<a name="line1234">1234: </a>
1214
 
<a name="line1235">1235: </a>  <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(da,vu,fu,w);
1215
 
 
1216
 
<a name="line1237">1237: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(fui,&amp;ui);
1217
 
<a name="line1238">1238: </a>  <A href="../../../../docs/manualpages/Vec/VecGetLocalSize.html#VecGetLocalSize">VecGetLocalSize</A>(fui,&amp;n);
1218
 
<a name="line1239">1239: </a>  <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
1219
 
<a name="line1240">1240: </a>    <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A>(da,i,vu,ui+i,w);
1220
 
<a name="line1241">1241: </a>  }
1221
 
<a name="line1242">1242: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(fui,&amp;ui);
1222
 
 
1223
 
<a name="line1244">1244: </a>  <A href="../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;mone,fu,fui);
1224
 
<a name="line1245">1245: </a>  <A href="../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(fui,NORM_2,&amp;norm);
1225
 
<a name="line1246">1246: </a>  <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"Norm of difference in vectors %gn"</font>,norm);
1226
 
<a name="line1247">1247: </a>  <A href="../../../../docs/manualpages/Vec/VecView.html#VecView">VecView</A>(fu,0);
1227
 
<a name="line1248">1248: </a>  <A href="../../../../docs/manualpages/Vec/VecView.html#VecView">VecView</A>(fui,0);
1228
 
 
1229
 
<a name="line1250">1250: </a>  <A href="../../../../docs/manualpages/DA/DARestoreLocalVector.html#DARestoreLocalVector">DARestoreLocalVector</A>(da,&amp;vu);
1230
 
<a name="line1251">1251: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;fu);
1231
 
<a name="line1252">1252: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;fui);
1232
 
<a name="line1253">1253: </a>  <font color="#4169E1">return</font>(0);
1233
 
<a name="line1254">1254: </a>}
1234
 
 
1235
 
<a name="line1256">1256: </a><font color="#B22222">/*@</font>
1236
 
<a name="line1257">1257: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A> - Evaluates a user provided function</font>
1237
 
 
1238
 
<a name="line1259">1259: </a><font color="#B22222">   Input Parameters:</font>
1239
 
<a name="line1260">1260: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1240
 
<a name="line1261">1261: </a><font color="#B22222">.    i - the component of the function we wish to compute (must be local)</font>
1241
 
<a name="line1262">1262: </a><font color="#B22222">.    vu - input vector</font>
1242
 
<a name="line1263">1263: </a><font color="#B22222">.    vfu - output value</font>
1243
 
<a name="line1264">1264: </a><font color="#B22222">-    w - any user data</font>
1244
 
 
1245
 
<a name="line1266">1266: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
1246
 
 
1247
 
<a name="line1268">1268: </a><font color="#B22222">    Level: advanced</font>
1248
 
 
1249
 
<a name="line1270">1270: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>()</font>
1250
 
 
1251
 
<a name="line1272">1272: </a><font color="#B22222">@*/</font>
1252
 
<a name="line1273">1273: </a><strong><font color="#4169E1"><a name="DAFormFunctioni1"></a>int <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int i,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *vfu,void *w)</font></strong>
1253
 
<a name="line1274">1274: </a>{
1254
 
<a name="line1275">1275: </a>  int         ierr;
1255
 
<a name="line1276">1276: </a>  void        *u;
1256
 
<a name="line1277">1277: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1257
 
<a name="line1278">1278: </a>  <A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>  stencil;
1258
 
<a name="line1279">1279: </a>
1259
 
 
1260
 
<a name="line1282">1282: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1261
 
<a name="line1283">1283: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,(void**)&amp;u);
1262
 
 
1263
 
<a name="line1285">1285: </a>  <font color="#B22222">/* figure out stencil value from i */</font>
1264
 
<a name="line1286">1286: </a>  stencil.c = i % info.dof;
1265
 
<a name="line1287">1287: </a>  stencil.i = (i % (info.xm*info.dof))/info.dof;
1266
 
<a name="line1288">1288: </a>  stencil.j = (i % (info.xm*info.ym*info.dof))/(info.xm*info.dof);
1267
 
<a name="line1289">1289: </a>  stencil.k = i/(info.xm*info.ym*info.dof);
1268
 
 
1269
 
<a name="line1291">1291: </a>  (*da-&gt;lfi)(&amp;info,&amp;stencil,u,vfu,w);
1270
 
 
1271
 
<a name="line1293">1293: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,(void**)&amp;u);
1272
 
<a name="line1294">1294: </a>  <font color="#4169E1">return</font>(0);
1273
 
<a name="line1295">1295: </a>}
1274
 
 
1275
 
<a name="line1297">1297: </a><font color="#A020F0">#if defined(new)</font>
1276
 
<a name="line1298">1298: </a><font color="#B22222">/*</font>
1277
 
<a name="line1299">1299: </a><font color="#B22222">  DAGetDiagonal_MFFD - Gets the diagonal for a matrix free matrix where local</font>
1278
 
<a name="line1300">1300: </a><font color="#B22222">    function lives on a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1279
 
 
1280
 
<a name="line1302">1302: </a><font color="#B22222">        y ~= (F(u + ha) - F(u))/h, </font>
1281
 
<a name="line1303">1303: </a><font color="#B22222">  where F = nonlinear function, as set by <A href="../../../../docs/manualpages/SNES/SNESSetFunction.html#SNESSetFunction">SNESSetFunction</A>()</font>
1282
 
<a name="line1304">1304: </a><font color="#B22222">        u = current iterate</font>
1283
 
<a name="line1305">1305: </a><font color="#B22222">        h = difference interval</font>
1284
 
<a name="line1306">1306: </a><font color="#B22222">*/</font>
1285
 
<a name="line1307">1307: </a><strong><font color="#4169E1"><a name="DAGetDiagonal_MFFD"></a>int DAGetDiagonal_MFFD(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> U,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> a)</font></strong>
1286
 
<a name="line1308">1308: </a>{
1287
 
<a name="line1309">1309: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  h,*aa,*ww,v;
1288
 
<a name="line1310">1310: </a>  PetscReal    epsilon = PETSC_SQRT_MACHINE_EPSILON,umin = 100.0*PETSC_SQRT_MACHINE_EPSILON;
1289
 
<a name="line1311">1311: </a>  int          ierr,gI,nI;
1290
 
<a name="line1312">1312: </a>  <A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>   stencil;
1291
 
<a name="line1313">1313: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>  info;
1292
 
<a name="line1314">1314: </a>
1293
 
<a name="line1316">1316: </a>  (*ctx-&gt;func)(0,U,a,ctx-&gt;funcctx);
1294
 
<a name="line1317">1317: </a>  (*ctx-&gt;funcisetbase)(U,ctx-&gt;funcctx);
1295
 
 
1296
 
<a name="line1319">1319: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(U,&amp;ww);
1297
 
<a name="line1320">1320: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(a,&amp;aa);
1298
 
<a name="line1321">1321: </a>
1299
 
<a name="line1322">1322: </a>  nI = 0;
1300
 
<a name="line1323">1323: </a>    h  = ww[gI];
1301
 
<a name="line1324">1324: </a>    <font color="#4169E1">if</font> (h == 0.0) h = 1.0;
1302
 
<a name="line1325">1325: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
1303
 
<a name="line1326">1326: </a>    <font color="#4169E1">if</font> (h &lt; umin &amp;&amp; h &gt;= 0.0)      h = umin;
1304
 
<a name="line1327">1327: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (h &lt; 0.0 &amp;&amp; h &gt; -umin) h = -umin;
1305
 
<a name="line1328">1328: </a><font color="#A020F0">#else</font>
1306
 
<a name="line1329">1329: </a>    <font color="#4169E1">if</font> (PetscAbsScalar(h) &lt; umin &amp;&amp; PetscRealPart(h) &gt;= 0.0)     h = umin;
1307
 
<a name="line1330">1330: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscRealPart(h) &lt; 0.0 &amp;&amp; PetscAbsScalar(h) &lt; umin) h = -umin;
1308
 
<a name="line1331">1331: </a><font color="#A020F0">#endif</font>
1309
 
<a name="line1332">1332: </a>    h     *= epsilon;
1310
 
<a name="line1333">1333: </a>
1311
 
<a name="line1334">1334: </a>    ww[gI += h;
1312
 
<a name="line1335">1335: </a>    ierr          = (*ctx-&gt;funci)(i,w,&amp;v,ctx-&gt;funcctx);
1313
 
<a name="line1336">1336: </a>    aa[nI]  = (v - aa[nI])/h;
1314
 
<a name="line1337">1337: </a>    ww[gI] -= h;
1315
 
<a name="line1338">1338: </a>    nI++;
1316
 
<a name="line1339">1339: </a>  }
1317
 
<a name="line1340">1340: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(U,&amp;ww);
1318
 
<a name="line1341">1341: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(a,&amp;aa);
1319
 
<a name="line1342">1342: </a>  <font color="#4169E1">return</font>(0);
1320
 
<a name="line1343">1343: </a>}
1321
 
<a name="line1344">1344: </a><font color="#A020F0">#endif</font>
1322
 
 
1323
 
<a name="line1346">1346: </a><font color="#A020F0">#if defined(PETSC_HAVE_ADIC) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
1324
 
<a name="line1347">1347: </a>EXTERN_C_BEGIN
1325
 
<a name="line1348">1348: </a><font color="#A020F0">#include </font><font color="#666666">"adic/ad_utils.h"</font><font color="#A020F0"></font>
1326
 
<a name="line1349">1349: </a>EXTERN_C_END
1327
 
 
1328
 
<a name="line1351">1351: </a><font color="#B22222">/*@</font>
1329
 
<a name="line1352">1352: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A> - Evaluates a adiC provided Jacobian function on each processor that </font>
1330
 
<a name="line1353">1353: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1331
 
 
1332
 
<a name="line1355">1355: </a><font color="#B22222">   Input Parameters:</font>
1333
 
<a name="line1356">1356: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1334
 
<a name="line1357">1357: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
1335
 
<a name="line1358">1358: </a><font color="#B22222">.    J - output matrix</font>
1336
 
<a name="line1359">1359: </a><font color="#B22222">-    w - any user data</font>
1337
 
 
1338
 
<a name="line1361">1361: </a><font color="#B22222">   Level: advanced</font>
1339
 
 
1340
 
<a name="line1363">1363: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
1341
 
 
1342
 
<a name="line1365">1365: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
1343
 
 
1344
 
<a name="line1367">1367: </a><font color="#B22222">@*/</font>
1345
 
<a name="line1368">1368: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
1346
 
<a name="line1369">1369: </a>{
1347
 
<a name="line1370">1370: </a>  int         ierr,gtdof,tdof;
1348
 
<a name="line1371">1371: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *ustart;
1349
 
<a name="line1372">1372: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1350
 
<a name="line1373">1373: </a>  void        *ad_u,*ad_f,*ad_ustart,*ad_fstart;
1351
 
<a name="line1374">1374: </a>  ISColoring  iscoloring;
1352
 
 
1353
 
<a name="line1377">1377: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1354
 
 
1355
 
<a name="line1379">1379: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
1356
 
<a name="line1380">1380: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicArray.html#DAGetAdicArray">DAGetAdicArray</A>(da,PETSC_TRUE,(void **)&amp;ad_u,&amp;ad_ustart,&amp;gtdof);
1357
 
<a name="line1381">1381: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicArray.html#DAGetAdicArray">DAGetAdicArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,&amp;ad_fstart,&amp;tdof);
1358
 
<a name="line1382">1382: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;ustart);
1359
 
<a name="line1383">1383: </a>  PetscADSetValArray(((DERIV_TYPE*)ad_ustart),gtdof,ustart);
1360
 
<a name="line1384">1384: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;ustart);
1361
 
 
1362
 
<a name="line1386">1386: </a>  PetscADResetIndep();
1363
 
<a name="line1387">1387: </a>  <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>(da,IS_COLORING_GHOSTED,&amp;iscoloring);
1364
 
<a name="line1388">1388: </a>  PetscADSetIndepArrayColored(ad_ustart,gtdof,iscoloring-&gt;colors);
1365
 
<a name="line1389">1389: </a>  PetscADIncrementTotalGradSize(iscoloring-&gt;n);
1366
 
<a name="line1390">1390: </a>  <A href="../../../../docs/manualpages/IS/ISColoringDestroy.html#ISColoringDestroy">ISColoringDestroy</A>(iscoloring);
1367
 
<a name="line1391">1391: </a>  PetscADSetIndepDone();
1368
 
 
1369
 
<a name="line1393">1393: </a>  (*da-&gt;adic_lf)(&amp;info,ad_u,ad_f,w);
1370
 
 
1371
 
<a name="line1395">1395: </a>  <font color="#B22222">/* stick the values into the matrix */</font>
1372
 
<a name="line1396">1396: </a>  <A href="../../../../docs/manualpages/Mat/MatSetValuesAdic.html#MatSetValuesAdic">MatSetValuesAdic</A>(J,(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>**)ad_fstart);
1373
 
 
1374
 
<a name="line1398">1398: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
1375
 
<a name="line1399">1399: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicArray.html#DARestoreAdicArray">DARestoreAdicArray</A>(da,PETSC_TRUE,(void **)&amp;ad_u,&amp;ad_ustart,&amp;gtdof);
1376
 
<a name="line1400">1400: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicArray.html#DARestoreAdicArray">DARestoreAdicArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,&amp;ad_fstart,&amp;tdof);
1377
 
<a name="line1401">1401: </a>  <font color="#4169E1">return</font>(0);
1378
 
<a name="line1402">1402: </a>}
1379
 
 
1380
 
<a name="line1404">1404: </a><font color="#B22222">/*@C</font>
1381
 
<a name="line1405">1405: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A> - Applies an ADIC-provided Jacobian function to a vector on </font>
1382
 
<a name="line1406">1406: </a><font color="#B22222">    each processor that shares a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
1383
 
 
1384
 
<a name="line1408">1408: </a><font color="#B22222">    Input Parameters:</font>
1385
 
<a name="line1409">1409: </a><font color="#B22222">+   da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1386
 
<a name="line1410">1410: </a><font color="#B22222">.   vu - Jacobian is computed at this point (ghosted)</font>
1387
 
<a name="line1411">1411: </a><font color="#B22222">.   v - product is done on this vector (ghosted)</font>
1388
 
<a name="line1412">1412: </a><font color="#B22222">.   fu - output vector = J(vu)*v (not ghosted)</font>
1389
 
<a name="line1413">1413: </a><font color="#B22222">-   w - any user data</font>
1390
 
 
1391
 
<a name="line1415">1415: </a><font color="#B22222">    Notes: </font>
1392
 
<a name="line1416">1416: </a><font color="#B22222">    This routine does NOT do ghost updates on vu upon entry.</font>
1393
 
 
1394
 
<a name="line1418">1418: </a><font color="#B22222">   Level: advanced</font>
1395
 
 
1396
 
<a name="line1420">1420: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
1397
 
 
1398
 
<a name="line1422">1422: </a><font color="#B22222">@*/</font>
1399
 
<a name="line1423">1423: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
1400
 
<a name="line1424">1424: </a>{
1401
 
<a name="line1425">1425: </a>  int         ierr,i,gtdof,tdof;
1402
 
<a name="line1426">1426: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *avu,*av,*af,*ad_vustart,*ad_fstart;
1403
 
<a name="line1427">1427: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1404
 
<a name="line1428">1428: </a>  void        *ad_vu,*ad_f;
1405
 
 
1406
 
<a name="line1431">1431: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1407
 
 
1408
 
<a name="line1433">1433: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
1409
 
<a name="line1434">1434: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicMFArray.html#DAGetAdicMFArray">DAGetAdicMFArray</A>(da,PETSC_TRUE,(void **)&amp;ad_vu,(void**)&amp;ad_vustart,&amp;gtdof);
1410
 
<a name="line1435">1435: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicMFArray.html#DAGetAdicMFArray">DAGetAdicMFArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,(void**)&amp;ad_fstart,&amp;tdof);
1411
 
 
1412
 
<a name="line1437">1437: </a>  <font color="#B22222">/* copy input vector into derivative object */</font>
1413
 
<a name="line1438">1438: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;avu);
1414
 
<a name="line1439">1439: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(v,&amp;av);
1415
 
<a name="line1440">1440: </a>  <font color="#4169E1">for</font> (i=0; i&lt;gtdof; i++) {
1416
 
<a name="line1441">1441: </a>    ad_vustart[2*i]   = avu[i];
1417
 
<a name="line1442">1442: </a>    ad_vustart[2*i+1] = av[i];
1418
 
<a name="line1443">1443: </a>  }
1419
 
<a name="line1444">1444: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;avu);
1420
 
<a name="line1445">1445: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(v,&amp;av);
1421
 
 
1422
 
<a name="line1447">1447: </a>  PetscADResetIndep();
1423
 
<a name="line1448">1448: </a>  PetscADIncrementTotalGradSize(1);
1424
 
<a name="line1449">1449: </a>  PetscADSetIndepDone();
1425
 
 
1426
 
<a name="line1451">1451: </a>  (*da-&gt;adicmf_lf)(&amp;info,ad_vu,ad_f,w);
1427
 
 
1428
 
<a name="line1453">1453: </a>  <font color="#B22222">/* stick the values into the vector */</font>
1429
 
<a name="line1454">1454: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(f,&amp;af);
1430
 
<a name="line1455">1455: </a>  <font color="#4169E1">for</font> (i=0; i&lt;tdof; i++) {
1431
 
<a name="line1456">1456: </a>    af[i] = ad_fstart[2*i+1];
1432
 
<a name="line1457">1457: </a>  }
1433
 
<a name="line1458">1458: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(f,&amp;af);
1434
 
 
1435
 
<a name="line1460">1460: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
1436
 
<a name="line1461">1461: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicMFArray.html#DARestoreAdicMFArray">DARestoreAdicMFArray</A>(da,PETSC_TRUE,(void **)&amp;ad_vu,(void**)&amp;ad_vustart,&amp;gtdof);
1437
 
<a name="line1462">1462: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicMFArray.html#DARestoreAdicMFArray">DARestoreAdicMFArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,(void**)&amp;ad_fstart,&amp;tdof);
1438
 
<a name="line1463">1463: </a>  <font color="#4169E1">return</font>(0);
1439
 
<a name="line1464">1464: </a>}
1440
 
 
1441
 
 
1442
 
<a name="line1467">1467: </a><font color="#A020F0">#else</font>
1443
 
 
1444
 
<a name="line1469">1469: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
1445
 
<a name="line1470">1470: </a>{
1446
 
<a name="line1472">1472: </a>  <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must compile with bmake/PETSC_ARCH/packages flag PETSC_HAVE_ADIC for this routine"</font>);
1447
 
<a name="line1473">1473: </a>}
1448
 
 
1449
 
<a name="line1475">1475: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
1450
 
<a name="line1476">1476: </a>{
1451
 
<a name="line1478">1478: </a>  <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must compile with bmake/PETSC_ARCH/packages flag PETSC_HAVE_ADIC for this routine"</font>);
 
1130
<a name="line1184">1184: </a><font color="#B22222">/*@</font>
 
1131
<a name="line1185">1185: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A> - Evaluates a user provided function on each processor that </font>
 
1132
<a name="line1186">1186: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1133
 
 
1134
<a name="line1188">1188: </a><font color="#B22222">   Input Parameters:</font>
 
1135
<a name="line1189">1189: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1136
<a name="line1190">1190: </a><font color="#B22222">.    vu - input vector</font>
 
1137
<a name="line1191">1191: </a><font color="#B22222">.    vfu - output vector </font>
 
1138
<a name="line1192">1192: </a><font color="#B22222">-    w - any user data</font>
 
1139
 
 
1140
<a name="line1194">1194: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
 
1141
 
 
1142
<a name="line1196">1196: </a><font color="#B22222">    Level: advanced</font>
 
1143
 
 
1144
<a name="line1198">1198: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>()</font>
 
1145
 
 
1146
<a name="line1200">1200: </a><font color="#B22222">@*/</font>
 
1147
<a name="line1201">1201: </a><strong><font color="#4169E1"><a name="DAFormFunction1"></a>int <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vfu,void *w)</font></strong>
 
1148
<a name="line1202">1202: </a>{
 
1149
<a name="line1203">1203: </a>  int         ierr;
 
1150
<a name="line1204">1204: </a>  void        *u,*fu;
 
1151
<a name="line1205">1205: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1152
<a name="line1206">1206: </a>
 
1153
 
 
1154
<a name="line1209">1209: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1155
<a name="line1210">1210: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,&amp;u);
 
1156
<a name="line1211">1211: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vfu,&amp;fu);
 
1157
 
 
1158
<a name="line1213">1213: </a>  (*da-&gt;lf)(&amp;info,u,fu,w);
 
1159
 
 
1160
<a name="line1215">1215: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,&amp;u);
 
1161
<a name="line1216">1216: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vfu,&amp;fu);
 
1162
<a name="line1217">1217: </a>  <font color="#4169E1">return</font>(0);
 
1163
<a name="line1218">1218: </a>}
 
1164
 
 
1165
<a name="line1222">1222: </a><strong><font color="#4169E1"><a name="DAFormFunctioniTest1"></a>int DAFormFunctioniTest1(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,void *w)</font></strong>
 
1166
<a name="line1223">1223: </a>{
 
1167
<a name="line1224">1224: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>         vu,fu,fui;
 
1168
<a name="line1225">1225: </a>  int         ierr,i,n;
 
1169
<a name="line1226">1226: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *ui,mone = -1.0;
 
1170
<a name="line1227">1227: </a>  <A href="../../../../docs/manualpages/Sys/PetscRandom.html#PetscRandom">PetscRandom</A> rnd;
 
1171
<a name="line1228">1228: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>   norm;
 
1172
 
 
1173
<a name="line1231">1231: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalVector.html#DAGetLocalVector">DAGetLocalVector</A>(da,&amp;vu);
 
1174
<a name="line1232">1232: </a>  <A href="../../../../docs/manualpages/Sys/PetscRandomCreate.html#PetscRandomCreate">PetscRandomCreate</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A>,RANDOM_DEFAULT,&amp;rnd);
 
1175
<a name="line1233">1233: </a>  <A href="../../../../docs/manualpages/Vec/VecSetRandom.html#VecSetRandom">VecSetRandom</A>(rnd,vu);
 
1176
<a name="line1234">1234: </a>  <A href="../../../../docs/manualpages/Sys/PetscRandomDestroy.html#PetscRandomDestroy">PetscRandomDestroy</A>(rnd);
 
1177
 
 
1178
<a name="line1236">1236: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;fu);
 
1179
<a name="line1237">1237: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;fui);
 
1180
<a name="line1238">1238: </a>
 
1181
<a name="line1239">1239: </a>  <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(da,vu,fu,w);
 
1182
 
 
1183
<a name="line1241">1241: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(fui,&amp;ui);
 
1184
<a name="line1242">1242: </a>  <A href="../../../../docs/manualpages/Vec/VecGetLocalSize.html#VecGetLocalSize">VecGetLocalSize</A>(fui,&amp;n);
 
1185
<a name="line1243">1243: </a>  <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
1186
<a name="line1244">1244: </a>    <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A>(da,i,vu,ui+i,w);
 
1187
<a name="line1245">1245: </a>  }
 
1188
<a name="line1246">1246: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(fui,&amp;ui);
 
1189
 
 
1190
<a name="line1248">1248: </a>  <A href="../../../../docs/manualpages/Vec/VecAXPY.html#VecAXPY">VecAXPY</A>(&amp;mone,fu,fui);
 
1191
<a name="line1249">1249: </a>  <A href="../../../../docs/manualpages/Vec/VecNorm.html#VecNorm">VecNorm</A>(fui,NORM_2,&amp;norm);
 
1192
<a name="line1250">1250: </a>  <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(da-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,<font color="#666666">"Norm of difference in vectors %g\n"</font>,norm);
 
1193
<a name="line1251">1251: </a>  <A href="../../../../docs/manualpages/Vec/VecView.html#VecView">VecView</A>(fu,0);
 
1194
<a name="line1252">1252: </a>  <A href="../../../../docs/manualpages/Vec/VecView.html#VecView">VecView</A>(fui,0);
 
1195
 
 
1196
<a name="line1254">1254: </a>  <A href="../../../../docs/manualpages/DA/DARestoreLocalVector.html#DARestoreLocalVector">DARestoreLocalVector</A>(da,&amp;vu);
 
1197
<a name="line1255">1255: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;fu);
 
1198
<a name="line1256">1256: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;fui);
 
1199
<a name="line1257">1257: </a>  <font color="#4169E1">return</font>(0);
 
1200
<a name="line1258">1258: </a>}
 
1201
 
 
1202
<a name="line1262">1262: </a><font color="#B22222">/*@</font>
 
1203
<a name="line1263">1263: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A> - Evaluates a user provided function</font>
 
1204
 
 
1205
<a name="line1265">1265: </a><font color="#B22222">   Input Parameters:</font>
 
1206
<a name="line1266">1266: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1207
<a name="line1267">1267: </a><font color="#B22222">.    i - the component of the function we wish to compute (must be local)</font>
 
1208
<a name="line1268">1268: </a><font color="#B22222">.    vu - input vector</font>
 
1209
<a name="line1269">1269: </a><font color="#B22222">.    vfu - output value</font>
 
1210
<a name="line1270">1270: </a><font color="#B22222">-    w - any user data</font>
 
1211
 
 
1212
<a name="line1272">1272: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
 
1213
 
 
1214
<a name="line1274">1274: </a><font color="#B22222">    Level: advanced</font>
 
1215
 
 
1216
<a name="line1276">1276: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>()</font>
 
1217
 
 
1218
<a name="line1278">1278: </a><font color="#B22222">@*/</font>
 
1219
<a name="line1279">1279: </a><strong><font color="#4169E1"><a name="DAFormFunctioni1"></a>int <A href="../../../../docs/manualpages/DA/DAFormFunctioni1.html#DAFormFunctioni1">DAFormFunctioni1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,int i,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *vfu,void *w)</font></strong>
 
1220
<a name="line1280">1280: </a>{
 
1221
<a name="line1281">1281: </a>  int         ierr;
 
1222
<a name="line1282">1282: </a>  void        *u;
 
1223
<a name="line1283">1283: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1224
<a name="line1284">1284: </a>  <A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>  stencil;
 
1225
<a name="line1285">1285: </a>
 
1226
 
 
1227
<a name="line1288">1288: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1228
<a name="line1289">1289: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,&amp;u);
 
1229
 
 
1230
<a name="line1291">1291: </a>  <font color="#B22222">/* figure out stencil value from i */</font>
 
1231
<a name="line1292">1292: </a>  stencil.c = i % info.dof;
 
1232
<a name="line1293">1293: </a>  stencil.i = (i % (info.xm*info.dof))/info.dof;
 
1233
<a name="line1294">1294: </a>  stencil.j = (i % (info.xm*info.ym*info.dof))/(info.xm*info.dof);
 
1234
<a name="line1295">1295: </a>  stencil.k = i/(info.xm*info.ym*info.dof);
 
1235
 
 
1236
<a name="line1297">1297: </a>  (*da-&gt;lfi)(&amp;info,&amp;stencil,u,vfu,w);
 
1237
 
 
1238
<a name="line1299">1299: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,&amp;u);
 
1239
<a name="line1300">1300: </a>  <font color="#4169E1">return</font>(0);
 
1240
<a name="line1301">1301: </a>}
 
1241
 
 
1242
<a name="line1303">1303: </a><font color="#A020F0">#if defined(new)</font>
 
1243
<a name="line1306">1306: </a><font color="#B22222">/*</font>
 
1244
<a name="line1307">1307: </a><font color="#B22222">  DAGetDiagonal_MFFD - Gets the diagonal for a matrix free matrix where local</font>
 
1245
<a name="line1308">1308: </a><font color="#B22222">    function lives on a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1246
 
 
1247
<a name="line1310">1310: </a><font color="#B22222">        y ~= (F(u + ha) - F(u))/h, </font>
 
1248
<a name="line1311">1311: </a><font color="#B22222">  where F = nonlinear function, as set by <A href="../../../../docs/manualpages/SNES/SNESSetFunction.html#SNESSetFunction">SNESSetFunction</A>()</font>
 
1249
<a name="line1312">1312: </a><font color="#B22222">        u = current iterate</font>
 
1250
<a name="line1313">1313: </a><font color="#B22222">        h = difference interval</font>
 
1251
<a name="line1314">1314: </a><font color="#B22222">*/</font>
 
1252
<a name="line1315">1315: </a><strong><font color="#4169E1"><a name="DAGetDiagonal_MFFD"></a>int DAGetDiagonal_MFFD(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> U,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> a)</font></strong>
 
1253
<a name="line1316">1316: </a>{
 
1254
<a name="line1317">1317: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  h,*aa,*ww,v;
 
1255
<a name="line1318">1318: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>    epsilon = PETSC_SQRT_MACHINE_EPSILON,umin = 100.0*PETSC_SQRT_MACHINE_EPSILON;
 
1256
<a name="line1319">1319: </a>  int          ierr,gI,nI;
 
1257
<a name="line1320">1320: </a>  <A href="../../../../docs/manualpages/Mat/MatStencil.html#MatStencil">MatStencil</A>   stencil;
 
1258
<a name="line1321">1321: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>  info;
 
1259
<a name="line1322">1322: </a>
 
1260
<a name="line1324">1324: </a>  (*ctx-&gt;func)(0,U,a,ctx-&gt;funcctx);
 
1261
<a name="line1325">1325: </a>  (*ctx-&gt;funcisetbase)(U,ctx-&gt;funcctx);
 
1262
 
 
1263
<a name="line1327">1327: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(U,&amp;ww);
 
1264
<a name="line1328">1328: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(a,&amp;aa);
 
1265
<a name="line1329">1329: </a>
 
1266
<a name="line1330">1330: </a>  nI = 0;
 
1267
<a name="line1331">1331: </a>    h  = ww[gI];
 
1268
<a name="line1332">1332: </a>    <font color="#4169E1">if</font> (h == 0.0) h = 1.0;
 
1269
<a name="line1333">1333: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
 
1270
<a name="line1334">1334: </a>    <font color="#4169E1">if</font> (h &lt; umin &amp;&amp; h &gt;= 0.0)      h = umin;
 
1271
<a name="line1335">1335: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (h &lt; 0.0 &amp;&amp; h &gt; -umin) h = -umin;
 
1272
<a name="line1336">1336: </a><font color="#A020F0">#else</font>
 
1273
<a name="line1337">1337: </a>    <font color="#4169E1">if</font> (PetscAbsScalar(h) &lt; umin &amp;&amp; PetscRealPart(h) &gt;= 0.0)     h = umin;
 
1274
<a name="line1338">1338: </a>    <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscRealPart(h) &lt; 0.0 &amp;&amp; PetscAbsScalar(h) &lt; umin) h = -umin;
 
1275
<a name="line1339">1339: </a><font color="#A020F0">#endif</font>
 
1276
<a name="line1340">1340: </a>    h     *= epsilon;
 
1277
<a name="line1341">1341: </a>
 
1278
<a name="line1342">1342: </a>    ww[gI += h;
 
1279
<a name="line1343">1343: </a>    (*ctx-&gt;funci)(i,w,&amp;v,ctx-&gt;funcctx);
 
1280
<a name="line1344">1344: </a>    aa[nI]  = (v - aa[nI])/h;
 
1281
<a name="line1345">1345: </a>    ww[gI] -= h;
 
1282
<a name="line1346">1346: </a>    nI++;
 
1283
<a name="line1347">1347: </a>  }
 
1284
<a name="line1348">1348: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(U,&amp;ww);
 
1285
<a name="line1349">1349: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(a,&amp;aa);
 
1286
<a name="line1350">1350: </a>  <font color="#4169E1">return</font>(0);
 
1287
<a name="line1351">1351: </a>}
 
1288
<a name="line1352">1352: </a><font color="#A020F0">#endif</font>
 
1289
 
 
1290
<a name="line1354">1354: </a><font color="#A020F0">#if defined(PETSC_HAVE_ADIC) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
1291
<a name="line1355">1355: </a>EXTERN_C_BEGIN
 
1292
<a name="line1356">1356: </a><font color="#A020F0">#include </font><font color="#666666">"adic/ad_utils.h"</font><font color="#A020F0"></font>
 
1293
<a name="line1357">1357: </a>EXTERN_C_END
 
1294
 
 
1295
<a name="line1361">1361: </a><font color="#B22222">/*@</font>
 
1296
<a name="line1362">1362: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A> - Evaluates a adiC provided Jacobian function on each processor that </font>
 
1297
<a name="line1363">1363: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1298
 
 
1299
<a name="line1365">1365: </a><font color="#B22222">   Input Parameters:</font>
 
1300
<a name="line1366">1366: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1301
<a name="line1367">1367: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
 
1302
<a name="line1368">1368: </a><font color="#B22222">.    J - output matrix</font>
 
1303
<a name="line1369">1369: </a><font color="#B22222">-    w - any user data</font>
 
1304
 
 
1305
<a name="line1371">1371: </a><font color="#B22222">   Level: advanced</font>
 
1306
 
 
1307
<a name="line1373">1373: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
 
1308
 
 
1309
<a name="line1375">1375: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
 
1310
 
 
1311
<a name="line1377">1377: </a><font color="#B22222">@*/</font>
 
1312
<a name="line1378">1378: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
 
1313
<a name="line1379">1379: </a>{
 
1314
<a name="line1380">1380: </a>  int         ierr,gtdof,tdof;
 
1315
<a name="line1381">1381: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *ustart;
 
1316
<a name="line1382">1382: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1317
<a name="line1383">1383: </a>  void        *ad_u,*ad_f,*ad_ustart,*ad_fstart;
 
1318
<a name="line1384">1384: </a>  <A href="../../../../docs/manualpages/IS/ISColoring.html#ISColoring">ISColoring</A>  iscoloring;
 
1319
 
 
1320
<a name="line1387">1387: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1321
 
 
1322
<a name="line1389">1389: </a>  PetscADResetIndep();
 
1323
 
 
1324
<a name="line1391">1391: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
 
1325
<a name="line1392">1392: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicArray.html#DAGetAdicArray">DAGetAdicArray</A>(da,PETSC_TRUE,(void **)&amp;ad_u,&amp;ad_ustart,&amp;gtdof);
 
1326
<a name="line1393">1393: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicArray.html#DAGetAdicArray">DAGetAdicArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,&amp;ad_fstart,&amp;tdof);
 
1327
<a name="line1394">1394: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;ustart);
 
1328
<a name="line1395">1395: </a>  <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>(da,IS_COLORING_GHOSTED,&amp;iscoloring);
 
1329
 
 
1330
<a name="line1397">1397: </a>  PetscADSetValueAndColor(ad_ustart,gtdof,iscoloring-&gt;colors,ustart);
 
1331
 
 
1332
<a name="line1399">1399: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;ustart);
 
1333
<a name="line1400">1400: </a>  <A href="../../../../docs/manualpages/IS/ISColoringDestroy.html#ISColoringDestroy">ISColoringDestroy</A>(iscoloring);
 
1334
<a name="line1401">1401: </a>  PetscADIncrementTotalGradSize(iscoloring-&gt;n);
 
1335
<a name="line1402">1402: </a>  PetscADSetIndepDone();
 
1336
 
 
1337
<a name="line1404">1404: </a>  DALogEventBegin(DA_LocalADFunction,0,0,0,0);
 
1338
<a name="line1405">1405: </a>  (*da-&gt;adic_lf)(&amp;info,ad_u,ad_f,w);
 
1339
<a name="line1406">1406: </a>  DALogEventEnd(DA_LocalADFunction,0,0,0,0);
 
1340
 
 
1341
<a name="line1408">1408: </a>  <font color="#B22222">/* stick the values into the matrix */</font>
 
1342
<a name="line1409">1409: </a>  <A href="../../../../docs/manualpages/Mat/MatSetValuesAdic.html#MatSetValuesAdic">MatSetValuesAdic</A>(J,(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>**)ad_fstart);
 
1343
 
 
1344
<a name="line1411">1411: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
 
1345
<a name="line1412">1412: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicArray.html#DARestoreAdicArray">DARestoreAdicArray</A>(da,PETSC_TRUE,(void **)&amp;ad_u,&amp;ad_ustart,&amp;gtdof);
 
1346
<a name="line1413">1413: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicArray.html#DARestoreAdicArray">DARestoreAdicArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,&amp;ad_fstart,&amp;tdof);
 
1347
<a name="line1414">1414: </a>  <font color="#4169E1">return</font>(0);
 
1348
<a name="line1415">1415: </a>}
 
1349
 
 
1350
<a name="line1419">1419: </a><font color="#B22222">/*@C</font>
 
1351
<a name="line1420">1420: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A> - Applies an ADIC-provided Jacobian function to a vector on </font>
 
1352
<a name="line1421">1421: </a><font color="#B22222">    each processor that shares a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
 
1353
 
 
1354
<a name="line1423">1423: </a><font color="#B22222">    Input Parameters:</font>
 
1355
<a name="line1424">1424: </a><font color="#B22222">+   da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1356
<a name="line1425">1425: </a><font color="#B22222">.   vu - Jacobian is computed at this point (ghosted)</font>
 
1357
<a name="line1426">1426: </a><font color="#B22222">.   v - product is done on this vector (ghosted)</font>
 
1358
<a name="line1427">1427: </a><font color="#B22222">.   fu - output vector = J(vu)*v (not ghosted)</font>
 
1359
<a name="line1428">1428: </a><font color="#B22222">-   w - any user data</font>
 
1360
 
 
1361
<a name="line1430">1430: </a><font color="#B22222">    Notes: </font>
 
1362
<a name="line1431">1431: </a><font color="#B22222">    This routine does NOT do ghost updates on vu upon entry.</font>
 
1363
 
 
1364
<a name="line1433">1433: </a><font color="#B22222">   Level: advanced</font>
 
1365
 
 
1366
<a name="line1435">1435: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
 
1367
 
 
1368
<a name="line1437">1437: </a><font color="#B22222">@*/</font>
 
1369
<a name="line1438">1438: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
 
1370
<a name="line1439">1439: </a>{
 
1371
<a name="line1440">1440: </a>  int         ierr,i,gtdof,tdof;
 
1372
<a name="line1441">1441: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *avu,*av,*af,*ad_vustart,*ad_fstart;
 
1373
<a name="line1442">1442: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1374
<a name="line1443">1443: </a>  void        *ad_vu,*ad_f;
 
1375
 
 
1376
<a name="line1446">1446: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1377
 
 
1378
<a name="line1448">1448: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
 
1379
<a name="line1449">1449: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicMFArray.html#DAGetAdicMFArray">DAGetAdicMFArray</A>(da,PETSC_TRUE,(void **)&amp;ad_vu,(void**)&amp;ad_vustart,&amp;gtdof);
 
1380
<a name="line1450">1450: </a>  <A href="../../../../docs/manualpages/DA/DAGetAdicMFArray.html#DAGetAdicMFArray">DAGetAdicMFArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,(void**)&amp;ad_fstart,&amp;tdof);
 
1381
 
 
1382
<a name="line1452">1452: </a>  <font color="#B22222">/* copy input vector into derivative object */</font>
 
1383
<a name="line1453">1453: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;avu);
 
1384
<a name="line1454">1454: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(v,&amp;av);
 
1385
<a name="line1455">1455: </a>  <font color="#4169E1">for</font> (i=0; i&lt;gtdof; i++) {
 
1386
<a name="line1456">1456: </a>    ad_vustart[2*i]   = avu[i];
 
1387
<a name="line1457">1457: </a>    ad_vustart[2*i+1] = av[i];
 
1388
<a name="line1458">1458: </a>  }
 
1389
<a name="line1459">1459: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;avu);
 
1390
<a name="line1460">1460: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(v,&amp;av);
 
1391
 
 
1392
<a name="line1462">1462: </a>  PetscADResetIndep();
 
1393
<a name="line1463">1463: </a>  PetscADIncrementTotalGradSize(1);
 
1394
<a name="line1464">1464: </a>  PetscADSetIndepDone();
 
1395
 
 
1396
<a name="line1466">1466: </a>  (*da-&gt;adicmf_lf)(&amp;info,ad_vu,ad_f,w);
 
1397
 
 
1398
<a name="line1468">1468: </a>  <font color="#B22222">/* stick the values into the vector */</font>
 
1399
<a name="line1469">1469: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(f,&amp;af);
 
1400
<a name="line1470">1470: </a>  <font color="#4169E1">for</font> (i=0; i&lt;tdof; i++) {
 
1401
<a name="line1471">1471: </a>    af[i] = ad_fstart[2*i+1];
 
1402
<a name="line1472">1472: </a>  }
 
1403
<a name="line1473">1473: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(f,&amp;af);
 
1404
 
 
1405
<a name="line1475">1475: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
 
1406
<a name="line1476">1476: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicMFArray.html#DARestoreAdicMFArray">DARestoreAdicMFArray</A>(da,PETSC_TRUE,(void **)&amp;ad_vu,(void**)&amp;ad_vustart,&amp;gtdof);
 
1407
<a name="line1477">1477: </a>  <A href="../../../../docs/manualpages/DA/DARestoreAdicMFArray.html#DARestoreAdicMFArray">DARestoreAdicMFArray</A>(da,PETSC_FALSE,(void **)&amp;ad_f,(void**)&amp;ad_fstart,&amp;tdof);
 
1408
<a name="line1478">1478: </a>  <font color="#4169E1">return</font>(0);
1452
1409
<a name="line1479">1479: </a>}
1453
1410
 
1454
 
<a name="line1481">1481: </a><font color="#A020F0">#endif</font>
1455
 
 
1456
 
<a name="line1483">1483: </a><font color="#B22222">/*@</font>
1457
 
<a name="line1484">1484: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAComputeJacobian1.html#DAComputeJacobian1">DAComputeJacobian1</A> - Evaluates a local Jacobian function on each processor that </font>
1458
 
<a name="line1485">1485: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1459
 
 
1460
 
<a name="line1487">1487: </a><font color="#B22222">   Input Parameters:</font>
1461
 
<a name="line1488">1488: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1462
 
<a name="line1489">1489: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
1463
 
<a name="line1490">1490: </a><font color="#B22222">.    J - output matrix</font>
1464
 
<a name="line1491">1491: </a><font color="#B22222">-    w - any user data</font>
1465
 
 
1466
 
<a name="line1493">1493: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
1467
 
 
1468
 
<a name="line1495">1495: </a><font color="#B22222">    Level: advanced</font>
1469
 
 
1470
 
<a name="line1497">1497: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
1471
 
 
1472
 
<a name="line1499">1499: </a><font color="#B22222">@*/</font>
1473
 
<a name="line1500">1500: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1.html#DAComputeJacobian1">DAComputeJacobian1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
1474
 
<a name="line1501">1501: </a>{
1475
 
<a name="line1502">1502: </a>  int         ierr;
1476
 
<a name="line1503">1503: </a>  void        *u;
1477
 
<a name="line1504">1504: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1478
 
 
1479
 
<a name="line1507">1507: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1480
 
<a name="line1508">1508: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,&amp;u);
1481
 
<a name="line1509">1509: </a>  (*da-&gt;lj)(&amp;info,u,J,w);
1482
 
<a name="line1510">1510: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,&amp;u);
1483
 
<a name="line1511">1511: </a>  <font color="#4169E1">return</font>(0);
1484
 
<a name="line1512">1512: </a>}
1485
 
 
1486
 
 
1487
 
<a name="line1515">1515: </a><font color="#B22222">/*</font>
1488
 
<a name="line1516">1516: </a><font color="#B22222">    DAComputeJacobian1WithAdifor - Evaluates a ADIFOR provided Jacobian local function on each processor that </font>
1489
 
<a name="line1517">1517: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1490
 
 
1491
 
<a name="line1519">1519: </a><font color="#B22222">   Input Parameters:</font>
1492
 
<a name="line1520">1520: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1493
 
<a name="line1521">1521: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
1494
 
<a name="line1522">1522: </a><font color="#B22222">.    J - output matrix</font>
1495
 
<a name="line1523">1523: </a><font color="#B22222">-    w - any user data</font>
1496
 
 
1497
 
<a name="line1525">1525: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
1498
 
 
1499
 
<a name="line1527">1527: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
1500
 
 
1501
 
<a name="line1529">1529: </a><font color="#B22222">*/</font>
1502
 
<a name="line1530">1530: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdifor"></a>int DAComputeJacobian1WithAdifor(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
1503
 
<a name="line1531">1531: </a>{
1504
 
<a name="line1532">1532: </a>  int         i,ierr,Nc,*color,N;
1505
 
<a name="line1533">1533: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1506
 
<a name="line1534">1534: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *u,*g_u,*g_f,*f,*p_u;
1507
 
<a name="line1535">1535: </a>  ISColoring  iscoloring;
1508
 
<a name="line1536">1536: </a>  void        (*lf)(int *,<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,void*,int*) =
1509
 
<a name="line1537">1537: </a>              (void (*)(int *,<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,void*,int*))*da-&gt;adifor_lf;
1510
 
 
1511
 
<a name="line1540">1540: </a>  <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>(da,IS_COLORING_GHOSTED,&amp;iscoloring);
1512
 
<a name="line1541">1541: </a>  Nc   = iscoloring-&gt;n;
1513
 
<a name="line1542">1542: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1514
 
<a name="line1543">1543: </a>  N    = info.gxm*info.gym*info.gzm*info.dof;
1515
 
 
1516
 
<a name="line1545">1545: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
1517
 
<a name="line1546">1546: </a>  ierr  = <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(Nc*info.gxm*info.gym*info.gzm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;g_u);
1518
 
<a name="line1547">1547: </a>  ierr  = <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(g_u,Nc*info.gxm*info.gym*info.gzm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
1519
 
<a name="line1548">1548: </a>  p_u   = g_u;
1520
 
<a name="line1549">1549: </a>  color = iscoloring-&gt;colors;
1521
 
<a name="line1550">1550: </a>  <font color="#4169E1">for</font> (i=0; i&lt;N; i++) {
1522
 
<a name="line1551">1551: </a>    p_u[*color++] = 1.0;
1523
 
<a name="line1552">1552: </a>    p_u          += Nc;
1524
 
<a name="line1553">1553: </a>  }
1525
 
<a name="line1554">1554: </a>  <A href="../../../../docs/manualpages/IS/ISColoringDestroy.html#ISColoringDestroy">ISColoringDestroy</A>(iscoloring);
1526
 
<a name="line1555">1555: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(Nc*info.xm*info.ym*info.zm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;g_f);
1527
 
<a name="line1556">1556: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(info.xm*info.ym*info.zm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;f);
1528
 
 
1529
 
<a name="line1558">1558: </a>  <font color="#B22222">/* Seed the input array g_u with coloring information */</font>
1530
 
<a name="line1559">1559: </a>
1531
 
<a name="line1560">1560: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;u);
1532
 
<a name="line1561">1561: </a>  (lf)(&amp;Nc,&amp;info,u,g_u,&amp;Nc,f,g_f,&amp;Nc,w,&amp;ierr);
1533
 
<a name="line1562">1562: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;u);
1534
 
 
1535
 
<a name="line1564">1564: </a>  <font color="#B22222">/* stick the values into the matrix */</font>
1536
 
<a name="line1565">1565: </a>  <font color="#B22222">/* <A href="../../../../docs/manualpages/Sys/PetscScalarView.html#PetscScalarView">PetscScalarView</A>(Nc*info.xm*info.ym,g_f,0); */</font>
1537
 
<a name="line1566">1566: </a>  <A href="../../../../docs/manualpages/Mat/MatSetValuesAdifor.html#MatSetValuesAdifor">MatSetValuesAdifor</A>(J,Nc,g_f);
1538
 
 
1539
 
<a name="line1568">1568: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
1540
 
<a name="line1569">1569: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(g_u);
1541
 
<a name="line1570">1570: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(g_f);
1542
 
<a name="line1571">1571: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(f);
1543
 
<a name="line1572">1572: </a>  <font color="#4169E1">return</font>(0);
1544
 
<a name="line1573">1573: </a>}
1545
 
 
1546
 
<a name="line1575">1575: </a><font color="#B22222">/*@C</font>
1547
 
<a name="line1576">1576: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAD.html#DAMultiplyByJacobian1WithAD">DAMultiplyByJacobian1WithAD</A> - Applies a Jacobian function supplied by ADIFOR or ADIC</font>
1548
 
<a name="line1577">1577: </a><font color="#B22222">    to a vector on each processor that shares a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
1549
 
 
1550
 
<a name="line1579">1579: </a><font color="#B22222">   Input Parameters:</font>
1551
 
<a name="line1580">1580: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1552
 
<a name="line1581">1581: </a><font color="#B22222">.    vu - Jacobian is computed at this point (ghosted)</font>
1553
 
<a name="line1582">1582: </a><font color="#B22222">.    v - product is done on this vector (ghosted)</font>
1554
 
<a name="line1583">1583: </a><font color="#B22222">.    fu - output vector = J(vu)*v (not ghosted)</font>
1555
 
<a name="line1584">1584: </a><font color="#B22222">-    w - any user data</font>
1556
 
 
1557
 
<a name="line1586">1586: </a><font color="#B22222">    Notes: </font>
1558
 
<a name="line1587">1587: </a><font color="#B22222">    This routine does NOT do ghost updates on vu and v upon entry.</font>
1559
 
<a name="line1588">1588: </a><font color="#B22222">           </font>
1560
 
<a name="line1589">1589: </a><font color="#B22222">    Automatically calls <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>() or <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>()</font>
1561
 
<a name="line1590">1590: </a><font color="#B22222">    depending on whether <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>() or DASetLocalAdiforMFFunction() was called.</font>
1562
 
 
1563
 
<a name="line1592">1592: </a><font color="#B22222">   Level: advanced</font>
1564
 
 
1565
 
<a name="line1594">1594: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(), <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(), <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>()</font>
1566
 
 
1567
 
<a name="line1596">1596: </a><font color="#B22222">@*/</font>
1568
 
<a name="line1597">1597: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAD"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAD.html#DAMultiplyByJacobian1WithAD">DAMultiplyByJacobian1WithAD</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> u,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
1569
 
<a name="line1598">1598: </a>{
1570
 
<a name="line1599">1599: </a>  int         ierr;
1571
 
 
1572
 
<a name="line1602">1602: </a>  <font color="#4169E1">if</font> (da-&gt;adicmf_lf) {
1573
 
<a name="line1603">1603: </a><font color="#A020F0">#if defined(PETSC_HAVE_ADIC) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
1574
 
<a name="line1604">1604: </a>    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(da,u,v,f,w);
1575
 
<a name="line1605">1605: </a><font color="#A020F0">#else</font>
1576
 
<a name="line1606">1606: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Requires ADIC to be installed and cannot use complex numbers"</font>);
1577
 
<a name="line1607">1607: </a><font color="#A020F0">#endif</font>
1578
 
<a name="line1608">1608: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;adiformf_lf) {
1579
 
<a name="line1609">1609: </a>    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(da,u,v,f,w);
1580
 
<a name="line1610">1610: </a>  } <font color="#4169E1">else</font> {
1581
 
<a name="line1611">1611: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must call DASetLocalAdiforMFFunction() or <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>() before using"</font>);
1582
 
<a name="line1612">1612: </a>  }
1583
 
<a name="line1613">1613: </a>  <font color="#4169E1">return</font>(0);
1584
 
<a name="line1614">1614: </a>}
1585
 
 
1586
 
 
1587
 
<a name="line1617">1617: </a><font color="#B22222">/*@C</font>
1588
 
<a name="line1618">1618: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A> - Applies a ADIFOR provided Jacobian function on each processor that </font>
1589
 
<a name="line1619">1619: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> to a vector</font>
1590
 
 
1591
 
<a name="line1621">1621: </a><font color="#B22222">   Input Parameters:</font>
1592
 
<a name="line1622">1622: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
1593
 
<a name="line1623">1623: </a><font color="#B22222">.    vu - Jacobian is computed at this point (ghosted)</font>
1594
 
<a name="line1624">1624: </a><font color="#B22222">.    v - product is done on this vector (ghosted)</font>
1595
 
<a name="line1625">1625: </a><font color="#B22222">.    fu - output vector = J(vu)*v (not ghosted)</font>
1596
 
<a name="line1626">1626: </a><font color="#B22222">-    w - any user data</font>
1597
 
 
1598
 
<a name="line1628">1628: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu and v upon entry</font>
1599
 
 
1600
 
<a name="line1630">1630: </a><font color="#B22222">   Level: advanced</font>
1601
 
 
1602
 
<a name="line1632">1632: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
1603
 
 
1604
 
<a name="line1634">1634: </a><font color="#B22222">@*/</font>
1605
 
<a name="line1635">1635: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdifor"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> u,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
1606
 
<a name="line1636">1636: </a>{
1607
 
<a name="line1637">1637: </a>  int         ierr;
1608
 
<a name="line1638">1638: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *au,*av,*af,*awork;
1609
 
<a name="line1639">1639: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>         work;
1610
 
<a name="line1640">1640: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
1611
 
<a name="line1641">1641: </a>  void        (*lf)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*,int*) =
1612
 
<a name="line1642">1642: </a>              (void (*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*,int*))*da-&gt;adiformf_lf;
1613
 
 
1614
 
<a name="line1645">1645: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
1615
 
 
1616
 
<a name="line1647">1647: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;work);
1617
 
<a name="line1648">1648: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(u,&amp;au);
1618
 
<a name="line1649">1649: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(v,&amp;av);
1619
 
<a name="line1650">1650: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(f,&amp;af);
1620
 
<a name="line1651">1651: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(work,&amp;awork);
1621
 
<a name="line1652">1652: </a>  (lf)(&amp;info,au,av,awork,af,w,&amp;ierr);
1622
 
<a name="line1653">1653: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(u,&amp;au);
1623
 
<a name="line1654">1654: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(v,&amp;av);
1624
 
<a name="line1655">1655: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(f,&amp;af);
1625
 
<a name="line1656">1656: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(work,&amp;awork);
1626
 
<a name="line1657">1657: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;work);
1627
 
 
1628
 
<a name="line1659">1659: </a>  <font color="#4169E1">return</font>(0);
1629
 
<a name="line1660">1660: </a>}
1630
 
 
1631
 
<a name="line1662">1662: </a><font color="#B22222">/*@C</font>
1632
 
<a name="line1663">1663: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetInterpolationType.html#DASetInterpolationType">DASetInterpolationType</A> - Sets the type of interpolation that will be </font>
1633
 
<a name="line1664">1664: </a><font color="#B22222">          returned by <A href="../../../../docs/manualpages/DA/DAGetInterpolation.html#DAGetInterpolation">DAGetInterpolation</A>()</font>
1634
 
 
1635
 
<a name="line1666">1666: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
1636
 
 
1637
 
<a name="line1668">1668: </a><font color="#B22222">   Input Parameter:</font>
1638
 
<a name="line1669">1669: </a><font color="#B22222">+  da - initial distributed array</font>
1639
 
<a name="line1670">1670: </a><font color="#B22222">.  ctype - DA_Q1 and DA_Q0 are currently the only supported forms</font>
1640
 
 
1641
 
<a name="line1672">1672: </a><font color="#B22222">   Level: intermediate</font>
1642
 
 
1643
 
<a name="line1674">1674: </a><font color="#B22222">.keywords:  distributed array, interpolation</font>
1644
 
 
1645
 
<a name="line1676">1676: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, <A href="../../../../docs/manualpages/DA/DAInterpolationType.html#DAInterpolationType">DAInterpolationType</A></font>
1646
 
<a name="line1677">1677: </a><font color="#B22222">@*/</font>
1647
 
<a name="line1678">1678: </a><strong><font color="#4169E1"><a name="DASetInterpolationType"></a>int <A href="../../../../docs/manualpages/DA/DASetInterpolationType.html#DASetInterpolationType">DASetInterpolationType</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/DA/DAInterpolationType.html#DAInterpolationType">DAInterpolationType</A> ctype)</font></strong>
1648
 
<a name="line1679">1679: </a>{
1649
 
<a name="line1682">1682: </a>  da-&gt;interptype = ctype;
1650
 
<a name="line1683">1683: </a>  <font color="#4169E1">return</font>(0);
1651
 
<a name="line1684">1684: </a>}
 
1411
 
 
1412
<a name="line1482">1482: </a><font color="#A020F0">#else</font>
 
1413
 
 
1414
<a name="line1486">1486: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1WithAdic.html#DAComputeJacobian1WithAdic">DAComputeJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
 
1415
<a name="line1487">1487: </a>{
 
1416
<a name="line1489">1489: </a>  <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must compile with bmake/PETSC_ARCH/packages flag PETSC_HAVE_ADIC for this routine"</font>);
 
1417
<a name="line1490">1490: </a>}
 
1418
 
 
1419
<a name="line1494">1494: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdic"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
 
1420
<a name="line1495">1495: </a>{
 
1421
<a name="line1497">1497: </a>  <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must compile with bmake/PETSC_ARCH/packages flag PETSC_HAVE_ADIC for this routine"</font>);
 
1422
<a name="line1498">1498: </a>}
 
1423
 
 
1424
<a name="line1500">1500: </a><font color="#A020F0">#endif</font>
 
1425
 
 
1426
<a name="line1504">1504: </a><font color="#B22222">/*@</font>
 
1427
<a name="line1505">1505: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAComputeJacobian1.html#DAComputeJacobian1">DAComputeJacobian1</A> - Evaluates a local Jacobian function on each processor that </font>
 
1428
<a name="line1506">1506: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1429
 
 
1430
<a name="line1508">1508: </a><font color="#B22222">   Input Parameters:</font>
 
1431
<a name="line1509">1509: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1432
<a name="line1510">1510: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
 
1433
<a name="line1511">1511: </a><font color="#B22222">.    J - output matrix</font>
 
1434
<a name="line1512">1512: </a><font color="#B22222">-    w - any user data</font>
 
1435
 
 
1436
<a name="line1514">1514: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
 
1437
 
 
1438
<a name="line1516">1516: </a><font color="#B22222">    Level: advanced</font>
 
1439
 
 
1440
<a name="line1518">1518: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
 
1441
 
 
1442
<a name="line1520">1520: </a><font color="#B22222">@*/</font>
 
1443
<a name="line1521">1521: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1"></a>int <A href="../../../../docs/manualpages/DA/DAComputeJacobian1.html#DAComputeJacobian1">DAComputeJacobian1</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
 
1444
<a name="line1522">1522: </a>{
 
1445
<a name="line1523">1523: </a>  int         ierr;
 
1446
<a name="line1524">1524: </a>  void        *u;
 
1447
<a name="line1525">1525: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1448
 
 
1449
<a name="line1528">1528: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1450
<a name="line1529">1529: </a>  <A href="../../../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da,vu,&amp;u);
 
1451
<a name="line1530">1530: </a>  (*da-&gt;lj)(&amp;info,u,J,w);
 
1452
<a name="line1531">1531: </a>  <A href="../../../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da,vu,&amp;u);
 
1453
<a name="line1532">1532: </a>  <font color="#4169E1">return</font>(0);
 
1454
<a name="line1533">1533: </a>}
 
1455
 
 
1456
 
 
1457
<a name="line1538">1538: </a><font color="#B22222">/*</font>
 
1458
<a name="line1539">1539: </a><font color="#B22222">    DAComputeJacobian1WithAdifor - Evaluates a ADIFOR provided Jacobian local function on each processor that </font>
 
1459
<a name="line1540">1540: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1460
 
 
1461
<a name="line1542">1542: </a><font color="#B22222">   Input Parameters:</font>
 
1462
<a name="line1543">1543: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1463
<a name="line1544">1544: </a><font color="#B22222">.    vu - input vector (ghosted)</font>
 
1464
<a name="line1545">1545: </a><font color="#B22222">.    J - output matrix</font>
 
1465
<a name="line1546">1546: </a><font color="#B22222">-    w - any user data</font>
 
1466
 
 
1467
<a name="line1548">1548: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu upon entry</font>
 
1468
 
 
1469
<a name="line1550">1550: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
 
1470
 
 
1471
<a name="line1552">1552: </a><font color="#B22222">*/</font>
 
1472
<a name="line1553">1553: </a><strong><font color="#4169E1"><a name="DAComputeJacobian1WithAdifor"></a>int DAComputeJacobian1WithAdifor(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vu,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> J,void *w)</font></strong>
 
1473
<a name="line1554">1554: </a>{
 
1474
<a name="line1555">1555: </a>  int             i,ierr,Nc,N;
 
1475
<a name="line1556">1556: </a>  ISColoringValue *color;
 
1476
<a name="line1557">1557: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>     info;
 
1477
<a name="line1558">1558: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>     *u,*g_u,*g_f,*f,*p_u;
 
1478
<a name="line1559">1559: </a>  <A href="../../../../docs/manualpages/IS/ISColoring.html#ISColoring">ISColoring</A>      iscoloring;
 
1479
<a name="line1560">1560: </a>  void            (*lf)(int *,<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,void*,int*) =
 
1480
<a name="line1561">1561: </a>                  (void (*)(int *,<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,int*,void*,int*))*da-&gt;adifor_lf;
 
1481
 
 
1482
<a name="line1564">1564: </a>  <A href="../../../../docs/manualpages/DA/DAGetColoring.html#DAGetColoring">DAGetColoring</A>(da,IS_COLORING_GHOSTED,&amp;iscoloring);
 
1483
<a name="line1565">1565: </a>  Nc   = iscoloring-&gt;n;
 
1484
<a name="line1566">1566: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1485
<a name="line1567">1567: </a>  N    = info.gxm*info.gym*info.gzm*info.dof;
 
1486
 
 
1487
<a name="line1569">1569: </a>  <font color="#B22222">/* get space for derivative objects.  */</font>
 
1488
<a name="line1570">1570: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(Nc*info.gxm*info.gym*info.gzm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;g_u);
 
1489
<a name="line1571">1571: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(g_u,Nc*info.gxm*info.gym*info.gzm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
 
1490
<a name="line1572">1572: </a>  p_u   = g_u;
 
1491
<a name="line1573">1573: </a>  color = iscoloring-&gt;colors;
 
1492
<a name="line1574">1574: </a>  <font color="#4169E1">for</font> (i=0; i&lt;N; i++) {
 
1493
<a name="line1575">1575: </a>    p_u[*color++] = 1.0;
 
1494
<a name="line1576">1576: </a>    p_u          += Nc;
 
1495
<a name="line1577">1577: </a>  }
 
1496
<a name="line1578">1578: </a>  <A href="../../../../docs/manualpages/IS/ISColoringDestroy.html#ISColoringDestroy">ISColoringDestroy</A>(iscoloring);
 
1497
<a name="line1579">1579: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(Nc*info.xm*info.ym*info.zm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;g_f);
 
1498
<a name="line1580">1580: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(info.xm*info.ym*info.zm*info.dof*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;f);
 
1499
 
 
1500
<a name="line1582">1582: </a>  <font color="#B22222">/* Seed the input array g_u with coloring information */</font>
 
1501
<a name="line1583">1583: </a>
 
1502
<a name="line1584">1584: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vu,&amp;u);
 
1503
<a name="line1585">1585: </a>  (lf)(&amp;Nc,&amp;info,u,g_u,&amp;Nc,f,g_f,&amp;Nc,w,&amp;ierr);
 
1504
<a name="line1586">1586: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vu,&amp;u);
 
1505
 
 
1506
<a name="line1588">1588: </a>  <font color="#B22222">/* stick the values into the matrix */</font>
 
1507
<a name="line1589">1589: </a>  <font color="#B22222">/* <A href="../../../../docs/manualpages/Sys/PetscScalarView.html#PetscScalarView">PetscScalarView</A>(Nc*info.xm*info.ym,g_f,0); */</font>
 
1508
<a name="line1590">1590: </a>  <A href="../../../../docs/manualpages/Mat/MatSetValuesAdifor.html#MatSetValuesAdifor">MatSetValuesAdifor</A>(J,Nc,g_f);
 
1509
 
 
1510
<a name="line1592">1592: </a>  <font color="#B22222">/* return space for derivative objects.  */</font>
 
1511
<a name="line1593">1593: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(g_u);
 
1512
<a name="line1594">1594: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(g_f);
 
1513
<a name="line1595">1595: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(f);
 
1514
<a name="line1596">1596: </a>  <font color="#4169E1">return</font>(0);
 
1515
<a name="line1597">1597: </a>}
 
1516
 
 
1517
<a name="line1601">1601: </a><font color="#B22222">/*@C</font>
 
1518
<a name="line1602">1602: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAD.html#DAMultiplyByJacobian1WithAD">DAMultiplyByJacobian1WithAD</A> - Applies a Jacobian function supplied by ADIFOR or ADIC</font>
 
1519
<a name="line1603">1603: </a><font color="#B22222">    to a vector on each processor that shares a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>.</font>
 
1520
 
 
1521
<a name="line1605">1605: </a><font color="#B22222">   Input Parameters:</font>
 
1522
<a name="line1606">1606: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1523
<a name="line1607">1607: </a><font color="#B22222">.    vu - Jacobian is computed at this point (ghosted)</font>
 
1524
<a name="line1608">1608: </a><font color="#B22222">.    v - product is done on this vector (ghosted)</font>
 
1525
<a name="line1609">1609: </a><font color="#B22222">.    fu - output vector = J(vu)*v (not ghosted)</font>
 
1526
<a name="line1610">1610: </a><font color="#B22222">-    w - any user data</font>
 
1527
 
 
1528
<a name="line1612">1612: </a><font color="#B22222">    Notes: </font>
 
1529
<a name="line1613">1613: </a><font color="#B22222">    This routine does NOT do ghost updates on vu and v upon entry.</font>
 
1530
<a name="line1614">1614: </a><font color="#B22222">           </font>
 
1531
<a name="line1615">1615: </a><font color="#B22222">    Automatically calls <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>() or <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>()</font>
 
1532
<a name="line1616">1616: </a><font color="#B22222">    depending on whether <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>() or DASetLocalAdiforMFFunction() was called.</font>
 
1533
 
 
1534
<a name="line1618">1618: </a><font color="#B22222">   Level: advanced</font>
 
1535
 
 
1536
<a name="line1620">1620: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>(), <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(), <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>()</font>
 
1537
 
 
1538
<a name="line1622">1622: </a><font color="#B22222">@*/</font>
 
1539
<a name="line1623">1623: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAD"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAD.html#DAMultiplyByJacobian1WithAD">DAMultiplyByJacobian1WithAD</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> u,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
 
1540
<a name="line1624">1624: </a>{
 
1541
<a name="line1625">1625: </a>  int         ierr;
 
1542
 
 
1543
<a name="line1628">1628: </a>  <font color="#4169E1">if</font> (da-&gt;adicmf_lf) {
 
1544
<a name="line1629">1629: </a><font color="#A020F0">#if defined(PETSC_HAVE_ADIC) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
1545
<a name="line1630">1630: </a>    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdic.html#DAMultiplyByJacobian1WithAdic">DAMultiplyByJacobian1WithAdic</A>(da,u,v,f,w);
 
1546
<a name="line1631">1631: </a><font color="#A020F0">#else</font>
 
1547
<a name="line1632">1632: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Requires ADIC to be installed and cannot use complex numbers"</font>);
 
1548
<a name="line1633">1633: </a><font color="#A020F0">#endif</font>
 
1549
<a name="line1634">1634: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (da-&gt;adiformf_lf) {
 
1550
<a name="line1635">1635: </a>    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(da,u,v,f,w);
 
1551
<a name="line1636">1636: </a>  } <font color="#4169E1">else</font> {
 
1552
<a name="line1637">1637: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must call DASetLocalAdiforMFFunction() or <A href="../../../../docs/manualpages/DA/DASetLocalAdicMFFunction.html#DASetLocalAdicMFFunction">DASetLocalAdicMFFunction</A>() before using"</font>);
 
1553
<a name="line1638">1638: </a>  }
 
1554
<a name="line1639">1639: </a>  <font color="#4169E1">return</font>(0);
 
1555
<a name="line1640">1640: </a>}
 
1556
 
 
1557
 
 
1558
<a name="line1645">1645: </a><font color="#B22222">/*@C</font>
 
1559
<a name="line1646">1646: </a><font color="#B22222">    <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A> - Applies a ADIFOR provided Jacobian function on each processor that </font>
 
1560
<a name="line1647">1647: </a><font color="#B22222">        share a <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> to a vector</font>
 
1561
 
 
1562
<a name="line1649">1649: </a><font color="#B22222">   Input Parameters:</font>
 
1563
<a name="line1650">1650: </a><font color="#B22222">+    da - the <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> that defines the grid</font>
 
1564
<a name="line1651">1651: </a><font color="#B22222">.    vu - Jacobian is computed at this point (ghosted)</font>
 
1565
<a name="line1652">1652: </a><font color="#B22222">.    v - product is done on this vector (ghosted)</font>
 
1566
<a name="line1653">1653: </a><font color="#B22222">.    fu - output vector = J(vu)*v (not ghosted)</font>
 
1567
<a name="line1654">1654: </a><font color="#B22222">-    w - any user data</font>
 
1568
 
 
1569
<a name="line1656">1656: </a><font color="#B22222">    Notes: Does NOT do ghost updates on vu and v upon entry</font>
 
1570
 
 
1571
<a name="line1658">1658: </a><font color="#B22222">   Level: advanced</font>
 
1572
 
 
1573
<a name="line1660">1660: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DAFormFunction1.html#DAFormFunction1">DAFormFunction1</A>()</font>
 
1574
 
 
1575
<a name="line1662">1662: </a><font color="#B22222">@*/</font>
 
1576
<a name="line1663">1663: </a><strong><font color="#4169E1"><a name="DAMultiplyByJacobian1WithAdifor"></a>int <A href="../../../../docs/manualpages/DA/DAMultiplyByJacobian1WithAdifor.html#DAMultiplyByJacobian1WithAdifor">DAMultiplyByJacobian1WithAdifor</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> u,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> f,void *w)</font></strong>
 
1577
<a name="line1664">1664: </a>{
 
1578
<a name="line1665">1665: </a>  int         ierr;
 
1579
<a name="line1666">1666: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *au,*av,*af,*awork;
 
1580
<a name="line1667">1667: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>         work;
 
1581
<a name="line1668">1668: </a>  <A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info;
 
1582
<a name="line1669">1669: </a>  void        (*lf)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*,int*) =
 
1583
<a name="line1670">1670: </a>              (void (*)(<A href="../../../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*,void*,int*))*da-&gt;adiformf_lf;
 
1584
 
 
1585
<a name="line1673">1673: </a>  <A href="../../../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da,&amp;info);
 
1586
 
 
1587
<a name="line1675">1675: </a>  <A href="../../../../docs/manualpages/DA/DAGetGlobalVector.html#DAGetGlobalVector">DAGetGlobalVector</A>(da,&amp;work);
 
1588
<a name="line1676">1676: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(u,&amp;au);
 
1589
<a name="line1677">1677: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(v,&amp;av);
 
1590
<a name="line1678">1678: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(f,&amp;af);
 
1591
<a name="line1679">1679: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(work,&amp;awork);
 
1592
<a name="line1680">1680: </a>  (lf)(&amp;info,au,av,awork,af,w,&amp;ierr);
 
1593
<a name="line1681">1681: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(u,&amp;au);
 
1594
<a name="line1682">1682: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(v,&amp;av);
 
1595
<a name="line1683">1683: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(f,&amp;af);
 
1596
<a name="line1684">1684: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(work,&amp;awork);
 
1597
<a name="line1685">1685: </a>  <A href="../../../../docs/manualpages/DA/DARestoreGlobalVector.html#DARestoreGlobalVector">DARestoreGlobalVector</A>(da,&amp;work);
 
1598
 
 
1599
<a name="line1687">1687: </a>  <font color="#4169E1">return</font>(0);
 
1600
<a name="line1688">1688: </a>}
 
1601
 
 
1602
<a name="line1692">1692: </a><font color="#B22222">/*@C</font>
 
1603
<a name="line1693">1693: </a><font color="#B22222">       <A href="../../../../docs/manualpages/DA/DASetInterpolationType.html#DASetInterpolationType">DASetInterpolationType</A> - Sets the type of interpolation that will be </font>
 
1604
<a name="line1694">1694: </a><font color="#B22222">          returned by <A href="../../../../docs/manualpages/DA/DAGetInterpolation.html#DAGetInterpolation">DAGetInterpolation</A>()</font>
 
1605
 
 
1606
<a name="line1696">1696: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A></font>
 
1607
 
 
1608
<a name="line1698">1698: </a><font color="#B22222">   Input Parameter:</font>
 
1609
<a name="line1699">1699: </a><font color="#B22222">+  da - initial distributed array</font>
 
1610
<a name="line1700">1700: </a><font color="#B22222">.  ctype - DA_Q1 and DA_Q0 are currently the only supported forms</font>
 
1611
 
 
1612
<a name="line1702">1702: </a><font color="#B22222">   Level: intermediate</font>
 
1613
 
 
1614
<a name="line1704">1704: </a><font color="#B22222">   Notes: you should call this on the coarser of the two DAs you pass to <A href="../../../../docs/manualpages/DA/DAGetInterpolation.html#DAGetInterpolation">DAGetInterpolation</A>()</font>
 
1615
 
 
1616
<a name="line1706">1706: </a><font color="#B22222">.keywords:  distributed array, interpolation</font>
 
1617
 
 
1618
<a name="line1708">1708: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/DA/DACreate1d.html#DACreate1d">DACreate1d</A>(), <A href="../../../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(), <A href="../../../../docs/manualpages/DA/DACreate3d.html#DACreate3d">DACreate3d</A>(), <A href="../../../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(), <A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A>, <A href="../../../../docs/manualpages/DA/DAInterpolationType.html#DAInterpolationType">DAInterpolationType</A></font>
 
1619
<a name="line1709">1709: </a><font color="#B22222">@*/</font>
 
1620
<a name="line1710">1710: </a><strong><font color="#4169E1"><a name="DASetInterpolationType"></a>int <A href="../../../../docs/manualpages/DA/DASetInterpolationType.html#DASetInterpolationType">DASetInterpolationType</A>(<A href="../../../../docs/manualpages/DA/DA.html#DA">DA</A> da,<A href="../../../../docs/manualpages/DA/DAInterpolationType.html#DAInterpolationType">DAInterpolationType</A> ctype)</font></strong>
 
1621
<a name="line1711">1711: </a>{
 
1622
<a name="line1714">1714: </a>  da-&gt;interptype = ctype;
 
1623
<a name="line1715">1715: </a>  <font color="#4169E1">return</font>(0);
 
1624
<a name="line1716">1716: </a>}
1652
1625
 
1653
1626
</pre>
1654
1627
</body>