File: mp.c.html

package info (click to toggle)
petsc 3.1.dfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 131,360 kB
  • ctags: 491,710
  • sloc: ansic: 288,064; cpp: 66,909; python: 28,799; fortran: 19,153; makefile: 13,945; sh: 3,502; f90: 1,655; xml: 620; csh: 230; java: 13
file content (253 lines) | stat: -rw-r--r-- 27,338 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<center><a href="mp.c">Actual source code: mp.c</a></center><br>

<html>
<head>
<title></title>
<meta name="generator" content="c2html 0.9.5">
<meta name="date" content="2010-04-08T19:57:58+00:00">
</head>

<body bgcolor="#FFFFFF">
<pre width="80">
<a name="line2">  2: </a>static char help[] = <font color="#666666">"Model multi-physics solver. Modified from src/snes/examples/tutorials/ex19.c \n\\n"</font>;

<a name="line4">  4: </a><font color="#B22222">/* ------------------------------------------------------------------------</font>
<a name="line5">  5: </a><font color="#B22222">    See ex19.c for discussion of the problem </font>

<a name="line7">  7: </a><font color="#B22222">    Examples of command line options:</font>
<a name="line8">  8: </a><font color="#B22222">      ./mp -dmmg_jacobian_mf_fd_operator</font>
<a name="line9">  9: </a><font color="#B22222">      ./mp -dmcomposite_dense_jacobian #inefficient, but compute entire Jacobian for testing</font>
<a name="line10"> 10: </a><font color="#B22222">  ----------------------------------------------------------------------------------------- */</font>
<a name="line11"> 11: </a> #include <A href="mp.h.html">mp.h</A>


<a name="line20"> 20: </a><strong><font color="#4169E1"><a name="main"></a>int main(int argc,char **argv)</font></strong>
<a name="line21"> 21: </a>{
<a name="line22"> 22: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A>           *dmmg_comp;          <font color="#B22222">/* multilevel grid structure */</font>
<a name="line23"> 23: </a>  AppCtx         user;                <font color="#B22222">/* user-defined work context */</font>
<a name="line24"> 24: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A>       mx,my,its;
<a name="line26"> 26: </a>  <A href="tutorials/../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A>       comm;
<a name="line27"> 27: </a>  <A href="tutorials/../../docs/manualpages/SNES/SNES.html#SNES">SNES</A>           snes;
<a name="line28"> 28: </a>  <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>             da1,da2;
<a name="line29"> 29: </a>  <A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A>    pack;
<a name="line30"> 30: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>     couple = <A href="tutorials/../../docs/manualpages/Sys/PETSC_FALSE.html#PETSC_FALSE">PETSC_FALSE</A>;

<a name="line32"> 32: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(&amp;argc,&amp;argv,(char *)0,help);
<a name="line33"> 33: </a>  <A href="tutorials/../../docs/manualpages/Profiling/PetscLogEventRegister.html#PetscLogEventRegister">PetscLogEventRegister</A>(<font color="#666666">"FormFunc1"</font>, 0,&amp;EVENT_FORMFUNCTIONLOCAL1);
<a name="line34"> 34: </a>  <A href="tutorials/../../docs/manualpages/Profiling/PetscLogEventRegister.html#PetscLogEventRegister">PetscLogEventRegister</A>(<font color="#666666">"FormFunc2"</font>, 0,&amp;EVENT_FORMFUNCTIONLOCAL2);
<a name="line35"> 35: </a>  comm = <A href="tutorials/../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>;

<a name="line37"> 37: </a>  <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line38"> 38: </a><font color="#B22222">     Create user context, set problem data, create vector data structures.</font>
<a name="line39"> 39: </a><font color="#B22222">     Also, compute the initial guess.</font>
<a name="line40"> 40: </a><font color="#B22222">     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>

<a name="line42"> 42: </a>  <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line43"> 43: </a><font color="#B22222">     Setup Physics 1: </font>
<a name="line44"> 44: </a><font color="#B22222">        - Lap(U) - Grad_y(Omega) = 0</font>
<a name="line45"> 45: </a><font color="#B22222">        - Lap(V) + Grad_x(Omega) = 0</font>
<a name="line46"> 46: </a><font color="#B22222">        - Lap(Omega) + Div([U*Omega,V*Omega]) - GR*Grad_x(T) = 0</font>
<a name="line47"> 47: </a><font color="#B22222">        where T is given by the given x.temp</font>
<a name="line48"> 48: </a><font color="#B22222">        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line49"> 49: </a>  <A href="tutorials/../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(comm,DA_NONPERIODIC,<A href="tutorials/../../docs/manualpages/DA/DA_STENCIL_STAR.html#DA_STENCIL_STAR">DA_STENCIL_STAR</A>,-4,-4,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,3,1,0,0,&amp;da1);
<a name="line50"> 50: </a>  <A href="tutorials/../../docs/manualpages/DA/DASetFieldName.html#DASetFieldName">DASetFieldName</A>(da1,0,<font color="#666666">"x-velocity"</font>);
<a name="line51"> 51: </a>  <A href="tutorials/../../docs/manualpages/DA/DASetFieldName.html#DASetFieldName">DASetFieldName</A>(da1,1,<font color="#666666">"y-velocity"</font>);
<a name="line52"> 52: </a>  <A href="tutorials/../../docs/manualpages/DA/DASetFieldName.html#DASetFieldName">DASetFieldName</A>(da1,2,<font color="#666666">"Omega"</font>);

<a name="line54"> 54: </a>  <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line55"> 55: </a><font color="#B22222">     Setup Physics 2: </font>
<a name="line56"> 56: </a><font color="#B22222">        - Lap(T) + PR*Div([U*T,V*T]) = 0        </font>
<a name="line57"> 57: </a><font color="#B22222">        where U and V are given by the given x.u and x.v</font>
<a name="line58"> 58: </a><font color="#B22222">        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line59"> 59: </a>  <A href="tutorials/../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(comm,DA_NONPERIODIC,<A href="tutorials/../../docs/manualpages/DA/DA_STENCIL_STAR.html#DA_STENCIL_STAR">DA_STENCIL_STAR</A>,-4,-4,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,1,1,0,0,&amp;da2);
<a name="line60"> 60: </a>  <A href="tutorials/../../docs/manualpages/DA/DASetFieldName.html#DASetFieldName">DASetFieldName</A>(da2,0,<font color="#666666">"temperature"</font>);

<a name="line62"> 62: </a>  <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line63"> 63: </a><font color="#B22222">    Create the <A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A> object to manage the two grids/physics. </font>
<a name="line64"> 64: </a><font color="#B22222">    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line65"> 65: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeCreate.html#DMCompositeCreate">DMCompositeCreate</A>(comm,&amp;pack);
<a name="line66"> 66: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeAddDM.html#DMCompositeAddDM">DMCompositeAddDM</A>(pack,(<A href="tutorials/../../docs/manualpages/DA/DM.html#DM">DM</A>)da1);
<a name="line67"> 67: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeAddDM.html#DMCompositeAddDM">DMCompositeAddDM</A>(pack,(<A href="tutorials/../../docs/manualpages/DA/DM.html#DM">DM</A>)da2);

<a name="line69"> 69: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsHasName.html#PetscOptionsHasName">PetscOptionsHasName</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-couple"</font>,&amp;couple);
<a name="line70"> 70: </a>  <font color="#4169E1">if</font> (couple) {
<a name="line71"> 71: </a>    <A href="tutorials/../../docs/manualpages/DA/DMCompositeSetCoupling.html#DMCompositeSetCoupling">DMCompositeSetCoupling</A>(pack,FormCoupleLocations);
<a name="line72"> 72: </a>  }

<a name="line74"> 74: </a>  <font color="#B22222">/* Create the solver object and attach the grid/physics info */</font>
<a name="line75"> 75: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGCreate.html#DMMGCreate">DMMGCreate</A>(comm,1,&amp;user,&amp;dmmg_comp);
<a name="line76"> 76: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetDM.html#DMMGSetDM">DMMGSetDM</A>(dmmg_comp,(<A href="tutorials/../../docs/manualpages/DA/DM.html#DM">DM</A>)pack);
<a name="line77"> 77: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetISColoringType.html#DMMGSetISColoringType">DMMGSetISColoringType</A>(dmmg_comp,IS_COLORING_GLOBAL);

<a name="line79"> 79: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetInitialGuess.html#DMMGSetInitialGuess">DMMGSetInitialGuess</A>(dmmg_comp,FormInitialGuessComp);
<a name="line80"> 80: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetSNES.html#DMMGSetSNES">DMMGSetSNES</A>(dmmg_comp,FormFunctionComp,0);
<a name="line81"> 81: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetFromOptions.html#DMMGSetFromOptions">DMMGSetFromOptions</A>(dmmg_comp);
<a name="line82"> 82: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetUp.html#DMMGSetUp">DMMGSetUp</A>(dmmg_comp);

<a name="line84"> 84: </a>  <font color="#B22222">/* Problem parameters (velocity of lid, prandtl, and grashof numbers) */</font>
<a name="line85"> 85: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(da1,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;mx,&amp;my,0,0,0,0,0,0,0,0);
<a name="line86"> 86: </a>  user.lidvelocity = 1.0/(mx*my);
<a name="line87"> 87: </a>  user.prandtl     = 1.0;
<a name="line88"> 88: </a>  user.grashof     = 1000.0;
<a name="line89"> 89: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-lidvelocity"</font>,&amp;user.lidvelocity,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
<a name="line90"> 90: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-prandtl"</font>,&amp;user.prandtl,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
<a name="line91"> 91: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-grashof"</font>,&amp;user.grashof,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);

<a name="line93"> 93: </a>  <font color="#B22222">/* Solve the nonlinear system */</font>
<a name="line94"> 94: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGSolve.html#DMMGSolve">DMMGSolve</A>(dmmg_comp);
<a name="line95"> 95: </a>  snes = <A href="tutorials/../../docs/manualpages/DMMG/DMMGGetSNES.html#DMMGGetSNES">DMMGGetSNES</A>(dmmg_comp);
<a name="line96"> 96: </a>  <A href="tutorials/../../docs/manualpages/SNES/SNESGetIterationNumber.html#SNESGetIterationNumber">SNESGetIterationNumber</A>(snes,&amp;its);
<a name="line97"> 97: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(comm,<font color="#666666">"Composite Physics: Number of Newton iterations = %D\n\n"</font>, its);

<a name="line99"> 99: </a>  <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line100">100: </a><font color="#B22222">     Free spaces </font>
<a name="line101">101: </a><font color="#B22222">   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line102">102: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeDestroy.html#DMCompositeDestroy">DMCompositeDestroy</A>(pack);
<a name="line103">103: </a>  <A href="tutorials/../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(da1);
<a name="line104">104: </a>  <A href="tutorials/../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(da2);
<a name="line105">105: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMGDestroy.html#DMMGDestroy">DMMGDestroy</A>(dmmg_comp);
<a name="line106">106: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>();
<a name="line107">107: </a>  <font color="#4169E1">return</font> 0;
<a name="line108">108: </a>}

<a name="line112">112: </a><font color="#B22222">/* </font>
<a name="line113">113: </a><font color="#B22222">   FormInitialGuessComp - </font>
<a name="line114">114: </a><font color="#B22222">              Forms the initial guess for the composite model</font>
<a name="line115">115: </a><font color="#B22222">              Unwraps the global solution vector and passes its local pieces into the user functions</font>
<a name="line116">116: </a><font color="#B22222"> */</font>
<a name="line117">117: </a><strong><font color="#4169E1"><a name="FormInitialGuessComp"></a><A href="tutorials/../../docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> FormInitialGuessComp(<A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A> dmmg,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X)</font></strong>
<a name="line118">118: </a>{
<a name="line120">120: </a>  AppCtx         *user = (AppCtx*)dmmg-&gt;user;
<a name="line121">121: </a>  <A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A>    dm = (<A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A>)dmmg-&gt;dm;
<a name="line122">122: </a>  <A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>            X1,X2;
<a name="line123">123: </a>  Field1         **x1;
<a name="line124">124: </a>  Field2         **x2;
<a name="line125">125: </a>  <A href="tutorials/../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>    info1,info2;
<a name="line126">126: </a>  <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>             da1,da2;

<a name="line129">129: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetEntries.html#DMCompositeGetEntries">DMCompositeGetEntries</A>(dm,&amp;da1,&amp;da2);
<a name="line130">130: </a>  <font color="#B22222">/* Access the subvectors in X */</font>
<a name="line131">131: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetAccess.html#DMCompositeGetAccess">DMCompositeGetAccess</A>(dm,X,&amp;X1,&amp;X2);
<a name="line132">132: </a>  <font color="#B22222">/* Access the arrays inside the subvectors of X */</font>
<a name="line133">133: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da1,X1,(void**)&amp;x1);
<a name="line134">134: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,X2,(void**)&amp;x2);

<a name="line136">136: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da1,&amp;info1);
<a name="line137">137: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da2,&amp;info2);

<a name="line139">139: </a>  <font color="#B22222">/* Evaluate local user provided function */</font>
<a name="line140">140: </a>  FormInitialGuessLocal1(&amp;info1,x1);
<a name="line141">141: </a>  FormInitialGuessLocal2(&amp;info2,x2,user);

<a name="line143">143: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da1,X1,(void**)&amp;x1);
<a name="line144">144: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,X2,(void**)&amp;x2);
<a name="line145">145: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeRestoreAccess.html#DMCompositeRestoreAccess">DMCompositeRestoreAccess</A>(dm,X,&amp;X1,&amp;X2);
<a name="line146">146: </a>  <font color="#4169E1">return</font>(0);
<a name="line147">147: </a>}

<a name="line151">151: </a><font color="#B22222">/* </font>
<a name="line152">152: </a><font color="#B22222">   FormFunctionComp  - Unwraps the input vector and passes its local ghosted pieces into the user function</font>
<a name="line153">153: </a><font color="#B22222">*/</font>
<a name="line154">154: </a><strong><font color="#4169E1"><a name="FormFunctionComp"></a><A href="tutorials/../../docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> FormFunctionComp(<A href="tutorials/../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> snes,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> F,void *ctx)</font></strong>
<a name="line155">155: </a>{
<a name="line157">157: </a>  <A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A>           dmmg = (<A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A>)ctx;
<a name="line158">158: </a>  AppCtx         *user = (AppCtx*)dmmg-&gt;user;
<a name="line159">159: </a>  <A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A>    dm = (<A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A>)dmmg-&gt;dm;
<a name="line160">160: </a>  <A href="tutorials/../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A>    info1,info2;
<a name="line161">161: </a>  <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>             da1,da2;
<a name="line162">162: </a>  Field1         **x1,**f1;
<a name="line163">163: </a>  Field2         **x2,**f2;
<a name="line164">164: </a>  <A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>            X1,X2,F1,F2;


<a name="line168">168: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetEntries.html#DMCompositeGetEntries">DMCompositeGetEntries</A>(dm,&amp;da1,&amp;da2);
<a name="line169">169: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da1,&amp;info1);
<a name="line170">170: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da2,&amp;info2);

<a name="line172">172: </a>  <font color="#B22222">/* Get local vectors to hold ghosted parts of X */</font>
<a name="line173">173: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetLocalVectors.html#DMCompositeGetLocalVectors">DMCompositeGetLocalVectors</A>(dm,&amp;X1,&amp;X2);
<a name="line174">174: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeScatter.html#DMCompositeScatter">DMCompositeScatter</A>(dm,X,X1,X2);

<a name="line176">176: </a>  <font color="#B22222">/* Access the arrays inside the subvectors of X */</font>
<a name="line177">177: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da1,X1,(void**)&amp;x1);
<a name="line178">178: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,X2,(void**)&amp;x2);

<a name="line180">180: </a>  <font color="#B22222">/* Access the subvectors in F. </font>
<a name="line181">181: </a><font color="#B22222">     These are not ghosted so directly access the memory locations in F */</font>
<a name="line182">182: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetAccess.html#DMCompositeGetAccess">DMCompositeGetAccess</A>(dm,F,&amp;F1,&amp;F2);

<a name="line184">184: </a>  <font color="#B22222">/* Access the arrays inside the subvectors of F */</font>
<a name="line185">185: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da1,F1,(void**)&amp;f1);
<a name="line186">186: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,F2,(void**)&amp;f2);

<a name="line188">188: </a>  <font color="#B22222">/* Evaluate local user provided function */</font>
<a name="line189">189: </a>  FormFunctionLocal1(&amp;info1,x1,x2,f1,(void**)user);
<a name="line190">190: </a>  FormFunctionLocal2(&amp;info2,x1,x2,f2,(void**)user);

<a name="line192">192: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da1,F1,(void**)&amp;f1);
<a name="line193">193: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,F2,(void**)&amp;f2);
<a name="line194">194: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeRestoreAccess.html#DMCompositeRestoreAccess">DMCompositeRestoreAccess</A>(dm,F,&amp;F1,&amp;F2);
<a name="line195">195: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da1,X1,(void**)&amp;x1);
<a name="line196">196: </a>  <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,X2,(void**)&amp;x2);
<a name="line197">197: </a>  <A href="tutorials/../../docs/manualpages/DA/DMCompositeRestoreLocalVectors.html#DMCompositeRestoreLocalVectors">DMCompositeRestoreLocalVectors</A>(dm,&amp;X1,&amp;X2);
<a name="line198">198: </a>  <font color="#4169E1">return</font>(0);
<a name="line199">199: </a>}

<a name="line203">203: </a><font color="#B22222">/* </font>
<a name="line204">204: </a><font color="#B22222">   Computes the coupling between DA1 and DA2. This determines the location of each coupling between DA1 and DA2.</font>
<a name="line205">205: </a><font color="#B22222">*/</font>
<a name="line206">206: </a><strong><font color="#4169E1"><a name="FormCoupleLocations"></a><A href="tutorials/../../docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> FormCoupleLocations(<A href="tutorials/../../docs/manualpages/DA/DMComposite.html#DMComposite">DMComposite</A> dmcomposite,<A href="tutorials/../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> *dnz,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> *onz,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> __rstart,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> __nrows,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> __start,<A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> __end)</font></strong>
<a name="line207">207: </a>{
<a name="line208">208: </a>  <A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A>       i,j,cols[2],istart,jstart,in,jn,row,col,M;
<a name="line210">210: </a>  <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>             da1,da2;

<a name="line213">213: </a>   <A href="tutorials/../../docs/manualpages/DA/DMCompositeGetEntries.html#DMCompositeGetEntries">DMCompositeGetEntries</A>(dmcomposite,&amp;da1,&amp;da2);
<a name="line214">214: </a>   <A href="tutorials/../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(da1,0,&amp;M,0,0,0,0,0,0,0,0,0);
<a name="line215">215: </a>  <A href="tutorials/../../docs/manualpages/DA/DAGetCorners.html#DAGetCorners">DAGetCorners</A>(da1,&amp;istart,&amp;jstart,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;in,&amp;jn,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);

<a name="line217">217: </a>  <font color="#B22222">/* coupling from physics 1 to physics 2 */</font>
<a name="line218">218: </a>  row = __rstart + 2;  <font color="#B22222">/* global location of first omega on this process */</font>
<a name="line219">219: </a>  col = __rstart + 3*in*jn;  <font color="#B22222">/* global location of first temp on this process */</font>
<a name="line220">220: </a>  <font color="#4169E1">for</font> (j=jstart; j&lt;jstart+jn; j++) {
<a name="line221">221: </a>    <font color="#4169E1">for</font> (i=istart; i&lt;istart+in; i++) {

<a name="line223">223: </a>      <font color="#B22222">/* each omega is coupled to the temp to the left and right */</font>
<a name="line224">224: </a>      <font color="#4169E1">if</font> (i == 0) {
<a name="line225">225: </a>        cols[0] = col + 1;
<a name="line226">226: </a>        <A href="tutorials/../../docs/manualpages/Mat/MatPreallocateLocation.html#MatPreallocateLocation">MatPreallocateLocation</A>(A,row,1,cols,dnz,onz);
<a name="line227">227: </a>      } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (i == M-1) {
<a name="line228">228: </a>        cols[0] = col - 1;
<a name="line229">229: </a>        <A href="tutorials/../../docs/manualpages/Mat/MatPreallocateLocation.html#MatPreallocateLocation">MatPreallocateLocation</A>(A,row,1,cols,dnz,onz);
<a name="line230">230: </a>      } <font color="#4169E1">else</font> {
<a name="line231">231: </a>        cols[0] = col - 1;
<a name="line232">232: </a>        cols[1] = col + 1;
<a name="line233">233: </a>        <A href="tutorials/../../docs/manualpages/Mat/MatPreallocateLocation.html#MatPreallocateLocation">MatPreallocateLocation</A>(A,row,2,cols,dnz,onz);
<a name="line234">234: </a>      }
<a name="line235">235: </a>      row += 3;
<a name="line236">236: </a>      col += 1;
<a name="line237">237: </a>    }
<a name="line238">238: </a>  }

<a name="line240">240: </a>  <font color="#B22222">/* coupling from physics 2 to physics 1 */</font>
<a name="line241">241: </a>  col = __rstart;  <font color="#B22222">/* global location of first u on this process */</font>
<a name="line242">242: </a>  row = __rstart + 3*in*jn;  <font color="#B22222">/* global location of first temp on this process */</font>
<a name="line243">243: </a>  <font color="#4169E1">for</font> (j=jstart; j&lt;jstart+jn; j++) {
<a name="line244">244: </a>    <font color="#4169E1">for</font> (i=istart; i&lt;istart+in; i++) {

<a name="line246">246: </a>      <font color="#B22222">/* temp is coupled to both u and v at each point */</font>
<a name="line247">247: </a>      cols[0] = col;
<a name="line248">248: </a>      cols[1] = col + 1;
<a name="line249">249: </a>      <A href="tutorials/../../docs/manualpages/Mat/MatPreallocateLocation.html#MatPreallocateLocation">MatPreallocateLocation</A>(A,row,2,cols,dnz,onz);
<a name="line250">250: </a>      row += 1;
<a name="line251">251: </a>      col += 3;
<a name="line252">252: </a>    }
<a name="line253">253: </a>  }

<a name="line255">255: </a>  <font color="#4169E1">return</font>(0);
<a name="line256">256: </a>}


</pre>
</body>

</html>